mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
fix stuff
This commit is contained in:
parent
5e03b3ca38
commit
972a56e738
|
@ -60,7 +60,7 @@ class VFS(object):
|
||||||
return self.nodes[name].add(src, dst)
|
return self.nodes[name].add(src, dst)
|
||||||
|
|
||||||
vn = VFS(
|
vn = VFS(
|
||||||
os.path.join(self.realpath, name),
|
os.path.join(self.realpath, name) if self.realpath else name,
|
||||||
"{}/{}".format(self.vpath, name).lstrip("/"),
|
"{}/{}".format(self.vpath, name).lstrip("/"),
|
||||||
self.uread,
|
self.uread,
|
||||||
self.uwrite,
|
self.uwrite,
|
||||||
|
@ -92,7 +92,7 @@ class VFS(object):
|
||||||
|
|
||||||
def bubble_flags(self):
|
def bubble_flags(self):
|
||||||
if self.dbv:
|
if self.dbv:
|
||||||
for k, v in self.dbv.flags:
|
for k, v in self.dbv.flags.items():
|
||||||
if k not in ["hist"]:
|
if k not in ["hist"]:
|
||||||
self.flags[k] = v
|
self.flags[k] = v
|
||||||
|
|
||||||
|
|
|
@ -258,7 +258,14 @@ class HttpCli(object):
|
||||||
return "?" + "&".join(r)
|
return "?" + "&".join(r)
|
||||||
|
|
||||||
def redirect(
|
def redirect(
|
||||||
self, vpath, suf="", msg="aight", flavor="go to", click=True, use302=False
|
self,
|
||||||
|
vpath,
|
||||||
|
suf="",
|
||||||
|
msg="aight",
|
||||||
|
flavor="go to",
|
||||||
|
click=True,
|
||||||
|
status=200,
|
||||||
|
use302=False,
|
||||||
):
|
):
|
||||||
html = self.j2(
|
html = self.j2(
|
||||||
"msg",
|
"msg",
|
||||||
|
@ -273,7 +280,7 @@ class HttpCli(object):
|
||||||
h = {"Location": "/" + vpath, "Cache-Control": "no-cache"}
|
h = {"Location": "/" + vpath, "Cache-Control": "no-cache"}
|
||||||
self.reply(html, status=302, headers=h)
|
self.reply(html, status=302, headers=h)
|
||||||
else:
|
else:
|
||||||
self.reply(html)
|
self.reply(html, status=status)
|
||||||
|
|
||||||
def handle_get(self):
|
def handle_get(self):
|
||||||
if self.do_log:
|
if self.do_log:
|
||||||
|
@ -826,7 +833,7 @@ class HttpCli(object):
|
||||||
raise Pebkac(400, "empty files in post")
|
raise Pebkac(400, "empty files in post")
|
||||||
|
|
||||||
files.append([sz, sha512_hex, p_file, fname])
|
files.append([sz, sha512_hex, p_file, fname])
|
||||||
dbv, vrem = vfs.get_dbv(vrem)
|
dbv, vrem = vfs.get_dbv(rem)
|
||||||
self.conn.hsrv.broker.put(
|
self.conn.hsrv.broker.put(
|
||||||
False,
|
False,
|
||||||
"up2k.hash_file",
|
"up2k.hash_file",
|
||||||
|
@ -863,12 +870,16 @@ class HttpCli(object):
|
||||||
status = "OK"
|
status = "OK"
|
||||||
if errmsg:
|
if errmsg:
|
||||||
self.log(errmsg)
|
self.log(errmsg)
|
||||||
errmsg = "ERROR: " + errmsg
|
|
||||||
status = "ERROR"
|
status = "ERROR"
|
||||||
|
|
||||||
msg = "{} // {} bytes // {:.3f} MiB/s\n".format(status, sz_total, spd)
|
msg = "{} // {} bytes // {:.3f} MiB/s\n".format(status, sz_total, spd)
|
||||||
jmsg = {"status": status, "sz": sz_total, "mbps": round(spd, 3), "files": []}
|
jmsg = {"status": status, "sz": sz_total, "mbps": round(spd, 3), "files": []}
|
||||||
|
|
||||||
|
if errmsg:
|
||||||
|
msg += errmsg + "\n"
|
||||||
|
jmsg["error"] = errmsg
|
||||||
|
errmsg = "ERROR: " + errmsg
|
||||||
|
|
||||||
for sz, sha512, ofn, lfn in files:
|
for sz, sha512, ofn, lfn in files:
|
||||||
vpath = (self.vpath + "/" if self.vpath else "") + lfn
|
vpath = (self.vpath + "/" if self.vpath else "") + lfn
|
||||||
msg += 'sha512: {} // {} bytes // <a href="/{}">{}</a>\n'.format(
|
msg += 'sha512: {} // {} bytes // <a href="/{}">{}</a>\n'.format(
|
||||||
|
@ -900,11 +911,21 @@ class HttpCli(object):
|
||||||
ft = "{}\n{}\n{}\n".format(ft, msg.rstrip(), errmsg)
|
ft = "{}\n{}\n{}\n".format(ft, msg.rstrip(), errmsg)
|
||||||
f.write(ft.encode("utf-8"))
|
f.write(ft.encode("utf-8"))
|
||||||
|
|
||||||
|
status = 400 if errmsg else 200
|
||||||
if "j" in self.uparam:
|
if "j" in self.uparam:
|
||||||
jtxt = json.dumps(jmsg, indent=2, sort_keys=True)
|
jtxt = json.dumps(jmsg, indent=2, sort_keys=True).encode("utf-8", "replace")
|
||||||
self.reply(jtxt.encode("utf-8", "replace"), mime="application/json")
|
self.reply(jtxt, mime="application/json", status=status)
|
||||||
else:
|
else:
|
||||||
self.redirect(self.vpath, msg=msg, flavor="return to", click=False)
|
self.redirect(
|
||||||
|
self.vpath,
|
||||||
|
msg=msg,
|
||||||
|
flavor="return to",
|
||||||
|
click=False,
|
||||||
|
status=status,
|
||||||
|
)
|
||||||
|
|
||||||
|
if errmsg:
|
||||||
|
return False
|
||||||
|
|
||||||
self.parser.drop()
|
self.parser.drop()
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -54,7 +54,7 @@ except:
|
||||||
# https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
|
# https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
|
||||||
# ffmpeg -formats
|
# ffmpeg -formats
|
||||||
FMT_PIL = "bmp dib gif icns ico jpg jpeg jp2 jpx pcx png pbm pgm ppm pnm sgi tga tif tiff webp xbm dds xpm"
|
FMT_PIL = "bmp dib gif icns ico jpg jpeg jp2 jpx pcx png pbm pgm ppm pnm sgi tga tif tiff webp xbm dds xpm"
|
||||||
FMT_FF = "av1 asf avi flv m4v mkv mjpeg mjpg mpg mpeg mpg2 mpeg2 mov 3gp mp4 ts mpegts nut ogv ogm rm vob webm wmv"
|
FMT_FF = "av1 asf avi flv m4v mkv mjpeg mjpg mpg mpeg mpg2 mpeg2 h264 avc h265 hevc mov 3gp mp4 ts mpegts nut ogv ogm rm vob webm wmv"
|
||||||
|
|
||||||
if HAVE_HEIF:
|
if HAVE_HEIF:
|
||||||
FMT_PIL += " heif heifs heic heics"
|
FMT_PIL += " heif heifs heic heics"
|
||||||
|
|
|
@ -579,8 +579,10 @@ def read_header(sr):
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
sr.unrecv(ret[ofs + 4 :])
|
if len(ret) > ofs + 4:
|
||||||
return ret[:ofs].decode("utf-8", "surrogateescape").split("\r\n")
|
sr.unrecv(ret[ofs + 4 :])
|
||||||
|
|
||||||
|
return ret[:ofs].decode("utf-8", "surrogateescape").lstrip("\r\n").split("\r\n")
|
||||||
|
|
||||||
|
|
||||||
def humansize(sz, terse=False):
|
def humansize(sz, terse=False):
|
||||||
|
|
89
scripts/test/smoketest.py
Normal file
89
scripts/test/smoketest.py
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import signal
|
||||||
|
import shutil
|
||||||
|
import tempfile
|
||||||
|
import requests
|
||||||
|
import threading
|
||||||
|
import subprocess as sp
|
||||||
|
|
||||||
|
|
||||||
|
class Cpp(object):
|
||||||
|
def __init__(self, args):
|
||||||
|
self.p = sp.Popen([sys.executable, "-m", "copyparty"] + args)
|
||||||
|
# , stdout=sp.PIPE, stderr=sp.PIPE)
|
||||||
|
|
||||||
|
self.t = threading.Thread(target=self._run)
|
||||||
|
self.t.daemon = True
|
||||||
|
self.t.start()
|
||||||
|
|
||||||
|
def _run(self):
|
||||||
|
self.so, self.se = self.p.communicate()
|
||||||
|
|
||||||
|
def stop(self, wait):
|
||||||
|
# self.p.kill()
|
||||||
|
os.kill(self.p.pid, signal.SIGINT)
|
||||||
|
if wait:
|
||||||
|
self.t.join()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
ub = "http://127.0.0.1:4321/"
|
||||||
|
td = os.path.join("srv", "smoketest")
|
||||||
|
try:
|
||||||
|
shutil.rmtree(td)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
os.mkdir(td)
|
||||||
|
|
||||||
|
vidp = os.path.join(tempfile.gettempdir(), "smoketest.h264")
|
||||||
|
if not os.path.exists(vidp):
|
||||||
|
cmd = "ffmpeg -f lavfi -i testsrc=48x32:3 -t 1 -c:v libx264 -tune animation -preset veryslow -crf 69"
|
||||||
|
sp.check_call(cmd.split(" ") + [vidp])
|
||||||
|
|
||||||
|
with open(vidp, "rb") as f:
|
||||||
|
ovid = f.read()
|
||||||
|
|
||||||
|
args = ["-p", "4321"]
|
||||||
|
pdirs = []
|
||||||
|
|
||||||
|
for d1 in ["r", "w", "a"]:
|
||||||
|
pdirs.append("{}/{}".format(td, d1))
|
||||||
|
for d2 in ["r", "w", "a"]:
|
||||||
|
d = os.path.join(td, d1, "j", d2)
|
||||||
|
pdirs.append(d.replace("\\", "/"))
|
||||||
|
os.makedirs(d)
|
||||||
|
|
||||||
|
udirs = [x.split("/", 2)[2] for x in pdirs]
|
||||||
|
for pd, ud in zip(pdirs, udirs):
|
||||||
|
# args += ["-v", "{}:{}:{}".format(d.split("/", 1)[1], d, d[-1])]
|
||||||
|
args += ["-v", "{}:{}:{}".format(pd, ud, ud[-1])]
|
||||||
|
|
||||||
|
cpp = Cpp(args)
|
||||||
|
|
||||||
|
up = False
|
||||||
|
for n in range(30):
|
||||||
|
try:
|
||||||
|
time.sleep(0.1)
|
||||||
|
requests.get(ub + "?h", timeout=0.1)
|
||||||
|
up = True
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
assert up
|
||||||
|
# for d in dirs:
|
||||||
|
# rd, fn = d.rsplit("/", 1)
|
||||||
|
# requests.post(ub + rd, files={"act": "mkdir", "name": fn})
|
||||||
|
|
||||||
|
for d in udirs:
|
||||||
|
vid = ovid + "\n{}".format(d).encode("utf-8")
|
||||||
|
requests.post(ub + d, data={"act": "bput"}, files={"f": ("a.h264", vid)})
|
||||||
|
time.sleep(3)
|
||||||
|
cpp.stop(True)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue