copyparty 1.10.1__py3-none-any.whl → 1.10.2__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/__version__.py +2 -2
- copyparty/ftpd.py +3 -0
- copyparty/httpcli.py +20 -7
- copyparty/ico.py +3 -4
- copyparty/tftpd.py +50 -12
- copyparty/web/browser.css.gz +0 -0
- copyparty/web/browser.html +1 -0
- copyparty/web/browser.js.gz +0 -0
- copyparty/web/browser2.html +1 -0
- copyparty/web/cf.html +1 -0
- copyparty/web/deps/marked.js.gz +0 -0
- copyparty/web/md.html +1 -0
- copyparty/web/mde.html +1 -0
- copyparty/web/msg.html +2 -1
- copyparty/web/splash.html +1 -0
- copyparty/web/svcs.html +1 -0
- {copyparty-1.10.1.dist-info → copyparty-1.10.2.dist-info}/METADATA +1 -1
- {copyparty-1.10.1.dist-info → copyparty-1.10.2.dist-info}/RECORD +22 -22
- {copyparty-1.10.1.dist-info → copyparty-1.10.2.dist-info}/LICENSE +0 -0
- {copyparty-1.10.1.dist-info → copyparty-1.10.2.dist-info}/WHEEL +0 -0
- {copyparty-1.10.1.dist-info → copyparty-1.10.2.dist-info}/entry_points.txt +0 -0
- {copyparty-1.10.1.dist-info → copyparty-1.10.2.dist-info}/top_level.txt +0 -0
copyparty/__version__.py
CHANGED
copyparty/ftpd.py
CHANGED
@@ -20,6 +20,7 @@ from .authsrv import VFS
|
|
20
20
|
from .bos import bos
|
21
21
|
from .util import (
|
22
22
|
Daemon,
|
23
|
+
ODict,
|
23
24
|
Pebkac,
|
24
25
|
exclude_dotfiles,
|
25
26
|
fsenc,
|
@@ -540,6 +541,8 @@ class Ftpd(object):
|
|
540
541
|
if self.args.ftp4:
|
541
542
|
ips = [x for x in ips if ":" not in x]
|
542
543
|
|
544
|
+
ips = list(ODict.fromkeys(ips)) # dedup
|
545
|
+
|
543
546
|
ioloop = IOLoop()
|
544
547
|
for ip in ips:
|
545
548
|
for h, lp in hs:
|
copyparty/httpcli.py
CHANGED
@@ -3135,11 +3135,15 @@ class HttpCli(object):
|
|
3135
3135
|
|
3136
3136
|
ext = ext.rstrip(".") or "unk"
|
3137
3137
|
if len(ext) > 11:
|
3138
|
-
ext = "
|
3138
|
+
ext = "~" + ext[-9:]
|
3139
3139
|
|
3140
|
+
return self.tx_svg(ext, exact)
|
3141
|
+
|
3142
|
+
def tx_svg(self, txt , small = False) :
|
3140
3143
|
# chrome cannot handle more than ~2000 unique SVGs
|
3141
|
-
|
3142
|
-
|
3144
|
+
# so url-param "raster" returns a png/webp instead
|
3145
|
+
# (useragent-sniffing kinshi due to caching proxies)
|
3146
|
+
mime, ico = self.ico.get(txt, not small, "raster" in self.uparam)
|
3143
3147
|
|
3144
3148
|
lm = formatdate(self.E.t0, usegmt=True)
|
3145
3149
|
self.reply(ico, mime=mime, headers={"Last-Modified": lm})
|
@@ -3403,6 +3407,9 @@ class HttpCli(object):
|
|
3403
3407
|
self.reply(pt.encode("utf-8"), status=rc)
|
3404
3408
|
return True
|
3405
3409
|
|
3410
|
+
if "th" in self.ouparam:
|
3411
|
+
return self.tx_svg("e" + pt[:3])
|
3412
|
+
|
3406
3413
|
t = t.format(self.args.SR)
|
3407
3414
|
qv = quotep(self.vpaths) + self.ourlq()
|
3408
3415
|
html = self.j2s("splash", this=self, qvpath=qv, msg=t)
|
@@ -3783,12 +3790,15 @@ class HttpCli(object):
|
|
3783
3790
|
if idx and hasattr(idx, "p_end"):
|
3784
3791
|
icur = idx.get_cur(dbv.realpath)
|
3785
3792
|
|
3793
|
+
th_fmt = self.uparam.get("th")
|
3786
3794
|
if self.can_read:
|
3787
|
-
th_fmt = self.uparam.get("th")
|
3788
3795
|
if th_fmt is not None:
|
3796
|
+
nothumb = "dthumb" in dbv.flags
|
3789
3797
|
if is_dir:
|
3790
3798
|
vrem = vrem.rstrip("/")
|
3791
|
-
if
|
3799
|
+
if nothumb:
|
3800
|
+
pass
|
3801
|
+
elif icur and vrem:
|
3792
3802
|
q = "select fn from cv where rd=? and dn=?"
|
3793
3803
|
crd, cdn = vrem.rsplit("/", 1) if "/" in vrem else ("", vrem)
|
3794
3804
|
# no mojibake support:
|
@@ -3811,10 +3821,10 @@ class HttpCli(object):
|
|
3811
3821
|
break
|
3812
3822
|
|
3813
3823
|
if is_dir:
|
3814
|
-
return self.
|
3824
|
+
return self.tx_svg("folder")
|
3815
3825
|
|
3816
3826
|
thp = None
|
3817
|
-
if self.thumbcli:
|
3827
|
+
if self.thumbcli and not nothumb:
|
3818
3828
|
thp = self.thumbcli.get(dbv, vrem, int(st.st_mtime), th_fmt)
|
3819
3829
|
|
3820
3830
|
if thp:
|
@@ -3825,6 +3835,9 @@ class HttpCli(object):
|
|
3825
3835
|
|
3826
3836
|
return self.tx_ico(rem)
|
3827
3837
|
|
3838
|
+
elif self.can_write and th_fmt is not None:
|
3839
|
+
return self.tx_svg("upload\nonly")
|
3840
|
+
|
3828
3841
|
elif self.can_get and self.avn:
|
3829
3842
|
axs = self.avn.axs
|
3830
3843
|
if self.uname not in axs.uhtml:
|
copyparty/ico.py
CHANGED
@@ -8,7 +8,7 @@ import re
|
|
8
8
|
|
9
9
|
from .__init__ import PY2
|
10
10
|
from .th_srv import HAVE_PIL, HAVE_PILF
|
11
|
-
from .util import BytesIO # type: ignore
|
11
|
+
from .util import BytesIO, html_escape # type: ignore
|
12
12
|
|
13
13
|
|
14
14
|
class Ico(object):
|
@@ -31,10 +31,9 @@ class Ico(object):
|
|
31
31
|
|
32
32
|
w = 100
|
33
33
|
h = 30
|
34
|
-
if
|
34
|
+
if as_thumb:
|
35
35
|
sw, sh = self.args.th_size.split("x")
|
36
36
|
h = int(100.0 / (float(sw) / float(sh)))
|
37
|
-
w = 100
|
38
37
|
|
39
38
|
if chrome:
|
40
39
|
# cannot handle more than ~2000 unique SVGs
|
@@ -99,6 +98,6 @@ class Ico(object):
|
|
99
98
|
fill="#{}" font-family="monospace" font-size="14px" style="letter-spacing:.5px">{}</text>
|
100
99
|
</g></svg>
|
101
100
|
"""
|
102
|
-
svg = svg.format(h, c[:6], c[6:], ext)
|
101
|
+
svg = svg.format(h, c[:6], c[6:], html_escape(ext, True))
|
103
102
|
|
104
103
|
return "image/svg+xml", svg.encode("utf-8")
|
copyparty/tftpd.py
CHANGED
@@ -36,7 +36,7 @@ from partftpy.TftpShared import TftpException
|
|
36
36
|
from .__init__ import EXE, TYPE_CHECKING
|
37
37
|
from .authsrv import VFS
|
38
38
|
from .bos import bos
|
39
|
-
from .util import BytesIO, Daemon, exclude_dotfiles, min_ex, runhook, undot
|
39
|
+
from .util import BytesIO, Daemon, ODict, exclude_dotfiles, min_ex, runhook, undot
|
40
40
|
|
41
41
|
if TYPE_CHECKING:
|
42
42
|
from .svchub import SvcHub
|
@@ -166,6 +166,8 @@ class Tftpd(object):
|
|
166
166
|
if self.args.ftp4:
|
167
167
|
ips = [x for x in ips if ":" not in x]
|
168
168
|
|
169
|
+
ips = list(ODict.fromkeys(ips)) # dedup
|
170
|
+
|
169
171
|
for ip in ips:
|
170
172
|
name = "tftp_%s" % (ip,)
|
171
173
|
Daemon(self._start, name, [ip, ports])
|
@@ -176,18 +178,54 @@ class Tftpd(object):
|
|
176
178
|
|
177
179
|
def _start(self, ip, ports):
|
178
180
|
fam = socket.AF_INET6 if ":" in ip else socket.AF_INET
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
self.ips.append(ip)
|
183
|
-
try:
|
184
|
-
srv.listen(ip, self.port, af_family=fam, ports=ports)
|
185
|
-
except OSError:
|
181
|
+
have_been_alive = False
|
182
|
+
while True:
|
183
|
+
srv = TftpServer.TftpServer("/", self._ls)
|
186
184
|
with self.mutex:
|
187
|
-
self.srv.
|
188
|
-
self.ips.
|
189
|
-
|
190
|
-
|
185
|
+
self.srv.append(srv)
|
186
|
+
self.ips.append(ip)
|
187
|
+
|
188
|
+
try:
|
189
|
+
# this is the listen loop; it should block forever
|
190
|
+
srv.listen(ip, self.port, af_family=fam, ports=ports)
|
191
|
+
except:
|
192
|
+
with self.mutex:
|
193
|
+
self.srv.remove(srv)
|
194
|
+
self.ips.remove(ip)
|
195
|
+
|
196
|
+
try:
|
197
|
+
srv.sock.close()
|
198
|
+
except:
|
199
|
+
pass
|
200
|
+
|
201
|
+
try:
|
202
|
+
bound = bool(srv.listenport)
|
203
|
+
except:
|
204
|
+
bound = False
|
205
|
+
|
206
|
+
if bound:
|
207
|
+
# this instance has managed to bind at least once
|
208
|
+
have_been_alive = True
|
209
|
+
|
210
|
+
if have_been_alive:
|
211
|
+
t = "tftp server [%s]:%d crashed; restarting in 3 sec:\n%s"
|
212
|
+
error(t, ip, self.port, min_ex())
|
213
|
+
time.sleep(3)
|
214
|
+
continue
|
215
|
+
|
216
|
+
# server failed to start; could be due to dualstack (ipv6 managed to bind and this is ipv4)
|
217
|
+
if ip != "0.0.0.0" or "::" not in self.ips:
|
218
|
+
# nope, it's fatal
|
219
|
+
t = "tftp server [%s]:%d failed to start:\n%s"
|
220
|
+
error(t, ip, self.port, min_ex())
|
221
|
+
|
222
|
+
# yep; ignore
|
223
|
+
# (TODO: move the "listening @ ..." infolog in partftpy to
|
224
|
+
# after the bind attempt so it doesn't print twice)
|
225
|
+
return
|
226
|
+
|
227
|
+
info("tftp server [%s]:%d terminated", ip, self.port)
|
228
|
+
break
|
191
229
|
|
192
230
|
def stop(self):
|
193
231
|
with self.mutex:
|
copyparty/web/browser.css.gz
CHANGED
Binary file
|
copyparty/web/browser.html
CHANGED
copyparty/web/browser.js.gz
CHANGED
Binary file
|
copyparty/web/browser2.html
CHANGED
copyparty/web/cf.html
CHANGED
copyparty/web/deps/marked.js.gz
CHANGED
Binary file
|
copyparty/web/md.html
CHANGED
copyparty/web/mde.html
CHANGED
copyparty/web/msg.html
CHANGED
copyparty/web/splash.html
CHANGED
copyparty/web/svcs.html
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: copyparty
|
3
|
-
Version: 1.10.
|
3
|
+
Version: 1.10.2
|
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
|
@@ -1,6 +1,6 @@
|
|
1
1
|
copyparty/__init__.py,sha256=34xcU8AoRRQscgVSx2gC6DeUyu7ZLmEVlXjttdQgXnI,1752
|
2
2
|
copyparty/__main__.py,sha256=wK7Fop32aq7LUKmBCQcp3A6bJ2abdpj3em9IigFyniI,91595
|
3
|
-
copyparty/__version__.py,sha256=
|
3
|
+
copyparty/__version__.py,sha256=z7G2R3a_jwf2rpKu1PpKRwOFSv86M6MOa1nRTzu_t9I,246
|
4
4
|
copyparty/authsrv.py,sha256=BzJwPbYhTr9etW50DMY0UXRHBdNOKdnSdTuZ4qXlNvs,73470
|
5
5
|
copyparty/broker_mp.py,sha256=4mEZC5tiHUazJMgYuwInNo2dxS7jrbzrGb1qs2UBt9k,3948
|
6
6
|
copyparty/broker_mpw.py,sha256=4ZI7bJYOwUibeAJVv9_FPGNmHrr9eOtkj_Kz0JEppTU,3197
|
@@ -10,11 +10,11 @@ copyparty/cert.py,sha256=bt1n-629-Gtez1C_CroXq53gXEmUsVjkTbkQ6Gu2Zfc,7323
|
|
10
10
|
copyparty/cfg.py,sha256=XMqgS5JMcTe4vCmAnUkSXrKBPTzn0zHYsBenXcZNK_s,9000
|
11
11
|
copyparty/dxml.py,sha256=lZpg-kn-kQsXRtNY1n6fRaS-b7uXzMCyv8ovKnhZcZc,1548
|
12
12
|
copyparty/fsutil.py,sha256=c4fTvmclKbVABNsjU4rGddsjCgRwi9YExAyo-06ATc8,3932
|
13
|
-
copyparty/ftpd.py,sha256=
|
14
|
-
copyparty/httpcli.py,sha256=
|
13
|
+
copyparty/ftpd.py,sha256=BqxH4j-mLrjRvxW3Lnz-qrR4_ETv3OnmIRNifSf_3Fk,15939
|
14
|
+
copyparty/httpcli.py,sha256=YoumInsa3mzoJXQHjznsPpDYuKuzx0DoLXgx6vy8Oew,142323
|
15
15
|
copyparty/httpconn.py,sha256=XyFv6yIsyq0InrqulwovsmAcqziEq_O2zsI41K8bJWs,6698
|
16
16
|
copyparty/httpsrv.py,sha256=q0z4RuoTMiZz_QbUSCFikIDbKHm9_JT1uGTGuDvOdO0,16218
|
17
|
-
copyparty/ico.py,sha256=
|
17
|
+
copyparty/ico.py,sha256=AYHdK6NlYBfBgafVYXia3jHQ9XHZdUL1D8WftLMAzIU,3545
|
18
18
|
copyparty/mdns.py,sha256=CcraggbDxTT1ntYzD8Ebgqmw5Q4HkyZcfh5ymtCV_ak,17469
|
19
19
|
copyparty/metrics.py,sha256=glBeNYGWMF4zEK9__aKks7qKnSwwJuWAzPx6ljRYt4k,8754
|
20
20
|
copyparty/mtag.py,sha256=OZM6cVJafOe_LZ4bPJzVJbORA_omzewwJh-N11u3nak,16855
|
@@ -27,7 +27,7 @@ copyparty/sutil.py,sha256=dZhDAzVAp02i6YmGqcedy4LaYVffnJCSp3F6WEwfz7c,2967
|
|
27
27
|
copyparty/svchub.py,sha256=LyhbfI4pYga-X7VSsbyzx3xM5kn2e4Z6bSObU4cRU0w,29036
|
28
28
|
copyparty/szip.py,sha256=SJg5nzN_5oaIsIYXlRvcLHVTqngLAOPfe4_WVsuhSkw,8520
|
29
29
|
copyparty/tcpsrv.py,sha256=2LGUqOBAIrsmL-1pwrbsPXR71gutHccqRp-hjzt91Us,17289
|
30
|
-
copyparty/tftpd.py,sha256=
|
30
|
+
copyparty/tftpd.py,sha256=yM_byDfFI2c7TwgDbTtw9xt3LWJ3PBBHfIsMsB6MDow,13028
|
31
31
|
copyparty/th_cli.py,sha256=e2FF-wVY4qcwAO8hrtTlwn3EJIOHyZt5sYhl0N8eudk,4378
|
32
32
|
copyparty/th_srv.py,sha256=HBw6mq0RrJkAJupJpwFAjCMNS67Y9hda6sv7gFSzRwk,25764
|
33
33
|
copyparty/u2idx.py,sha256=JBEqKX1ZM8GIvQrDYb5VQ_5QiFNFsjWF6H9drHlPVEY,12709
|
@@ -55,26 +55,26 @@ copyparty/stolen/ifaddr/_posix.py,sha256=-67NdfGrCktfQPakT2fLbjl2U00QMvyBGkSvrUu
|
|
55
55
|
copyparty/stolen/ifaddr/_shared.py,sha256=cJACl8cOxQ-HSYphZTzKMAjAx_TAFyJwUPjfD102Xqw,6111
|
56
56
|
copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
|
57
57
|
copyparty/web/baguettebox.js.gz,sha256=BxwvSjky72hZprWofueRrlskiIeRrgGERUpKiZXQ5C8,7671
|
58
|
-
copyparty/web/browser.css.gz,sha256=
|
59
|
-
copyparty/web/browser.html,sha256=
|
60
|
-
copyparty/web/browser.js.gz,sha256=
|
61
|
-
copyparty/web/browser2.html,sha256=
|
62
|
-
copyparty/web/cf.html,sha256=
|
58
|
+
copyparty/web/browser.css.gz,sha256=_C5z5xYMkKGnwT_y_dmQzbQBkXbYn6h0KWGdiMv_7yQ,11380
|
59
|
+
copyparty/web/browser.html,sha256=72E2Q6grz_MtkmFVIXE_0rOVzliyQo-XwuawkJsB-qY,4873
|
60
|
+
copyparty/web/browser.js.gz,sha256=NdOb9VBrO_ETpDt6LBhoUPPhiehYEckDCzVZndfpmG0,66579
|
61
|
+
copyparty/web/browser2.html,sha256=AtGRGtb_rsyu-gWXEuXDMg9WqbjJFcDDJXel3ScG-4c,1605
|
62
|
+
copyparty/web/cf.html,sha256=lJThtNFNAQT1ClCHHlivAkDGE0LutedwopXD62Z8Nys,589
|
63
63
|
copyparty/web/dbg-audio.js.gz,sha256=Ma-KZtK8LnmiwNvNKFKXMPYl_Nn_3U7GsJ6-DRWC2HE,688
|
64
64
|
copyparty/web/md.css.gz,sha256=DadSn01UeCBE47AKqCjmrc7x2ZLZMwl4f__RhGCDzS4,2011
|
65
|
-
copyparty/web/md.html,sha256=
|
65
|
+
copyparty/web/md.html,sha256=QdrN1-58IgdXj6QnT9w3_nbT825A6UWknj6WOKxn69I,4110
|
66
66
|
copyparty/web/md.js.gz,sha256=7uNDAB8ctTLm4vr3ui-hfqusn7rORDOJfydonOFEWCU,4277
|
67
67
|
copyparty/web/md2.css.gz,sha256=bM_1hsegXnEig1b6OQ28yWWUlMPje6u9M58VZ1Z-C9g,681
|
68
68
|
copyparty/web/md2.js.gz,sha256=P47IdvqfOaDSnAxKk-0K8au9yUkH3be6t4YZ8AosDtI,8343
|
69
69
|
copyparty/web/mde.css.gz,sha256=L6YhxnYBoqT5bSwD99rx8ALXDh8d_1-sCvbc_p3MoAU,929
|
70
|
-
copyparty/web/mde.html,sha256=
|
70
|
+
copyparty/web/mde.html,sha256=1KPTKGFxTTuJ9Zp9OBdmm1DREtSvijqnlsZoNTpv7q0,1678
|
71
71
|
copyparty/web/mde.js.gz,sha256=eo-UjMKIbRcPL6LR8BDl4IkCGcpJyFK0mhYte7WgqLc,2219
|
72
72
|
copyparty/web/msg.css.gz,sha256=-wOmwxU0_Xg2W53rIAjKA2TeFAVQNJeT8ZMtmiJiviY,252
|
73
|
-
copyparty/web/msg.html,sha256
|
73
|
+
copyparty/web/msg.html,sha256=-MPzXZnHzQNuX04-aSn_fA7L15GASOHnCyeS1eVCYUI,896
|
74
74
|
copyparty/web/splash.css.gz,sha256=ZJ1E7wWGYBVl50ytkxdYkLsLDhRJtGwP2-YdMUo7MgI,927
|
75
|
-
copyparty/web/splash.html,sha256=
|
75
|
+
copyparty/web/splash.html,sha256=4ZgHc7v1C9ABwzde4UvlsyTCtkmIwKVMXm-3rHcFXsM,3782
|
76
76
|
copyparty/web/splash.js.gz,sha256=3PMKsMLwEsHP8eonBmtvonm9yeNq69xjMi8ZqnVeKcA,1255
|
77
|
-
copyparty/web/svcs.html,sha256=
|
77
|
+
copyparty/web/svcs.html,sha256=Jn-G2QMF09oc01C_tmJwGZAdjFzbeu4unLSs6dowluM,11702
|
78
78
|
copyparty/web/svcs.js.gz,sha256=k81ZvZ3I-f4fMHKrNGGOgOlvXnCBz0mVjD-8mieoWCA,520
|
79
79
|
copyparty/web/ui.css.gz,sha256=oyrc_sf0u-KycOUV7FoRI7uF6oK6ruQ13Qzyz-7rad8,2567
|
80
80
|
copyparty/web/up2k.js.gz,sha256=mT9u6jZFWjTTVgNodHrMvmuQ-sp7N4S6AtJHlrbOqoE,22027
|
@@ -90,7 +90,7 @@ copyparty/web/dd/4.png,sha256=fIwEVmtZNZtloZuVEKPKnkx3SELwRJmB3US61y7t2lI,248
|
|
90
90
|
copyparty/web/dd/5.png,sha256=Lfpu8-yOlhONuoMbygloKqQVPXSm9gjxH2gUYn5QQAE,250
|
91
91
|
copyparty/web/dd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
92
92
|
copyparty/web/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
93
|
-
copyparty/web/deps/marked.js.gz,sha256=
|
93
|
+
copyparty/web/deps/marked.js.gz,sha256=WhUw0LPWs5cxqORQmW-zajQiUc5rSRkcvf3eT3-XSZc,22372
|
94
94
|
copyparty/web/deps/mini-fa.css.gz,sha256=CTPrNaH8OTVmxajrGP88E2MkjadY9_81TBVnd9sw9Y8,572
|
95
95
|
copyparty/web/deps/mini-fa.woff,sha256=L9DNncV2TIyvsrspMbJouvnnt7F068Hbn7YZYvN76AU,2784
|
96
96
|
copyparty/web/deps/prism.css.gz,sha256=Z_A6rJ3MN5KWnjvXaV787aTW_5DT-xjFd0YZ7_W-Krk,1468
|
@@ -99,9 +99,9 @@ copyparty/web/deps/prismd.css.gz,sha256=ObUlksQVr-OuYlTz-I4B23TeBg2QDVVGRnWBz8cV
|
|
99
99
|
copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
|
100
100
|
copyparty/web/deps/sha512.ac.js.gz,sha256=lFZaCLumgWxrvEuDr4bqdKHsqjX82AbVAb7_F45Yk88,7033
|
101
101
|
copyparty/web/deps/sha512.hw.js.gz,sha256=vqoXeracj-99Z5MfY3jK2N4WiSzYQdfjy0RnUlQDhSU,8110
|
102
|
-
copyparty-1.10.
|
103
|
-
copyparty-1.10.
|
104
|
-
copyparty-1.10.
|
105
|
-
copyparty-1.10.
|
106
|
-
copyparty-1.10.
|
107
|
-
copyparty-1.10.
|
102
|
+
copyparty-1.10.2.dist-info/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
|
103
|
+
copyparty-1.10.2.dist-info/METADATA,sha256=VztHHVGSLDK0ZRVxlGhBN2WuBCO3fpz6rbK0iVROAYY,112378
|
104
|
+
copyparty-1.10.2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
105
|
+
copyparty-1.10.2.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
|
106
|
+
copyparty-1.10.2.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
|
107
|
+
copyparty-1.10.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|