copyparty 1.13.5__tar.gz → 1.13.6__tar.gz

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.
Files changed (120) hide show
  1. {copyparty-1.13.5 → copyparty-1.13.6}/PKG-INFO +3 -1
  2. {copyparty-1.13.5 → copyparty-1.13.6}/README.md +2 -0
  3. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/__version__.py +2 -2
  4. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/up2k.py +1 -1
  5. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/a/u2c.py +14 -8
  6. copyparty-1.13.6/copyparty/web/baguettebox.js.gz +0 -0
  7. copyparty-1.13.6/copyparty/web/browser.js.gz +0 -0
  8. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/svcs.html +2 -2
  9. copyparty-1.13.6/copyparty/web/ui.css.gz +0 -0
  10. copyparty-1.13.6/copyparty/web/up2k.js.gz +0 -0
  11. copyparty-1.13.6/copyparty/web/util.js.gz +0 -0
  12. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty.egg-info/PKG-INFO +3 -1
  13. copyparty-1.13.5/copyparty/web/baguettebox.js.gz +0 -0
  14. copyparty-1.13.5/copyparty/web/browser.js.gz +0 -0
  15. copyparty-1.13.5/copyparty/web/ui.css.gz +0 -0
  16. copyparty-1.13.5/copyparty/web/up2k.js.gz +0 -0
  17. copyparty-1.13.5/copyparty/web/util.js.gz +0 -0
  18. {copyparty-1.13.5 → copyparty-1.13.6}/LICENSE +0 -0
  19. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/__init__.py +0 -0
  20. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/__main__.py +0 -0
  21. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/authsrv.py +0 -0
  22. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/bos/__init__.py +0 -0
  23. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/bos/bos.py +0 -0
  24. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/bos/path.py +0 -0
  25. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/broker_mp.py +0 -0
  26. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/broker_mpw.py +0 -0
  27. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/broker_thr.py +0 -0
  28. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/broker_util.py +0 -0
  29. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/cert.py +0 -0
  30. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/cfg.py +0 -0
  31. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/dxml.py +0 -0
  32. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/fsutil.py +0 -0
  33. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/ftpd.py +0 -0
  34. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/httpcli.py +0 -0
  35. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/httpconn.py +0 -0
  36. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/httpsrv.py +0 -0
  37. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/ico.py +0 -0
  38. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/mdns.py +0 -0
  39. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/metrics.py +0 -0
  40. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/mtag.py +0 -0
  41. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/multicast.py +0 -0
  42. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/pwhash.py +0 -0
  43. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/res/COPYING.txt +0 -0
  44. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/res/__init__.py +0 -0
  45. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/res/insecure.pem +0 -0
  46. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/smbd.py +0 -0
  47. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/ssdp.py +0 -0
  48. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/star.py +0 -0
  49. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/__init__.py +0 -0
  50. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/__init__.py +0 -0
  51. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/bimap.py +0 -0
  52. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/bit.py +0 -0
  53. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/buffer.py +0 -0
  54. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/dns.py +0 -0
  55. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/label.py +0 -0
  56. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/lex.py +0 -0
  57. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/dnslib/ranges.py +0 -0
  58. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/ifaddr/__init__.py +0 -0
  59. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/ifaddr/_posix.py +0 -0
  60. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/ifaddr/_shared.py +0 -0
  61. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/ifaddr/_win32.py +0 -0
  62. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/qrcodegen.py +0 -0
  63. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/stolen/surrogateescape.py +0 -0
  64. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/sutil.py +0 -0
  65. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/svchub.py +0 -0
  66. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/szip.py +0 -0
  67. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/tcpsrv.py +0 -0
  68. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/tftpd.py +0 -0
  69. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/th_cli.py +0 -0
  70. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/th_srv.py +0 -0
  71. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/u2idx.py +0 -0
  72. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/util.py +0 -0
  73. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/a/__init__.py +0 -0
  74. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/a/partyfuse.py +0 -0
  75. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/a/webdav-cfg.bat +0 -0
  76. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/browser.css.gz +0 -0
  77. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/browser.html +0 -0
  78. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/browser2.html +0 -0
  79. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/cf.html +0 -0
  80. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/dbg-audio.js.gz +0 -0
  81. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/dd/2.png +0 -0
  82. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/dd/3.png +0 -0
  83. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/dd/4.png +0 -0
  84. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/dd/5.png +0 -0
  85. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/dd/__init__.py +0 -0
  86. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/__init__.py +0 -0
  87. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/busy.mp3.gz +0 -0
  88. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/easymde.css.gz +0 -0
  89. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/easymde.js.gz +0 -0
  90. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/marked.js.gz +0 -0
  91. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/mini-fa.css.gz +0 -0
  92. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/mini-fa.woff +0 -0
  93. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/prism.css.gz +0 -0
  94. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/prism.js.gz +0 -0
  95. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/prismd.css.gz +0 -0
  96. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/scp.woff2 +0 -0
  97. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/sha512.ac.js.gz +0 -0
  98. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/deps/sha512.hw.js.gz +0 -0
  99. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/md.css.gz +0 -0
  100. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/md.html +0 -0
  101. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/md.js.gz +0 -0
  102. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/md2.css.gz +0 -0
  103. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/md2.js.gz +0 -0
  104. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/mde.css.gz +0 -0
  105. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/mde.html +0 -0
  106. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/mde.js.gz +0 -0
  107. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/msg.css.gz +0 -0
  108. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/msg.html +0 -0
  109. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/splash.css.gz +0 -0
  110. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/splash.html +0 -0
  111. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/splash.js.gz +0 -0
  112. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/svcs.js.gz +0 -0
  113. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty/web/w.hash.js.gz +0 -0
  114. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty.egg-info/SOURCES.txt +0 -0
  115. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty.egg-info/dependency_links.txt +0 -0
  116. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty.egg-info/entry_points.txt +0 -0
  117. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty.egg-info/requires.txt +0 -0
  118. {copyparty-1.13.5 → copyparty-1.13.6}/copyparty.egg-info/top_level.txt +0 -0
  119. {copyparty-1.13.5 → copyparty-1.13.6}/pyproject.toml +0 -0
  120. {copyparty-1.13.5 → copyparty-1.13.6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: copyparty
3
- Version: 1.13.5
3
+ Version: 1.13.6
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
@@ -1368,6 +1368,8 @@ you can set hooks before and/or after an event happens, and currently you can ho
1368
1368
 
1369
1369
  there's a bunch of flags and stuff, see `--help-hooks`
1370
1370
 
1371
+ if you want to write your own hooks, see [devnotes](./docs/devnotes.md#event-hooks)
1372
+
1371
1373
 
1372
1374
  ### upload events
1373
1375
 
@@ -1314,6 +1314,8 @@ you can set hooks before and/or after an event happens, and currently you can ho
1314
1314
 
1315
1315
  there's a bunch of flags and stuff, see `--help-hooks`
1316
1316
 
1317
+ if you want to write your own hooks, see [devnotes](./docs/devnotes.md#event-hooks)
1318
+
1317
1319
 
1318
1320
  ### upload events
1319
1321
 
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
 
3
- VERSION = (1, 13, 5)
3
+ VERSION = (1, 13, 6)
4
4
  CODENAME = "race the beam"
5
- BUILD_DT = (2024, 7, 22)
5
+ BUILD_DT = (2024, 7, 29)
6
6
 
7
7
  S_VERSION = ".".join(map(str, VERSION))
8
8
  S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
@@ -542,7 +542,7 @@ class Up2k(object):
542
542
  nrm += 1
543
543
 
544
544
  if nrm:
545
- self.log("{} files graduated in {}".format(nrm, vp))
545
+ self.log("%d files graduated in /%s" % (nrm, vp))
546
546
 
547
547
  if timeout < 10:
548
548
  continue
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python3
2
2
  from __future__ import print_function, unicode_literals
3
3
 
4
- S_VERSION = "1.20"
5
- S_BUILD_DT = "2024-07-22"
4
+ S_VERSION = "1.21"
5
+ S_BUILD_DT = "2024-07-26"
6
6
 
7
7
  """
8
8
  u2c.py: upload to copyparty
@@ -755,6 +755,7 @@ class Ctl(object):
755
755
  else:
756
756
  self.at_hash = 0.0
757
757
  self.at_up = 0.0
758
+ self.at_upr = 0.0
758
759
  self.hash_f = 0
759
760
  self.hash_c = 0
760
761
  self.hash_b = 0
@@ -903,8 +904,9 @@ class Ctl(object):
903
904
  t = "{0} eta @ {1}/s, {2}, {3}# left".format(self.eta, spd, sleft, nleft)
904
905
  eprint(txt + "\033]0;{0}\033\\\r{0}{1}".format(t, tail))
905
906
 
906
- spd = humansize(self.hash_b / self.at_hash)
907
- eprint("\nhasher: %.2f sec, %s/s\n" % (self.at_hash, spd))
907
+ if self.hash_b and self.at_hash:
908
+ spd = humansize(self.hash_b / self.at_hash)
909
+ eprint("\nhasher: %.2f sec, %s/s\n" % (self.at_hash, spd))
908
910
  if self.up_b and self.at_up:
909
911
  spd = humansize(self.up_b / self.at_up)
910
912
  eprint("upload: %.2f sec, %s/s\n" % (self.at_up, spd))
@@ -1099,9 +1101,6 @@ class Ctl(object):
1099
1101
 
1100
1102
  if not hs:
1101
1103
  self.at_hash += file.t_hash
1102
- if file.up_b:
1103
- t_up = file.t1_up - file.t0_up
1104
- self.at_up += t_up
1105
1104
 
1106
1105
  if self.ar.spd:
1107
1106
  if VT100:
@@ -1112,6 +1111,7 @@ class Ctl(object):
1112
1111
 
1113
1112
  spd_h = humansize(file.size / file.t_hash, True)
1114
1113
  if file.up_b:
1114
+ t_up = file.t1_up - file.t0_up
1115
1115
  spd_u = humansize(file.size / t_up, True)
1116
1116
 
1117
1117
  t = "uploaded %s %s(h:%.2fs,%s/s,up:%.2fs,%s/s)%s"
@@ -1123,13 +1123,15 @@ class Ctl(object):
1123
1123
  kw = "uploaded" if file.up_b else " found"
1124
1124
  print("{0} {1}".format(kw, upath))
1125
1125
 
1126
+ chunksz = up2k_chunksize(file.size)
1127
+ njoin = (self.ar.sz * 1024 * 1024) // chunksz
1126
1128
  cs = hs[:]
1127
1129
  while cs:
1128
1130
  fsl = FileSlice(file, cs[:1])
1129
1131
  try:
1130
1132
  if file.nojoin:
1131
1133
  raise Exception()
1132
- for n in range(2, min(len(cs), self.ar.sz) + 1):
1134
+ for n in range(2, min(len(cs), njoin + 1)):
1133
1135
  fsl = FileSlice(file, cs[:n])
1134
1136
  except:
1135
1137
  pass
@@ -1147,6 +1149,8 @@ class Ctl(object):
1147
1149
  cids = fsl.cids
1148
1150
 
1149
1151
  with self.mutex:
1152
+ if not self.uploader_busy:
1153
+ self.at_upr = time.time()
1150
1154
  self.uploader_busy += 1
1151
1155
  if not file.t0_up:
1152
1156
  file.t0_up = time.time()
@@ -1185,6 +1189,8 @@ class Ctl(object):
1185
1189
  file.up_c += 1
1186
1190
  self.up_c += 1
1187
1191
  self.uploader_busy -= 1
1192
+ if not self.uploader_busy:
1193
+ self.at_up += time.time() - self.at_upr
1188
1194
 
1189
1195
  def up_done(self, file):
1190
1196
  if self.ar.dl:
@@ -56,7 +56,7 @@
56
56
  <li>running <code>rclone mount</code> as root? add <code>--allow-other</code></li>
57
57
  <li>old version of rclone? replace all <code>=</code> with <code>&nbsp;</code> (space)</li>
58
58
  </ul>
59
-
59
+
60
60
  <p>if you want to use the native WebDAV client in windows instead (slow and buggy), first run <a href="{{ r }}/.cpr/a/webdav-cfg.bat">webdav-cfg.bat</a> to remove the 47 MiB filesize limit (also fixes latency and password login), then connect:</p>
61
61
  <pre>
62
62
  net use <b>w:</b> http{{ s }}://{{ ep }}/{{ rvp }}{% if accs %} k /user:<b>{{ pw }}</b>{% endif %}
@@ -105,7 +105,7 @@
105
105
  <pre>
106
106
  http{{ s }}://k:<b>{{ pw }}</b>@{{ ep }}/{{ rvp }}
107
107
  </pre>
108
-
108
+
109
109
  {% if s %}
110
110
  <p><em>replace <code>https</code> with <code>http</code> if it doesn't work</em></p>
111
111
  {% endif %}
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: copyparty
3
- Version: 1.13.5
3
+ Version: 1.13.6
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
@@ -1368,6 +1368,8 @@ you can set hooks before and/or after an event happens, and currently you can ho
1368
1368
 
1369
1369
  there's a bunch of flags and stuff, see `--help-hooks`
1370
1370
 
1371
+ if you want to write your own hooks, see [devnotes](./docs/devnotes.md#event-hooks)
1372
+
1371
1373
 
1372
1374
  ### upload events
1373
1375
 
Binary file
Binary file
Binary file
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes