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/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
- ansi_re = re.compile("\033\\[[^mK]*[mK]")
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 = re.compile("^MemTotal:.* kB")
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 = re.compile("^MemAvailable:.* kB")
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
- chmod = kwargs.pop("chmod", -1)
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 chmod >= 0:
1550
- os.fchmod(f2.fileno(), chmod)
1563
+ if fperms:
1564
+ set_fperms(f2, vf)
1551
1565
 
1552
- if chmod >= 0:
1553
- os.fchmod(f.fileno(), chmod)
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 = re.compile(r"^content-type: *([^; ]+)", re.IGNORECASE)
1616
- self.re_cdisp = re.compile(r"^content-disposition: *([^; ]+)", re.IGNORECASE)
1617
- self.re_cdisp_field = re.compile(
1618
- r'^content-disposition:(?: *|.*; *)name="([^"]+)"', re.IGNORECASE
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("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
@@ -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), None, None, ctypes.pointer(bfree)
2620
+ ctypes.c_wchar_p(abspath),
2621
+ ctypes.pointer(bavail),
2622
+ ctypes.pointer(btotal),
2623
+ ctypes.pointer(bfree),
2591
2624
  )
2592
- return (bfree.value, None, "")
2625
+ return (bavail.value, btotal.value, "")
2593
2626
  else:
2594
2627
  sv = os.statvfs(ap)
2595
- free = sv.f_frsize * sv.f_bfree
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 (None, None, repr(ex))
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
- return open(os.path.join(E.mod, name), mode, encoding=enc)
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):
@@ -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>
Binary file
Binary file
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://github.com/ShareX/ShareX/releases/tag/v12.1.1">v12</a> or <a href="https://getsharex.com/">v15+</a>, save this as <code>copyparty.sxcu</code> and run it:</p>
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.5
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:/tmp/party.sock` (permission `770` means only members of group `www` can access it)
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; using the [copr-pypi](https://copr.fedorainfracloud.org/coprs/g/copr/PyPI/) builds is **NOT recommended** because updates can be delayed by [several months](https://github.com/fedora-copr/copr/issues/3056)
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=Y2bTkxG_bmf_IAnt6brZtxWRh7FixaflrFwXU2igNDU,126249
3
- copyparty/__version__.py,sha256=uhS3dAMtTM8r9haiBv5Lrq_rDPstnacAWWZt4fw8yVg,249
4
- copyparty/authsrv.py,sha256=PDX6-ob-vqpKE8XkMCEph662EE4Mp8IKbtIEZUKk5IM,120514
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=O2jhYbt7WV9X80_Av1f7r4u1JVi7U5Z_cLgSGhpipLg,15423
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=xDDWixo5O2HT8wlexXQ0QRazU_fYERIJ4yF0mtu9wD0,18141
14
- copyparty/httpcli.py,sha256=u61-6XvcIzmOUXA9J2MTNz3VraKKRy9SLRNOTZZ5uAY,230976
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=x6dl6ZjpwYREbm-eJZYnwdkhDeCA58hw_iwUMCD1Wz8,18819
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=7lINRFc1Vrc-ebP2hU3dBHH3BRFOnEmEZ0jzlpYb8Jg,19910
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=jeKGkVLG9-Q0zPNDZdIwb_O59388rvGzG2cQQ2qPXpk,14659
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=M7UnnqNUtVz5DQRYMHcmmyvDDtPzXKAOrW-XgJWfujc,49038
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=sNBMqazIB37t3jwhv_F1tr0lHFsiRX-nCsICM8nbkvc,14170
30
+ copyparty/tftpd.py,sha256=QuPcdx77gLmEpit3lLc0x4Px6BrBBKJpJl4VqINc5O8,14254
31
31
  copyparty/th_cli.py,sha256=IEX5tCb0gw9Z2aRIDL9bwdvJ6g5jhWZ8OEAAz16_xN4,5426
32
- copyparty/th_srv.py,sha256=INLaV1_NH1VKtBx9XaqyJbZNAj2ZhfcQwz0_5Y5fyiY,32744
32
+ copyparty/th_srv.py,sha256=S6ChazjXwXevUxkAajwIwHzA16PyNIwv6kYRFakvLmY,32759
33
33
  copyparty/u2idx.py,sha256=4Y5OOPyVkc-pS0z6e3p4StXAMnjHobSOMmMsvNUTD34,13674
34
- copyparty/up2k.py,sha256=S-SPTzLqxFvgSkFsWHqJwgUeT7QguLZgdZMQIh5eWiU,178957
35
- copyparty/util.py,sha256=AtY7rVW64F6xJ00FbM7f43YBiVI6ctjtjUeb6zahAeY,104493
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=ZwpTla_mFpoN_BbGn9h0dEn7wpZ607QJ7uYyxWJMcmw,1953
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=auvhLVE_t0aIN0q-nk0zOWFqITgDhroMAAviBNLoFfc,4788
60
- copyparty/web/browser.js.gz,sha256=CUpLvqCMFQXpRFf_T15Ie0tJsCqmdJzJK-HYdD6Ea_o,96908
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=emeY2-wjkh8x1JgaW6ny5fcC7XpZzZzfE1f-sEyntQ4,940
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=xMl4Rly-ykhTx7LCI2MK1DpCblFWmFU9uA1rgivgen8,2771
84
- copyparty/web/svcs.html,sha256=cxgrhX9wD0Z_kvidry3aS9ubuGXYDj2f4ehq1X8T1EA,14227
85
- copyparty/web/svcs.js.gz,sha256=lMXEP9W-VlXyANlva4q0ASSxvvHYlE2CrmxGgZXZop0,713
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.5.dist-info/licenses/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
114
- copyparty-1.18.5.dist-info/METADATA,sha256=WETwkcbYrz8FBFDRd3SgMaHco780aGTuV_924AK0I5o,166420
115
- copyparty-1.18.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
116
- copyparty-1.18.5.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
117
- copyparty-1.18.5.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
118
- copyparty-1.18.5.dist-info/RECORD,,
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,,