copyparty 1.16.5__py3-none-any.whl → 1.16.7__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/__init__.py +3 -0
- copyparty/__main__.py +4 -1
- copyparty/__version__.py +2 -2
- copyparty/authsrv.py +33 -20
- copyparty/fsutil.py +4 -4
- copyparty/httpcli.py +273 -83
- copyparty/httpsrv.py +6 -9
- copyparty/mtag.py +4 -4
- copyparty/smbd.py +1 -1
- copyparty/sutil.py +1 -1
- copyparty/tcpsrv.py +3 -3
- copyparty/tftpd.py +1 -1
- copyparty/th_cli.py +3 -3
- copyparty/th_srv.py +6 -6
- copyparty/u2idx.py +3 -3
- copyparty/up2k.py +92 -87
- copyparty/util.py +13 -13
- copyparty/web/a/u2c.py +1 -1
- copyparty/web/browser.html +1 -1
- copyparty/web/browser.js.gz +0 -0
- copyparty/web/md.html +2 -2
- copyparty/web/mde.html +2 -2
- copyparty/web/rups.css.gz +0 -0
- copyparty/web/rups.html +50 -0
- copyparty/web/rups.js.gz +0 -0
- copyparty/web/shares.css.gz +0 -0
- copyparty/web/shares.html +6 -3
- copyparty/web/splash.html +2 -1
- copyparty/web/splash.js.gz +0 -0
- copyparty/web/svcs.html +1 -1
- copyparty/web/up2k.js.gz +0 -0
- copyparty/web/util.js.gz +0 -0
- {copyparty-1.16.5.dist-info → copyparty-1.16.7.dist-info}/METADATA +14 -2
- {copyparty-1.16.5.dist-info → copyparty-1.16.7.dist-info}/RECORD +38 -35
- {copyparty-1.16.5.dist-info → copyparty-1.16.7.dist-info}/LICENSE +0 -0
- {copyparty-1.16.5.dist-info → copyparty-1.16.7.dist-info}/WHEEL +0 -0
- {copyparty-1.16.5.dist-info → copyparty-1.16.7.dist-info}/entry_points.txt +0 -0
- {copyparty-1.16.5.dist-info → copyparty-1.16.7.dist-info}/top_level.txt +0 -0
    
        copyparty/util.py
    CHANGED
    
    | @@ -943,7 +943,7 @@ class ProgressPrinter(threading.Thread): | |
| 943 943 | 
             
                        now = time.time()
         | 
| 944 944 | 
             
                        if msg and now - tp > 10:
         | 
| 945 945 | 
             
                            tp = now
         | 
| 946 | 
            -
                            self.log("progress: % | 
| 946 | 
            +
                            self.log("progress: %r" % (msg,), 6)
         | 
| 947 947 |  | 
| 948 948 | 
             
                        if no_stdout:
         | 
| 949 949 | 
             
                            continue
         | 
| @@ -1543,7 +1543,7 @@ class MultipartParser(object): | |
| 1543 1543 | 
             
                    (only the fallback non-js uploader relies on these filenames)
         | 
| 1544 1544 | 
             
                    """
         | 
| 1545 1545 | 
             
                    for ln in read_header(self.sr, 2, 2592000):
         | 
| 1546 | 
            -
                        self.log(ln)
         | 
| 1546 | 
            +
                        self.log(repr(ln))
         | 
| 1547 1547 |  | 
| 1548 1548 | 
             
                        m = self.re_ctype.match(ln)
         | 
| 1549 1549 | 
             
                        if m:
         | 
| @@ -1831,11 +1831,11 @@ def gen_filekey_dbg( | |
| 1831 1831 | 
             
                        if p2 != fspath:
         | 
| 1832 1832 | 
             
                            raise Exception()
         | 
| 1833 1833 | 
             
                    except:
         | 
| 1834 | 
            -
                        t = "maybe wrong abspath for filekey;\norig:  | 
| 1835 | 
            -
                        log(t | 
| 1834 | 
            +
                        t = "maybe wrong abspath for filekey;\norig: %r\nreal: %r"
         | 
| 1835 | 
            +
                        log(t % (fspath, p2), 1)
         | 
| 1836 1836 |  | 
| 1837 | 
            -
                    t = "fk( | 
| 1838 | 
            -
                    log(t | 
| 1837 | 
            +
                    t = "fk(%s) salt(%s) size(%d) inode(%d) fspath(%r) at(%s)"
         | 
| 1838 | 
            +
                    log(t % (ret[:8], salt, fsize, inode, fspath, ctx), 5)
         | 
| 1839 1839 |  | 
| 1840 1840 | 
             
                return ret
         | 
| 1841 1841 |  | 
| @@ -2191,7 +2191,7 @@ def log_reloc( | |
| 2191 2191 | 
             
                rem ,
         | 
| 2192 2192 | 
             
            )  :
         | 
| 2193 2193 | 
             
                nap, nvp, nfn, (nvn, nrem) = pm
         | 
| 2194 | 
            -
                t = "reloc %s:\nold ap  | 
| 2194 | 
            +
                t = "reloc %s:\nold ap %r\nnew ap %r\033[36m/%r\033[0m\nold vp %r\nnew vp %r\033[36m/%r\033[0m\nold fn %r\nnew fn %r\nold vfs %r\nnew vfs %r\nold rem %r\nnew rem %r"
         | 
| 2195 2195 | 
             
                log(t % (re, ap, nap, nfn, vp, nvp, nfn, fn, nfn, vn.vpath, nvn.vpath, rem, nrem))
         | 
| 2196 2196 |  | 
| 2197 2197 |  | 
| @@ -2362,7 +2362,7 @@ def lsof(log , abspath )  : | |
| 2362 2362 | 
             
                try:
         | 
| 2363 2363 | 
             
                    rc, so, se = runcmd([b"lsof", b"-R", fsenc(abspath)], timeout=45)
         | 
| 2364 2364 | 
             
                    zs = (so.strip() + "\n" + se.strip()).strip()
         | 
| 2365 | 
            -
                    log("lsof  | 
| 2365 | 
            +
                    log("lsof %r = %s\n%s" % (abspath, rc, zs), 3)
         | 
| 2366 2366 | 
             
                except:
         | 
| 2367 2367 | 
             
                    log("lsof failed; " + min_ex(), 3)
         | 
| 2368 2368 |  | 
| @@ -2398,17 +2398,17 @@ def _fs_mvrm( | |
| 2398 2398 | 
             
                for attempt in range(90210):
         | 
| 2399 2399 | 
             
                    try:
         | 
| 2400 2400 | 
             
                        if ino and os.stat(bsrc).st_ino != ino:
         | 
| 2401 | 
            -
                            t = "src inode changed; aborting %s % | 
| 2401 | 
            +
                            t = "src inode changed; aborting %s %r"
         | 
| 2402 2402 | 
             
                            log(t % (act, src), 1)
         | 
| 2403 2403 | 
             
                            return False
         | 
| 2404 2404 | 
             
                        if (dst and not atomic) and os.path.exists(bdst):
         | 
| 2405 | 
            -
                            t = "something appeared at dst; aborting rename  | 
| 2405 | 
            +
                            t = "something appeared at dst; aborting rename %r ==> %r"
         | 
| 2406 2406 | 
             
                            log(t % (src, dst), 1)
         | 
| 2407 2407 | 
             
                            return False
         | 
| 2408 2408 | 
             
                        osfun(*args)
         | 
| 2409 2409 | 
             
                        if attempt:
         | 
| 2410 2410 | 
             
                            now = time.time()
         | 
| 2411 | 
            -
                            t = "%sd in %.2f sec, attempt %d: % | 
| 2411 | 
            +
                            t = "%sd in %.2f sec, attempt %d: %r"
         | 
| 2412 2412 | 
             
                            log(t % (act, now - t0, attempt + 1, src))
         | 
| 2413 2413 | 
             
                        return True
         | 
| 2414 2414 | 
             
                    except OSError as ex:
         | 
| @@ -2420,7 +2420,7 @@ def _fs_mvrm( | |
| 2420 2420 | 
             
                        if not attempt:
         | 
| 2421 2421 | 
             
                            if not PY2:
         | 
| 2422 2422 | 
             
                                ino = os.stat(bsrc).st_ino
         | 
| 2423 | 
            -
                            t = "%s failed (err.%d); retrying for %d sec:  | 
| 2423 | 
            +
                            t = "%s failed (err.%d); retrying for %d sec: %r"
         | 
| 2424 2424 | 
             
                            log(t % (act, ex.errno, maxtime + 0.99, src))
         | 
| 2425 2425 |  | 
| 2426 2426 | 
             
                    time.sleep(chill)
         | 
| @@ -3445,7 +3445,7 @@ def runhook( | |
| 3445 3445 | 
             
                            log, src, cmd, ap, vp, host, uname, perms, mt, sz, ip, at, txt
         | 
| 3446 3446 | 
             
                        )
         | 
| 3447 3447 | 
             
                        if log and args.hook_v:
         | 
| 3448 | 
            -
                            log("hook(%s)  | 
| 3448 | 
            +
                            log("hook(%s) %r => \033[32m%s" % (src, cmd, hr), 6)
         | 
| 3449 3449 | 
             
                        if not hr:
         | 
| 3450 3450 | 
             
                            return {}
         | 
| 3451 3451 | 
             
                        for k, v in hr.items():
         | 
    
        copyparty/web/a/u2c.py
    CHANGED
    
    | @@ -1101,7 +1101,7 @@ class Ctl(object): | |
| 1101 1101 | 
             
                        nleft = self.nfiles - self.up_f
         | 
| 1102 1102 | 
             
                        tail = "\033[K\033[u" if VT100 and not self.ar.ns else "\r"
         | 
| 1103 1103 |  | 
| 1104 | 
            -
                        t = "%s eta @ %s/s, %s, %d# left | 
| 1104 | 
            +
                        t = "%s eta @ %s/s, %s, %d# left" % (self.eta, spd, sleft, nleft)
         | 
| 1105 1105 | 
             
                        if not self.hash_b:
         | 
| 1106 1106 | 
             
                            t = " now hashing..."
         | 
| 1107 1107 | 
             
                        eprint(txt + "\033]0;{0}\033\\\r{0}{1}".format(t, tail))
         | 
    
        copyparty/web/browser.html
    CHANGED
    
    
    
        copyparty/web/browser.js.gz
    CHANGED
    
    | Binary file | 
    
        copyparty/web/md.html
    CHANGED
    
    | @@ -128,9 +128,9 @@ write markdown (most html is 🙆 too) | |
| 128 128 |  | 
| 129 129 | 
             
            	<script>
         | 
| 130 130 |  | 
| 131 | 
            -
            var SR = {{ r | 
| 131 | 
            +
            var SR = "{{ r }}",
         | 
| 132 132 | 
             
            	last_modified = {{ lastmod }},
         | 
| 133 | 
            -
            	have_emp = {{ have_emp | 
| 133 | 
            +
            	have_emp = {{ "true" if have_emp else "false" }},
         | 
| 134 134 | 
             
            	dfavico = "{{ favico }}";
         | 
| 135 135 |  | 
| 136 136 | 
             
            var md_opt = {
         | 
    
        copyparty/web/mde.html
    CHANGED
    
    | @@ -26,9 +26,9 @@ | |
| 26 26 | 
             
            	<a href="#" id="repl">π</a>
         | 
| 27 27 | 
             
            	<script>
         | 
| 28 28 |  | 
| 29 | 
            -
            var SR = {{ r | 
| 29 | 
            +
            var SR = "{{ r }}",
         | 
| 30 30 | 
             
            	last_modified = {{ lastmod }},
         | 
| 31 | 
            -
            	have_emp = {{ have_emp | 
| 31 | 
            +
            	have_emp = {{ "true" if have_emp else "false" }},
         | 
| 32 32 | 
             
            	dfavico = "{{ favico }}";
         | 
| 33 33 |  | 
| 34 34 | 
             
            var md_opt = {
         | 
| Binary file | 
    
        copyparty/web/rups.html
    ADDED
    
    | @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            <!DOCTYPE html>
         | 
| 2 | 
            +
            <html lang="en">
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            <head>
         | 
| 5 | 
            +
            	<meta charset="utf-8">
         | 
| 6 | 
            +
            	<title>{{ s_doctitle }}</title>
         | 
| 7 | 
            +
            	<meta http-equiv="X-UA-Compatible" content="IE=edge">
         | 
| 8 | 
            +
            	<meta name="viewport" content="width=device-width, initial-scale=0.8">
         | 
| 9 | 
            +
                <meta name="robots" content="noindex, nofollow">
         | 
| 10 | 
            +
            	<meta name="theme-color" content="#{{ tcolor }}">
         | 
| 11 | 
            +
            	<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/rups.css?_={{ ts }}">
         | 
| 12 | 
            +
            	<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/ui.css?_={{ ts }}">
         | 
| 13 | 
            +
            {{ html_head }}
         | 
| 14 | 
            +
            </head>
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            <body>
         | 
| 17 | 
            +
            	<div id="wrap">
         | 
| 18 | 
            +
                    <a href="#" id="re">refresh</a>
         | 
| 19 | 
            +
                    <a href="{{ r }}/?h">control-panel</a>
         | 
| 20 | 
            +
                      Filter: <input type="text" id="filter" size="20" placeholder="documents/passwords" />
         | 
| 21 | 
            +
                      <span id="hits"></span>
         | 
| 22 | 
            +
                    <table id="tab"><thead><tr>
         | 
| 23 | 
            +
                        <th>size</th>
         | 
| 24 | 
            +
                        <th>who</th>
         | 
| 25 | 
            +
                        <th>when</th>
         | 
| 26 | 
            +
                        <th>age</th>
         | 
| 27 | 
            +
                        <th>dir</th>
         | 
| 28 | 
            +
                        <th>file</th>
         | 
| 29 | 
            +
                    </tr></thead><tbody id="tb"></tbody></table>
         | 
| 30 | 
            +
                </div>
         | 
| 31 | 
            +
            	<a href="#" id="repl">π</a>
         | 
| 32 | 
            +
            	<script>
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            var SR="{{ r }}",
         | 
| 35 | 
            +
            	lang="{{ lang }}",
         | 
| 36 | 
            +
            	dfavico="{{ favico }}";
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            var STG = window.localStorage;
         | 
| 39 | 
            +
            document.documentElement.className = (STG && STG.cpp_thm) || "{{ this.args.theme }}";
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            </script>
         | 
| 42 | 
            +
            <script src="{{ r }}/.cpr/util.js?_={{ ts }}"></script>
         | 
| 43 | 
            +
            <script>var V={{ v }};</script>
         | 
| 44 | 
            +
            <script src="{{ r }}/.cpr/rups.js?_={{ ts }}"></script>
         | 
| 45 | 
            +
            {%- if js %}
         | 
| 46 | 
            +
            <script src="{{ js }}_={{ ts }}"></script>
         | 
| 47 | 
            +
            {%- endif %}
         | 
| 48 | 
            +
            </body>
         | 
| 49 | 
            +
            </html>
         | 
| 50 | 
            +
             | 
    
        copyparty/web/rups.js.gz
    ADDED
    
    | Binary file | 
    
        copyparty/web/shares.css.gz
    CHANGED
    
    | Binary file | 
    
        copyparty/web/shares.html
    CHANGED
    
    | @@ -6,6 +6,7 @@ | |
| 6 6 | 
             
            	<title>{{ s_doctitle }}</title>
         | 
| 7 7 | 
             
            	<meta http-equiv="X-UA-Compatible" content="IE=edge">
         | 
| 8 8 | 
             
            	<meta name="viewport" content="width=device-width, initial-scale=0.8">
         | 
| 9 | 
            +
                <meta name="robots" content="noindex, nofollow">
         | 
| 9 10 | 
             
            	<meta name="theme-color" content="#{{ tcolor }}">
         | 
| 10 11 | 
             
            	<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/shares.css?_={{ ts }}">
         | 
| 11 12 | 
             
            	<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/ui.css?_={{ ts }}">
         | 
| @@ -14,8 +15,8 @@ | |
| 14 15 |  | 
| 15 16 | 
             
            <body>
         | 
| 16 17 | 
             
            	<div id="wrap">
         | 
| 17 | 
            -
            		<a  | 
| 18 | 
            -
            		<a  | 
| 18 | 
            +
            		<a href="{{ r }}/?shares">refresh</a>
         | 
| 19 | 
            +
            		<a href="{{ r }}/?h">control-panel</a>
         | 
| 19 20 |  | 
| 20 21 | 
             
                    <span>axs = perms (read,write,move,delet)</span>
         | 
| 21 22 | 
             
                    <span>nf = numFiles (0=dir)</span>
         | 
| @@ -58,9 +59,11 @@ | |
| 58 59 | 
             
                    {% if not rows %}
         | 
| 59 60 | 
             
                    (you don't have any active shares btw)
         | 
| 60 61 | 
             
                    {% endif %}
         | 
| 62 | 
            +
                </div>
         | 
| 63 | 
            +
            	<a href="#" id="repl">π</a>
         | 
| 61 64 | 
             
            	<script>
         | 
| 62 65 |  | 
| 63 | 
            -
            var SR | 
| 66 | 
            +
            var SR="{{ r }}",
         | 
| 64 67 | 
             
                shr="{{ shr }}",
         | 
| 65 68 | 
             
            	lang="{{ lang }}",
         | 
| 66 69 | 
             
            	dfavico="{{ favico }}";
         | 
    
        copyparty/web/splash.html
    CHANGED
    
    | @@ -157,6 +157,7 @@ | |
| 157 157 | 
             
            			<blockquote id="ad">enabling no304 will disable all caching; try this if k304 wasn't enough. This will waste a huge amount of network traffic!</blockquote></li>
         | 
| 158 158 | 
             
            			{% endif %}
         | 
| 159 159 |  | 
| 160 | 
            +
            			<li><a id="af" href="{{ r }}/?ru">show recent uploads</a></li>
         | 
| 160 161 | 
             
            			<li><a id="k" href="{{ r }}/?reset" class="r" onclick="localStorage.clear();return true">reset client settings</a></li>
         | 
| 161 162 | 
             
            		</ul>
         | 
| 162 163 |  | 
| @@ -167,7 +168,7 @@ | |
| 167 168 | 
             
            	{%- endif %}
         | 
| 168 169 | 
             
            	<script>
         | 
| 169 170 |  | 
| 170 | 
            -
            var SR | 
| 171 | 
            +
            var SR="{{ r }}",
         | 
| 171 172 | 
             
            	lang="{{ lang }}",
         | 
| 172 173 | 
             
            	dfavico="{{ favico }}";
         | 
| 173 174 |  | 
    
        copyparty/web/splash.js.gz
    CHANGED
    
    | Binary file | 
    
        copyparty/web/svcs.html
    CHANGED
    
    
    
        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.16. | 
| 3 | 
            +
            Version: 1.16.7
         | 
| 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
         | 
| @@ -103,6 +103,7 @@ turn almost any device into a file server with resumable uploads/downloads using | |
| 103 103 | 
             
                * [shares](#shares) - share a file or folder by creating a temporary link
         | 
| 104 104 | 
             
                * [batch rename](#batch-rename) - select some files and press `F2` to bring up the rename UI
         | 
| 105 105 | 
             
                * [rss feeds](#rss-feeds) - monitor a folder with your RSS reader
         | 
| 106 | 
            +
                * [recent uploads](#recent-uploads) - list all recent uploads
         | 
| 106 107 | 
             
                * [media player](#media-player) - plays almost every audio format there is
         | 
| 107 108 | 
             
                    * [audio equalizer](#audio-equalizer) - and [dynamic range compressor](https://en.wikipedia.org/wiki/Dynamic_range_compression)
         | 
| 108 109 | 
             
                    * [fix unreliable playback on android](#fix-unreliable-playback-on-android) - due to phone / app settings
         | 
| @@ -772,7 +773,7 @@ files go into `[ok]` if they exist (and you get a link to where it is), otherwis | |
| 772 773 |  | 
| 773 774 | 
             
            ### unpost
         | 
| 774 775 |  | 
| 775 | 
            -
            undo/delete accidental uploads
         | 
| 776 | 
            +
            undo/delete accidental uploads  using the `[🧯]` tab in the UI
         | 
| 776 777 |  | 
| 777 778 | 
             
            
         | 
| 778 779 |  | 
| @@ -931,6 +932,17 @@ url parameters: | |
| 931 932 | 
             
              * uppercase = reverse-sort; `M` = oldest file first
         | 
| 932 933 |  | 
| 933 934 |  | 
| 935 | 
            +
            ## recent uploads
         | 
| 936 | 
            +
             | 
| 937 | 
            +
            list all recent uploads  by clicking "show recent uploads" in the controlpanel
         | 
| 938 | 
            +
             | 
| 939 | 
            +
            will show uploader IP and upload-time if the visitor has the admin permission
         | 
| 940 | 
            +
             | 
| 941 | 
            +
            * global-option `--ups-when` makes upload-time visible to all users, and not just admins
         | 
| 942 | 
            +
             | 
| 943 | 
            +
            note that the [🧯 unpost](#unpost) feature is better suited for viewing *your own* recent uploads, as it includes the option to undo/delete them
         | 
| 944 | 
            +
             | 
| 945 | 
            +
             | 
| 934 946 | 
             
            ## media player
         | 
| 935 947 |  | 
| 936 948 | 
             
            plays almost every audio format there is  (if the server has FFmpeg installed for on-demand transcoding)
         | 
| @@ -1,7 +1,7 @@ | |
| 1 | 
            -
            copyparty/__init__.py,sha256= | 
| 2 | 
            -
            copyparty/__main__.py,sha256= | 
| 3 | 
            -
            copyparty/__version__.py,sha256= | 
| 4 | 
            -
            copyparty/authsrv.py,sha256= | 
| 1 | 
            +
            copyparty/__init__.py,sha256=VR6ZZhB9IxaK5TDXDTBM_OIP5ydkrdbaEnstktLM__s,2649
         | 
| 2 | 
            +
            copyparty/__main__.py,sha256=acjihZUEvEwFp6d6BnT35oFqminMZBruDUfVU76YijA,113564
         | 
| 3 | 
            +
            copyparty/__version__.py,sha256=1Wa9fHXGyIQdk3lnare95TArCCnFp0OA4JizO5IAN20,252
         | 
| 4 | 
            +
            copyparty/authsrv.py,sha256=h1OhdMR_hrqZA9NH2pMRZ-Axc_GSoUajioCZhimVVsQ,104109
         | 
| 5 5 | 
             
            copyparty/broker_mp.py,sha256=QdOXXvV2Xn6J0CysEqyY3GZbqxQMyWnTpnba-a5lMc0,4987
         | 
| 6 6 | 
             
            copyparty/broker_mpw.py,sha256=PpSS4SK3pItlpfD8OwVr3QmJEPKlUgaf2nuMOozixgU,3347
         | 
| 7 7 | 
             
            copyparty/broker_thr.py,sha256=fjoYtpSscUA7-nMl4r1n2R7UK3J9lrvLS3rUZ-iJzKQ,1721
         | 
| @@ -9,30 +9,30 @@ copyparty/broker_util.py,sha256=76mfnFOpX1gUUvtjm8UQI7jpTIaVINX10QonM-B7ggc,1680 | |
| 9 9 | 
             
            copyparty/cert.py,sha256=0ZAPeXeMR164vWn9GQU3JDKooYXEq_NOQkDeg543ivg,8009
         | 
| 10 10 | 
             
            copyparty/cfg.py,sha256=UUmFpFbTm750Nv9RnofS80-FTpWT37EggEtmkE1wbxE,10374
         | 
| 11 11 | 
             
            copyparty/dxml.py,sha256=lZpg-kn-kQsXRtNY1n6fRaS-b7uXzMCyv8ovKnhZcZc,1548
         | 
| 12 | 
            -
            copyparty/fsutil.py,sha256= | 
| 12 | 
            +
            copyparty/fsutil.py,sha256=IVOFG8zBQPMQDDv7RIStSJHwHiAnVNROZS37O5k465A,4524
         | 
| 13 13 | 
             
            copyparty/ftpd.py,sha256=T97SFS7JFtvRLbJX8C4fJSYwe13vhN3-E6emtlVmqLA,17608
         | 
| 14 | 
            -
            copyparty/httpcli.py,sha256= | 
| 14 | 
            +
            copyparty/httpcli.py,sha256=cgeVci6xAUUp79z982xTL27v9XcWEzC5ymbmtj3v66M,214475
         | 
| 15 15 | 
             
            copyparty/httpconn.py,sha256=mQSgljh0Q-jyWjF4tQLrHbRKRe9WKl19kGqsGMsJpWo,6880
         | 
| 16 | 
            -
            copyparty/httpsrv.py,sha256= | 
| 16 | 
            +
            copyparty/httpsrv.py,sha256=pxH_Eh8ElBLvOEDejgpP9Bvk65HNEou-03aYIcgXhrs,18090
         | 
| 17 17 | 
             
            copyparty/ico.py,sha256=eWSxEae4wOCfheHl-m-wchYvFRAR_97kJDb4NGaB-Z8,3561
         | 
| 18 18 | 
             
            copyparty/mdns.py,sha256=G73OWWg1copda47LgayCRK7qjVrk6cnUGpMR5ugmi7o,18315
         | 
| 19 19 | 
             
            copyparty/metrics.py,sha256=EOIiPOItEQmdK9YgNb75l0kCzanWb6RtJGwMI7ufifY,8966
         | 
| 20 | 
            -
            copyparty/mtag.py,sha256= | 
| 20 | 
            +
            copyparty/mtag.py,sha256=wWWc3BHMRP0u85KvdZpX3Dp4djDgAbXVrL9Pvab4nPQ,19925
         | 
| 21 21 | 
             
            copyparty/multicast.py,sha256=Ha27l2oATEa-Qo2WOzkeRgjAm6G_YDCfbVJWR-ao2UE,12319
         | 
| 22 22 | 
             
            copyparty/pwhash.py,sha256=X87RWeay8IhzGVZLDKE5LctF9YVUcYxPAJ1BX6r_9CU,4248
         | 
| 23 | 
            -
            copyparty/smbd.py,sha256= | 
| 23 | 
            +
            copyparty/smbd.py,sha256=dixFl2wlWymq_Cycc8a4cVB4gY8RSg2e3tE7Xr-aDa0,14614
         | 
| 24 24 | 
             
            copyparty/ssdp.py,sha256=R1Z61GZOxBMF2Sk4RTxKWMOemogmcjEWG-CvLihd45k,7023
         | 
| 25 25 | 
             
            copyparty/star.py,sha256=tV5BbX6AiQ7N4UU8DYtSTckNYeoeey4DBqq4LjfymbY,3818
         | 
| 26 | 
            -
            copyparty/sutil.py,sha256= | 
| 26 | 
            +
            copyparty/sutil.py,sha256=6zEEGl4hRe6bTB83Y_RtnBGxr2JcUa__GdiAMqNJZnY,3208
         | 
| 27 27 | 
             
            copyparty/svchub.py,sha256=sAHkiPGzzKACLqKlem2V-bps9Xh-wHlcfwaNywxcd5A,40877
         | 
| 28 28 | 
             
            copyparty/szip.py,sha256=HFtnwOiBgx0HMLUf-h_T84zSlRijPxmhRo5PM613kRA,8602
         | 
| 29 | 
            -
            copyparty/tcpsrv.py,sha256= | 
| 30 | 
            -
            copyparty/tftpd.py,sha256= | 
| 31 | 
            -
            copyparty/th_cli.py,sha256= | 
| 32 | 
            -
            copyparty/th_srv.py,sha256= | 
| 33 | 
            -
            copyparty/u2idx.py,sha256= | 
| 34 | 
            -
            copyparty/up2k.py,sha256= | 
| 35 | 
            -
            copyparty/util.py,sha256= | 
| 29 | 
            +
            copyparty/tcpsrv.py,sha256=2q18dGR8jnezA4SMfUXa-wrGRGX3nHIwkxkWvkTzF2A,19889
         | 
| 30 | 
            +
            copyparty/tftpd.py,sha256=PXgG4rTmiaU_TavSyZWD5cFphdfChs9YvNY21qfExt8,13611
         | 
| 31 | 
            +
            copyparty/th_cli.py,sha256=1B8el4NNs5cNyJyjOPiAdvLOX2HQXaebsHn6VLdZ_gU,4630
         | 
| 32 | 
            +
            copyparty/th_srv.py,sha256=uAcz-wZJQEG5KavcZDkwToONZujyoOeC4oCxxKTD5us,29575
         | 
| 33 | 
            +
            copyparty/u2idx.py,sha256=G6MDbD4I_sJSOwaNFZ6XLTQhnEDrB12pVKuKhzQ_leE,13676
         | 
| 34 | 
            +
            copyparty/up2k.py,sha256=Uo_-zmJ9Bv8An0ph4w6Nh1883LWAsbH_H9mrX35OrpU,174570
         | 
| 35 | 
            +
            copyparty/util.py,sha256=qhNakLtygJveVbZUuPvDY7Tm1E48E67CS9XBmosu5i4,95101
         | 
| 36 36 | 
             
            copyparty/bos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 37 37 | 
             
            copyparty/bos/bos.py,sha256=Wb7eWsXJgR5AFlBR9ZOyKrLTwy-Kct9RrGiOu4Jo37Y,1622
         | 
| 38 38 | 
             
            copyparty/bos/path.py,sha256=yEjCq2ki9CvxA5sCT8pS0keEXwugs0ZeUyUhdBziOCI,777
         | 
| @@ -56,36 +56,39 @@ copyparty/stolen/ifaddr/_shared.py,sha256=uNC4SdEIgdSLKvuUzsf1aM-H1Xrc_9mpLoOT43 | |
| 56 56 | 
             
            copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
         | 
| 57 57 | 
             
            copyparty/web/baguettebox.js.gz,sha256=_amC3ipOrXKEFz8DsVP-JEl49VjMQYiKyF78eWfG-uk,7965
         | 
| 58 58 | 
             
            copyparty/web/browser.css.gz,sha256=kurx_iA-KxLYx8PqJsn0bJVjkAxP-0YTOHSV9l_oouo,11645
         | 
| 59 | 
            -
            copyparty/web/browser.html,sha256= | 
| 60 | 
            -
            copyparty/web/browser.js.gz,sha256= | 
| 59 | 
            +
            copyparty/web/browser.html,sha256=dekrZQ6w8ciB-QPlp-mjcuzUVKlsCYcvvi6efmXRfQE,4822
         | 
| 60 | 
            +
            copyparty/web/browser.js.gz,sha256=HejO4Brwmw-NmLVmqbK1I31LPP9arf7G9JaHOUpNcfY,89876
         | 
| 61 61 | 
             
            copyparty/web/browser2.html,sha256=NRUZ08GH-e2YcGXcoz0UjYg6JIVF42u4IMX4HHwWTmg,1587
         | 
| 62 62 | 
             
            copyparty/web/cf.html,sha256=lJThtNFNAQT1ClCHHlivAkDGE0LutedwopXD62Z8Nys,589
         | 
| 63 63 | 
             
            copyparty/web/dbg-audio.js.gz,sha256=Ma-KZtK8LnmiwNvNKFKXMPYl_Nn_3U7GsJ6-DRWC2HE,688
         | 
| 64 64 | 
             
            copyparty/web/md.css.gz,sha256=UZpN0J7ubVM05CZkbZYkQRJeGgJt_GNDEzKTGSQd8h4,2032
         | 
| 65 | 
            -
            copyparty/web/md.html,sha256= | 
| 65 | 
            +
            copyparty/web/md.html,sha256=hz-xJVfKtaeTUQn3tGh7ebIMvLbOjVKkrMhsCTr3lGM,4200
         | 
| 66 66 | 
             
            copyparty/web/md.js.gz,sha256=tw9vS9yZzyVW4FNOTv0MMHBdBEedfahZRZ8WhVJDu4A,4180
         | 
| 67 67 | 
             
            copyparty/web/md2.css.gz,sha256=uIVHKScThdbcfhXNSHgKZnALYpxbnXC-WuEzOJ20Lpc,699
         | 
| 68 68 | 
             
            copyparty/web/md2.js.gz,sha256=w0Ve06BUcyZfcWR8DAPpCj-kI-uL_wTL2aX_0PsNc-I,8363
         | 
| 69 69 | 
             
            copyparty/web/mde.css.gz,sha256=2SkAEDKIRPqywNJ8t_heQaeBQ_R73Rf-pQI_bDoKF6o,942
         | 
| 70 | 
            -
            copyparty/web/mde.html,sha256= | 
| 70 | 
            +
            copyparty/web/mde.html,sha256=fRGUlnNhK6ra8P4jskQLUw6Aaef6g6Heh4EEgYhJkxU,1770
         | 
| 71 71 | 
             
            copyparty/web/mde.js.gz,sha256=kN2eUSvr4mFuksfK4-4LimJmWdwsao39Sea2lWtu8L0,2224
         | 
| 72 72 | 
             
            copyparty/web/msg.css.gz,sha256=u90fXYAVrMD-jqwf5XFVC1ptSpSHZUe8Mez6PX101P8,300
         | 
| 73 73 | 
             
            copyparty/web/msg.html,sha256=w9CM3hkLLGJX9fWEaG4gSbTOPe2GcPqW8BpSCDiFzOI,977
         | 
| 74 | 
            -
            copyparty/web/ | 
| 75 | 
            -
            copyparty/web/ | 
| 74 | 
            +
            copyparty/web/rups.css.gz,sha256=pWklsym27oGGr-8tYQR7WnZvGZElAgCwLzlwTDErNAM,647
         | 
| 75 | 
            +
            copyparty/web/rups.html,sha256=iPuz53jBT_mIWIfl1yrjjg5-P7oO2ada6fTFq8PgjGk,1479
         | 
| 76 | 
            +
            copyparty/web/rups.js.gz,sha256=nvvcG8L-fkm7zkhjnlTGhBp_KD0j08mtHEW0sB7zy-Y,854
         | 
| 77 | 
            +
            copyparty/web/shares.css.gz,sha256=SdPlZCBwz9tkPkgEo5pSPDOZSI079njxEfkJ64-iW3c,547
         | 
| 78 | 
            +
            copyparty/web/shares.html,sha256=YctvUrKuBYu42kxVylyW2_DEHm7Ik6uHqzfzVZ4N0ac,2545
         | 
| 76 79 | 
             
            copyparty/web/shares.js.gz,sha256=emeY2-wjkh8x1JgaW6ny5fcC7XpZzZzfE1f-sEyntQ4,940
         | 
| 77 80 | 
             
            copyparty/web/splash.css.gz,sha256=VxFqPvNdZtWb0u1C_GW2yYwrHq0lqPMitft9GYcv56k,1087
         | 
| 78 | 
            -
            copyparty/web/splash.html,sha256= | 
| 79 | 
            -
            copyparty/web/splash.js.gz,sha256= | 
| 80 | 
            -
            copyparty/web/svcs.html,sha256= | 
| 81 | 
            +
            copyparty/web/splash.html,sha256=QEnTH9QZXFmAuyVtgqOuuHKBtIdi7uclpRqe0ZMewj4,6249
         | 
| 82 | 
            +
            copyparty/web/splash.js.gz,sha256=4VqNznN10-bT33IJm3VWzBEJ1s08XZyxFB1TYPUkuAo,2739
         | 
| 83 | 
            +
            copyparty/web/svcs.html,sha256=S-YiS7DF5ndsy4MZXStdpIkCqSjKA9V5kIViCUQhMvw,11557
         | 
| 81 84 | 
             
            copyparty/web/svcs.js.gz,sha256=k81ZvZ3I-f4fMHKrNGGOgOlvXnCBz0mVjD-8mieoWCA,520
         | 
| 82 85 | 
             
            copyparty/web/ui.css.gz,sha256=v8U-1tetZzuzTpITjq8NWj1gg3jEiYDIIE8aE0dx63k,2800
         | 
| 83 | 
            -
            copyparty/web/up2k.js.gz,sha256= | 
| 84 | 
            -
            copyparty/web/util.js.gz,sha256= | 
| 86 | 
            +
            copyparty/web/up2k.js.gz,sha256=CC1MM_FBfxpsjgtNWupzCdnlVNI3hBbWbNSCnOSpCTY,23460
         | 
| 87 | 
            +
            copyparty/web/util.js.gz,sha256=aXgf3U-0TL9Sc7uMQhA_sMyTXLsZCH3YDe8qLJ4hpEM,15082
         | 
| 85 88 | 
             
            copyparty/web/w.hash.js.gz,sha256=l3GpSJD6mcU-1CRWkIj7PybgbjlfSr8oeO3vortIrQk,1105
         | 
| 86 89 | 
             
            copyparty/web/a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
         | 
| 87 90 | 
             
            copyparty/web/a/partyfuse.py,sha256=9p5Hpg_IBiSimv7j9kmPhCGpy-FLXSRUOYnLjJ5JifU,28049
         | 
| 88 | 
            -
            copyparty/web/a/u2c.py,sha256= | 
| 91 | 
            +
            copyparty/web/a/u2c.py,sha256=OuA0UMtPDSrMHgd4ebANJXoLeIa1RKxzbBXUV3H8jIw,51606
         | 
| 89 92 | 
             
            copyparty/web/a/webdav-cfg.bat,sha256=Y4NoGZlksAIg4cBMb7KdJrpKC6Nx97onaTl6yMjaimk,1449
         | 
| 90 93 | 
             
            copyparty/web/dd/2.png,sha256=gJ14XFPzaw95L6z92fSq9eMPikSQyu-03P1lgiGe0_I,258
         | 
| 91 94 | 
             
            copyparty/web/dd/3.png,sha256=4lho8Koz5tV7jJ4ODo6GMTScZfkqsT05yp48EDFIlyg,252
         | 
| @@ -106,9 +109,9 @@ copyparty/web/deps/prismd.css.gz,sha256=ObUlksQVr-OuYlTz-I4B23TeBg2QDVVGRnWBz8cV | |
| 106 109 | 
             
            copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
         | 
| 107 110 | 
             
            copyparty/web/deps/sha512.ac.js.gz,sha256=lFZaCLumgWxrvEuDr4bqdKHsqjX82AbVAb7_F45Yk88,7033
         | 
| 108 111 | 
             
            copyparty/web/deps/sha512.hw.js.gz,sha256=UAed2_ocklZCnIzcSYz2h4P1ycztlCLj-ewsRTud2lU,7939
         | 
| 109 | 
            -
            copyparty-1.16. | 
| 110 | 
            -
            copyparty-1.16. | 
| 111 | 
            -
            copyparty-1.16. | 
| 112 | 
            -
            copyparty-1.16. | 
| 113 | 
            -
            copyparty-1.16. | 
| 114 | 
            -
            copyparty-1.16. | 
| 112 | 
            +
            copyparty-1.16.7.dist-info/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
         | 
| 113 | 
            +
            copyparty-1.16.7.dist-info/METADATA,sha256=olG_plZH52nO0-2ebV8squbAOF_3h66Y8_8Bs_by6Zk,141509
         | 
| 114 | 
            +
            copyparty-1.16.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
         | 
| 115 | 
            +
            copyparty-1.16.7.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
         | 
| 116 | 
            +
            copyparty-1.16.7.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
         | 
| 117 | 
            +
            copyparty-1.16.7.dist-info/RECORD,,
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         |