copyparty 1.18.5__py3-none-any.whl → 1.18.7__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/__main__.py +32 -27
- copyparty/__version__.py +2 -2
- copyparty/authsrv.py +48 -2
- copyparty/bos/bos.py +14 -3
- copyparty/cfg.py +6 -0
- copyparty/ftpd.py +4 -4
- copyparty/httpcli.py +75 -53
- copyparty/httpsrv.py +1 -0
- copyparty/mtag.py +3 -2
- copyparty/smbd.py +1 -1
- copyparty/svchub.py +4 -3
- copyparty/tftpd.py +6 -3
- copyparty/th_srv.py +2 -2
- copyparty/up2k.py +14 -8
- copyparty/util.py +62 -22
- copyparty/web/browser.html +2 -2
- copyparty/web/browser.js.gz +0 -0
- copyparty/web/shares.js.gz +0 -0
- copyparty/web/splash.js.gz +0 -0
- copyparty/web/svcs.html +16 -4
- copyparty/web/svcs.js.gz +0 -0
- {copyparty-1.18.5.dist-info → copyparty-1.18.7.dist-info}/METADATA +32 -5
- {copyparty-1.18.5.dist-info → copyparty-1.18.7.dist-info}/RECORD +27 -27
- {copyparty-1.18.5.dist-info → copyparty-1.18.7.dist-info}/WHEEL +0 -0
- {copyparty-1.18.5.dist-info → copyparty-1.18.7.dist-info}/entry_points.txt +0 -0
- {copyparty-1.18.5.dist-info → copyparty-1.18.7.dist-info}/licenses/LICENSE +0 -0
- {copyparty-1.18.5.dist-info → copyparty-1.18.7.dist-info}/top_level.txt +0 -0
copyparty/util.py
CHANGED
@@ -155,7 +155,9 @@ except:
|
|
155
155
|
HAVE_PSUTIL = False
|
156
156
|
|
157
157
|
try:
|
158
|
-
if os.environ.get("PRTY_NO_MAGIC")
|
158
|
+
if os.environ.get("PRTY_NO_MAGIC") or (
|
159
|
+
ANYWIN and not os.environ.get("PRTY_FORCE_MAGIC")
|
160
|
+
):
|
159
161
|
raise Exception()
|
160
162
|
|
161
163
|
import magic
|
@@ -220,7 +222,18 @@ except:
|
|
220
222
|
BITNESS = struct.calcsize("P") * 8
|
221
223
|
|
222
224
|
|
223
|
-
|
225
|
+
RE_ANSI = re.compile("\033\\[[^mK]*[mK]")
|
226
|
+
RE_HTML_SH = re.compile(r"[<>&$?`\"';]")
|
227
|
+
RE_CTYPE = re.compile(r"^content-type: *([^; ]+)", re.IGNORECASE)
|
228
|
+
RE_CDISP = re.compile(r"^content-disposition: *([^; ]+)", re.IGNORECASE)
|
229
|
+
RE_CDISP_FIELD = re.compile(
|
230
|
+
r'^content-disposition:(?: *|.*; *)name="([^"]+)"', re.IGNORECASE
|
231
|
+
)
|
232
|
+
RE_CDISP_FILE = re.compile(
|
233
|
+
r'^content-disposition:(?: *|.*; *)filename="(.*)"', re.IGNORECASE
|
234
|
+
)
|
235
|
+
RE_MEMTOTAL = re.compile("^MemTotal:.* kB")
|
236
|
+
RE_MEMAVAIL = re.compile("^MemAvailable:.* kB")
|
224
237
|
|
225
238
|
|
226
239
|
BOS_SEP = ("%s" % (os.sep,)).encode("ascii")
|
@@ -465,11 +478,11 @@ def read_ram() :
|
|
465
478
|
with open("/proc/meminfo", "rb", 0x10000) as f:
|
466
479
|
zsl = f.read(0x10000).decode("ascii", "replace").split("\n")
|
467
480
|
|
468
|
-
p =
|
481
|
+
p = RE_MEMTOTAL
|
469
482
|
zs = next((x for x in zsl if p.match(x)))
|
470
483
|
a = int((int(zs.split()[1]) / 0x100000) * 100) / 100
|
471
484
|
|
472
|
-
p =
|
485
|
+
p = RE_MEMAVAIL
|
473
486
|
zs = next((x for x in zsl if p.match(x)))
|
474
487
|
b = int((int(zs.split()[1]) / 0x100000) * 100) / 100
|
475
488
|
except:
|
@@ -1503,7 +1516,8 @@ def ren_open(fname , *args , **kwargs ) :
|
|
1503
1516
|
fun = kwargs.pop("fun", open)
|
1504
1517
|
fdir = kwargs.pop("fdir", None)
|
1505
1518
|
suffix = kwargs.pop("suffix", None)
|
1506
|
-
|
1519
|
+
vf = kwargs.pop("vf", None)
|
1520
|
+
fperms = vf and "fperms" in vf
|
1507
1521
|
|
1508
1522
|
if fname == os.devnull:
|
1509
1523
|
return fun(fname, *args, **kwargs), fname
|
@@ -1546,11 +1560,11 @@ def ren_open(fname , *args , **kwargs ) :
|
|
1546
1560
|
fp2 = os.path.join(fdir, fp2)
|
1547
1561
|
with open(fsenc(fp2), "wb") as f2:
|
1548
1562
|
f2.write(orig_name.encode("utf-8"))
|
1549
|
-
if
|
1550
|
-
|
1563
|
+
if fperms:
|
1564
|
+
set_fperms(f2, vf)
|
1551
1565
|
|
1552
|
-
if
|
1553
|
-
|
1566
|
+
if fperms:
|
1567
|
+
set_fperms(f, vf)
|
1554
1568
|
|
1555
1569
|
return f, fname
|
1556
1570
|
|
@@ -1612,14 +1626,10 @@ class MultipartParser(object):
|
|
1612
1626
|
self.args = args
|
1613
1627
|
self.headers = http_headers
|
1614
1628
|
|
1615
|
-
self.re_ctype =
|
1616
|
-
self.re_cdisp =
|
1617
|
-
self.re_cdisp_field =
|
1618
|
-
|
1619
|
-
)
|
1620
|
-
self.re_cdisp_file = re.compile(
|
1621
|
-
r'^content-disposition:(?: *|.*; *)filename="(.*)"', re.IGNORECASE
|
1622
|
-
)
|
1629
|
+
self.re_ctype = RE_CTYPE
|
1630
|
+
self.re_cdisp = RE_CDISP
|
1631
|
+
self.re_cdisp_field = RE_CDISP_FIELD
|
1632
|
+
self.re_cdisp_file = RE_CDISP_FILE
|
1623
1633
|
|
1624
1634
|
self.boundary = b""
|
1625
1635
|
self.gen = None
|
@@ -2158,6 +2168,16 @@ def find_prefix(ips , cidrs ) :
|
|
2158
2168
|
return ret
|
2159
2169
|
|
2160
2170
|
|
2171
|
+
def html_sh_esc(s ) :
|
2172
|
+
s = re.sub(RE_HTML_SH, "_", s).replace(" ", "%20")
|
2173
|
+
s = s.replace("\r", "_").replace("\n", "_")
|
2174
|
+
return s
|
2175
|
+
|
2176
|
+
|
2177
|
+
def json_hesc(s ) :
|
2178
|
+
return s.replace("<", "\\u003c").replace(">", "\\u003e").replace("&", "\\u0026")
|
2179
|
+
|
2180
|
+
|
2161
2181
|
def html_escape(s , quot = False, crlf = False) :
|
2162
2182
|
"""html.escape but also newlines"""
|
2163
2183
|
s = s.replace("&", "&").replace("<", "<").replace(">", ">")
|
@@ -2477,6 +2497,14 @@ def lsof(log , abspath ) :
|
|
2477
2497
|
log("lsof failed; " + min_ex(), 3)
|
2478
2498
|
|
2479
2499
|
|
2500
|
+
def set_fperms(f , vf ) :
|
2501
|
+
fno = f.fileno()
|
2502
|
+
if "chmod_f" in vf:
|
2503
|
+
os.fchmod(fno, vf["chmod_f"])
|
2504
|
+
if "chown" in vf:
|
2505
|
+
os.fchown(fno, vf["uid"], vf["gid"])
|
2506
|
+
|
2507
|
+
|
2480
2508
|
def _fs_mvrm(
|
2481
2509
|
log , src , dst , atomic , flags
|
2482
2510
|
) :
|
@@ -2586,17 +2614,22 @@ def get_df(abspath , prune ) :
|
|
2586
2614
|
if ANYWIN:
|
2587
2615
|
abspath = fsdec(ap)
|
2588
2616
|
bfree = ctypes.c_ulonglong(0)
|
2617
|
+
btotal = ctypes.c_ulonglong(0)
|
2618
|
+
bavail = ctypes.c_ulonglong(0)
|
2589
2619
|
ctypes.windll.kernel32.GetDiskFreeSpaceExW( # type: ignore
|
2590
|
-
ctypes.c_wchar_p(abspath),
|
2620
|
+
ctypes.c_wchar_p(abspath),
|
2621
|
+
ctypes.pointer(bavail),
|
2622
|
+
ctypes.pointer(btotal),
|
2623
|
+
ctypes.pointer(bfree),
|
2591
2624
|
)
|
2592
|
-
return (
|
2625
|
+
return (bavail.value, btotal.value, "")
|
2593
2626
|
else:
|
2594
2627
|
sv = os.statvfs(ap)
|
2595
|
-
free = sv.f_frsize * sv.
|
2628
|
+
free = sv.f_frsize * sv.f_bavail
|
2596
2629
|
total = sv.f_frsize * sv.f_blocks
|
2597
2630
|
return (free, total, "")
|
2598
2631
|
except Exception as ex:
|
2599
|
-
return (
|
2632
|
+
return (0, 0, repr(ex))
|
2600
2633
|
|
2601
2634
|
|
2602
2635
|
if not ANYWIN and not MACOS:
|
@@ -4068,7 +4101,14 @@ def load_resource(E , name , mode="rb") :
|
|
4068
4101
|
stream = codecs.getreader(enc)(stream)
|
4069
4102
|
return stream
|
4070
4103
|
|
4071
|
-
|
4104
|
+
ap = os.path.join(E.mod, name)
|
4105
|
+
|
4106
|
+
if PY2:
|
4107
|
+
import codecs
|
4108
|
+
|
4109
|
+
return codecs.open(ap, "r", encoding=enc) # type: ignore
|
4110
|
+
|
4111
|
+
return open(ap, mode, encoding=enc)
|
4072
4112
|
|
4073
4113
|
|
4074
4114
|
class Pebkac(Exception):
|
copyparty/web/browser.html
CHANGED
@@ -109,8 +109,8 @@
|
|
109
109
|
{%- for f in files %}
|
110
110
|
<tr><td>{{ f.lead }}</td><td><a href="{{ f.href }}">{{ f.name|e }}</a></td><td>{{ f.sz }}</td>
|
111
111
|
{%- if f.tags is defined %}
|
112
|
-
{%- for k in taglist %}<td>{{ f.tags[k] }}</td>{%- endfor %}
|
113
|
-
{%- endif %}<td>{{ f.ext }}</td><td>{{ f.dt }}</td></tr>
|
112
|
+
{%- for k in taglist %}<td>{{ f.tags[k]|e }}</td>{%- endfor %}
|
113
|
+
{%- endif %}<td>{{ f.ext|e }}</td><td>{{ f.dt }}</td></tr>
|
114
114
|
{%- endfor %}
|
115
115
|
|
116
116
|
</tbody>
|
copyparty/web/browser.js.gz
CHANGED
Binary file
|
copyparty/web/shares.js.gz
CHANGED
Binary file
|
copyparty/web/splash.js.gz
CHANGED
Binary file
|
copyparty/web/svcs.html
CHANGED
@@ -36,7 +36,7 @@
|
|
36
36
|
<span class="os lin mac">
|
37
37
|
{% if accs %}<code><b id="pw0">{{ pw }}</b></code>=password, {% endif %}<code><b>mp</b></code>=mountpoint
|
38
38
|
</span>
|
39
|
-
<a href="#" id="setpw">use real password</a>
|
39
|
+
{% if accs %}<a href="#" id="setpw">use real password</a>{% endif %}
|
40
40
|
</p>
|
41
41
|
|
42
42
|
|
@@ -240,14 +240,26 @@
|
|
240
240
|
<div class="os win">
|
241
241
|
<h1>ShareX</h1>
|
242
242
|
|
243
|
-
<p>to upload screenshots using ShareX <a href="https://
|
243
|
+
<p>to upload screenshots using ShareX <a href="https://getsharex.com/">v15+</a>, save this as <code>copyparty.sxcu</code> and run it:</p>
|
244
|
+
|
245
|
+
<pre class="dl" name="copyparty.sxcu">
|
246
|
+
{ "Version": "15.0.0", "Name": "copyparty",
|
247
|
+
"RequestURL": "http{{ s }}://{{ ep }}/{{ rvp }}",
|
248
|
+
"Headers": {
|
249
|
+
{% if accs %}"pw": "<b>{{ pw }}</b>", {% endif %}"accept": "url"
|
250
|
+
},
|
251
|
+
"DestinationType": "ImageUploader, TextUploader, FileUploader",
|
252
|
+
"Body": "MultipartFormData", "URL": "{response}",
|
253
|
+
"RequestMethod": "POST", "FileFormName": "f" }
|
254
|
+
</pre>
|
255
|
+
|
256
|
+
<p>for ShareX <a href="https://github.com/ShareX/ShareX/releases/tag/v12.1.1">v12</a> specifically, save this as <code>copyparty.sxcu</code> and run it:</p>
|
244
257
|
|
245
258
|
<pre class="dl" name="copyparty.sxcu">
|
246
259
|
{ "Name": "copyparty",
|
247
260
|
"RequestURL": "http{{ s }}://{{ ep }}/{{ rvp }}",
|
248
261
|
"Headers": {
|
249
|
-
{% if accs %}"pw": "<b>{{ pw }}</b>",{% endif %}
|
250
|
-
"accept": "url"
|
262
|
+
{% if accs %}"pw": "<b>{{ pw }}</b>", {% endif %}"accept": "url"
|
251
263
|
},
|
252
264
|
"DestinationType": "ImageUploader, TextUploader, FileUploader",
|
253
265
|
"FileFormName": "f" }
|
copyparty/web/svcs.js.gz
CHANGED
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: copyparty
|
3
|
-
Version: 1.18.
|
3
|
+
Version: 1.18.7
|
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
|
@@ -70,7 +70,7 @@ turn almost any device into a file server with resumable uploads/downloads using
|
|
70
70
|
|
71
71
|
📷 **screenshots:** [browser](#the-browser) // [upload](#uploading) // [unpost](#unpost) // [thumbnails](#thumbnails) // [search](#searching) // [fsearch](#file-search) // [zip-DL](#zip-downloads) // [md-viewer](#markdown-viewer)
|
72
72
|
|
73
|
-
🎬 **videos:** [upload](https://a.ocv.me/pub/demo/pics-vids/up2k.webm) // [cli-upload](https://a.ocv.me/pub/demo/pics-vids/u2cli.webm) // [race-the-beam](https://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm)
|
73
|
+
🎬 **videos:** [upload](https://a.ocv.me/pub/demo/pics-vids/up2k.webm) // [cli-upload](https://a.ocv.me/pub/demo/pics-vids/u2cli.webm) // [race-the-beam](https://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm) // 👉 **[feature-showcase](https://a.ocv.me/pub/demo/showcase-hq.webm)** ([youtube](https://www.youtube.com/watch?v=15_-hgsX2V0))
|
74
74
|
|
75
75
|
made in Norway 🇳🇴
|
76
76
|
|
@@ -138,6 +138,7 @@ made in Norway 🇳🇴
|
|
138
138
|
* [periodic rescan](#periodic-rescan) - filesystem monitoring
|
139
139
|
* [upload rules](#upload-rules) - set upload rules using volflags
|
140
140
|
* [compress uploads](#compress-uploads) - files can be autocompressed on upload
|
141
|
+
* [chmod and chown](#chmod-and-chown) - per-volume filesystem-permissions and ownership
|
141
142
|
* [other flags](#other-flags)
|
142
143
|
* [database location](#database-location) - in-volume (`.hist/up2k.db`, default) or somewhere else
|
143
144
|
* [metadata from audio files](#metadata-from-audio-files) - set `-e2t` to index tags on upload
|
@@ -1497,12 +1498,17 @@ if you enable deduplication with `--dedup` then it'll create a symlink instead o
|
|
1497
1498
|
**warning:** when enabling dedup, you should also:
|
1498
1499
|
* enable indexing with `-e2dsa` or volflag `e2dsa` (see [file indexing](#file-indexing) section below); strongly recommended
|
1499
1500
|
* ...and/or `--hardlink-only` to use hardlink-based deduplication instead of symlinks; see explanation below
|
1501
|
+
* ...and/or `--reflink` to use CoW/reflink-based dedup (much safer than hardlink, but OS/FS-dependent)
|
1500
1502
|
|
1501
1503
|
it will not be safe to rename/delete files if you only enable dedup and none of the above; if you enable indexing then it is not *necessary* to also do hardlinks (but you may still want to)
|
1502
1504
|
|
1503
1505
|
by default, deduplication is done based on symlinks (symbolic links); these are tiny files which are pointers to the nearest full copy of the file
|
1504
1506
|
|
1505
|
-
you can choose to use hardlinks instead of softlinks, globally with `--hardlink-only` or volflag `hardlinkonly
|
1507
|
+
you can choose to use hardlinks instead of softlinks, globally with `--hardlink-only` or volflag `hardlinkonly`, and you can choose to use reflinks with `--reflink` or volflag `reflink`
|
1508
|
+
|
1509
|
+
advantages of using reflinks (CoW, copy-on-write):
|
1510
|
+
* entirely safe (when your filesystem supports it correctly); either file can be edited or deleted without affecting other copies
|
1511
|
+
* only linux 5.3 or newer, only python 3.14 or newer, only some filesystems (btrfs probably ok, maybe xfs too, but zfs had bugs)
|
1506
1512
|
|
1507
1513
|
advantages of using hardlinks:
|
1508
1514
|
* hardlinks are more compatible with other software; they behave entirely like regular files
|
@@ -1702,6 +1708,26 @@ some examples,
|
|
1702
1708
|
allows (but does not force) gz compression if client uploads to `/inc?pk` or `/inc?gz` or `/inc?gz=4`
|
1703
1709
|
|
1704
1710
|
|
1711
|
+
## chmod and chown
|
1712
|
+
|
1713
|
+
per-volume filesystem-permissions and ownership
|
1714
|
+
|
1715
|
+
by default:
|
1716
|
+
* all folders are chmod 755
|
1717
|
+
* files are usually chmod 644 (umask-defined)
|
1718
|
+
* user/group is whatever copyparty is running as
|
1719
|
+
|
1720
|
+
this can be configured per-volume:
|
1721
|
+
* volflag `chmod_f` sets file permissions; default=`644` (usually)
|
1722
|
+
* volflag `chmod_d` sets directory permissions; default=`755`
|
1723
|
+
* volflag `uid` sets the owner user-id
|
1724
|
+
* volflag `gid` sets the owner group-id
|
1725
|
+
|
1726
|
+
notes:
|
1727
|
+
* `gid` can only be set to one of the groups which the copyparty process is a member of
|
1728
|
+
* `uid` can only be set if copyparty is running as root (i appreciate your faith)
|
1729
|
+
|
1730
|
+
|
1705
1731
|
## other flags
|
1706
1732
|
|
1707
1733
|
* `:c,magic` enables filetype detection for nameless uploads, same as `--magic`
|
@@ -2080,7 +2106,7 @@ some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatical
|
|
2080
2106
|
* **warning:** nginx-QUIC (HTTP/3) is still experimental and can make uploads much slower, so HTTP/1.1 is recommended for now
|
2081
2107
|
* depending on server/client, HTTP/1.1 can also be 5x faster than HTTP/2
|
2082
2108
|
|
2083
|
-
for improved security (and a 10% performance boost) consider listening on a unix-socket with `-i unix:770:www:/
|
2109
|
+
for improved security (and a 10% performance boost) consider listening on a unix-socket with `-i unix:770:www:/dev/shm/party.sock` (permission `770` means only members of group `www` can access it)
|
2084
2110
|
|
2085
2111
|
example webserver / reverse-proxy configs:
|
2086
2112
|
|
@@ -2279,6 +2305,7 @@ force-enable features with known issues on your OS/env by setting any of the fo
|
|
2279
2305
|
| env-var | what it does |
|
2280
2306
|
| ------------------------ | ------------ |
|
2281
2307
|
| `PRTY_FORCE_MP` | force-enable multiprocessing (real multithreading) on MacOS and other broken platforms |
|
2308
|
+
| `PRTY_FORCE_MAGIC` | use [magic](https://pypi.org/project/python-magic/) on Windows (you will segfault) |
|
2282
2309
|
|
2283
2310
|
|
2284
2311
|
# packages
|
@@ -2301,7 +2328,7 @@ NOTE: there used to be an aur package; this evaporated when copyparty was adopte
|
|
2301
2328
|
|
2302
2329
|
## fedora package
|
2303
2330
|
|
2304
|
-
does not exist yet;
|
2331
|
+
does not exist yet; there are rumours that it is being packaged! keep an eye on this space...
|
2305
2332
|
|
2306
2333
|
|
2307
2334
|
## nix package
|
@@ -1,40 +1,40 @@
|
|
1
1
|
copyparty/__init__.py,sha256=4aJw_Mt3eSNMV8sJ95Nh4ris-tBUYhCOV094Rnxa5Xo,2651
|
2
|
-
copyparty/__main__.py,sha256=
|
3
|
-
copyparty/__version__.py,sha256=
|
4
|
-
copyparty/authsrv.py,sha256=
|
2
|
+
copyparty/__main__.py,sha256=vs0_3Ba4k4BbYF34V3loxPB0Dds_T1akBr44mpXv3TQ,127567
|
3
|
+
copyparty/__version__.py,sha256=BmHBWBUUrc62D7mlf1y2spt-lRJLom0MewDTgdJGeaQ,249
|
4
|
+
copyparty/authsrv.py,sha256=luOWk3_6ZvCJI8bp6UmBPSeyQT02HH5Nf6vnakCwzGI,122483
|
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=pSSeVYticrDsnsrdRtfpUQN-8WRObsqrYtSRroXmgxo,7992
|
10
|
-
copyparty/cfg.py,sha256=
|
10
|
+
copyparty/cfg.py,sha256=THceFupFmsZWF8iJKDDHR_XUEU3TNQgDRJB50iLiC1k,15734
|
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=S0w6iMR8AlzLc_Aqn-TKuUJ-vNbmeQF6SQs614-NFOE,18107
|
14
|
+
copyparty/httpcli.py,sha256=hoc9p9iJ_WegTrUbLTAOkwwqltnvw35eQLO0_ZzvN3I,231645
|
15
15
|
copyparty/httpconn.py,sha256=IA9fdCjigawZ4kWhgvVN3nSiy5pb3W2qaE6rFqUYdq0,6943
|
16
|
-
copyparty/httpsrv.py,sha256=
|
16
|
+
copyparty/httpsrv.py,sha256=MCNjOEH_xM2qXCLGcoN6W0RhWlikv68-zBx0nICIheU,18864
|
17
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=ljqkiUblKzmLF6NVSXBRcFvy61j8QdVOjXToi2xQcyM,19939
|
21
21
|
copyparty/multicast.py,sha256=Me4XEEJijvvK2lMRwmGU2hsaI5_E9AEpCjIC4b9UefA,12393
|
22
22
|
copyparty/pwhash.py,sha256=zHoz9FHGkFBxoRvSfG1XyjN3ibww_h5GE6_m5yS-fws,4246
|
23
|
-
copyparty/smbd.py,sha256=
|
23
|
+
copyparty/smbd.py,sha256=Czo8SRkkl4ndCwEUe9Cbr8v0YOnyQHzubGSguPizuTc,14651
|
24
24
|
copyparty/ssdp.py,sha256=R1Z61GZOxBMF2Sk4RTxKWMOemogmcjEWG-CvLihd45k,7023
|
25
25
|
copyparty/star.py,sha256=tV5BbX6AiQ7N4UU8DYtSTckNYeoeey4DBqq4LjfymbY,3818
|
26
26
|
copyparty/sutil.py,sha256=E65jAaOzHlJYnqsOKDMPVT8kALPUVexpkSStWBdItkY,3231
|
27
|
-
copyparty/svchub.py,sha256=
|
27
|
+
copyparty/svchub.py,sha256=LVhCj0IxHBlGdDbX-At_wAQioQ2MQD2WPbofHzA08B0,49083
|
28
28
|
copyparty/szip.py,sha256=9srQzjsTBrBadf6QMh4YRAL70rkZLevAOHqXWK5jvr8,8846
|
29
29
|
copyparty/tcpsrv.py,sha256=BCOqlT_mRu1ibHJpPzvf9c4h83AnIMEfd8nBBednCCg,20484
|
30
|
-
copyparty/tftpd.py,sha256=
|
30
|
+
copyparty/tftpd.py,sha256=QuPcdx77gLmEpit3lLc0x4Px6BrBBKJpJl4VqINc5O8,14254
|
31
31
|
copyparty/th_cli.py,sha256=IEX5tCb0gw9Z2aRIDL9bwdvJ6g5jhWZ8OEAAz16_xN4,5426
|
32
|
-
copyparty/th_srv.py,sha256=
|
32
|
+
copyparty/th_srv.py,sha256=S6ChazjXwXevUxkAajwIwHzA16PyNIwv6kYRFakvLmY,32759
|
33
33
|
copyparty/u2idx.py,sha256=4Y5OOPyVkc-pS0z6e3p4StXAMnjHobSOMmMsvNUTD34,13674
|
34
|
-
copyparty/up2k.py,sha256=
|
35
|
-
copyparty/util.py,sha256=
|
34
|
+
copyparty/up2k.py,sha256=n1ZSEopnFmXbjPEU_B84T3i2nCXvIuLuY308uM4UaJQ,179150
|
35
|
+
copyparty/util.py,sha256=4Q7fgR4GDjiTUIRjOSEhmZGscKSimgeICGQFcVRyHRU,105446
|
36
36
|
copyparty/bos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
|
-
copyparty/bos/bos.py,sha256=
|
37
|
+
copyparty/bos/bos.py,sha256=DYt5mJJNt-935rU7HRm8kt_whpcVSI0uSphvD7PXrJo,2247
|
38
38
|
copyparty/bos/path.py,sha256=yEjCq2ki9CvxA5sCT8pS0keEXwugs0ZeUyUhdBziOCI,777
|
39
39
|
copyparty/res/COPYING.txt,sha256=1LnBxkwJuC8mRBxuoMF2UIcpCjcteIzFHotSUE1Xte0,9776
|
40
40
|
copyparty/res/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -56,8 +56,8 @@ copyparty/stolen/ifaddr/_shared.py,sha256=uNC4SdEIgdSLKvuUzsf1aM-H1Xrc_9mpLoOT43
|
|
56
56
|
copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
|
57
57
|
copyparty/web/baguettebox.js.gz,sha256=MxRofvhXjmUN7RtXtC17_9AlROVNUT-66WwJ_pHLY9c,8258
|
58
58
|
copyparty/web/browser.css.gz,sha256=29D3F4uB-VMd6uJo-SxWAwLfn08jcETYZm0SOJFJLAE,11847
|
59
|
-
copyparty/web/browser.html,sha256=
|
60
|
-
copyparty/web/browser.js.gz,sha256=
|
59
|
+
copyparty/web/browser.html,sha256=FKyez1jN3I7iG7VlAjZDtNi6PenYue22mahThVv4BTA,4792
|
60
|
+
copyparty/web/browser.js.gz,sha256=yMy_s-cgUH8Vo0cos3lIZTqaBxyfJpphOGK0oM02jAc,111316
|
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
|
@@ -77,12 +77,12 @@ copyparty/web/rups.html,sha256=iPuz53jBT_mIWIfl1yrjjg5-P7oO2ada6fTFq8PgjGk,1479
|
|
77
77
|
copyparty/web/rups.js.gz,sha256=nvvcG8L-fkm7zkhjnlTGhBp_KD0j08mtHEW0sB7zy-Y,854
|
78
78
|
copyparty/web/shares.css.gz,sha256=SdPlZCBwz9tkPkgEo5pSPDOZSI079njxEfkJ64-iW3c,547
|
79
79
|
copyparty/web/shares.html,sha256=YctvUrKuBYu42kxVylyW2_DEHm7Ik6uHqzfzVZ4N0ac,2545
|
80
|
-
copyparty/web/shares.js.gz,sha256=
|
80
|
+
copyparty/web/shares.js.gz,sha256=NQzrF57cikU38NzoaWQhbrINWkQBZhu1sH0jAC2SESQ,967
|
81
81
|
copyparty/web/splash.css.gz,sha256=S8_A7JJl71xACRBYGzafeaD82OacW6Fa7oKPiNyrhAs,1087
|
82
82
|
copyparty/web/splash.html,sha256=0MvDe1lKfGqczi7d4nKjWjG0cRVyvs8J6sDEj3DCPSI,6376
|
83
|
-
copyparty/web/splash.js.gz,sha256=
|
84
|
-
copyparty/web/svcs.html,sha256=
|
85
|
-
copyparty/web/svcs.js.gz,sha256=
|
83
|
+
copyparty/web/splash.js.gz,sha256=6ag8Szmjd_S1jr2D0-DgubM1F6Fq7dUU7A8E-qBY2gI,3702
|
84
|
+
copyparty/web/svcs.html,sha256=mamJdq0hsmHqG2BQsf9jg8G9bAl338wUhUZ2WtXOlGQ,14865
|
85
|
+
copyparty/web/svcs.js.gz,sha256=AYatNKyT_bKRWX8sb3WD_iujBY3L4P7HWBrsuMctsLs,722
|
86
86
|
copyparty/web/ui.css.gz,sha256=e3iIflzddmjoyPrun_1jsu9j7fbdonNQLyhEE2oKKOQ,2819
|
87
87
|
copyparty/web/up2k.js.gz,sha256=_uOZzORAFO91SG3TUHd9xhKhAIXwL3fUFBNEUKnEVHY,24812
|
88
88
|
copyparty/web/util.js.gz,sha256=zC_5OONJOR2g33uVlyn4GufUWIOvVZCleUY-VW3lnTc,15327
|
@@ -110,9 +110,9 @@ copyparty/web/deps/prismd.css.gz,sha256=ObUlksQVr-OuYlTz-I4B23TeBg2QDVVGRnWBz8cV
|
|
110
110
|
copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
|
111
111
|
copyparty/web/deps/sha512.ac.js.gz,sha256=lFZaCLumgWxrvEuDr4bqdKHsqjX82AbVAb7_F45Yk88,7033
|
112
112
|
copyparty/web/deps/sha512.hw.js.gz,sha256=UAed2_ocklZCnIzcSYz2h4P1ycztlCLj-ewsRTud2lU,7939
|
113
|
-
copyparty-1.18.
|
114
|
-
copyparty-1.18.
|
115
|
-
copyparty-1.18.
|
116
|
-
copyparty-1.18.
|
117
|
-
copyparty-1.18.
|
118
|
-
copyparty-1.18.
|
113
|
+
copyparty-1.18.7.dist-info/licenses/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
|
114
|
+
copyparty-1.18.7.dist-info/METADATA,sha256=bpeGIM2brZAQDtodeY1BoLDFdRs2xm04ssv6qHf6zUM,167745
|
115
|
+
copyparty-1.18.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
116
|
+
copyparty-1.18.7.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
|
117
|
+
copyparty-1.18.7.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
|
118
|
+
copyparty-1.18.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|