mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
black
This commit is contained in:
parent
9405597c15
commit
ec29b59d1e
|
@ -47,21 +47,23 @@ dependencies (windows):
|
|||
"""
|
||||
|
||||
|
||||
WINDOWS = sys.platform == 'win32'
|
||||
WINDOWS = sys.platform == "win32"
|
||||
|
||||
|
||||
def print(*args, **kwargs):
|
||||
try:
|
||||
builtins.print(*list(args), **kwargs)
|
||||
except:
|
||||
builtins.print(termsafe(' '.join(str(x) for x in args)), **kwargs)
|
||||
builtins.print(termsafe(" ".join(str(x) for x in args)), **kwargs)
|
||||
|
||||
|
||||
def termsafe(txt):
|
||||
try:
|
||||
return txt.encode(sys.stdout.encoding, 'backslashreplace').decode(sys.stdout.encoding)
|
||||
return txt.encode(sys.stdout.encoding, "backslashreplace").decode(
|
||||
sys.stdout.encoding
|
||||
)
|
||||
except:
|
||||
return txt.encode(sys.stdout.encoding, 'replace').decode(sys.stdout.encoding)
|
||||
return txt.encode(sys.stdout.encoding, "replace").decode(sys.stdout.encoding)
|
||||
|
||||
|
||||
def threadless_log(msg):
|
||||
|
@ -100,7 +102,12 @@ def get_tid():
|
|||
|
||||
|
||||
def html_dec(txt):
|
||||
return txt.replace('<', '<').replace('>', '>').replace('"', '"').replace('&', '&')
|
||||
return (
|
||||
txt.replace("<", "<")
|
||||
.replace(">", ">")
|
||||
.replace(""", '"')
|
||||
.replace("&", "&")
|
||||
)
|
||||
|
||||
|
||||
class CacheNode(object):
|
||||
|
@ -553,71 +560,71 @@ class CPPF(Operations):
|
|||
release = None
|
||||
releasedir = None
|
||||
statfs = None
|
||||
|
||||
|
||||
if False:
|
||||
# incorrect semantics but good for debugging stuff like samba and msys2
|
||||
def access(self, path, mode):
|
||||
log("@@ access [{}] [{}]".format(path, mode))
|
||||
return 1 if self.getattr(path) else 0
|
||||
|
||||
|
||||
def flush(self, path, fh):
|
||||
log("@@ flush [{}] [{}]".format(path, fh))
|
||||
return True
|
||||
|
||||
|
||||
def getxattr(self, *args):
|
||||
log("@@ getxattr [{}]".format('] ['.join(str(x) for x in args)))
|
||||
log("@@ getxattr [{}]".format("] [".join(str(x) for x in args)))
|
||||
return False
|
||||
|
||||
|
||||
def listxattr(self, *args):
|
||||
log("@@ listxattr [{}]".format('] ['.join(str(x) for x in args)))
|
||||
log("@@ listxattr [{}]".format("] [".join(str(x) for x in args)))
|
||||
return False
|
||||
|
||||
|
||||
def open(self, path, flags):
|
||||
log("@@ open [{}] [{}]".format(path, flags))
|
||||
return 42
|
||||
|
||||
|
||||
def opendir(self, fh):
|
||||
log("@@ opendir [{}]".format(fh))
|
||||
return 69
|
||||
|
||||
|
||||
def release(self, ino, fi):
|
||||
log("@@ release [{}] [{}]".format(ino, fi))
|
||||
return True
|
||||
|
||||
|
||||
def releasedir(self, ino, fi):
|
||||
log("@@ releasedir [{}] [{}]".format(ino, fi))
|
||||
return True
|
||||
|
||||
|
||||
def statfs(self, path):
|
||||
log("@@ statfs [{}]".format(path))
|
||||
return {}
|
||||
|
||||
if sys.platform == 'win32':
|
||||
if sys.platform == "win32":
|
||||
# quick compat for /mingw64/bin/python3 (msys2)
|
||||
def _open(self, path):
|
||||
try:
|
||||
x = self.getattr(path)
|
||||
if x["st_mode"] <= 0:
|
||||
raise Exception()
|
||||
|
||||
|
||||
self.junk_fh_ctr += 1
|
||||
if self.junk_fh_ctr > 32000: # TODO untested
|
||||
self.junk_fh_ctr = 4
|
||||
|
||||
|
||||
return self.junk_fh_ctr
|
||||
|
||||
|
||||
except Exception as ex:
|
||||
log("open ERR {}".format(repr(ex)))
|
||||
raise FuseOSError(errno.ENOENT)
|
||||
|
||||
|
||||
def open(self, path, flags):
|
||||
log("open [{}] [{}]".format(path, flags))
|
||||
return self._open(path)
|
||||
|
||||
|
||||
def opendir(self, path):
|
||||
log("opendir [{}]".format(path))
|
||||
return self._open(path)
|
||||
|
||||
|
||||
def flush(self, path, fh):
|
||||
log("flush [{}] [{}]".format(path, fh))
|
||||
|
||||
|
@ -626,7 +633,7 @@ class CPPF(Operations):
|
|||
|
||||
def releasedir(self, ino, fi):
|
||||
log("releasedir [{}] [{}]".format(ino, fi))
|
||||
|
||||
|
||||
def access(self, path, mode):
|
||||
log("access [{}] [{}]".format(path, mode))
|
||||
try:
|
||||
|
@ -644,7 +651,7 @@ def main():
|
|||
where = "local directory"
|
||||
if WINDOWS:
|
||||
where += " or DRIVE:"
|
||||
|
||||
|
||||
print("need arg 1: " + where)
|
||||
print("need arg 2: root url")
|
||||
print()
|
||||
|
@ -652,13 +659,20 @@ def main():
|
|||
print(" copyparty-fuse.py ./music http://192.168.1.69:3923/music/")
|
||||
if WINDOWS:
|
||||
print(" copyparty-fuse.py M: http://192.168.1.69:3923/music/")
|
||||
|
||||
|
||||
return
|
||||
|
||||
if WINDOWS:
|
||||
os.system("")
|
||||
|
||||
FUSE(CPPF(remote), local, foreground=True, nothreads=True, allow_other=True, nonempty=True)
|
||||
|
||||
FUSE(
|
||||
CPPF(remote),
|
||||
local,
|
||||
foreground=True,
|
||||
nothreads=True,
|
||||
allow_other=True,
|
||||
nonempty=True,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -23,9 +23,10 @@ from urllib.parse import quote_from_bytes as quote
|
|||
try:
|
||||
import fuse
|
||||
from fuse import Fuse
|
||||
|
||||
fuse.fuse_python_api = (0, 2)
|
||||
if not hasattr(fuse, '__version__'):
|
||||
raise Exception('your fuse-python is way old')
|
||||
if not hasattr(fuse, "__version__"):
|
||||
raise Exception("your fuse-python is way old")
|
||||
except:
|
||||
print(
|
||||
"\n could not import fuse; these may help:\n python3 -m pip install --user fuse-python\n apt install libfuse\n modprobe fuse\n"
|
||||
|
@ -84,7 +85,12 @@ def get_tid():
|
|||
|
||||
|
||||
def html_dec(txt):
|
||||
return txt.replace('<', '<').replace('>', '>').replace('"', '"').replace('&', '&')
|
||||
return (
|
||||
txt.replace("<", "<")
|
||||
.replace(">", ">")
|
||||
.replace(""", '"')
|
||||
.replace("&", "&")
|
||||
)
|
||||
|
||||
|
||||
class CacheNode(object):
|
||||
|
@ -254,7 +260,7 @@ class Gateway(object):
|
|||
class CPPF(Fuse):
|
||||
def __init__(self, *args, **kwargs):
|
||||
Fuse.__init__(self, *args, **kwargs)
|
||||
|
||||
|
||||
self.url = None
|
||||
|
||||
self.dircache = []
|
||||
|
@ -265,7 +271,7 @@ class CPPF(Fuse):
|
|||
|
||||
def init2(self):
|
||||
# TODO figure out how python-fuse wanted this to go
|
||||
self.gw = Gateway(self.url) #.decode('utf-8'))
|
||||
self.gw = Gateway(self.url) # .decode('utf-8'))
|
||||
info("up")
|
||||
|
||||
def clean_dircache(self):
|
||||
|
@ -484,28 +490,28 @@ class CPPF(Fuse):
|
|||
self.clean_dircache()
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
def readdir(self, path, offset):
|
||||
for e in self._readdir(path)[offset:]:
|
||||
#log("yield [{}]".format(e[0]))
|
||||
# log("yield [{}]".format(e[0]))
|
||||
yield fuse.Direntry(e[0])
|
||||
|
||||
def open(self, path, flags):
|
||||
if (flags & (os.O_RDONLY | os.O_WRONLY | os.O_RDWR)) != os.O_RDONLY:
|
||||
return -errno.EACCES
|
||||
|
||||
|
||||
st = self.getattr(path)
|
||||
try:
|
||||
if st.st_nlink > 0:
|
||||
return st
|
||||
except:
|
||||
return st # -int(os.errcode)
|
||||
|
||||
|
||||
def read(self, path, length, offset, fh=None, *args):
|
||||
if args:
|
||||
log("unexpected args [" + "] [".join(repr(x) for x in args) + "]")
|
||||
raise Exception()
|
||||
|
||||
|
||||
path = path.strip("/")
|
||||
|
||||
ofs2 = offset + length
|
||||
|
@ -516,7 +522,7 @@ class CPPF(Fuse):
|
|||
file_sz = st.st_size
|
||||
except:
|
||||
return st # -int(os.errcode)
|
||||
|
||||
|
||||
if ofs2 > file_sz:
|
||||
ofs2 = file_sz
|
||||
log("truncate to len {} end {}".format(ofs2 - offset, ofs2))
|
||||
|
@ -564,14 +570,16 @@ def main():
|
|||
server = CPPF()
|
||||
server.parser.add_option(mountopt="url", metavar="BASE_URL", default=None)
|
||||
server.parse(values=server, errex=1)
|
||||
if not server.url or not str(server.url).startswith('http'):
|
||||
print('\nerror:')
|
||||
print(' need argument: -o url=<...>')
|
||||
print(' need argument: mount-path')
|
||||
print('example:')
|
||||
print(' ./copyparty-fuseb.py -f -o allow_other,auto_unmount,nonempty,url=http://192.168.1.69:3923 /mnt/nas')
|
||||
if not server.url or not str(server.url).startswith("http"):
|
||||
print("\nerror:")
|
||||
print(" need argument: -o url=<...>")
|
||||
print(" need argument: mount-path")
|
||||
print("example:")
|
||||
print(
|
||||
" ./copyparty-fuseb.py -f -o allow_other,auto_unmount,nonempty,url=http://192.168.1.69:3923 /mnt/nas"
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
server.init2()
|
||||
threading.Thread(target=server.main, daemon=True).start()
|
||||
while True:
|
||||
|
|
Loading…
Reference in a new issue