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.
- {copyparty-1.16.10 → copyparty-1.16.11}/PKG-INFO +1 -1
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/__version__.py +2 -2
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/u2c.py +50 -3
- copyparty-1.16.11/copyparty/web/browser.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/PKG-INFO +1 -1
- copyparty-1.16.10/copyparty/web/browser.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/LICENSE +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/README.md +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/__main__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/authsrv.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/bos/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/bos/bos.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/bos/path.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_mp.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_mpw.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_thr.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/broker_util.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/cert.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/cfg.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/dxml.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/fsutil.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/ftpd.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/httpcli.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/httpconn.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/httpsrv.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/ico.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/mdns.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/metrics.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/mtag.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/multicast.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/pwhash.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/res/COPYING.txt +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/res/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/res/insecure.pem +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/smbd.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/ssdp.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/star.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/bimap.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/bit.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/buffer.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/dns.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/label.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/lex.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/dnslib/ranges.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/_posix.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/_shared.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/ifaddr/_win32.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/qrcodegen.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/stolen/surrogateescape.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/sutil.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/svchub.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/szip.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/tcpsrv.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/tftpd.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/th_cli.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/th_srv.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/u2idx.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/up2k.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/util.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/partyfuse.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/a/webdav-cfg.bat +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/baguettebox.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/browser.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/browser.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/browser2.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/cf.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dbg-audio.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/2.png +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/3.png +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/4.png +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/5.png +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/dd/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/__init__.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/busy.mp3.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/easymde.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/easymde.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/fuse.py +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/marked.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/mini-fa.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/mini-fa.woff +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/prism.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/prism.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/prismd.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/scp.woff2 +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/sha512.ac.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/deps/sha512.hw.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md2.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/md2.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/mde.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/mde.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/mde.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/msg.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/msg.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/rups.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/rups.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/rups.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/shares.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/shares.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/shares.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/splash.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/splash.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/splash.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/svcs.html +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/svcs.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/ui.css.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/up2k.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/util.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty/web/w.hash.js.gz +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/SOURCES.txt +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/dependency_links.txt +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/entry_points.txt +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/requires.txt +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/copyparty.egg-info/top_level.txt +0 -0
- {copyparty-1.16.10 → copyparty-1.16.11}/pyproject.toml +0 -0
- {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.
|
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
|
#!/usr/bin/env python3
|
2
2
|
from __future__ import print_function, unicode_literals
|
3
3
|
|
4
|
-
S_VERSION = "2.
|
5
|
-
S_BUILD_DT = "2025-01-
|
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
|
|
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: copyparty
|
3
|
-
Version: 1.16.
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|