copyparty 1.6.10__py2.py3-none-any.whl → 1.6.11__py2.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 CHANGED
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
 
3
- VERSION = (1, 6, 10)
3
+ VERSION = (1, 6, 11)
4
4
  CODENAME = "cors k"
5
- BUILD_DT = (2023, 3, 20)
5
+ BUILD_DT = (2023, 4, 1)
6
6
 
7
7
  S_VERSION = ".".join(map(str, VERSION))
8
8
  S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
copyparty/httpcli.py CHANGED
@@ -1111,7 +1111,14 @@ class HttpCli(object):
1111
1111
  if self.do_log:
1112
1112
  self.log("MKCOL " + self.req)
1113
1113
 
1114
- return self._mkdir(self.vpath)
1114
+ try:
1115
+ return self._mkdir(self.vpath, True)
1116
+ except Pebkac as ex:
1117
+ if ex.code >= 500:
1118
+ raise
1119
+
1120
+ self.reply(b"", ex.code)
1121
+ return True
1115
1122
 
1116
1123
  def handle_move(self) :
1117
1124
  dst = self.headers["destination"]
@@ -1564,6 +1571,11 @@ class HttpCli(object):
1564
1571
  t = "{}\n{}\n{}\n{}\n".format(post_sz, sha_b64, sha_hex[:56], url)
1565
1572
 
1566
1573
  h = {"Location": url} if is_put and url else {}
1574
+
1575
+ if "x-oc-mtime" in self.headers:
1576
+ h["X-OC-MTime"] = "accepted"
1577
+ t = "" # some webdav clients expect/prefer this
1578
+
1567
1579
  self.reply(t.encode("utf-8"), 201, headers=h)
1568
1580
  return True
1569
1581
 
@@ -1964,7 +1976,7 @@ class HttpCli(object):
1964
1976
  sanitized = sanitize_fn(new_dir, "", [])
1965
1977
  return self._mkdir(vjoin(self.vpath, sanitized))
1966
1978
 
1967
- def _mkdir(self, vpath ) :
1979
+ def _mkdir(self, vpath , dav = False) :
1968
1980
  nullwrite = self.args.nw
1969
1981
  vfs, rem = self.asrv.vfs.get(vpath, self.uname, False, True)
1970
1982
  self._assert_safe_rem(rem)
@@ -1990,7 +2002,12 @@ class HttpCli(object):
1990
2002
  raise Pebkac(500, min_ex())
1991
2003
 
1992
2004
  self.out_headers["X-New-Dir"] = quotep(vpath.split("/")[-1])
1993
- self.redirect(vpath, status=201)
2005
+
2006
+ if dav:
2007
+ self.reply(b"", 201)
2008
+ else:
2009
+ self.redirect(vpath, status=201)
2010
+
1994
2011
  return True
1995
2012
 
1996
2013
  def handle_new_md(self) :
copyparty/up2k.py CHANGED
@@ -1029,7 +1029,7 @@ class Up2k(object):
1029
1029
  zh.update(cv.encode("utf-8", "replace"))
1030
1030
  zh.update(spack(b"<d", cst.st_mtime))
1031
1031
  dhash = base64.urlsafe_b64encode(zh.digest()[:12]).decode("ascii")
1032
- sql = "select d from dh where d = ? and h = ?"
1032
+ sql = "select d from dh where d=? and +h=?"
1033
1033
  try:
1034
1034
  c = db.c.execute(sql, (rd, dhash))
1035
1035
  drd = rd
@@ -1313,9 +1313,9 @@ class Up2k(object):
1313
1313
 
1314
1314
  w, drd, dfn = zb[:-1].decode("utf-8").split("\x00")
1315
1315
  with self.mutex:
1316
- q = "select mt, sz from up where w = ? and rd = ? and fn = ?"
1316
+ q = "select mt, sz from up where rd=? and fn=? and +w=?"
1317
1317
  try:
1318
- mt, sz = cur.execute(q, (w, drd, dfn)).fetchone()
1318
+ mt, sz = cur.execute(q, (drd, dfn, w)).fetchone()
1319
1319
  except:
1320
1320
  # file moved/deleted since spooling
1321
1321
  continue
@@ -2220,7 +2220,7 @@ class Up2k(object):
2220
2220
  q = r"select * from up where w = ?"
2221
2221
  argv = [wark]
2222
2222
  else:
2223
- q = r"select * from up where substr(w,1,16) = ? and w = ?"
2223
+ q = r"select * from up where substr(w,1,16)=? and +w=?"
2224
2224
  argv = [wark[:16], wark]
2225
2225
 
2226
2226
  c2 = cur.execute(q, tuple(argv))
@@ -3297,9 +3297,16 @@ class Up2k(object):
3297
3297
  """
3298
3298
  dupes = []
3299
3299
  sabs = djoin(sptop, srem)
3300
- q = "select rd, fn from up where substr(w,1,16)=? and w=?"
3300
+
3301
+ if self.no_expr_idx:
3302
+ q = r"select rd, fn from up where w = ?"
3303
+ argv = (wark,)
3304
+ else:
3305
+ q = r"select rd, fn from up where substr(w,1,16)=? and +w=?"
3306
+ argv = (wark[:16], wark)
3307
+
3301
3308
  for ptop, cur in self.cur.items():
3302
- for rd, fn in cur.execute(q, (wark[:16], wark)):
3309
+ for rd, fn in cur.execute(q, argv):
3303
3310
  if rd.startswith("//") or fn.startswith("//"):
3304
3311
  rd, fn = s3dec(rd, fn)
3305
3312
 
copyparty/web/a/up2k.py CHANGED
@@ -1009,8 +1009,9 @@ class Ctl(object):
1009
1009
  file, cid = task
1010
1010
  try:
1011
1011
  upload(file, cid, self.ar.a, stats)
1012
- except:
1013
- eprint("upload failed, retrying: {0} #{1}\n".format(file.name, cid[:8]))
1012
+ except Exception as ex:
1013
+ t = "upload failed, retrying: {0} #{1} ({2})\n"
1014
+ eprint(t.format(file.name, cid[:8], ex))
1014
1015
  # handshake will fix it
1015
1016
 
1016
1017
  with self.mutex:
@@ -1049,6 +1050,8 @@ def main():
1049
1050
  print(ver)
1050
1051
  return
1051
1052
 
1053
+ sys.argv = [x for x in sys.argv if x != "--ws"]
1054
+
1052
1055
  # fmt: off
1053
1056
  ap = app = argparse.ArgumentParser(formatter_class=APF, description="copyparty up2k uploader / filesearch tool, " + ver, epilog="""
1054
1057
  NOTE:
@@ -1067,7 +1070,6 @@ source file/folder selection uses rsync syntax, meaning that:
1067
1070
 
1068
1071
  ap = app.add_argument_group("compatibility")
1069
1072
  ap.add_argument("--cls", action="store_true", help="clear screen before start")
1070
- ap.add_argument("--ws", action="store_true", help="copyparty is running on windows; wait before deleting files after uploading")
1071
1073
 
1072
1074
  ap = app.add_argument_group("folder sync")
1073
1075
  ap.add_argument("--dl", action="store_true", help="delete local files after uploading")
@@ -1131,10 +1133,6 @@ source file/folder selection uses rsync syntax, meaning that:
1131
1133
 
1132
1134
  if ar.dr and not ar.drd:
1133
1135
  print("\npass 2/2: delete")
1134
- if getattr(ctl, "up_br") and ar.ws:
1135
- # wait for up2k to mtime if there was uploads
1136
- time.sleep(4)
1137
-
1138
1136
  ar.drd = True
1139
1137
  ar.z = True
1140
1138
  Ctl(ar, ctl.stats)
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
copyparty/web/md.js.gz CHANGED
Binary file
copyparty/web/svcs.html CHANGED
@@ -43,10 +43,9 @@
43
43
  <h1>WebDAV</h1>
44
44
 
45
45
  <div class="os win">
46
- <p><em>note: rclone-FTP is a bit faster, so {% if args.ftp or args.ftps %}try that first{% else %}consider enabling FTP in server settings{% endif %}</em></p>
47
46
  <p>if you can, install <a href="https://winfsp.dev/rel/">winfsp</a>+<a href="https://downloads.rclone.org/rclone-current-windows-amd64.zip">rclone</a> and then paste this in cmd:</p>
48
47
  <pre>
49
- rclone config create {{ aname }}-dav webdav url=http{{ s }}://{{ rip }}{{ hport }} vendor=owncloud{% if accs %} user=k pass=<b>{{ pw }}</b>{% endif %}
48
+ rclone config create {{ aname }}-dav webdav url=http{{ s }}://{{ rip }}{{ hport }} vendor=owncloud pacer_min_sleep=0.01ms{% if accs %} user=k pass=<b>{{ pw }}</b>{% endif %}
50
49
  rclone mount --vfs-cache-mode writes --dir-cache-time 5s {{ aname }}-dav:{{ rvp }} <b>W:</b>
51
50
  </pre>
52
51
  {% if s %}
@@ -71,7 +70,7 @@
71
70
  </pre>
72
71
  <p>or you can use rclone instead, which is much slower but doesn't require root (plus it keeps lastmodified on upload):</p>
73
72
  <pre>
74
- rclone config create {{ aname }}-dav webdav url=http{{ s }}://{{ rip }}{{ hport }} vendor=owncloud{% if accs %} user=k pass=<b>{{ pw }}</b>{% endif %}
73
+ rclone config create {{ aname }}-dav webdav url=http{{ s }}://{{ rip }}{{ hport }} vendor=owncloud pacer_min_sleep=0.01ms{% if accs %} user=k pass=<b>{{ pw }}</b>{% endif %}
75
74
  rclone mount --vfs-cache-mode writes --dir-cache-time 5s {{ aname }}-dav:{{ rvp }} <b>mp</b>
76
75
  </pre>
77
76
  {% if s %}
copyparty/web/ui.css.gz CHANGED
Binary file
copyparty/web/util.js.gz CHANGED
Binary file
@@ -130,7 +130,7 @@ some recommended options:
130
130
 
131
131
  you may also want these, especially on servers:
132
132
 
133
- * [contrib/systemd/copyparty.service](contrib/systemd/copyparty.service) to run copyparty as a systemd service
133
+ * [contrib/systemd/copyparty.service](contrib/systemd/copyparty.service) to run copyparty as a systemd service (see guide inside)
134
134
  * [contrib/systemd/prisonparty.service](contrib/systemd/prisonparty.service) to run it in a chroot (for extra security)
135
135
  * [contrib/rc/copyparty](contrib/rc/copyparty) to run copyparty on FreeBSD
136
136
  * [contrib/nginx/copyparty.conf](contrib/nginx/copyparty.conf) to [reverse-proxy](#reverse-proxy) behind nginx (for better https)
@@ -168,7 +168,7 @@ firewall-cmd --reload
168
168
  * ☑ write-only folders
169
169
  * ☑ [unpost](#unpost): undo/delete accidental uploads
170
170
  * ☑ [self-destruct](#self-destruct) (specified server-side or client-side)
171
- * ☑ symlink/discard existing files (content-matching)
171
+ * ☑ symlink/discard duplicates (content-matching)
172
172
  * download
173
173
  * ☑ single files in browser
174
174
  * ☑ [folders as zip / tar files](#zip-downloads)
@@ -1206,7 +1206,9 @@ sync folders to/from copyparty
1206
1206
 
1207
1207
  the commandline uploader [up2k.py](https://github.com/9001/copyparty/tree/hovudstraum/bin#up2kpy) with `--dr` is the best way to sync a folder to copyparty; verifies checksums and does files in parallel, and deletes unexpected files on the server after upload has finished which makes file-renames really cheap (it'll rename serverside and skip uploading)
1208
1208
 
1209
- alternatively there is [rclone](./docs/rclone.md) which allows for bidirectional sync and is *way* more flexible (stream files straight from sftp/s3/gcs to copyparty for instance), although syncing to copyparty is about 5x slower than up2k.py if you have many small files in particular
1209
+ alternatively there is [rclone](./docs/rclone.md) which allows for bidirectional sync and is *way* more flexible (stream files straight from sftp/s3/gcs to copyparty, ...), although there is no integrity check and it won't work with files over 100 MiB if copyparty is behind cloudflare
1210
+
1211
+ * starting from rclone v1.63 (currently [in beta](https://beta.rclone.org/?filter=latest)), rclone will also be faster than up2k.py
1210
1212
 
1211
1213
 
1212
1214
  ## mount as drive
@@ -1215,11 +1217,10 @@ a remote copyparty server as a local filesystem; go to the control-panel and cl
1215
1217
 
1216
1218
  alternatively, some alternatives roughly sorted by speed (unreproducible benchmark), best first:
1217
1219
 
1218
- * [rclone-http](./docs/rclone.md) (25s), read-only
1220
+ * [rclone-webdav](./docs/rclone.md) (25s), read/WRITE ([v1.63-beta](https://beta.rclone.org/?filter=latest))
1221
+ * [rclone-http](./docs/rclone.md) (26s), read-only
1222
+ * [partyfuse.py](./bin/#partyfusepy) (35s), read-only
1219
1223
  * [rclone-ftp](./docs/rclone.md) (47s), read/WRITE
1220
- * [rclone-webdav](./docs/rclone.md) (51s), read/WRITE
1221
- * copyparty-1.5.0's webdav server is faster than rclone-1.60.0 (69s)
1222
- * [partyfuse.py](./bin/#partyfusepy) (71s), read-only
1223
1224
  * davfs2 (103s), read/WRITE, *very fast* on small files
1224
1225
  * [win10-webdav](#webdav-server) (138s), read/WRITE
1225
1226
  * [win10-smb2](#smb-server) (387s), read/WRITE
@@ -1009,8 +1009,9 @@ class Ctl(object):
1009
1009
  file, cid = task
1010
1010
  try:
1011
1011
  upload(file, cid, self.ar.a, stats)
1012
- except:
1013
- eprint("upload failed, retrying: {0} #{1}\n".format(file.name, cid[:8]))
1012
+ except Exception as ex:
1013
+ t = "upload failed, retrying: {0} #{1} ({2})\n"
1014
+ eprint(t.format(file.name, cid[:8], ex))
1014
1015
  # handshake will fix it
1015
1016
 
1016
1017
  with self.mutex:
@@ -1049,6 +1050,8 @@ def main():
1049
1050
  print(ver)
1050
1051
  return
1051
1052
 
1053
+ sys.argv = [x for x in sys.argv if x != "--ws"]
1054
+
1052
1055
  # fmt: off
1053
1056
  ap = app = argparse.ArgumentParser(formatter_class=APF, description="copyparty up2k uploader / filesearch tool, " + ver, epilog="""
1054
1057
  NOTE:
@@ -1067,7 +1070,6 @@ source file/folder selection uses rsync syntax, meaning that:
1067
1070
 
1068
1071
  ap = app.add_argument_group("compatibility")
1069
1072
  ap.add_argument("--cls", action="store_true", help="clear screen before start")
1070
- ap.add_argument("--ws", action="store_true", help="copyparty is running on windows; wait before deleting files after uploading")
1071
1073
 
1072
1074
  ap = app.add_argument_group("folder sync")
1073
1075
  ap.add_argument("--dl", action="store_true", help="delete local files after uploading")
@@ -1131,10 +1133,6 @@ source file/folder selection uses rsync syntax, meaning that:
1131
1133
 
1132
1134
  if ar.dr and not ar.drd:
1133
1135
  print("\npass 2/2: delete")
1134
- if getattr(ctl, "up_br") and ar.ws:
1135
- # wait for up2k to mtime if there was uploads
1136
- time.sleep(4)
1137
-
1138
1136
  ar.drd = True
1139
1137
  ar.z = True
1140
1138
  Ctl(ar, ctl.stats)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: copyparty
3
- Version: 1.6.10
3
+ Version: 1.6.11
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
  Home-page: https://github.com/9001/copyparty
6
6
  Author: ed
@@ -177,7 +177,7 @@ some recommended options:
177
177
 
178
178
  you may also want these, especially on servers:
179
179
 
180
- * [contrib/systemd/copyparty.service](contrib/systemd/copyparty.service) to run copyparty as a systemd service
180
+ * [contrib/systemd/copyparty.service](contrib/systemd/copyparty.service) to run copyparty as a systemd service (see guide inside)
181
181
  * [contrib/systemd/prisonparty.service](contrib/systemd/prisonparty.service) to run it in a chroot (for extra security)
182
182
  * [contrib/rc/copyparty](contrib/rc/copyparty) to run copyparty on FreeBSD
183
183
  * [contrib/nginx/copyparty.conf](contrib/nginx/copyparty.conf) to [reverse-proxy](#reverse-proxy) behind nginx (for better https)
@@ -215,7 +215,7 @@ firewall-cmd --reload
215
215
  * ☑ write-only folders
216
216
  * ☑ [unpost](#unpost): undo/delete accidental uploads
217
217
  * ☑ [self-destruct](#self-destruct) (specified server-side or client-side)
218
- * ☑ symlink/discard existing files (content-matching)
218
+ * ☑ symlink/discard duplicates (content-matching)
219
219
  * download
220
220
  * ☑ single files in browser
221
221
  * ☑ [folders as zip / tar files](#zip-downloads)
@@ -1253,7 +1253,9 @@ sync folders to/from copyparty
1253
1253
 
1254
1254
  the commandline uploader [up2k.py](https://github.com/9001/copyparty/tree/hovudstraum/bin#up2kpy) with `--dr` is the best way to sync a folder to copyparty; verifies checksums and does files in parallel, and deletes unexpected files on the server after upload has finished which makes file-renames really cheap (it'll rename serverside and skip uploading)
1255
1255
 
1256
- alternatively there is [rclone](./docs/rclone.md) which allows for bidirectional sync and is *way* more flexible (stream files straight from sftp/s3/gcs to copyparty for instance), although syncing to copyparty is about 5x slower than up2k.py if you have many small files in particular
1256
+ alternatively there is [rclone](./docs/rclone.md) which allows for bidirectional sync and is *way* more flexible (stream files straight from sftp/s3/gcs to copyparty, ...), although there is no integrity check and it won't work with files over 100 MiB if copyparty is behind cloudflare
1257
+
1258
+ * starting from rclone v1.63 (currently [in beta](https://beta.rclone.org/?filter=latest)), rclone will also be faster than up2k.py
1257
1259
 
1258
1260
 
1259
1261
  ## mount as drive
@@ -1262,11 +1264,10 @@ a remote copyparty server as a local filesystem; go to the control-panel and cl
1262
1264
 
1263
1265
  alternatively, some alternatives roughly sorted by speed (unreproducible benchmark), best first:
1264
1266
 
1265
- * [rclone-http](./docs/rclone.md) (25s), read-only
1267
+ * [rclone-webdav](./docs/rclone.md) (25s), read/WRITE ([v1.63-beta](https://beta.rclone.org/?filter=latest))
1268
+ * [rclone-http](./docs/rclone.md) (26s), read-only
1269
+ * [partyfuse.py](./bin/#partyfusepy) (35s), read-only
1266
1270
  * [rclone-ftp](./docs/rclone.md) (47s), read/WRITE
1267
- * [rclone-webdav](./docs/rclone.md) (51s), read/WRITE
1268
- * copyparty-1.5.0's webdav server is faster than rclone-1.60.0 (69s)
1269
- * [partyfuse.py](./bin/#partyfusepy) (71s), read-only
1270
1271
  * davfs2 (103s), read/WRITE, *very fast* on small files
1271
1272
  * [win10-webdav](#webdav-server) (138s), read/WRITE
1272
1273
  * [win10-smb2](#smb-server) (387s), read/WRITE
@@ -1,6 +1,6 @@
1
1
  copyparty/__init__.py,sha256=ZIYqHdNC97NeoBTkFDSZ6E8aAma1tfjLhbax9oQHl4U,1063
2
2
  copyparty/__main__.py,sha256=NeG2cQHE4uRQ02zHZ7gv-NAlRgmTWmVSslPH5Uk84NI,66925
3
- copyparty/__version__.py,sha256=wp65Vl0D_UcBkVaU9A6sBpd0yYrElMXJHqgAUtnqjDM,248
3
+ copyparty/__version__.py,sha256=Rjr8n-EApIithnjIGWw74_DGKrayh0_AUylCp1sLxk0,247
4
4
  copyparty/authsrv.py,sha256=Sh793NWnpklcz1ZEj-pt0FISjx-_BZJ8fkWm5rbWKrA,62030
5
5
  copyparty/broker_mp.py,sha256=SEJT7qIH7L0YH0e1yHucsUuYJE5m3DKymO57070_UCs,3590
6
6
  copyparty/broker_mpw.py,sha256=GlSn4PRd_OqqeG39FiXgNvPzXVQW6UCiAcqmBSr2q6g,3200
@@ -10,7 +10,7 @@ copyparty/cfg.py,sha256=ukauOEs_WKxzkt4MzIfLAU9eKGq9ZGcyIKSFMScc8xg,6436
10
10
  copyparty/dxml.py,sha256=lZpg-kn-kQsXRtNY1n6fRaS-b7uXzMCyv8ovKnhZcZc,1548
11
11
  copyparty/fsutil.py,sha256=c4fTvmclKbVABNsjU4rGddsjCgRwi9YExAyo-06ATc8,3932
12
12
  copyparty/ftpd.py,sha256=pPLkQTNmqfZRGfzALzZApEj6N8l3yo24RqDGDqISeyE,13841
13
- copyparty/httpcli.py,sha256=uU13dj9SzBpfdzfEceuqIYkxhm7IqUd_n3BdacVaUzI,120318
13
+ copyparty/httpcli.py,sha256=BcoVcyvVq32_ilEvbAjzB1zgvCyK28MXQTWUMB0gVFA,120713
14
14
  copyparty/httpconn.py,sha256=LXyJphs-FtyhFeDF-YUGVXKGf9KvHA86UzVx4FvRZo0,6674
15
15
  copyparty/httpsrv.py,sha256=EQsGZgKvN_D_eZ-XbFPZgFXTQc2Y2EXCo2qQhfWbf_4,14143
16
16
  copyparty/ico.py,sha256=eP_FGZEsnCLr6Q1ypITp7kbMKtQiDeROv0ydrbEKfIY,2643
@@ -27,7 +27,7 @@ copyparty/tcpsrv.py,sha256=ccUXnAa7IeRPWaaTAuOVcSgdBetlHVoJozsTrZcFx8Q,16633
27
27
  copyparty/th_cli.py,sha256=hcb-GGN7krnHF3LIp3tDix_OYwXnCRoTpsiO0TaDqOg,3826
28
28
  copyparty/th_srv.py,sha256=O7SJDLBx6pcRUiOR4G6Rqpi7FGthekedGTK3CXIFi_E,22119
29
29
  copyparty/u2idx.py,sha256=n3DSFc67tIk-Jn8-Z5EEG8Xb_qv48KomJFYvoXlmV-U,10493
30
- copyparty/up2k.py,sha256=0I-YREZDULliJTuxyqhz2j1XT2QnM3da1ojc31ZY_0Y,121148
30
+ copyparty/up2k.py,sha256=sZem4PlqUnXsNPpn2XzbfU0Zz3EMrPYpMeqYBKuDQd4,121292
31
31
  copyparty/util.py,sha256=hAZ4AN5rMQgDPYKiRdA3Qh-dZ0cBsaODR-mNrSuNwzw,71782
32
32
  copyparty/bos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  copyparty/bos/bos.py,sha256=Md2RwMauEdOS7SfK5aiHby8T1KgQoTaoEjVCYU98_4I,1560
@@ -49,17 +49,17 @@ copyparty/stolen/ifaddr/__init__.py,sha256=_BUN7eM5oD2Jgib6B22tEFSb20fD9urNPPaAl
49
49
  copyparty/stolen/ifaddr/_posix.py,sha256=-67NdfGrCktfQPakT2fLbjl2U00QMvyBGkSvrUuTOrU,2626
50
50
  copyparty/stolen/ifaddr/_shared.py,sha256=cJACl8cOxQ-HSYphZTzKMAjAx_TAFyJwUPjfD102Xqw,6111
51
51
  copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
52
- copyparty/web/baguettebox.js.gz,sha256=Irf0YDki85Pgke63z_TZws92UiGtrzpyg-39eguYAho,7282
53
- copyparty/web/browser.css.gz,sha256=k6iCbhvebd54n3NMGLPtltG9Ude8QyomZKI1bgRjQNc,10925
52
+ copyparty/web/baguettebox.js.gz,sha256=9ZXtLOKGTCRzIisSRIvqnO1s1ZQ90pxzoTU6vPol0m4,7295
53
+ copyparty/web/browser.css.gz,sha256=9oT_dnWhHdVrERi9GkNQElpcAhG1UtbUurqR033167U,10929
54
54
  copyparty/web/browser.html,sha256=561cy72h48x7g6_ZHXsAS3xYqnNwrXB1KK9VBVBqio8,5286
55
- copyparty/web/browser.js.gz,sha256=CLCD-X_N1K7_7ljSwD5jno-_-NpjuWP0ChzFAUeMyfc,57351
55
+ copyparty/web/browser.js.gz,sha256=28jB3rWCHZsS2a2OZHzI-GQZihMa4RxKyBp9PLL31IU,57919
56
56
  copyparty/web/browser2.html,sha256=3kR3QiDXYqtAo7gOoBtdTP3eRvibUCZHVVAbmAfaAVU,1604
57
57
  copyparty/web/cf.html,sha256=AQSPDFq1-Ww-9SyVLZtjVPfl054aqXs6svi5cQBlAdA,585
58
58
  copyparty/web/copyparty.gif,sha256=S1YS9GrKPbueEob_yTeWqzDcDoRXU_Z209BJ4YF-9pQ,126
59
59
  copyparty/web/dbg-audio.js.gz,sha256=MgESInC83l8nnKTd8JSbSmLy_lXwlypML153FAm2TmU,687
60
60
  copyparty/web/md.css.gz,sha256=gEI11ImLwhWYrsfb4YWx1OS1RgkpxHGsuMTJpcychJg,2011
61
61
  copyparty/web/md.html,sha256=CmkW3Aw2qGowEsFBk-4THRWJBR-fyNmkl1Dr15lPwdg,4063
62
- copyparty/web/md.js.gz,sha256=M0mX1a1w-a867BBcxtvRzxtVKcDvrIORUfPYNwBL_JA,4112
62
+ copyparty/web/md.js.gz,sha256=-4-0wF1YlLqHyiLpJQHTUPV4bys52hbbA9sKWEeRaFY,4121
63
63
  copyparty/web/md2.css.gz,sha256=83brwCdNBp7n0zr2O3fYFn9OP1i-mXfd-nde78imLGw,680
64
64
  copyparty/web/md2.js.gz,sha256=zpXdpg7yxZYPEU5UphdMQPsYQBkfSJM8z5OIKaoITpw,8209
65
65
  copyparty/web/mde.css.gz,sha256=L6YhxnYBoqT5bSwD99rx8ALXDh8d_1-sCvbc_p3MoAU,929
@@ -70,15 +70,15 @@ copyparty/web/msg.html,sha256=JQFDP-jOhBM4pln5bOyncC9lJ6YpN2TMIyNn-bLNSqE,898
70
70
  copyparty/web/splash.css.gz,sha256=dVMI8zrGO2glmPDS0QKhVmBgExe3p-QdUUIJ5EUWdrA,927
71
71
  copyparty/web/splash.html,sha256=tqCewuM2HMkkR7MH8ijgtAM1LHqlawqJgTGvG7NzECY,3741
72
72
  copyparty/web/splash.js.gz,sha256=2VuxIx4y0hyW9I5NWG83Bcabk5NJDftQt7a_j9Gb5nY,1235
73
- copyparty/web/svcs.html,sha256=B49Z5EiMrDqREbfJwqUTehRo1aht7h0uLMkHBA1w2wo,9399
73
+ copyparty/web/svcs.html,sha256=crtzPR4VKBKVRKY5m1DsDk4vmgBdVLpbOCgRa3nTrYk,9274
74
74
  copyparty/web/svcs.js.gz,sha256=SSVKYYgZkEKMdDLjekvcXB00v-rCVJXh2GD_YtCvu7c,519
75
- copyparty/web/ui.css.gz,sha256=kU3LGyd2MpBzbp1_7Dy1_11V9Nw7QPuNQlpLB_z0uEk,2377
75
+ copyparty/web/ui.css.gz,sha256=Vx-kzNtCsAq7N3W9n27WE8zd6nNLegT0_v5AWmYyk7g,2418
76
76
  copyparty/web/up2k.js.gz,sha256=fGYvDuq34kVz16occIYU9KUQZF9ZemcQLI57o2_DmK4,21538
77
- copyparty/web/util.js.gz,sha256=zDKTUnRffdMaJx4WJd-GYK0S_4OpbcWOMjSOB_mVNYs,12616
77
+ copyparty/web/util.js.gz,sha256=isC6LW43SGcZn9ueMfmxGmKzSxJtwqjY3_R2AhNPUdM,13078
78
78
  copyparty/web/w.hash.js.gz,sha256=07eXr3ktdGNmFBLpqWCp6LsAx8AqIyy1KDNz2-r3p8U,1059
79
79
  copyparty/web/a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  copyparty/web/a/partyfuse.py,sha256=mJKqR8LjX19P4Knqa02ob5ogwPVtJXSqxkEEGZU0r60,32276
81
- copyparty/web/a/up2k.py,sha256=jskvi0oMgSw82oq5OW1AYxrOq9kkY4VY3N10GOTRTIY,35130
81
+ copyparty/web/a/up2k.py,sha256=ZplodaoKL19ND5kI7LVi-5wYTCo2Qy8zYesv6OrO4gQ,34969
82
82
  copyparty/web/a/webdav-cfg.bat,sha256=Y4NoGZlksAIg4cBMb7KdJrpKC6Nx97onaTl6yMjaimk,1449
83
83
  copyparty/web/dd/2.png,sha256=gJ14XFPzaw95L6z92fSq9eMPikSQyu-03P1lgiGe0_I,258
84
84
  copyparty/web/dd/3.png,sha256=4lho8Koz5tV7jJ4ODo6GMTScZfkqsT05yp48EDFIlyg,252
@@ -86,24 +86,24 @@ copyparty/web/dd/4.png,sha256=fIwEVmtZNZtloZuVEKPKnkx3SELwRJmB3US61y7t2lI,248
86
86
  copyparty/web/dd/5.png,sha256=Lfpu8-yOlhONuoMbygloKqQVPXSm9gjxH2gUYn5QQAE,250
87
87
  copyparty/web/dd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  copyparty/web/deps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
- copyparty/web/deps/easymde.css.gz,sha256=jHGAXW4LIyUMAPOtxNckmkJQ9s8fj4Qx6NQEsULiG8A,3053
90
- copyparty/web/deps/easymde.js.gz,sha256=rmnom8pPzoPGCu6kdPASwkYeotcipTc-W-1gBn4yDOw,76951
91
- copyparty/web/deps/marked.js.gz,sha256=h7GetwsXIFZS4QfirCkUsI7vyyJdxk0UH-LKetjO5Zo,14556
92
- copyparty/web/deps/mini-fa.css.gz,sha256=sXyzSXMZTqTl3dhIIpKMkXFa9qhInOoIo7oL4yBUWCY,584
89
+ copyparty/web/deps/easymde.css.gz,sha256=bidHOWlCCwqvOrsz82ZzkTJzxXTJcKVVt328XZ72wYk,3053
90
+ copyparty/web/deps/easymde.js.gz,sha256=O0gNqyYoNMQ5wWd2bNO5D9VIS4SeI_GKN1aBPTyd6VI,76953
91
+ copyparty/web/deps/marked.js.gz,sha256=1xWr45dJMkwk0H58fZiLYmUYj1yaMP0BQ7S85XQgfQU,14819
92
+ copyparty/web/deps/mini-fa.css.gz,sha256=HKDETLj1IIUG3PhKixczxvPr5FAo-eD5phR03cf5Ijc,584
93
93
  copyparty/web/deps/mini-fa.woff,sha256=L9DNncV2TIyvsrspMbJouvnnt7F068Hbn7YZYvN76AU,2784
94
94
  copyparty/web/deps/prism.css.gz,sha256=dDssFDwbLNlB9QJsOepOdMse8FgrLrHIVpx1gNj4ZvY,1478
95
95
  copyparty/web/deps/prism.js.gz,sha256=DR0OAfTUb6PkzSPgxjnjj7jqlpvuCHdMDJKbsQP7s5E,41428
96
96
  copyparty/web/deps/prismd.css.gz,sha256=hzzspI_ptCygzmsIp9rKsf1M4yU12Ma7TfE-wyoXt3E,1647
97
97
  copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
98
- copyparty/web/deps/sha512.ac.js.gz,sha256=IzAmZIkSyMbnn7GK3k5PW085PNcZxtk_u4UW_E1d6ek,7043
98
+ copyparty/web/deps/sha512.ac.js.gz,sha256=qELXngcl-Zitrpwolm4EWqVBPyEht013iP7uDuUDPk4,7043
99
99
  copyparty/web/deps/sha512.hw.js.gz,sha256=0xJaw75Tghoblu72C2h4YoU1izSR99mBtDMoGqZ3xvs,8119
100
- copyparty-1.6.10.data/data/share/doc/copyparty/LICENSE,sha256=yyzj1id78vWoLs8zbMRJY7xkkLz0lv-9dfyeIauqdfM,1059
101
- copyparty-1.6.10.data/data/share/doc/copyparty/README.md,sha256=y3QDX75CclBacxOCdR9dju63UNk4AjxjXsP9rz_auKg,83126
102
- copyparty-1.6.10.data/scripts/partyfuse.py,sha256=zhVQm5m-pWcUyo4aOvzZveOMeLJSY7gB2UGFYXp10XM,32262
103
- copyparty-1.6.10.data/scripts/up2k.py,sha256=6J3zq9wZPgRTti32p2d7kg5YHfZvlu4ZZiElU3492bU,35116
104
- copyparty-1.6.10.dist-info/LICENSE,sha256=yyzj1id78vWoLs8zbMRJY7xkkLz0lv-9dfyeIauqdfM,1059
105
- copyparty-1.6.10.dist-info/METADATA,sha256=7TfK1Wjh9RlVFpRP1C9sS1UHNtoFw_yMCnDPsWGPbhU,85213
106
- copyparty-1.6.10.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
107
- copyparty-1.6.10.dist-info/entry_points.txt,sha256=v3KsE-NQ_WGZkl78BlR8lZ4oHWhGbtjaEw3-iGXLfLQ,54
108
- copyparty-1.6.10.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
109
- copyparty-1.6.10.dist-info/RECORD,,
100
+ copyparty-1.6.11.data/data/share/doc/copyparty/LICENSE,sha256=yyzj1id78vWoLs8zbMRJY7xkkLz0lv-9dfyeIauqdfM,1059
101
+ copyparty-1.6.11.data/data/share/doc/copyparty/README.md,sha256=4XP68C2c4bQew3J3SvqaZ7WLtzsk217qWX37BTj-Dms,83258
102
+ copyparty-1.6.11.data/scripts/partyfuse.py,sha256=zhVQm5m-pWcUyo4aOvzZveOMeLJSY7gB2UGFYXp10XM,32262
103
+ copyparty-1.6.11.data/scripts/up2k.py,sha256=cgAbhiy6uEIg3dxFhq3qHYOuPxtJlk_94BzNkHfjj7Y,34955
104
+ copyparty-1.6.11.dist-info/LICENSE,sha256=yyzj1id78vWoLs8zbMRJY7xkkLz0lv-9dfyeIauqdfM,1059
105
+ copyparty-1.6.11.dist-info/METADATA,sha256=Ol7LxCKf5jo5ANwFgaetbAXtMnsbh1AHH9dSKmg74Kk,85345
106
+ copyparty-1.6.11.dist-info/WHEEL,sha256=bb2Ot9scclHKMOLDEHY6B2sicWOgugjFKaJsT7vwMQo,110
107
+ copyparty-1.6.11.dist-info/entry_points.txt,sha256=v3KsE-NQ_WGZkl78BlR8lZ4oHWhGbtjaEw3-iGXLfLQ,54
108
+ copyparty-1.6.11.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
109
+ copyparty-1.6.11.dist-info/RECORD,,