copyparty 1.16.10__tar.gz → 1.16.11__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 (123) hide show
  1. {copyparty-1.16.10 → copyparty-1.16.11}/PKG-INFO +1 -1
  2. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/__version__.py +2 -2
  3. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/u2c.py +50 -3
  4. copyparty-1.16.11/copyparty/web/browser.js.gz +0 -0
  5. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/PKG-INFO +1 -1
  6. copyparty-1.16.10/copyparty/web/browser.js.gz +0 -0
  7. {copyparty-1.16.10 → copyparty-1.16.11}/LICENSE +0 -0
  8. {copyparty-1.16.10 → copyparty-1.16.11}/README.md +0 -0
  9. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/__init__.py +0 -0
  10. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/__main__.py +0 -0
  11. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/authsrv.py +0 -0
  12. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/bos/__init__.py +0 -0
  13. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/bos/bos.py +0 -0
  14. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/bos/path.py +0 -0
  15. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_mp.py +0 -0
  16. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_mpw.py +0 -0
  17. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_thr.py +0 -0
  18. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_util.py +0 -0
  19. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/cert.py +0 -0
  20. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/cfg.py +0 -0
  21. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/dxml.py +0 -0
  22. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/fsutil.py +0 -0
  23. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/ftpd.py +0 -0
  24. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/httpcli.py +0 -0
  25. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/httpconn.py +0 -0
  26. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/httpsrv.py +0 -0
  27. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/ico.py +0 -0
  28. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/mdns.py +0 -0
  29. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/metrics.py +0 -0
  30. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/mtag.py +0 -0
  31. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/multicast.py +0 -0
  32. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/pwhash.py +0 -0
  33. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/res/COPYING.txt +0 -0
  34. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/res/__init__.py +0 -0
  35. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/res/insecure.pem +0 -0
  36. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/smbd.py +0 -0
  37. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/ssdp.py +0 -0
  38. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/star.py +0 -0
  39. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/__init__.py +0 -0
  40. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/__init__.py +0 -0
  41. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/bimap.py +0 -0
  42. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/bit.py +0 -0
  43. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/buffer.py +0 -0
  44. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/dns.py +0 -0
  45. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/label.py +0 -0
  46. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/lex.py +0 -0
  47. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/ranges.py +0 -0
  48. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/__init__.py +0 -0
  49. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/_posix.py +0 -0
  50. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/_shared.py +0 -0
  51. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/_win32.py +0 -0
  52. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/qrcodegen.py +0 -0
  53. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/surrogateescape.py +0 -0
  54. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/sutil.py +0 -0
  55. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/svchub.py +0 -0
  56. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/szip.py +0 -0
  57. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/tcpsrv.py +0 -0
  58. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/tftpd.py +0 -0
  59. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/th_cli.py +0 -0
  60. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/th_srv.py +0 -0
  61. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/u2idx.py +0 -0
  62. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/up2k.py +0 -0
  63. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/util.py +0 -0
  64. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/__init__.py +0 -0
  65. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/partyfuse.py +0 -0
  66. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/webdav-cfg.bat +0 -0
  67. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/baguettebox.js.gz +0 -0
  68. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/browser.css.gz +0 -0
  69. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/browser.html +0 -0
  70. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/browser2.html +0 -0
  71. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/cf.html +0 -0
  72. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dbg-audio.js.gz +0 -0
  73. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/2.png +0 -0
  74. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/3.png +0 -0
  75. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/4.png +0 -0
  76. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/5.png +0 -0
  77. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/__init__.py +0 -0
  78. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/__init__.py +0 -0
  79. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/busy.mp3.gz +0 -0
  80. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/easymde.css.gz +0 -0
  81. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/easymde.js.gz +0 -0
  82. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/fuse.py +0 -0
  83. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/marked.js.gz +0 -0
  84. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/mini-fa.css.gz +0 -0
  85. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/mini-fa.woff +0 -0
  86. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/prism.css.gz +0 -0
  87. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/prism.js.gz +0 -0
  88. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/prismd.css.gz +0 -0
  89. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/scp.woff2 +0 -0
  90. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/sha512.ac.js.gz +0 -0
  91. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/sha512.hw.js.gz +0 -0
  92. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md.css.gz +0 -0
  93. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md.html +0 -0
  94. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md.js.gz +0 -0
  95. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md2.css.gz +0 -0
  96. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md2.js.gz +0 -0
  97. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/mde.css.gz +0 -0
  98. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/mde.html +0 -0
  99. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/mde.js.gz +0 -0
  100. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/msg.css.gz +0 -0
  101. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/msg.html +0 -0
  102. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/rups.css.gz +0 -0
  103. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/rups.html +0 -0
  104. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/rups.js.gz +0 -0
  105. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/shares.css.gz +0 -0
  106. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/shares.html +0 -0
  107. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/shares.js.gz +0 -0
  108. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/splash.css.gz +0 -0
  109. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/splash.html +0 -0
  110. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/splash.js.gz +0 -0
  111. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/svcs.html +0 -0
  112. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/svcs.js.gz +0 -0
  113. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/ui.css.gz +0 -0
  114. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/up2k.js.gz +0 -0
  115. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/util.js.gz +0 -0
  116. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/w.hash.js.gz +0 -0
  117. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/SOURCES.txt +0 -0
  118. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/dependency_links.txt +0 -0
  119. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/entry_points.txt +0 -0
  120. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/requires.txt +0 -0
  121. {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/top_level.txt +0 -0
  122. {copyparty-1.16.10 → copyparty-1.16.11}/pyproject.toml +0 -0
  123. {copyparty-1.16.10 → copyparty-1.16.11}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: copyparty
3
- Version: 1.16.10
3
+ Version: 1.16.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
  Author-email: ed <copyparty@ocv.me>
6
6
  License: MIT
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
 
3
- VERSION = (1, 16, 10)
3
+ VERSION = (1, 16, 11)
4
4
  CODENAME = "COPYparty"
5
- BUILD_DT = (2025, 1, 25)
5
+ BUILD_DT = (2025, 1, 27)
6
6
 
7
7
  S_VERSION = ".".join(map(str, VERSION))
8
8
  S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python3
2
2
  from __future__ import print_function, unicode_literals
3
3
 
4
- S_VERSION = "2.8"
5
- S_BUILD_DT = "2025-01-21"
4
+ S_VERSION = "2.9"
5
+ S_BUILD_DT = "2025-01-27"
6
6
 
7
7
  """
8
8
  u2c.py: upload to copyparty
@@ -234,6 +234,10 @@ CLEN = "Content-Length"
234
234
 
235
235
  web = None # type: HCli
236
236
 
237
+ links = [] # type: list[str]
238
+ linkmtx = threading.Lock()
239
+ linkfile = None
240
+
237
241
 
238
242
  class File(object):
239
243
  """an up2k upload task; represents a single file"""
@@ -759,6 +763,29 @@ def get_hashlist(file, pcb, mth):
759
763
  file.kchunks[k] = [v1, v2]
760
764
 
761
765
 
766
+ def printlink(ar, purl, name, fk):
767
+ if not name:
768
+ url = purl # srch
769
+ else:
770
+ name = quotep(name.encode("utf-8", WTF8)).decode("utf-8")
771
+ if fk:
772
+ url = "%s%s?k=%s" % (purl, name, fk)
773
+ else:
774
+ url = "%s%s" % (purl, name)
775
+
776
+ url = "%s/%s" % (ar.burl, url.lstrip("/"))
777
+
778
+ with linkmtx:
779
+ if ar.u:
780
+ links.append(url)
781
+ if ar.ud:
782
+ print(url)
783
+ if linkfile:
784
+ zs = "%s\n" % (url,)
785
+ zb = zs.encode("utf-8", "replace")
786
+ linkfile.write(zb)
787
+
788
+
762
789
  def handshake(ar, file, search):
763
790
  # type: (argparse.Namespace, File, bool) -> tuple[list[str], bool]
764
791
  """
@@ -830,12 +857,17 @@ def handshake(ar, file, search):
830
857
  raise Exception(txt)
831
858
 
832
859
  if search:
860
+ if ar.uon and r["hits"]:
861
+ printlink(ar, r["hits"][0]["rp"], "", "")
833
862
  return r["hits"], False
834
863
 
835
864
  file.url = quotep(r["purl"].encode("utf-8", WTF8)).decode("utf-8")
836
865
  file.name = r["name"]
837
866
  file.wark = r["wark"]
838
867
 
868
+ if ar.uon and not r["hash"]:
869
+ printlink(ar, file.url, r["name"], r.get("fk"))
870
+
839
871
  return r["hash"], r["sprs"]
840
872
 
841
873
 
@@ -1470,7 +1502,7 @@ class APF(argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFor
1470
1502
 
1471
1503
 
1472
1504
  def main():
1473
- global web
1505
+ global web, linkfile
1474
1506
 
1475
1507
  time.strptime("19970815", "%Y%m%d") # python#7980
1476
1508
  "".encode("idna") # python#29288
@@ -1507,6 +1539,11 @@ source file/folder selection uses rsync syntax, meaning that:
1507
1539
  ap.add_argument("--spd", action="store_true", help="print speeds for each file")
1508
1540
  ap.add_argument("--version", action="store_true", help="show version and exit")
1509
1541
 
1542
+ ap = app.add_argument_group("print links")
1543
+ ap.add_argument("-u", action="store_true", help="print list of download-links after all uploads finished")
1544
+ ap.add_argument("-ud", action="store_true", help="print download-link after each upload finishes")
1545
+ ap.add_argument("-uf", type=unicode, metavar="PATH", help="print list of download-links to file")
1546
+
1510
1547
  ap = app.add_argument_group("compatibility")
1511
1548
  ap.add_argument("--cls", action="store_true", help="clear screen before start")
1512
1549
  ap.add_argument("--rh", type=int, metavar="TRIES", default=0, help="resolve server hostname before upload (good for buggy networks, but TLS certs will break)")
@@ -1592,6 +1629,10 @@ source file/folder selection uses rsync syntax, meaning that:
1592
1629
  ar.x = "|".join(ar.x or [])
1593
1630
 
1594
1631
  setattr(ar, "wlist", ar.url == "-")
1632
+ setattr(ar, "uon", ar.u or ar.ud or ar.uf)
1633
+
1634
+ if ar.uf:
1635
+ linkfile = open(ar.uf, "wb")
1595
1636
 
1596
1637
  for k in "dl dr drd wlist".split():
1597
1638
  errs = []
@@ -1654,6 +1695,12 @@ source file/folder selection uses rsync syntax, meaning that:
1654
1695
  ar.z = True
1655
1696
  ctl = Ctl(ar, ctl.stats)
1656
1697
 
1698
+ if links:
1699
+ print()
1700
+ print("\n".join(links))
1701
+ if linkfile:
1702
+ linkfile.close()
1703
+
1657
1704
  if ctl.errs:
1658
1705
  print("WARNING: %d errors" % (ctl.errs))
1659
1706
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: copyparty
3
- Version: 1.16.10
3
+ Version: 1.16.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
  Author-email: ed <copyparty@ocv.me>
6
6
  License: MIT
File without changes
File without changes
File without changes
File without changes