copyparty 1.16.17__py3-none-any.whl → 1.16.19__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- copyparty/__init__.py +1 -1
- copyparty/__main__.py +26 -2
- copyparty/__version__.py +2 -2
- copyparty/authsrv.py +62 -9
- copyparty/cfg.py +5 -0
- copyparty/ftpd.py +11 -0
- copyparty/httpcli.py +57 -19
- copyparty/ico.py +13 -2
- copyparty/mtag.py +1 -2
- copyparty/pwhash.py +1 -1
- copyparty/svchub.py +151 -63
- copyparty/szip.py +1 -2
- copyparty/tcpsrv.py +18 -0
- copyparty/tftpd.py +29 -8
- copyparty/th_cli.py +23 -4
- copyparty/th_srv.py +16 -3
- copyparty/u2idx.py +2 -2
- copyparty/up2k.py +12 -7
- copyparty/util.py +110 -5
- copyparty/web/browser.css.gz +0 -0
- copyparty/web/browser.js.gz +0 -0
- copyparty/web/deps/marked.js.gz +0 -0
- copyparty/web/ui.css.gz +0 -0
- {copyparty-1.16.17.dist-info → copyparty-1.16.19.dist-info}/METADATA +18 -5
- {copyparty-1.16.17.dist-info → copyparty-1.16.19.dist-info}/RECORD +29 -29
- {copyparty-1.16.17.dist-info → copyparty-1.16.19.dist-info}/WHEEL +1 -1
- {copyparty-1.16.17.dist-info → copyparty-1.16.19.dist-info}/entry_points.txt +0 -0
- {copyparty-1.16.17.dist-info → copyparty-1.16.19.dist-info/licenses}/LICENSE +0 -0
- {copyparty-1.16.17.dist-info → copyparty-1.16.19.dist-info}/top_level.txt +0 -0
copyparty/up2k.py
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
from __future__ import print_function, unicode_literals
|
3
3
|
|
4
4
|
import errno
|
5
|
-
import gzip
|
6
5
|
import hashlib
|
7
6
|
import json
|
8
7
|
import math
|
@@ -42,6 +41,7 @@ from .util import (
|
|
42
41
|
fsenc,
|
43
42
|
gen_filekey,
|
44
43
|
gen_filekey_dbg,
|
44
|
+
gzip,
|
45
45
|
hidedir,
|
46
46
|
humansize,
|
47
47
|
min_ex,
|
@@ -91,7 +91,7 @@ VF_AFFECTS_INDEXING = set(zsg.split(" "))
|
|
91
91
|
|
92
92
|
SBUSY = "cannot receive uploads right now;\nserver busy with %s.\nPlease wait; the client will retry..."
|
93
93
|
|
94
|
-
HINT_HISTPATH = "you could try moving the database to another location (preferably an SSD or NVME drive) using either the --hist argument (global option for all volumes), or the hist volflag (just for this volume)"
|
94
|
+
HINT_HISTPATH = "you could try moving the database to another location (preferably an SSD or NVME drive) using either the --hist argument (global option for all volumes), or the hist volflag (just for this volume), or, if you want to keep the thumbnails in the current location and only move the database itself, then use --dbpath or volflag dbpath"
|
95
95
|
|
96
96
|
|
97
97
|
NULLSTAT = os.stat_result((0, -1, -1, 0, 0, 0, 0, 0, 0, 0))
|
@@ -1089,9 +1089,9 @@ class Up2k(object):
|
|
1089
1089
|
self, ptop , flags
|
1090
1090
|
) :
|
1091
1091
|
"""mutex(main,reg) me"""
|
1092
|
-
histpath = self.vfs.
|
1092
|
+
histpath = self.vfs.dbpaths.get(ptop)
|
1093
1093
|
if not histpath:
|
1094
|
-
self.log("no
|
1094
|
+
self.log("no dbpath for %r" % (ptop,))
|
1095
1095
|
return None
|
1096
1096
|
|
1097
1097
|
db_path = os.path.join(histpath, "up2k.db")
|
@@ -1336,12 +1336,15 @@ class Up2k(object):
|
|
1336
1336
|
]
|
1337
1337
|
excl += [absreal(x) for x in excl]
|
1338
1338
|
excl += list(self.vfs.histtab.values())
|
1339
|
+
excl += list(self.vfs.dbpaths.values())
|
1339
1340
|
if WINDOWS:
|
1340
1341
|
excl = [x.replace("/", "\\") for x in excl]
|
1341
1342
|
else:
|
1342
1343
|
# ~/.wine/dosdevices/z:/ and such
|
1343
1344
|
excl.extend(("/dev", "/proc", "/run", "/sys"))
|
1344
1345
|
|
1346
|
+
excl = list({k: 1 for k in excl})
|
1347
|
+
|
1345
1348
|
if self.args.re_dirsz:
|
1346
1349
|
db.c.execute("delete from ds")
|
1347
1350
|
db.n += 1
|
@@ -2903,7 +2906,6 @@ class Up2k(object):
|
|
2903
2906
|
if ptop not in self.registry:
|
2904
2907
|
raise Pebkac(410, "location unavailable")
|
2905
2908
|
|
2906
|
-
cj["name"] = sanitize_fn(cj["name"], "")
|
2907
2909
|
cj["poke"] = now = self.db_act = self.vol_act[ptop] = time.time()
|
2908
2910
|
wark = dwark = self._get_wark(cj)
|
2909
2911
|
job = None
|
@@ -3220,6 +3222,7 @@ class Up2k(object):
|
|
3220
3222
|
job["ptop"] = vfs.realpath
|
3221
3223
|
job["vtop"] = vfs.vpath
|
3222
3224
|
job["prel"] = rem
|
3225
|
+
job["name"] = sanitize_fn(job["name"], "")
|
3223
3226
|
if zvfs.vpath != vfs.vpath:
|
3224
3227
|
# print(json.dumps(job, sort_keys=True, indent=4))
|
3225
3228
|
job["hash"] = cj["hash"]
|
@@ -3692,8 +3695,9 @@ class Up2k(object):
|
|
3692
3695
|
if self.idx_wark(vflags, *z2):
|
3693
3696
|
del self.registry[ptop][wark]
|
3694
3697
|
else:
|
3695
|
-
for k in "host tnam busy sprs poke
|
3698
|
+
for k in "host tnam busy sprs poke".split():
|
3696
3699
|
del job[k]
|
3700
|
+
job.pop("t0c", None)
|
3697
3701
|
job["t0"] = int(job["t0"])
|
3698
3702
|
job["hash"] = []
|
3699
3703
|
job["done"] = 1
|
@@ -4972,6 +4976,7 @@ class Up2k(object):
|
|
4972
4976
|
job["ptop"] = vfs.realpath
|
4973
4977
|
job["vtop"] = vfs.vpath
|
4974
4978
|
job["prel"] = rem
|
4979
|
+
job["name"] = sanitize_fn(job["name"], "")
|
4975
4980
|
if zvfs.vpath != vfs.vpath:
|
4976
4981
|
self.log("xbu reloc2:%d..." % (depth,), 6)
|
4977
4982
|
return self._handle_json(job, depth + 1)
|
@@ -5076,7 +5081,7 @@ class Up2k(object):
|
|
5076
5081
|
|
5077
5082
|
def _snap_reg(self, ptop , reg ) :
|
5078
5083
|
now = time.time()
|
5079
|
-
histpath = self.vfs.
|
5084
|
+
histpath = self.vfs.dbpaths.get(ptop)
|
5080
5085
|
if not histpath:
|
5081
5086
|
return
|
5082
5087
|
|
copyparty/util.py
CHANGED
@@ -31,6 +31,17 @@ from collections import Counter
|
|
31
31
|
from ipaddress import IPv4Address, IPv4Network, IPv6Address, IPv6Network
|
32
32
|
from queue import Queue
|
33
33
|
|
34
|
+
try:
|
35
|
+
from zlib_ng import gzip_ng as gzip
|
36
|
+
from zlib_ng import zlib_ng as zlib
|
37
|
+
|
38
|
+
sys.modules["gzip"] = gzip
|
39
|
+
# sys.modules["zlib"] = zlib
|
40
|
+
# `- somehow makes tarfile 3% slower with default malloc, and barely faster with mimalloc
|
41
|
+
except:
|
42
|
+
import gzip
|
43
|
+
import zlib
|
44
|
+
|
34
45
|
from .__init__ import (
|
35
46
|
ANYWIN,
|
36
47
|
EXE,
|
@@ -103,8 +114,14 @@ IP6ALL = "0:0:0:0:0:0:0:0"
|
|
103
114
|
|
104
115
|
|
105
116
|
try:
|
106
|
-
import ctypes
|
107
117
|
import fcntl
|
118
|
+
|
119
|
+
HAVE_FCNTL = True
|
120
|
+
except:
|
121
|
+
HAVE_FCNTL = False
|
122
|
+
|
123
|
+
try:
|
124
|
+
import ctypes
|
108
125
|
import termios
|
109
126
|
except:
|
110
127
|
pass
|
@@ -213,6 +230,9 @@ SYMTIME = PY36 and os.utime in os.supports_follow_symlinks
|
|
213
230
|
|
214
231
|
META_NOBOTS = '<meta name="robots" content="noindex, nofollow">\n'
|
215
232
|
|
233
|
+
# smart enough to understand javascript while also ignoring rel="nofollow"
|
234
|
+
BAD_BOTS = r"Barkrowler|bingbot|BLEXBot|Googlebot|GoogleOther|GPTBot|PetalBot|SeekportBot|SemrushBot|YandexBot"
|
235
|
+
|
216
236
|
FFMPEG_URL = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z"
|
217
237
|
|
218
238
|
URL_PRJ = "https://github.com/9001/copyparty"
|
@@ -427,6 +447,8 @@ UNHUMANIZE_UNITS = {
|
|
427
447
|
|
428
448
|
VF_CAREFUL = {"mv_re_t": 5, "rm_re_t": 5, "mv_re_r": 0.1, "rm_re_r": 0.1}
|
429
449
|
|
450
|
+
FN_EMB = set([".prologue.html", ".epilogue.html", "readme.md", "preadme.md"])
|
451
|
+
|
430
452
|
|
431
453
|
def read_ram() :
|
432
454
|
a = b = 0
|
@@ -1369,8 +1391,6 @@ def stackmon(fp , ival , suffix ) :
|
|
1369
1391
|
buf = st.encode("utf-8", "replace")
|
1370
1392
|
|
1371
1393
|
if fp.endswith(".gz"):
|
1372
|
-
import gzip
|
1373
|
-
|
1374
1394
|
# 2459b 2304b 2241b 2202b 2194b 2191b lv3..8
|
1375
1395
|
# 0.06s 0.08s 0.11s 0.13s 0.16s 0.19s
|
1376
1396
|
buf = gzip.compress(buf, compresslevel=6)
|
@@ -1450,6 +1470,12 @@ def vol_san(vols , txt ) :
|
|
1450
1470
|
txt = txt.replace(bap.replace(b"\\", b"\\\\"), bvp)
|
1451
1471
|
txt = txt.replace(bhp.replace(b"\\", b"\\\\"), bvph)
|
1452
1472
|
|
1473
|
+
if vol.histpath != vol.dbpath:
|
1474
|
+
bdp = vol.dbpath.encode("utf-8")
|
1475
|
+
bdph = b"$db(/" + bvp + b")"
|
1476
|
+
txt = txt.replace(bdp, bdph)
|
1477
|
+
txt = txt.replace(bdp.replace(b"\\", b"\\\\"), bdph)
|
1478
|
+
|
1453
1479
|
if txt != txt0:
|
1454
1480
|
txt += b"\r\nNOTE: filepaths sanitized; see serverlog for correct values"
|
1455
1481
|
|
@@ -3829,8 +3855,74 @@ def hidedir(dp) :
|
|
3829
3855
|
pass
|
3830
3856
|
|
3831
3857
|
|
3858
|
+
_flocks = {}
|
3859
|
+
|
3860
|
+
|
3861
|
+
def _lock_file_noop(ap ) :
|
3862
|
+
return True
|
3863
|
+
|
3864
|
+
|
3865
|
+
def _lock_file_ioctl(ap ) :
|
3866
|
+
try:
|
3867
|
+
fd = _flocks.pop(ap)
|
3868
|
+
os.close(fd)
|
3869
|
+
except:
|
3870
|
+
pass
|
3871
|
+
|
3872
|
+
fd = os.open(ap, os.O_RDWR | os.O_CREAT, 438)
|
3873
|
+
# NOTE: the fcntl.lockf identifier is (pid,node);
|
3874
|
+
# the lock will be dropped if os.close(os.open(ap))
|
3875
|
+
# is performed anywhere else in this thread
|
3876
|
+
|
3877
|
+
try:
|
3878
|
+
fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
3879
|
+
_flocks[ap] = fd
|
3880
|
+
return True
|
3881
|
+
except Exception as ex:
|
3882
|
+
eno = getattr(ex, "errno", -1)
|
3883
|
+
try:
|
3884
|
+
os.close(fd)
|
3885
|
+
except:
|
3886
|
+
pass
|
3887
|
+
if eno in (errno.EAGAIN, errno.EACCES):
|
3888
|
+
return False
|
3889
|
+
print("WARNING: unexpected errno %d from fcntl.lockf; %r" % (eno, ex))
|
3890
|
+
return True
|
3891
|
+
|
3892
|
+
|
3893
|
+
def _lock_file_windows(ap ) :
|
3894
|
+
try:
|
3895
|
+
import msvcrt
|
3896
|
+
|
3897
|
+
try:
|
3898
|
+
fd = _flocks.pop(ap)
|
3899
|
+
os.close(fd)
|
3900
|
+
except:
|
3901
|
+
pass
|
3902
|
+
|
3903
|
+
fd = os.open(ap, os.O_RDWR | os.O_CREAT, 438)
|
3904
|
+
msvcrt.locking(fd, msvcrt.LK_NBLCK, 1)
|
3905
|
+
return True
|
3906
|
+
except Exception as ex:
|
3907
|
+
eno = getattr(ex, "errno", -1)
|
3908
|
+
if eno == errno.EACCES:
|
3909
|
+
return False
|
3910
|
+
print("WARNING: unexpected errno %d from msvcrt.locking; %r" % (eno, ex))
|
3911
|
+
return True
|
3912
|
+
|
3913
|
+
|
3914
|
+
if os.environ.get("PRTY_NO_DB_LOCK"):
|
3915
|
+
lock_file = _lock_file_noop
|
3916
|
+
elif ANYWIN:
|
3917
|
+
lock_file = _lock_file_windows
|
3918
|
+
elif HAVE_FCNTL:
|
3919
|
+
lock_file = _lock_file_ioctl
|
3920
|
+
else:
|
3921
|
+
lock_file = _lock_file_noop
|
3922
|
+
|
3923
|
+
|
3832
3924
|
try:
|
3833
|
-
if sys.version_info < (3, 10):
|
3925
|
+
if sys.version_info < (3, 10) or os.environ.get("PRTY_NO_IMPRESO"):
|
3834
3926
|
# py3.8 doesn't have .files
|
3835
3927
|
# py3.9 has broken .is_file
|
3836
3928
|
raise ImportError()
|
@@ -3958,9 +4050,22 @@ class WrongPostKey(Pebkac):
|
|
3958
4050
|
self.datagen = datagen
|
3959
4051
|
|
3960
4052
|
|
3961
|
-
_ = (
|
4053
|
+
_ = (
|
4054
|
+
gzip,
|
4055
|
+
mp,
|
4056
|
+
zlib,
|
4057
|
+
BytesIO,
|
4058
|
+
quote,
|
4059
|
+
unquote,
|
4060
|
+
SQLITE_VER,
|
4061
|
+
JINJA_VER,
|
4062
|
+
PYFTPD_VER,
|
4063
|
+
PARTFTPY_VER,
|
4064
|
+
)
|
3962
4065
|
__all__ = [
|
4066
|
+
"gzip",
|
3963
4067
|
"mp",
|
4068
|
+
"zlib",
|
3964
4069
|
"BytesIO",
|
3965
4070
|
"quote",
|
3966
4071
|
"unquote",
|
copyparty/web/browser.css.gz
CHANGED
Binary file
|
copyparty/web/browser.js.gz
CHANGED
Binary file
|
copyparty/web/deps/marked.js.gz
CHANGED
Binary file
|
copyparty/web/ui.css.gz
CHANGED
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: copyparty
|
3
|
-
Version: 1.16.
|
3
|
+
Version: 1.16.19
|
4
4
|
Summary: Portable file server with accelerated resumable uploads, deduplication, WebDAV, FTP, zeroconf, media indexer, video thumbnails, audio transcoding, and write-only folders
|
5
5
|
Author-email: ed <copyparty@ocv.me>
|
6
6
|
License: MIT
|
@@ -54,6 +54,7 @@ Provides-Extra: pwhash
|
|
54
54
|
Requires-Dist: argon2-cffi; extra == "pwhash"
|
55
55
|
Provides-Extra: zeromq
|
56
56
|
Requires-Dist: pyzmq; extra == "zeromq"
|
57
|
+
Dynamic: license-file
|
57
58
|
|
58
59
|
<img src="https://github.com/9001/copyparty/raw/hovudstraum/docs/logo.svg" width="250" align="right"/>
|
59
60
|
|
@@ -157,7 +158,7 @@ turn almost any device into a file server with resumable uploads/downloads using
|
|
157
158
|
* [custom mimetypes](#custom-mimetypes) - change the association of a file extension
|
158
159
|
* [GDPR compliance](#GDPR-compliance) - imagine using copyparty professionally...
|
159
160
|
* [feature chickenbits](#feature-chickenbits) - buggy feature? rip it out
|
160
|
-
* [feature beefybits](#feature-beefybits) - force-enable
|
161
|
+
* [feature beefybits](#feature-beefybits) - force-enable features with known issues on your OS/env
|
161
162
|
* [packages](#packages) - the party might be closer than you think
|
162
163
|
* [arch package](#arch-package) - now [available on aur](https://aur.archlinux.org/packages/copyparty) maintained by [@icxes](https://github.com/icxes)
|
163
164
|
* [fedora package](#fedora-package) - does not exist yet
|
@@ -338,6 +339,8 @@ small collection of user feedback
|
|
338
339
|
|
339
340
|
`good enough`, `surprisingly correct`, `certified good software`, `just works`, `why`, `wow this is better than nextcloud`
|
340
341
|
|
342
|
+
* UI просто ужасно. Если буду описывать детально не смогу удержаться в рамках приличий
|
343
|
+
|
341
344
|
|
342
345
|
# motivations
|
343
346
|
|
@@ -386,7 +389,8 @@ roughly sorted by chance of encounter
|
|
386
389
|
* `--th-ff-jpg` may fix video thumbnails on some FFmpeg versions (macos, some linux)
|
387
390
|
* `--th-ff-swr` may fix audio thumbnails on some FFmpeg versions
|
388
391
|
* if the `up2k.db` (filesystem index) is on a samba-share or network disk, you'll get unpredictable behavior if the share is disconnected for a bit
|
389
|
-
* use `--hist` or the `hist` volflag (`-v [...]:c,hist=/tmp/foo`) to place the db on a local disk instead
|
392
|
+
* use `--hist` or the `hist` volflag (`-v [...]:c,hist=/tmp/foo`) to place the db and thumbnails on a local disk instead
|
393
|
+
* or, if you only want to move the db (and not the thumbnails), then use `--dbpath` or the `dbpath` volflag
|
390
394
|
* all volumes must exist / be available on startup; up2k (mtp especially) gets funky otherwise
|
391
395
|
* probably more, pls let me know
|
392
396
|
|
@@ -439,7 +443,8 @@ same order here too
|
|
439
443
|
* this is an msys2 bug, the regular windows edition of python is fine
|
440
444
|
|
441
445
|
* VirtualBox: sqlite throws `Disk I/O Error` when running in a VM and the up2k database is in a vboxsf
|
442
|
-
* use `--hist` or the `hist` volflag (`-v [...]:c,hist=/tmp/foo`) to place the db inside the vm instead
|
446
|
+
* use `--hist` or the `hist` volflag (`-v [...]:c,hist=/tmp/foo`) to place the db and thumbnails inside the vm instead
|
447
|
+
* or, if you only want to move the db (and not the thumbnails), then use `--dbpath` or the `dbpath` volflag
|
443
448
|
* also happens on mergerfs, so put the db elsewhere
|
444
449
|
|
445
450
|
* Ubuntu: dragging files from certain folders into firefox or chrome is impossible
|
@@ -861,6 +866,8 @@ if you are resuming a massive upload and want to skip hashing the files which al
|
|
861
866
|
|
862
867
|
if the server is behind a proxy which imposes a request-size limit, you can configure up2k to sneak below the limit with server-option `--u2sz` (the default is 96 MiB to support Cloudflare)
|
863
868
|
|
869
|
+
if you want to replace existing files on the server with new uploads by default, run with `--u2ow 2` (only works if users have the delete-permission, and can still be disabled with `🛡️` in the UI)
|
870
|
+
|
864
871
|
|
865
872
|
### file-search
|
866
873
|
|
@@ -1649,6 +1656,8 @@ copyparty creates a subfolder named `.hist` inside each volume where it stores t
|
|
1649
1656
|
this can instead be kept in a single place using the `--hist` argument, or the `hist=` volflag, or a mix of both:
|
1650
1657
|
* `--hist ~/.cache/copyparty -v ~/music::r:c,hist=-` sets `~/.cache/copyparty` as the default place to put volume info, but `~/music` gets the regular `.hist` subfolder (`-` restores default behavior)
|
1651
1658
|
|
1659
|
+
by default, the per-volume `up2k.db` sqlite3-database for `-e2d` and `-e2t` is stored next to the thumbnails according to the `--hist` option, but the global-option `--dbpath` and/or volflag `dbpath` can be used to put the database somewhere else
|
1660
|
+
|
1652
1661
|
note:
|
1653
1662
|
* putting the hist-folders on an SSD is strongly recommended for performance
|
1654
1663
|
* markdown edits are always stored in a local `.hist` subdirectory
|
@@ -2184,7 +2193,9 @@ buggy feature? rip it out by setting any of the following environment variables
|
|
2184
2193
|
|
2185
2194
|
| env-var | what it does |
|
2186
2195
|
| -------------------- | ------------ |
|
2196
|
+
| `PRTY_NO_DB_LOCK` | do not lock session/shares-databases for exclusive access |
|
2187
2197
|
| `PRTY_NO_IFADDR` | disable ip/nic discovery by poking into your OS with ctypes |
|
2198
|
+
| `PRTY_NO_IMPRESO` | do not try to load js/css files using `importlib.resources` |
|
2188
2199
|
| `PRTY_NO_IPV6` | disable some ipv6 support (should not be necessary since windows 2000) |
|
2189
2200
|
| `PRTY_NO_LZMA` | disable streaming xz compression of incoming uploads |
|
2190
2201
|
| `PRTY_NO_MP` | disable all use of the python `multiprocessing` module (actual multithreading, cpu-count for parsers/thumbnailers) |
|
@@ -2502,6 +2513,8 @@ below are some tweaks roughly ordered by usefulness:
|
|
2502
2513
|
* `--no-hash .` when indexing a network-disk if you don't care about the actual filehashes and only want the names/tags searchable
|
2503
2514
|
* if your volumes are on a network-disk such as NFS / SMB / s3, specifying larger values for `--iobuf` and/or `--s-rd-sz` and/or `--s-wr-sz` may help; try setting all of them to `524288` or `1048576` or `4194304`
|
2504
2515
|
* `--no-htp --hash-mt=0 --mtag-mt=1 --th-mt=1` minimizes the number of threads; can help in some eccentric environments (like the vscode debugger)
|
2516
|
+
* when running on AlpineLinux or other musl-based distro, try mimalloc for higher performance (and twice as much RAM usage); `apk add mimalloc2` and run copyparty with env-var `LD_PRELOAD=/usr/lib/libmimalloc-secure.so.2`
|
2517
|
+
* note that mimalloc requires special care when combined with prisonparty and/or bubbleparty/bubblewrap; you must give it access to `/proc` and `/sys` otherwise you'll encounter issues with FFmpeg (audio transcoding, thumbnails)
|
2505
2518
|
* `-j0` enables multiprocessing (actual multithreading), can reduce latency to `20+80/numCores` percent and generally improve performance in cpu-intensive workloads, for example:
|
2506
2519
|
* lots of connections (many users or heavy clients)
|
2507
2520
|
* simultaneous downloads and uploads saturating a 20gbps connection
|
@@ -1,38 +1,38 @@
|
|
1
|
-
copyparty/__init__.py,sha256=
|
2
|
-
copyparty/__main__.py,sha256=
|
3
|
-
copyparty/__version__.py,sha256=
|
4
|
-
copyparty/authsrv.py,sha256=
|
1
|
+
copyparty/__init__.py,sha256=TnFSStmHlwlRIClWW8jSHxZpt3dl_kN6_pEnqBqh3mE,2638
|
2
|
+
copyparty/__main__.py,sha256=RuEnJf0a2d7ZbV2bOBj43iNkdBIG_zDUh0DbVUgsc50,119139
|
3
|
+
copyparty/__version__.py,sha256=M7ZuH7-ojW4ae8FrXsuVGdN6xOoyyx4SciZROZSQbUg,251
|
4
|
+
copyparty/authsrv.py,sha256=S4HrUq-C6wpe_IT3KN75yo9GJw9Uzj5y558ooYCQqng,113286
|
5
5
|
copyparty/broker_mp.py,sha256=QdOXXvV2Xn6J0CysEqyY3GZbqxQMyWnTpnba-a5lMc0,4987
|
6
6
|
copyparty/broker_mpw.py,sha256=PpSS4SK3pItlpfD8OwVr3QmJEPKlUgaf2nuMOozixgU,3347
|
7
7
|
copyparty/broker_thr.py,sha256=fjoYtpSscUA7-nMl4r1n2R7UK3J9lrvLS3rUZ-iJzKQ,1721
|
8
8
|
copyparty/broker_util.py,sha256=76mfnFOpX1gUUvtjm8UQI7jpTIaVINX10QonM-B7ggc,1680
|
9
9
|
copyparty/cert.py,sha256=0ZAPeXeMR164vWn9GQU3JDKooYXEq_NOQkDeg543ivg,8009
|
10
|
-
copyparty/cfg.py,sha256=
|
10
|
+
copyparty/cfg.py,sha256=EilhOIMLopgvn5j72MaRFS0q78K9Xf0NU0I7EAs3YAQ,14269
|
11
11
|
copyparty/dxml.py,sha256=vu5uZQtwvwoqnFHbULs2Zh_y2DETu0T-ENpMZ1i2CV4,2505
|
12
12
|
copyparty/fsutil.py,sha256=NC_CJC4TDag399vVDH9_uQfdfpTMwRFLNxERSWhlVvs,4594
|
13
|
-
copyparty/ftpd.py,sha256=
|
14
|
-
copyparty/httpcli.py,sha256=
|
13
|
+
copyparty/ftpd.py,sha256=G7PApVIFeSzRo4-D-9uRb8NxYgz6nFwTEbrOk1ErYCU,17969
|
14
|
+
copyparty/httpcli.py,sha256=pRZtGqx13FDCKpjxc4vlnqEuqVFLaXX7Ylx029bkCIw,222050
|
15
15
|
copyparty/httpconn.py,sha256=mQSgljh0Q-jyWjF4tQLrHbRKRe9WKl19kGqsGMsJpWo,6880
|
16
16
|
copyparty/httpsrv.py,sha256=pxH_Eh8ElBLvOEDejgpP9Bvk65HNEou-03aYIcgXhrs,18090
|
17
|
-
copyparty/ico.py,sha256
|
17
|
+
copyparty/ico.py,sha256=-7QjF_jIxnPo4Vr0oUPksQ_U_Ef0HRsSPm3s71idOz8,3879
|
18
18
|
copyparty/mdns.py,sha256=G73OWWg1copda47LgayCRK7qjVrk6cnUGpMR5ugmi7o,18315
|
19
19
|
copyparty/metrics.py,sha256=1dim0ShnsD5cfspRbeN9Mt14wOIxPRtxCZY2IScikKw,8974
|
20
|
-
copyparty/mtag.py,sha256=
|
20
|
+
copyparty/mtag.py,sha256=7lINRFc1Vrc-ebP2hU3dBHH3BRFOnEmEZ0jzlpYb8Jg,19910
|
21
21
|
copyparty/multicast.py,sha256=Me4XEEJijvvK2lMRwmGU2hsaI5_E9AEpCjIC4b9UefA,12393
|
22
|
-
copyparty/pwhash.py,sha256=
|
22
|
+
copyparty/pwhash.py,sha256=zHoz9FHGkFBxoRvSfG1XyjN3ibww_h5GE6_m5yS-fws,4246
|
23
23
|
copyparty/smbd.py,sha256=dixFl2wlWymq_Cycc8a4cVB4gY8RSg2e3tE7Xr-aDa0,14614
|
24
24
|
copyparty/ssdp.py,sha256=R1Z61GZOxBMF2Sk4RTxKWMOemogmcjEWG-CvLihd45k,7023
|
25
25
|
copyparty/star.py,sha256=tV5BbX6AiQ7N4UU8DYtSTckNYeoeey4DBqq4LjfymbY,3818
|
26
26
|
copyparty/sutil.py,sha256=6zEEGl4hRe6bTB83Y_RtnBGxr2JcUa__GdiAMqNJZnY,3208
|
27
|
-
copyparty/svchub.py,sha256=
|
28
|
-
copyparty/szip.py,sha256=
|
29
|
-
copyparty/tcpsrv.py,sha256=
|
30
|
-
copyparty/tftpd.py,sha256=
|
31
|
-
copyparty/th_cli.py,sha256=
|
32
|
-
copyparty/th_srv.py,sha256
|
33
|
-
copyparty/u2idx.py,sha256=
|
34
|
-
copyparty/up2k.py,sha256=
|
35
|
-
copyparty/util.py,sha256=
|
27
|
+
copyparty/svchub.py,sha256=A2yxlg9hzilOypMKPlZOn80YzJ3A6W5pHWWLSAvji0I,45782
|
28
|
+
copyparty/szip.py,sha256=7_RVwHCGk7ON79sAB5HAIUbTEbjDDtn99141aGaI_MA,8596
|
29
|
+
copyparty/tcpsrv.py,sha256=L8jsmFhs6GdJYA58gnsUM1RDakFzHSQGlDcsaeTq-8w,20472
|
30
|
+
copyparty/tftpd.py,sha256=HAXNbIM7I3yFng_a4ubLWGQ4trRTineAZsUPTZDWNQs,14001
|
31
|
+
copyparty/th_cli.py,sha256=IEX5tCb0gw9Z2aRIDL9bwdvJ6g5jhWZ8OEAAz16_xN4,5426
|
32
|
+
copyparty/th_srv.py,sha256=-V4eNfAYzl-NkJrAjLGqU1cS1dUDS9QLK3iYiXoUz1U,31277
|
33
|
+
copyparty/u2idx.py,sha256=4Y5OOPyVkc-pS0z6e3p4StXAMnjHobSOMmMsvNUTD34,13674
|
34
|
+
copyparty/up2k.py,sha256=0Fj2yT2XnJ4MhwdEcDRs1T-gsdxVhdIxdaZSjGyGKBA,177682
|
35
|
+
copyparty/util.py,sha256=qkPD9LFPgLhpmCic_IBvutS2extujDiRrG75PnLMY90,102987
|
36
36
|
copyparty/bos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
37
|
copyparty/bos/bos.py,sha256=Wb7eWsXJgR5AFlBR9ZOyKrLTwy-Kct9RrGiOu4Jo37Y,1622
|
38
38
|
copyparty/bos/path.py,sha256=yEjCq2ki9CvxA5sCT8pS0keEXwugs0ZeUyUhdBziOCI,777
|
@@ -55,9 +55,9 @@ copyparty/stolen/ifaddr/_posix.py,sha256=-67NdfGrCktfQPakT2fLbjl2U00QMvyBGkSvrUu
|
|
55
55
|
copyparty/stolen/ifaddr/_shared.py,sha256=uNC4SdEIgdSLKvuUzsf1aM-H1Xrc_9mpLoOT43YukGs,6206
|
56
56
|
copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
|
57
57
|
copyparty/web/baguettebox.js.gz,sha256=r2c_hOZV_RTyl4CqWWX14FDWP8nnDVwGkDl4Sfk0rU4,8239
|
58
|
-
copyparty/web/browser.css.gz,sha256=
|
58
|
+
copyparty/web/browser.css.gz,sha256=kPN35ttg9KAACfAB-aZnxFX1GQGqRnK0cLCZXBAu_lc,11654
|
59
59
|
copyparty/web/browser.html,sha256=auvhLVE_t0aIN0q-nk0zOWFqITgDhroMAAviBNLoFfc,4788
|
60
|
-
copyparty/web/browser.js.gz,sha256=
|
60
|
+
copyparty/web/browser.js.gz,sha256=zxztzuGQuEr4SFTy_i_OWLJFe2ZnGWqz7hx0QeXPw8Y,92425
|
61
61
|
copyparty/web/browser2.html,sha256=NRUZ08GH-e2YcGXcoz0UjYg6JIVF42u4IMX4HHwWTmg,1587
|
62
62
|
copyparty/web/cf.html,sha256=lJThtNFNAQT1ClCHHlivAkDGE0LutedwopXD62Z8Nys,589
|
63
63
|
copyparty/web/dbg-audio.js.gz,sha256=Ma-KZtK8LnmiwNvNKFKXMPYl_Nn_3U7GsJ6-DRWC2HE,688
|
@@ -82,7 +82,7 @@ copyparty/web/splash.html,sha256=QEnTH9QZXFmAuyVtgqOuuHKBtIdi7uclpRqe0ZMewj4,624
|
|
82
82
|
copyparty/web/splash.js.gz,sha256=4VqNznN10-bT33IJm3VWzBEJ1s08XZyxFB1TYPUkuAo,2739
|
83
83
|
copyparty/web/svcs.html,sha256=dnE1fG15zOpq7u0GYt8ij6BUv_LTwsiipFeneVYlMsM,14140
|
84
84
|
copyparty/web/svcs.js.gz,sha256=lMXEP9W-VlXyANlva4q0ASSxvvHYlE2CrmxGgZXZop0,713
|
85
|
-
copyparty/web/ui.css.gz,sha256=
|
85
|
+
copyparty/web/ui.css.gz,sha256=iDjrmq32aDN6l2S5AjCQdKjD6bxmzP6ji2WjM1FjKiU,2819
|
86
86
|
copyparty/web/up2k.js.gz,sha256=VQVWBXK2gEz1b8if_ujXHNHnfBO7cdrKoSjqX397VUI,24519
|
87
87
|
copyparty/web/util.js.gz,sha256=rD9iLfVLKRhxC8hmakal-s18xN_rs6GuOqyRPii6HQ8,15110
|
88
88
|
copyparty/web/w.hash.js.gz,sha256=JhJagnqIkcKng_hs6otEgzcuQE7keToG_r5dd2o3EfU,1108
|
@@ -100,7 +100,7 @@ copyparty/web/deps/busy.mp3.gz,sha256=EVphk1_HYyRKJmtpeK99vbAstF7ub1f9ndu020H8PQ
|
|
100
100
|
copyparty/web/deps/easymde.css.gz,sha256=vWxfueI64rPikuqFj69wJBtGisqf93AheQtOZqgUI_c,3041
|
101
101
|
copyparty/web/deps/easymde.js.gz,sha256=rHBs4XWQe2bmv7ZzDIk43oxnTwrwpq5laYHhV5sKQQo,77014
|
102
102
|
copyparty/web/deps/fuse.py,sha256=6j4Zy3VpQg629pwwIW77v2LJ1hy-qlyrxwhXfKl9B7I,33426
|
103
|
-
copyparty/web/deps/marked.js.gz,sha256=
|
103
|
+
copyparty/web/deps/marked.js.gz,sha256=6GrdpSikQ-tt9GrcAl7wA7mp_Il_2T2ZvBeACVX1j1k,22665
|
104
104
|
copyparty/web/deps/mini-fa.css.gz,sha256=CTPrNaH8OTVmxajrGP88E2MkjadY9_81TBVnd9sw9Y8,572
|
105
105
|
copyparty/web/deps/mini-fa.woff,sha256=L9DNncV2TIyvsrspMbJouvnnt7F068Hbn7YZYvN76AU,2784
|
106
106
|
copyparty/web/deps/prism.css.gz,sha256=Z_A6rJ3MN5KWnjvXaV787aTW_5DT-xjFd0YZ7_W-Krk,1468
|
@@ -109,9 +109,9 @@ copyparty/web/deps/prismd.css.gz,sha256=ObUlksQVr-OuYlTz-I4B23TeBg2QDVVGRnWBz8cV
|
|
109
109
|
copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
|
110
110
|
copyparty/web/deps/sha512.ac.js.gz,sha256=lFZaCLumgWxrvEuDr4bqdKHsqjX82AbVAb7_F45Yk88,7033
|
111
111
|
copyparty/web/deps/sha512.hw.js.gz,sha256=UAed2_ocklZCnIzcSYz2h4P1ycztlCLj-ewsRTud2lU,7939
|
112
|
-
copyparty-1.16.
|
113
|
-
copyparty-1.16.
|
114
|
-
copyparty-1.16.
|
115
|
-
copyparty-1.16.
|
116
|
-
copyparty-1.16.
|
117
|
-
copyparty-1.16.
|
112
|
+
copyparty-1.16.19.dist-info/licenses/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
|
113
|
+
copyparty-1.16.19.dist-info/METADATA,sha256=-QmQvp2dZJ8RVVHlm6Pf4B6WUpiNJNnBUXCwmyMExAI,160161
|
114
|
+
copyparty-1.16.19.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
115
|
+
copyparty-1.16.19.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
|
116
|
+
copyparty-1.16.19.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
|
117
|
+
copyparty-1.16.19.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|