copyparty 1.12.2__py3-none-any.whl → 1.13.1__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/__main__.py +31 -4
- copyparty/__version__.py +3 -3
- copyparty/authsrv.py +14 -2
- copyparty/cfg.py +16 -2
- copyparty/fsutil.py +25 -5
- copyparty/httpcli.py +433 -18
- copyparty/httpconn.py +1 -0
- copyparty/httpsrv.py +2 -0
- copyparty/metrics.py +1 -1
- copyparty/svchub.py +5 -1
- copyparty/tcpsrv.py +6 -0
- copyparty/u2idx.py +18 -3
- copyparty/up2k.py +128 -53
- copyparty/util.py +49 -3
- copyparty/web/a/u2c.py +8 -4
- copyparty/web/baguettebox.js.gz +0 -0
- copyparty/web/browser.css.gz +0 -0
- copyparty/web/browser.html +1 -1
- copyparty/web/browser.js.gz +0 -0
- copyparty/web/md.html +1 -1
- copyparty/web/mde.html +1 -1
- copyparty/web/msg.html +1 -1
- 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.12.2.dist-info → copyparty-1.13.1.dist-info}/METADATA +66 -9
- {copyparty-1.12.2.dist-info → copyparty-1.13.1.dist-info}/RECORD +33 -33
- {copyparty-1.12.2.dist-info → copyparty-1.13.1.dist-info}/LICENSE +0 -0
- {copyparty-1.12.2.dist-info → copyparty-1.13.1.dist-info}/WHEEL +0 -0
- {copyparty-1.12.2.dist-info → copyparty-1.13.1.dist-info}/entry_points.txt +0 -0
- {copyparty-1.12.2.dist-info → copyparty-1.13.1.dist-info}/top_level.txt +0 -0
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.
|
5
|
-
S_BUILD_DT = "2024-
|
4
|
+
S_VERSION = "1.16"
|
5
|
+
S_BUILD_DT = "2024-04-20"
|
6
6
|
|
7
7
|
"""
|
8
8
|
u2c.py: upload to copyparty
|
@@ -563,7 +563,7 @@ def handshake(ar, file, search):
|
|
563
563
|
else:
|
564
564
|
if ar.touch:
|
565
565
|
req["umod"] = True
|
566
|
-
if ar.
|
566
|
+
if ar.ow:
|
567
567
|
req["replace"] = True
|
568
568
|
|
569
569
|
headers = {"Content-Type": "text/plain"} # <=1.5.1 compat
|
@@ -1140,6 +1140,7 @@ source file/folder selection uses rsync syntax, meaning that:
|
|
1140
1140
|
ap.add_argument("-x", type=unicode, metavar="REGEX", default="", help="skip file if filesystem-abspath matches REGEX, example: '.*/\\.hist/.*'")
|
1141
1141
|
ap.add_argument("--ok", action="store_true", help="continue even if some local files are inaccessible")
|
1142
1142
|
ap.add_argument("--touch", action="store_true", help="if last-modified timestamps differ, push local to server (need write+delete perms)")
|
1143
|
+
ap.add_argument("--ow", action="store_true", help="overwrite existing files instead of autorenaming")
|
1143
1144
|
ap.add_argument("--version", action="store_true", help="show version and exit")
|
1144
1145
|
|
1145
1146
|
ap = app.add_argument_group("compatibility")
|
@@ -1148,7 +1149,7 @@ source file/folder selection uses rsync syntax, meaning that:
|
|
1148
1149
|
|
1149
1150
|
ap = app.add_argument_group("folder sync")
|
1150
1151
|
ap.add_argument("--dl", action="store_true", help="delete local files after uploading")
|
1151
|
-
ap.add_argument("--dr", action="store_true", help="delete remote files which don't exist locally")
|
1152
|
+
ap.add_argument("--dr", action="store_true", help="delete remote files which don't exist locally (implies --ow)")
|
1152
1153
|
ap.add_argument("--drd", action="store_true", help="delete remote files during upload instead of afterwards; reduces peak disk space usage, but will reupload instead of detecting renames")
|
1153
1154
|
|
1154
1155
|
ap = app.add_argument_group("performance tweaks")
|
@@ -1178,6 +1179,9 @@ source file/folder selection uses rsync syntax, meaning that:
|
|
1178
1179
|
if ar.drd:
|
1179
1180
|
ar.dr = True
|
1180
1181
|
|
1182
|
+
if ar.dr:
|
1183
|
+
ar.ow = True
|
1184
|
+
|
1181
1185
|
for k in "dl dr drd".split():
|
1182
1186
|
errs = []
|
1183
1187
|
if ar.safe and getattr(ar, k):
|
copyparty/web/baguettebox.js.gz
CHANGED
Binary file
|
copyparty/web/browser.css.gz
CHANGED
Binary file
|
copyparty/web/browser.html
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
<title>{{ title }}</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, minimum-scale=0.6">
|
9
|
-
<meta name="theme-color" content="#
|
9
|
+
<meta name="theme-color" content="#{{ tcolor }}">
|
10
10
|
<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/ui.css?_={{ ts }}">
|
11
11
|
<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/browser.css?_={{ ts }}">
|
12
12
|
{{ html_head }}
|
copyparty/web/browser.js.gz
CHANGED
Binary file
|
copyparty/web/md.html
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
<title>📝 {{ title }}</title>
|
4
4
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=0.7">
|
6
|
-
<meta name="theme-color" content="#
|
6
|
+
<meta name="theme-color" content="#{{ tcolor }}">
|
7
7
|
<link rel="stylesheet" href="{{ r }}/.cpr/ui.css?_={{ ts }}">
|
8
8
|
<link rel="stylesheet" href="{{ r }}/.cpr/md.css?_={{ ts }}">
|
9
9
|
{%- if edit %}
|
copyparty/web/mde.html
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
<title>📝 {{ title }}</title>
|
4
4
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=0.7">
|
6
|
-
<meta name="theme-color" content="#
|
6
|
+
<meta name="theme-color" content="#{{ tcolor }}">
|
7
7
|
<link rel="stylesheet" href="{{ r }}/.cpr/ui.css?_={{ ts }}">
|
8
8
|
<link rel="stylesheet" href="{{ r }}/.cpr/mde.css?_={{ ts }}">
|
9
9
|
<link rel="stylesheet" href="{{ r }}/.cpr/deps/mini-fa.css?_={{ ts }}">
|
copyparty/web/msg.html
CHANGED
@@ -6,7 +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="theme-color" content="#
|
9
|
+
<meta name="theme-color" content="#{{ tcolor }}">
|
10
10
|
<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/msg.css?_={{ ts }}">
|
11
11
|
{{ html_head }}
|
12
12
|
</head>
|
copyparty/web/splash.html
CHANGED
@@ -6,7 +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="theme-color" content="#
|
9
|
+
<meta name="theme-color" content="#{{ tcolor }}">
|
10
10
|
<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/splash.css?_={{ ts }}">
|
11
11
|
<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/ui.css?_={{ ts }}">
|
12
12
|
{{ html_head }}
|
@@ -95,6 +95,7 @@
|
|
95
95
|
<form method="post" enctype="multipart/form-data" action="{{ r }}/{{ qvpath }}">
|
96
96
|
<input type="hidden" name="act" value="login" />
|
97
97
|
<input type="password" name="cppwd" placeholder=" password" />
|
98
|
+
<input type="hidden" name="uhash" id="uhash" value="x" />
|
98
99
|
<input type="submit" value="Login" />
|
99
100
|
{% if ahttps %}
|
100
101
|
<a id="w" href="{{ ahttps }}">switch to https</a>
|
copyparty/web/splash.js.gz
CHANGED
Binary file
|
copyparty/web/svcs.html
CHANGED
@@ -6,7 +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="theme-color" content="#
|
9
|
+
<meta name="theme-color" content="#{{ tcolor }}">
|
10
10
|
<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/splash.css?_={{ ts }}">
|
11
11
|
<link rel="stylesheet" media="screen" href="{{ r }}/.cpr/ui.css?_={{ ts }}">
|
12
12
|
<style>ul{padding-left:1.3em}li{margin:.4em 0}</style>
|
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.
|
3
|
+
Version: 1.13.1
|
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
|
@@ -64,6 +64,8 @@ turn almost any device into a file server with resumable uploads/downloads using
|
|
64
64
|
|
65
65
|
📷 **screenshots:** [browser](#the-browser) // [upload](#uploading) // [unpost](#unpost) // [thumbnails](#thumbnails) // [search](#searching) // [fsearch](#file-search) // [zip-DL](#zip-downloads) // [md-viewer](#markdown-viewer)
|
66
66
|
|
67
|
+
🎬 **videos:** [upload](https://a.ocv.me/pub/demo/pics-vids/up2k.webm) // [cli-upload](https://a.ocv.me/pub/demo/pics-vids/u2cli.webm) // [race-the-beam](https://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm)
|
68
|
+
|
67
69
|
|
68
70
|
## readme toc
|
69
71
|
|
@@ -71,7 +73,7 @@ turn almost any device into a file server with resumable uploads/downloads using
|
|
71
73
|
* [quickstart](#quickstart) - just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py)** -- that's it! 🎉
|
72
74
|
* [at home](#at-home) - make it accessible over the internet
|
73
75
|
* [on servers](#on-servers) - you may also want these, especially on servers
|
74
|
-
* [features](#features)
|
76
|
+
* [features](#features) - also see [comparison to similar software](./docs/versus.md)
|
75
77
|
* [testimonials](#testimonials) - small collection of user feedback
|
76
78
|
* [motivations](#motivations) - project goals / philosophy
|
77
79
|
* [notes](#notes) - general notes
|
@@ -92,12 +94,14 @@ turn almost any device into a file server with resumable uploads/downloads using
|
|
92
94
|
* [file-search](#file-search) - dropping files into the browser also lets you see if they exist on the server
|
93
95
|
* [unpost](#unpost) - undo/delete accidental uploads
|
94
96
|
* [self-destruct](#self-destruct) - uploads can be given a lifetime
|
97
|
+
* [race the beam](#race-the-beam) - download files while they're still uploading ([demo video](http://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm))
|
95
98
|
* [file manager](#file-manager) - cut/paste, rename, and delete files/folders (if you have permission)
|
96
99
|
* [batch rename](#batch-rename) - select some files and press `F2` to bring up the rename UI
|
97
100
|
* [media player](#media-player) - plays almost every audio format there is
|
98
101
|
* [audio equalizer](#audio-equalizer) - and [dynamic range compressor](https://en.wikipedia.org/wiki/Dynamic_range_compression)
|
99
102
|
* [fix unreliable playback on android](#fix-unreliable-playback-on-android) - due to phone / app settings
|
100
103
|
* [markdown viewer](#markdown-viewer) - and there are *two* editors
|
104
|
+
* [markdown vars](#markdown-vars) - dynamic docs with serverside variable expansion
|
101
105
|
* [other tricks](#other-tricks)
|
102
106
|
* [searching](#searching) - search by size, date, path/name, mp3-tags, ...
|
103
107
|
* [server config](#server-config) - using arguments or config files, or a mix of both
|
@@ -111,6 +115,7 @@ turn almost any device into a file server with resumable uploads/downloads using
|
|
111
115
|
* [tftp server](#tftp-server) - a TFTP server (read/write) can be started using `--tftp 3969`
|
112
116
|
* [smb server](#smb-server) - unsafe, slow, not recommended for wan
|
113
117
|
* [browser ux](#browser-ux) - tweaking the ui
|
118
|
+
* [opengraph](#opengraph) - discord and social-media embeds
|
114
119
|
* [file indexing](#file-indexing) - enables dedup and music search ++
|
115
120
|
* [exclude-patterns](#exclude-patterns) - to save some time
|
116
121
|
* [filesystem guards](#filesystem-guards) - avoid traversing into other filesystems
|
@@ -159,8 +164,9 @@ turn almost any device into a file server with resumable uploads/downloads using
|
|
159
164
|
* [dependencies](#dependencies) - mandatory deps
|
160
165
|
* [optional dependencies](#optional-dependencies) - install these to enable bonus features
|
161
166
|
* [optional gpl stuff](#optional-gpl-stuff)
|
162
|
-
* [sfx](#sfx) - the self-contained "binary"
|
167
|
+
* [sfx](#sfx) - the self-contained "binary" (recommended!)
|
163
168
|
* [copyparty.exe](#copypartyexe) - download [copyparty.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty.exe) (win8+) or [copyparty32.exe](https://github.com/9001/copyparty/releases/latest/download/copyparty32.exe) (win7+)
|
169
|
+
* [zipapp](#zipapp) - another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz)
|
164
170
|
* [install on android](#install-on-android)
|
165
171
|
* [reporting bugs](#reporting-bugs) - ideas for context to include, and where to submit them
|
166
172
|
* [devnotes](#devnotes) - for build instructions etc, see [./docs/devnotes.md](./docs/devnotes.md)
|
@@ -174,6 +180,7 @@ just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/
|
|
174
180
|
* or if you cannot install python, you can use [copyparty.exe](#copypartyexe) instead
|
175
181
|
* or install [on arch](#arch-package) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
|
176
182
|
* or if you are on android, [install copyparty in termux](#install-on-android)
|
183
|
+
* or if your computer is messed up and nothing else works, [try the pyz](#zipapp)
|
177
184
|
* or if you prefer to [use docker](./scripts/docker/) 🐋 you can do that too
|
178
185
|
* docker has all deps built-in, so skip this step:
|
179
186
|
|
@@ -181,7 +188,7 @@ enable thumbnails (images/audio/video), media indexing, and audio transcoding by
|
|
181
188
|
|
182
189
|
* **Alpine:** `apk add py3-pillow ffmpeg`
|
183
190
|
* **Debian:** `apt install --no-install-recommends python3-pil ffmpeg`
|
184
|
-
* **Fedora:** rpmfusion + `dnf install python3-pillow ffmpeg`
|
191
|
+
* **Fedora:** rpmfusion + `dnf install python3-pillow ffmpeg --allowerasing`
|
185
192
|
* **FreeBSD:** `pkg install py39-sqlite3 py39-pillow ffmpeg`
|
186
193
|
* **MacOS:** `port install py-Pillow ffmpeg`
|
187
194
|
* **MacOS** (alternative): `brew install pillow ffmpeg`
|
@@ -236,6 +243,8 @@ firewall-cmd --reload
|
|
236
243
|
|
237
244
|
## features
|
238
245
|
|
246
|
+
also see [comparison to similar software](./docs/versus.md)
|
247
|
+
|
239
248
|
* backend stuff
|
240
249
|
* ☑ IPv6
|
241
250
|
* ☑ [multiprocessing](#performance) (actual multithreading)
|
@@ -258,6 +267,7 @@ firewall-cmd --reload
|
|
258
267
|
* ☑ write-only folders
|
259
268
|
* ☑ [unpost](#unpost): undo/delete accidental uploads
|
260
269
|
* ☑ [self-destruct](#self-destruct) (specified server-side or client-side)
|
270
|
+
* ☑ [race the beam](#race-the-beam) (almost like peer-to-peer)
|
261
271
|
* ☑ symlink/discard duplicates (content-matching)
|
262
272
|
* download
|
263
273
|
* ☑ single files in browser
|
@@ -282,9 +292,11 @@ firewall-cmd --reload
|
|
282
292
|
* client support
|
283
293
|
* ☑ [folder sync](#folder-sync)
|
284
294
|
* ☑ [curl-friendly](https://user-images.githubusercontent.com/241032/215322619-ea5fd606-3654-40ad-94ee-2bc058647bb2.png)
|
295
|
+
* ☑ [opengraph](#opengraph) (discord embeds)
|
285
296
|
* markdown
|
286
297
|
* ☑ [viewer](#markdown-viewer)
|
287
298
|
* ☑ editor (sure why not)
|
299
|
+
* ☑ [variables](#markdown-vars)
|
288
300
|
|
289
301
|
PS: something missing? post any crazy ideas you've got as a [feature request](https://github.com/9001/copyparty/issues/new?assignees=9001&labels=enhancement&template=feature_request.md) or [discussion](https://github.com/9001/copyparty/discussions/new?category=ideas) 🤙
|
290
302
|
|
@@ -662,9 +674,15 @@ cool trick: download a folder by appending url-params `?tar&opus` or `?tar&mp3`
|
|
662
674
|
|
663
675
|
## uploading
|
664
676
|
|
665
|
-
drag files/folders into the web-browser to upload
|
677
|
+
drag files/folders into the web-browser to upload
|
678
|
+
|
679
|
+
dragdrop is the recommended way, but you may also:
|
680
|
+
|
681
|
+
* select some files (not folders) in your file explorer and press CTRL-V inside the browser window
|
682
|
+
* use the [command-line uploader](https://github.com/9001/copyparty/tree/hovudstraum/bin#u2cpy)
|
683
|
+
* upload using [curl or sharex](#client-examples)
|
666
684
|
|
667
|
-
this initiates an upload using `up2k`; there are two uploaders available:
|
685
|
+
when uploading files through dragdrop or CTRL-V, this initiates an upload using `up2k`; there are two browser-based uploaders available:
|
668
686
|
* `[🎈] bup`, the basic uploader, supports almost every browser since netscape 4.0
|
669
687
|
* `[🚀] up2k`, the good / fancy one
|
670
688
|
|
@@ -683,7 +701,7 @@ up2k has several advantages:
|
|
683
701
|
> it is perfectly safe to restart / upgrade copyparty while someone is uploading to it!
|
684
702
|
> all known up2k clients will resume just fine 💪
|
685
703
|
|
686
|
-
see [up2k](#up2k) for details on how it works, or watch a [demo video](https://a.ocv.me/pub/demo/pics-vids/#gf-0f6f5c0d)
|
704
|
+
see [up2k](./docs/devnotes.md#up2k) for details on how it works, or watch a [demo video](https://a.ocv.me/pub/demo/pics-vids/#gf-0f6f5c0d)
|
687
705
|
|
688
706
|

|
689
707
|
|
@@ -749,6 +767,13 @@ clients can specify a shorter expiration time using the [up2k ui](#uploading) --
|
|
749
767
|
specifying a custom expiration time client-side will affect the timespan in which unposts are permitted, so keep an eye on the estimates in the up2k ui
|
750
768
|
|
751
769
|
|
770
|
+
### race the beam
|
771
|
+
|
772
|
+
download files while they're still uploading ([demo video](http://a.ocv.me/pub/g/nerd-stuff/cpp/2024-0418-race-the-beam.webm)) -- it's almost like peer-to-peer
|
773
|
+
|
774
|
+
requires the file to be uploaded using up2k (which is the default drag-and-drop uploader), alternatively the command-line program
|
775
|
+
|
776
|
+
|
752
777
|
## file manager
|
753
778
|
|
754
779
|
cut/paste, rename, and delete files/folders (if you have permission)
|
@@ -884,6 +909,13 @@ other notes,
|
|
884
909
|
* the document preview has a max-width which is the same as an A4 paper when printed
|
885
910
|
|
886
911
|
|
912
|
+
### markdown vars
|
913
|
+
|
914
|
+
dynamic docs with serverside variable expansion to replace stuff like `{{self.ip}}` with the client's IP, or `{{srv.htime}}` with the current time on the server
|
915
|
+
|
916
|
+
see [./srv/expand/](./srv/expand/) for usage and examples
|
917
|
+
|
918
|
+
|
887
919
|
## other tricks
|
888
920
|
|
889
921
|
* you can link a particular timestamp in an audio file by adding it to the URL, such as `&20` / `&20s` / `&1m20` / `&t=1:20` after the `.../#af-c8960dab`
|
@@ -1108,7 +1140,22 @@ tweaking the ui
|
|
1108
1140
|
* to sort in music order (album, track, artist, title) with filename as fallback, you could `--sort tags/Cirle,tags/.tn,tags/Artist,tags/Title,href`
|
1109
1141
|
* to sort by upload date, first enable showing the upload date in the listing with `-e2d -mte +.up_at` and then `--sort tags/.up_at`
|
1110
1142
|
|
1111
|
-
see [./docs/rice](./docs/rice) for more
|
1143
|
+
see [./docs/rice](./docs/rice) for more, including how to add stuff (css/`<meta>`/...) to the html `<head>` tag
|
1144
|
+
|
1145
|
+
|
1146
|
+
## opengraph
|
1147
|
+
|
1148
|
+
discord and social-media embeds
|
1149
|
+
|
1150
|
+
can be enabled globally with `--og` or per-volume with volflag `og`
|
1151
|
+
|
1152
|
+
note that this disables hotlinking because the opengraph spec demands it; to sneak past this intentional limitation, you can enable opengraph selectively by user-agent, for example `--og-ua '(Discord|Twitter|Slack)bot'` (or volflag `og_ua`)
|
1153
|
+
|
1154
|
+
you can also hotlink files regardless by appending `?raw` to the url
|
1155
|
+
|
1156
|
+
NOTE: because discord (and maybe others) strip query args such as `?raw` in opengraph tags, any links which require a filekey or dirkey will not work
|
1157
|
+
|
1158
|
+
if you want to entirely replace the copyparty response with your own jinja2 template, give the template filepath to `--og-tpl` or volflag `og_tpl` (all members of `HttpCli` are available through the `this` object)
|
1112
1159
|
|
1113
1160
|
|
1114
1161
|
## file indexing
|
@@ -2022,7 +2069,7 @@ these are standalone programs and will never be imported / evaluated by copypart
|
|
2022
2069
|
|
2023
2070
|
# sfx
|
2024
2071
|
|
2025
|
-
the self-contained "binary" [copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py) will unpack itself and run copyparty, assuming you have python installed of course
|
2072
|
+
the self-contained "binary" (recommended!) [copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/download/copyparty-sfx.py) will unpack itself and run copyparty, assuming you have python installed of course
|
2026
2073
|
|
2027
2074
|
you can reduce the sfx size by repacking it; see [./docs/devnotes.md#sfx-repack](./docs/devnotes.md#sfx-repack)
|
2028
2075
|
|
@@ -2049,6 +2096,16 @@ meanwhile [copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/d
|
|
2049
2096
|
then again, if you are already into downloading shady binaries from the internet, you may also want my [minimal builds](./scripts/pyinstaller#ffmpeg) of [ffmpeg](https://ocv.me/stuff/bin/ffmpeg.exe) and [ffprobe](https://ocv.me/stuff/bin/ffprobe.exe) which enables copyparty to extract multimedia-info, do audio-transcoding, and thumbnails/spectrograms/waveforms, however it's much better to instead grab a [recent official build](https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z) every once ina while if you can afford the size
|
2050
2097
|
|
2051
2098
|
|
2099
|
+
## zipapp
|
2100
|
+
|
2101
|
+
another emergency alternative, [copyparty.pyz](https://github.com/9001/copyparty/releases/latest/download/copyparty.pyz) has less features, requires python 3.7 or newer, worse compression, and more importantly is unable to benefit from more recent versions of jinja2 and such (which makes it less secure)... lots of drawbacks with this one really -- but it *may* just work if the regular sfx fails to start because the computer is messed up in certain funky ways, so it's worth a shot if all else fails
|
2102
|
+
|
2103
|
+
run it by doubleclicking it, or try typing `python copyparty.pyz` in your terminal/console/commandline/telex if that fails
|
2104
|
+
|
2105
|
+
it is a python [zipapp](https://docs.python.org/3/library/zipapp.html) meaning it doesn't have to unpack its own python code anywhere to run, so if the filesystem is busted it has a better chance of getting somewhere
|
2106
|
+
* but note that it currently still needs to extract the web-resources somewhere (they'll land in the default TEMP-folder of your OS)
|
2107
|
+
|
2108
|
+
|
2052
2109
|
# install on android
|
2053
2110
|
|
2054
2111
|
install [Termux](https://termux.com/) + its companion app `Termux:API` (see [ocv.me/termux](https://ocv.me/termux/)) and then copy-paste this into Termux (long-tap) all at once:
|
@@ -1,22 +1,22 @@
|
|
1
1
|
copyparty/__init__.py,sha256=fUINM1abqDGzCCH_JcXdOnLdKOV-SrTI2Xo2QgQW2P4,1703
|
2
|
-
copyparty/__main__.py,sha256=
|
3
|
-
copyparty/__version__.py,sha256=
|
4
|
-
copyparty/authsrv.py,sha256
|
2
|
+
copyparty/__main__.py,sha256=7fOoPuMQe4KzHAGS5K7KI35-fyj-3rERZVM0dTInOV4,98648
|
3
|
+
copyparty/__version__.py,sha256=Ev7V864ayuRrHZmn9gLsfpBYVJs05PYyOWl3-oCL_uU,254
|
4
|
+
copyparty/authsrv.py,sha256=UaWwotBSZBEst8LENH7BIaVSL7k2EnUrVzVftTEvtmU,84896
|
5
5
|
copyparty/broker_mp.py,sha256=4mEZC5tiHUazJMgYuwInNo2dxS7jrbzrGb1qs2UBt9k,3948
|
6
6
|
copyparty/broker_mpw.py,sha256=4ZI7bJYOwUibeAJVv9_FPGNmHrr9eOtkj_Kz0JEppTU,3197
|
7
7
|
copyparty/broker_thr.py,sha256=eKr--HJGig5zqvNGwH9UoBG9Nvi9mT2axrRmJwknd0s,1759
|
8
8
|
copyparty/broker_util.py,sha256=CnX_LAhQQqouONcDLtVkVlcBX3Z6pWuKDQDmmbHGEg4,1489
|
9
9
|
copyparty/cert.py,sha256=nCeDdzcCpvjPPUcxT4Oh7wvL_8zvddu4oXtbA-zOb8g,7607
|
10
|
-
copyparty/cfg.py,sha256=
|
10
|
+
copyparty/cfg.py,sha256=PSv7T4nm0_ISlijbAP7re61ucvr37xObv8_495ynPws,9584
|
11
11
|
copyparty/dxml.py,sha256=lZpg-kn-kQsXRtNY1n6fRaS-b7uXzMCyv8ovKnhZcZc,1548
|
12
|
-
copyparty/fsutil.py,sha256=
|
12
|
+
copyparty/fsutil.py,sha256=NEdhYYgQxDQ7MmgTbtjMKorikCjDls2AXVX16EH2JfQ,4613
|
13
13
|
copyparty/ftpd.py,sha256=OIExjfqOEw-Y_ygez6cIZUQec4SFOmoxEH_WOVvw-aE,15961
|
14
|
-
copyparty/httpcli.py,sha256=
|
15
|
-
copyparty/httpconn.py,sha256=
|
16
|
-
copyparty/httpsrv.py,sha256=
|
14
|
+
copyparty/httpcli.py,sha256=nuJOPt2T9mjLLRreaCRUmpjoLN5nNkzsXJcCtzn963Q,164338
|
15
|
+
copyparty/httpconn.py,sha256=6MOQgBtOGrlVRr6ZiHBKYzkzcls-YWwaWEtqE6DweM0,6873
|
16
|
+
copyparty/httpsrv.py,sha256=Xf6wI5V25gzAoyEpiKH8VjEFwUqTzW5z8pcRfo2J40c,16421
|
17
17
|
copyparty/ico.py,sha256=AYHdK6NlYBfBgafVYXia3jHQ9XHZdUL1D8WftLMAzIU,3545
|
18
18
|
copyparty/mdns.py,sha256=CcraggbDxTT1ntYzD8Ebgqmw5Q4HkyZcfh5ymtCV_ak,17469
|
19
|
-
copyparty/metrics.py,sha256=
|
19
|
+
copyparty/metrics.py,sha256=O8qiPNDxNjub_PI8C8Qu9rBQ_z0J1mnKonqkcTeAtf4,8845
|
20
20
|
copyparty/mtag.py,sha256=wiXd26ZSYgOu4lkRDn4KLaqo6H2V7cpqUMepTHTCfKE,16851
|
21
21
|
copyparty/multicast.py,sha256=Ha27l2oATEa-Qo2WOzkeRgjAm6G_YDCfbVJWR-ao2UE,12319
|
22
22
|
copyparty/pwhash.py,sha256=D82y8emnwpHDQq7Cr8lNuppHshbNA9ptcR2XsGOOk6E,3937
|
@@ -24,15 +24,15 @@ copyparty/smbd.py,sha256=iACj5pbiKsX7bVu20BK3ebPQLB_qA7WS2l-ytrSfT3Y,14054
|
|
24
24
|
copyparty/ssdp.py,sha256=H6ZftXttydcnBxcg2-Prm4P-XiybgT3xiJRUXU1pbrE,6343
|
25
25
|
copyparty/star.py,sha256=K4NuzyfT4956uoW6GJSQ2II-JsSV57apQZwRZ4mjFoo,3790
|
26
26
|
copyparty/sutil.py,sha256=_G4TM0YFa1vXzhRypHJ88QBdZWtYgDbom4CZjGvGIwc,3074
|
27
|
-
copyparty/svchub.py,sha256=
|
27
|
+
copyparty/svchub.py,sha256=9DTZLgrHRMrlnq6pc_3UngNpxtdlT2SWnhlE2dPaoBk,32419
|
28
28
|
copyparty/szip.py,sha256=631TsEwGKV22yAnusJtvE-9fGFWr61HPGBinu-jk1QA,8591
|
29
|
-
copyparty/tcpsrv.py,sha256=
|
29
|
+
copyparty/tcpsrv.py,sha256=ym6rda7svl_M4DjNesHMI1_6wO7Csu01UV1zGzXEMxI,17637
|
30
30
|
copyparty/tftpd.py,sha256=7EHAZ9LnjAXupwRNIENJ2eA8Q0lFynnwwbziV3fyzns,13157
|
31
31
|
copyparty/th_cli.py,sha256=eSW7sBiaZAsh_XffXFzb035CTSbS3J3Q0G-BMzQGuSY,4385
|
32
32
|
copyparty/th_srv.py,sha256=C2ZBE6ddINCuYDympRQQmhj0ULdlD6HOM6qNK-UB4so,27191
|
33
|
-
copyparty/u2idx.py,sha256=
|
34
|
-
copyparty/up2k.py,sha256=
|
35
|
-
copyparty/util.py,sha256=
|
33
|
+
copyparty/u2idx.py,sha256=uEUcEbye1jzGlQfEJkLtD060XA6Rv_6lXLgeg6oAU5M,13033
|
34
|
+
copyparty/up2k.py,sha256=D-E5y27lJopCtrxUjEi1-oH-kqrOnHL2hQO1Q_X6tHw,143080
|
35
|
+
copyparty/util.py,sha256=N8rIBtCX_-oEhfLURsyhf3WfrdUzsdsN4Q1qkFtYKHg,83167
|
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
|
@@ -54,35 +54,35 @@ 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=
|
58
|
-
copyparty/web/browser.css.gz,sha256=
|
59
|
-
copyparty/web/browser.html,sha256
|
60
|
-
copyparty/web/browser.js.gz,sha256=
|
57
|
+
copyparty/web/baguettebox.js.gz,sha256=HdRHC_4Lvepp1DrRwusdcxvAn8IKGMdrKdggGIshKek,7869
|
58
|
+
copyparty/web/browser.css.gz,sha256=GGyPK9BBOX63x9XWqO2jrXewHtfAeZ-Jo0BBxqTOGUM,11491
|
59
|
+
copyparty/web/browser.html,sha256=-tLasq2GKe9mUceqXG4PczQ7odBMrX0qlWuyaA9SjPI,4882
|
60
|
+
copyparty/web/browser.js.gz,sha256=9w6hKIv_v8QERNxRQ5DOdZxBijStf-YE8H7SaWLbi7Y,68707
|
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
|
64
64
|
copyparty/web/md.css.gz,sha256=UZpN0J7ubVM05CZkbZYkQRJeGgJt_GNDEzKTGSQd8h4,2032
|
65
|
-
copyparty/web/md.html,sha256=
|
65
|
+
copyparty/web/md.html,sha256=35oLUnDYsAdiW7Zg-iKFEXzEl_bGbnoAxUrNgJL46_o,4119
|
66
66
|
copyparty/web/md.js.gz,sha256=AHRQ3a-PZq_UiGh4CjNwXRllJCvA0IqqYmeHhFWhCig,4179
|
67
67
|
copyparty/web/md2.css.gz,sha256=uIVHKScThdbcfhXNSHgKZnALYpxbnXC-WuEzOJ20Lpc,699
|
68
68
|
copyparty/web/md2.js.gz,sha256=8xLixaTfTXC808538OOSLhp9AqKowYaunjDeBsbiBEw,8350
|
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=v0MsEinom5LmZzUM-Ht26IEUkrFzMX57XpCyIQXctAg,1687
|
71
71
|
copyparty/web/mde.js.gz,sha256=kN2eUSvr4mFuksfK4-4LimJmWdwsao39Sea2lWtu8L0,2224
|
72
72
|
copyparty/web/msg.css.gz,sha256=u90fXYAVrMD-jqwf5XFVC1ptSpSHZUe8Mez6PX101P8,300
|
73
|
-
copyparty/web/msg.html,sha256=
|
73
|
+
copyparty/web/msg.html,sha256=HcBeXXpcF2JKwcj8KD3dGCvONMnTZ6lXYmm4SYgBMlA,905
|
74
74
|
copyparty/web/splash.css.gz,sha256=zgDs-SY3VrInsXeARRPcGHziVOUs-1hUtSObzybwD1g,1006
|
75
|
-
copyparty/web/splash.html,sha256=
|
76
|
-
copyparty/web/splash.js.gz,sha256=
|
77
|
-
copyparty/web/svcs.html,sha256=
|
75
|
+
copyparty/web/splash.html,sha256=z5OrfZqA5RBxeY86BJiQ5NZNHIIDHDvPlTuht-Q0v64,3917
|
76
|
+
copyparty/web/splash.js.gz,sha256=kPLyo_LaoEdRswRNHU32G4rQY8x5Jes4iAIIvK2ug9U,1442
|
77
|
+
copyparty/web/svcs.html,sha256=Lniv3ndzV1ALGOdvMNKg6za5rafrqltuwoknYbExRxM,11711
|
78
78
|
copyparty/web/svcs.js.gz,sha256=k81ZvZ3I-f4fMHKrNGGOgOlvXnCBz0mVjD-8mieoWCA,520
|
79
79
|
copyparty/web/ui.css.gz,sha256=skuzZHqTU0ag5hButpQmKI9wM7ro-UJ2PnpTodTWYF4,2616
|
80
|
-
copyparty/web/up2k.js.gz,sha256=
|
81
|
-
copyparty/web/util.js.gz,sha256=
|
80
|
+
copyparty/web/up2k.js.gz,sha256=3IKVXjZq7byJWFKyHVylIIbWozsJ6IL7CrOUCibE8BY,22114
|
81
|
+
copyparty/web/util.js.gz,sha256=eNRKtW7fM9AvipRdJGQyy9mbQIqMda73o8Bo64UWr7s,14416
|
82
82
|
copyparty/web/w.hash.js.gz,sha256=__hBMd5oZWfTrb8ZCJNT21isoSqyrxKE6qdaKGQVAhc,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=
|
85
|
+
copyparty/web/a/u2c.py,sha256=qyK4G1mkICAjmo99YV8ubi2Zk6GG8S8yldW6D18Pnos,38626
|
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.
|
106
|
-
copyparty-1.
|
107
|
-
copyparty-1.
|
108
|
-
copyparty-1.
|
109
|
-
copyparty-1.
|
110
|
-
copyparty-1.
|
105
|
+
copyparty-1.13.1.dist-info/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
|
106
|
+
copyparty-1.13.1.dist-info/METADATA,sha256=HMm1ZQpKi3_hfKuT0-Rowdv0kdJXGsK2AK4YU7yaW7Q,122167
|
107
|
+
copyparty-1.13.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
108
|
+
copyparty-1.13.1.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
|
109
|
+
copyparty-1.13.1.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
|
110
|
+
copyparty-1.13.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|