mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
optimize
This commit is contained in:
parent
c533da9129
commit
7d20eb202a
|
@ -228,21 +228,19 @@ class VFS(object):
|
||||||
for f in [{"vp": v, "ap": a, "st": n[1]} for v, a, n in files]:
|
for f in [{"vp": v, "ap": a, "st": n[1]} for v, a, n in files]:
|
||||||
yield f
|
yield f
|
||||||
|
|
||||||
def user_tree(self, uname, readable=False, writable=False, admin=False):
|
def user_tree(self, uname, readable, writable, admin):
|
||||||
ret = []
|
is_readable = False
|
||||||
opt1 = readable and (uname in self.uread or "*" in self.uread)
|
if uname in self.uread or "*" in self.uread:
|
||||||
opt2 = writable and (uname in self.uwrite or "*" in self.uwrite)
|
readable.append(self.vpath)
|
||||||
if admin:
|
is_readable = True
|
||||||
if opt1 and opt2:
|
|
||||||
ret.append(self.vpath)
|
if uname in self.uwrite or "*" in self.uwrite:
|
||||||
else:
|
writable.append(self.vpath)
|
||||||
if opt1 or opt2:
|
if is_readable:
|
||||||
ret.append(self.vpath)
|
admin.append(self.vpath)
|
||||||
|
|
||||||
for _, vn in sorted(self.nodes.items()):
|
for _, vn in sorted(self.nodes.items()):
|
||||||
ret.extend(vn.user_tree(uname, readable, writable, admin))
|
vn.user_tree(uname, readable, writable, admin)
|
||||||
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
class AuthSrv(object):
|
class AuthSrv(object):
|
||||||
|
|
|
@ -153,10 +153,8 @@ class HttpCli(object):
|
||||||
|
|
||||||
pwd = uparam.get("pw")
|
pwd = uparam.get("pw")
|
||||||
self.uname = self.auth.iuser.get(pwd, "*")
|
self.uname = self.auth.iuser.get(pwd, "*")
|
||||||
if self.uname:
|
self.rvol, self.wvol, self.avol = [[], [], []]
|
||||||
self.rvol = self.auth.vfs.user_tree(self.uname, readable=True)
|
self.auth.vfs.user_tree(self.uname, self.rvol, self.wvol, self.avol)
|
||||||
self.wvol = self.auth.vfs.user_tree(self.uname, writable=True)
|
|
||||||
self.avol = self.auth.vfs.user_tree(self.uname, True, True, True)
|
|
||||||
|
|
||||||
ua = self.headers.get("user-agent", "")
|
ua = self.headers.get("user-agent", "")
|
||||||
self.is_rclone = ua.startswith("rclone/")
|
self.is_rclone = ua.startswith("rclone/")
|
||||||
|
|
34
scripts/profile.py
Normal file
34
scripts/profile.py
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path.insert(0, ".")
|
||||||
|
cmd = sys.argv[1]
|
||||||
|
|
||||||
|
if cmd == "cpp":
|
||||||
|
from copyparty.__main__ import main
|
||||||
|
|
||||||
|
argv = ["__main__", "-v", "srv::r", "-v", "../../yt:yt:r"]
|
||||||
|
main(argv=argv)
|
||||||
|
|
||||||
|
elif cmd == "test":
|
||||||
|
from unittest import main
|
||||||
|
|
||||||
|
argv = ["__main__", "discover", "-s", "tests"]
|
||||||
|
main(module=None, argv=argv)
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise Exception()
|
||||||
|
|
||||||
|
# import dis; print(dis.dis(main))
|
||||||
|
|
||||||
|
|
||||||
|
# macos:
|
||||||
|
# option1) python3.9 -m pip install --user -U vmprof==0.4.9
|
||||||
|
# option2) python3.9 -m pip install --user -U https://github.com/vmprof/vmprof-python/archive/refs/heads/master.zip
|
||||||
|
#
|
||||||
|
# python -m vmprof -o prof --lines ./scripts/profile.py test
|
||||||
|
|
||||||
|
# linux: ~/.local/bin/vmprofshow prof tree | grep -vF '[1m 0.'
|
||||||
|
# macos: ~/Library/Python/3.9/bin/vmprofshow prof tree | grep -vF '[1m 0.'
|
||||||
|
# win: %appdata%\..\Roaming\Python\Python39\Scripts\vmprofshow.exe prof tree
|
|
@ -10,12 +10,11 @@ import pprint
|
||||||
import tarfile
|
import tarfile
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
from copyparty.authsrv import AuthSrv
|
|
||||||
from copyparty.httpcli import HttpCli
|
|
||||||
|
|
||||||
from tests import util as tu
|
from tests import util as tu
|
||||||
|
from copyparty.authsrv import AuthSrv
|
||||||
|
from copyparty.httpcli import HttpCli
|
||||||
|
|
||||||
|
|
||||||
def hdr(query):
|
def hdr(query):
|
||||||
|
|
|
@ -7,13 +7,12 @@ import json
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
from copyparty.authsrv import AuthSrv
|
|
||||||
from copyparty import util
|
|
||||||
|
|
||||||
from tests import util as tu
|
from tests import util as tu
|
||||||
|
from copyparty.authsrv import AuthSrv
|
||||||
|
from copyparty import util
|
||||||
|
|
||||||
|
|
||||||
class Cfg(Namespace):
|
class Cfg(Namespace):
|
||||||
|
|
|
@ -1,17 +1,36 @@
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import time
|
import time
|
||||||
import shutil
|
import shutil
|
||||||
import jinja2
|
import jinja2
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import platform
|
||||||
import subprocess as sp
|
import subprocess as sp
|
||||||
|
|
||||||
from copyparty.util import Unrecv
|
|
||||||
|
|
||||||
|
WINDOWS = platform.system() == "Windows"
|
||||||
|
ANYWIN = WINDOWS or sys.platform in ["msys"]
|
||||||
|
MACOS = platform.system() == "Darwin"
|
||||||
|
|
||||||
J2_ENV = jinja2.Environment(loader=jinja2.BaseLoader)
|
J2_ENV = jinja2.Environment(loader=jinja2.BaseLoader)
|
||||||
J2_FILES = J2_ENV.from_string("{{ files|join('\n') }}")
|
J2_FILES = J2_ENV.from_string("{{ files|join('\n') }}")
|
||||||
|
|
||||||
|
|
||||||
|
def nah(*a, **ka):
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if MACOS:
|
||||||
|
import posixpath
|
||||||
|
|
||||||
|
posixpath.islink = nah
|
||||||
|
os.path.islink = nah
|
||||||
|
# 25% faster; until any tests do symlink stuff
|
||||||
|
|
||||||
|
|
||||||
|
from copyparty.util import Unrecv
|
||||||
|
|
||||||
|
|
||||||
def runcmd(*argv):
|
def runcmd(*argv):
|
||||||
p = sp.Popen(argv, stdout=sp.PIPE, stderr=sp.PIPE)
|
p = sp.Popen(argv, stdout=sp.PIPE, stderr=sp.PIPE)
|
||||||
stdout, stderr = p.communicate()
|
stdout, stderr = p.communicate()
|
||||||
|
|
Loading…
Reference in a new issue