copyparty 1.13.5__py3-none-any.whl → 1.13.6__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, 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)
copyparty/up2k.py CHANGED
@@ -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
copyparty/web/a/u2c.py CHANGED
@@ -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:
Binary file
Binary file
copyparty/web/svcs.html CHANGED
@@ -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 %}
copyparty/web/ui.css.gz CHANGED
Binary file
copyparty/web/up2k.js.gz CHANGED
Binary file
copyparty/web/util.js.gz CHANGED
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
 
@@ -1,6 +1,6 @@
1
1
  copyparty/__init__.py,sha256=fUINM1abqDGzCCH_JcXdOnLdKOV-SrTI2Xo2QgQW2P4,1703
2
2
  copyparty/__main__.py,sha256=3fS9elMSksgji7chNwRitbHfgtLWRmV15JD_BvaKmTk,103492
3
- copyparty/__version__.py,sha256=xo8WPsXGQwnZTSAMnEADQw0Vs4ro_V_JIfo-ilhViT0,255
3
+ copyparty/__version__.py,sha256=4MXEq4Neanau2UCgcagryjApwUEbLu_Yj4mLLDmobr0,255
4
4
  copyparty/authsrv.py,sha256=zCo1-CmE2UhsnSRFqALTu1GBO6FVlo1l7Ex7PCv52Xg,87191
5
5
  copyparty/broker_mp.py,sha256=YFe1S6Zziht8Qc__dCLj_ff8z0DDny9lqk_Mi5ajsJk,3868
6
6
  copyparty/broker_mpw.py,sha256=4ZI7bJYOwUibeAJVv9_FPGNmHrr9eOtkj_Kz0JEppTU,3197
@@ -31,7 +31,7 @@ copyparty/tftpd.py,sha256=GkO1jN08ufPDcO2dri1VfvcDKcMW7x1RtL2Rj0SrN3o,12983
31
31
  copyparty/th_cli.py,sha256=o6FMkerYvAXS455z3DUossVztu_nzFlYSQhs6qN6Jt8,4636
32
32
  copyparty/th_srv.py,sha256=M5bYynDed1FR-UyuyOnsCCQP2IUxV_O3kONtH0n5Z8E,28729
33
33
  copyparty/u2idx.py,sha256=uEUcEbye1jzGlQfEJkLtD060XA6Rv_6lXLgeg6oAU5M,13033
34
- copyparty/up2k.py,sha256=MsbhKDYCIVDRp_f8abJOiRgeOxjcopOP2DC4eQ4CJtM,146118
34
+ copyparty/up2k.py,sha256=o5EVfOGer67KmrbvyM2wTNVwx04CIdifS7gx767jW9w,146115
35
35
  copyparty/util.py,sha256=eLumq1eaFZKxMV3xwWsCCIGMp2IS2k5ijaO83oNr0zc,84958
36
36
  copyparty/bos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  copyparty/bos/bos.py,sha256=Wb7eWsXJgR5AFlBR9ZOyKrLTwy-Kct9RrGiOu4Jo37Y,1622
@@ -54,10 +54,10 @@ copyparty/stolen/ifaddr/__init__.py,sha256=_BUN7eM5oD2Jgib6B22tEFSb20fD9urNPPaAl
54
54
  copyparty/stolen/ifaddr/_posix.py,sha256=-67NdfGrCktfQPakT2fLbjl2U00QMvyBGkSvrUuTOrU,2626
55
55
  copyparty/stolen/ifaddr/_shared.py,sha256=cJACl8cOxQ-HSYphZTzKMAjAx_TAFyJwUPjfD102Xqw,6111
56
56
  copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
57
- copyparty/web/baguettebox.js.gz,sha256=L8eDsZkK6SAJr8Tlw7D67ZCsvXhO3DC-W23lHqhC0gc,7965
57
+ copyparty/web/baguettebox.js.gz,sha256=4dS8-r4si84ca71l98672ahnRI86Aq95MU-bc5knykk,7962
58
58
  copyparty/web/browser.css.gz,sha256=8AZ53KZ-fWInji7m-eGNrwdZbWEeLmyjwg1V23ON6Mc,11539
59
59
  copyparty/web/browser.html,sha256=-tLasq2GKe9mUceqXG4PczQ7odBMrX0qlWuyaA9SjPI,4882
60
- copyparty/web/browser.js.gz,sha256=rwW4MyDTLvwmrP03EKaZH4m4JLMuhi1px5B65u5RNrk,69342
60
+ copyparty/web/browser.js.gz,sha256=-FlIylCcVX7aQvOInLDdSNZAqsVzs6RKczzvNBSFQ50,69593
61
61
  copyparty/web/browser2.html,sha256=ciQlgr9GWuIapdsRBFNRvRFvN5T_5n920LqDMbsj5-g,1605
62
62
  copyparty/web/cf.html,sha256=lJThtNFNAQT1ClCHHlivAkDGE0LutedwopXD62Z8Nys,589
63
63
  copyparty/web/dbg-audio.js.gz,sha256=Ma-KZtK8LnmiwNvNKFKXMPYl_Nn_3U7GsJ6-DRWC2HE,688
@@ -74,15 +74,15 @@ copyparty/web/msg.html,sha256=HcBeXXpcF2JKwcj8KD3dGCvONMnTZ6lXYmm4SYgBMlA,905
74
74
  copyparty/web/splash.css.gz,sha256=zgDs-SY3VrInsXeARRPcGHziVOUs-1hUtSObzybwD1g,1006
75
75
  copyparty/web/splash.html,sha256=z5OrfZqA5RBxeY86BJiQ5NZNHIIDHDvPlTuht-Q0v64,3917
76
76
  copyparty/web/splash.js.gz,sha256=P4BLL_SBqfqWniq_gzUD-opVAkblAPgKDwmfxyfDB7o,1469
77
- copyparty/web/svcs.html,sha256=U4CY8orN939JIqXqm6KT1aeWROyhyYHRjVQrFuGJsiQ,11752
77
+ copyparty/web/svcs.html,sha256=9NUxNAohl-RY-uDP73nFqTG69voN_QfqNNGYwIolDEs,11728
78
78
  copyparty/web/svcs.js.gz,sha256=k81ZvZ3I-f4fMHKrNGGOgOlvXnCBz0mVjD-8mieoWCA,520
79
- copyparty/web/ui.css.gz,sha256=u9GiLVb1q5qY3CytUNVNXcieDBtkkHsJ0kgfELcE0Jc,2619
80
- copyparty/web/up2k.js.gz,sha256=y0XXTRlNjGFGTZ_VjDQ6Y3Vh3jC_vKILeuuTwuRUWu0,22631
81
- copyparty/web/util.js.gz,sha256=WxPv8l_rYkSopcn-gfJb_OrgcpTD4JzY7IMSGBI4GAI,14435
79
+ copyparty/web/ui.css.gz,sha256=GnR_PxnZGcNs2IJnb5hFffnhlW3cUHkPad3tNIm-7DQ,2637
80
+ copyparty/web/up2k.js.gz,sha256=-tb11N3zmwTIhNSJCuaCbiFdt_A7Yhg_NSXfz87rzFs,22711
81
+ copyparty/web/util.js.gz,sha256=uZDsKkwTcEiFv-GTfy-zmArqirjhxGBLKjAhtLvj72s,14524
82
82
  copyparty/web/w.hash.js.gz,sha256=7wP9EZQNXQxwZnCCFUVsi_-6TM9PLZJeZ9krutXRRj8,1060
83
83
  copyparty/web/a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
84
  copyparty/web/a/partyfuse.py,sha256=MuRkaSuYsdfWfBFMOkbPwDXqSvNTw3sd7QhhlKCDZ8I,32311
85
- copyparty/web/a/u2c.py,sha256=IzeCoSsdJ6KZYiJ7fpnVs8yguHj6lT7LYaVZOCKWi64,41906
85
+ copyparty/web/a/u2c.py,sha256=W0B4QfyM7QqPNEPdAGQhtFSNNLt2r6xr9oZcG05F0Io,42213
86
86
  copyparty/web/a/webdav-cfg.bat,sha256=Y4NoGZlksAIg4cBMb7KdJrpKC6Nx97onaTl6yMjaimk,1449
87
87
  copyparty/web/dd/2.png,sha256=gJ14XFPzaw95L6z92fSq9eMPikSQyu-03P1lgiGe0_I,258
88
88
  copyparty/web/dd/3.png,sha256=4lho8Koz5tV7jJ4ODo6GMTScZfkqsT05yp48EDFIlyg,252
@@ -102,9 +102,9 @@ copyparty/web/deps/prismd.css.gz,sha256=ObUlksQVr-OuYlTz-I4B23TeBg2QDVVGRnWBz8cV
102
102
  copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
103
103
  copyparty/web/deps/sha512.ac.js.gz,sha256=lFZaCLumgWxrvEuDr4bqdKHsqjX82AbVAb7_F45Yk88,7033
104
104
  copyparty/web/deps/sha512.hw.js.gz,sha256=vqoXeracj-99Z5MfY3jK2N4WiSzYQdfjy0RnUlQDhSU,8110
105
- copyparty-1.13.5.dist-info/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
106
- copyparty-1.13.5.dist-info/METADATA,sha256=J-QQkQ9xkPwDb-JnAC_g7qDn2pHeh8if43O4xCRpHF4,124341
107
- copyparty-1.13.5.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
108
- copyparty-1.13.5.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
109
- copyparty-1.13.5.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
110
- copyparty-1.13.5.dist-info/RECORD,,
105
+ copyparty-1.13.6.dist-info/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
106
+ copyparty-1.13.6.dist-info/METADATA,sha256=RaamHNHak-QoDV2Jd7kBxvyTZk-qol0lUAWLgm0XDig,124426
107
+ copyparty-1.13.6.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
108
+ copyparty-1.13.6.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
109
+ copyparty-1.13.6.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
110
+ copyparty-1.13.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.1.0)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5