mojibake fixes

This commit is contained in:
ed 2021-05-29 09:01:59 +02:00
parent 38d8d9733f
commit d25881d5c3
6 changed files with 29 additions and 24 deletions

View file

@ -428,7 +428,7 @@ class HttpCli(object):
fn = "put-{:.6f}-{}.bin".format(time.time(), addr)
path = os.path.join(fdir, fn)
with open(path, "wb", 512 * 1024) as f:
with open(fsenc(path), "wb", 512 * 1024) as f:
post_sz, _, sha_b64 = hashcopy(self.conn, reader, f)
self.conn.hsrv.broker.put(
@ -548,9 +548,9 @@ class HttpCli(object):
if sub:
try:
dst = os.path.join(vfs.realpath, rem)
os.makedirs(dst)
os.makedirs(fsenc(dst))
except:
if not os.path.isdir(dst):
if not os.path.isdir(fsenc(dst)):
raise Pebkac(400, "some file got your folder name")
x = self.conn.hsrv.broker.put(True, "up2k.handle_json", body)
@ -638,7 +638,7 @@ class HttpCli(object):
reader = read_socket(self.sr, remains)
with open(path, "rb+", 512 * 1024) as f:
with open(fsenc(path), "rb+", 512 * 1024) as f:
f.seek(cstart[0])
post_sz, _, sha_b64 = hashcopy(self.conn, reader, f)
@ -681,7 +681,7 @@ class HttpCli(object):
times = (int(time.time()), int(lastmod))
self.log("no more chunks, setting times {}".format(times))
try:
os.utime(path, times)
os.utime(fsenc(path), times)
except:
self.log("failed to utime ({}, {})".format(path, times))
@ -932,16 +932,16 @@ class HttpCli(object):
mdir, mfile = os.path.split(fp)
mfile2 = "{}.{:.3f}.md".format(mfile[:-3], srv_lastmod)
try:
os.mkdir(os.path.join(mdir, ".hist"))
os.mkdir(fsenc(os.path.join(mdir, ".hist")))
except:
pass
os.rename(fp, os.path.join(mdir, ".hist", mfile2))
os.rename(fsenc(fp), fsenc(os.path.join(mdir, ".hist", mfile2)))
p_field, _, p_data = next(self.parser.gen)
if p_field != "body":
raise Pebkac(400, "expected body, got {}".format(p_field))
with open(fp, "wb", 512 * 1024) as f:
with open(fsenc(fp), "wb", 512 * 1024) as f:
sz, sha512, _ = hashcopy(self.conn, p_data, f)
new_lastmod = os.stat(fsenc(fp)).st_mtime
@ -1269,7 +1269,7 @@ class HttpCli(object):
"md_chk_rate": self.args.mcr,
"md": boundary,
}
html = template.render(**targs).encode("utf-8")
html = template.render(**targs).encode("utf-8", "replace")
html = html.split(boundary.encode("utf-8"))
if len(html) != 2:
raise Exception("boundary appears in " + html_path)
@ -1422,7 +1422,7 @@ class HttpCli(object):
)
srv_info.append(humansize(bfree.value) + " free")
else:
sv = os.statvfs(abspath)
sv = os.statvfs(fsenc(abspath))
free = humansize(sv.f_frsize * sv.f_bfree, True)
total = humansize(sv.f_frsize * sv.f_blocks, True)

View file

@ -392,7 +392,7 @@ class MTag(object):
import mutagen
try:
md = mutagen.File(abspath, easy=True)
md = mutagen.File(fsenc(abspath), easy=True)
x = md.info.length
except Exception as ex:
return {}
@ -403,7 +403,7 @@ class MTag(object):
try:
q = int(md.info.bitrate / 1024)
except:
q = int((os.path.getsize(abspath) / dur) / 128)
q = int((os.path.getsize(fsenc(abspath)) / dur) / 128)
ret[".dur"] = [0, dur]
ret[".q"] = [0, q]

View file

@ -228,7 +228,7 @@ class ThumbSrv(object):
self.nthr -= 1
def conv_pil(self, abspath, tpath):
with Image.open(abspath) as im:
with Image.open(fsenc(abspath)) as im:
crop = not self.args.th_no_crop
res2 = self.res
if crop:

View file

@ -163,7 +163,7 @@ class U2idx(object):
if rd.startswith("//") or fn.startswith("//"):
rd, fn = s3dec(rd, fn)
rp = os.path.join(vtop, rd, fn).replace("\\", "/")
rp = "/".join([vtop, rd, fn])
sret.append({"ts": int(ts), "sz": sz, "rp": rp, "w": w[:16]})
for hit in sret:

View file

@ -918,7 +918,7 @@ class Up2k(object):
if dp_dir.startswith("//") or dp_fn.startswith("//"):
dp_dir, dp_fn = s3dec(dp_dir, dp_fn)
dp_abs = os.path.join(cj["ptop"], dp_dir, dp_fn).replace("\\", "/")
dp_abs = "/".join([cj["ptop"], dp_dir, dp_fn])
# relying on path.exists to return false on broken symlinks
if os.path.exists(fsenc(dp_abs)):
job = {
@ -944,7 +944,7 @@ class Up2k(object):
for fn in names:
path = os.path.join(job["ptop"], job["prel"], fn)
try:
if os.path.getsize(path) > 0:
if os.path.getsize(fsenc(path)) > 0:
# upload completed or both present
break
except:
@ -1068,6 +1068,9 @@ class Up2k(object):
raise Pebkac(400, "unknown wark")
if chash not in job["need"]:
msg = "chash = {} , need:\n".format(chash)
msg += "\n".join(job["need"])
self.log(msg)
raise Pebkac(400, "already got that but thanks??")
nchunk = [n for n, v in enumerate(job["hash"]) if v == chash]
@ -1173,10 +1176,10 @@ class Up2k(object):
return wark
def _hashlist_from_file(self, path):
fsz = os.path.getsize(path)
fsz = os.path.getsize(fsenc(path))
csz = up2k_chunksize(fsz)
ret = []
with open(path, "rb", 512 * 1024) as f:
with open(fsenc(path), "rb", 512 * 1024) as f:
while fsz > 0:
self.pp.msg = "{} MB, {}".format(int(fsz / 1024 / 1024), path)
hashobj = hashlib.sha512()
@ -1267,13 +1270,13 @@ class Up2k(object):
try:
# remove the filename reservation
path = os.path.join(job["ptop"], job["prel"], job["name"])
if os.path.getsize(path) == 0:
os.unlink(path)
if os.path.getsize(fsenc(path)) == 0:
os.unlink(fsenc(path))
if len(job["hash"]) == len(job["need"]):
# PARTIAL is empty, delete that too
path = os.path.join(job["ptop"], job["prel"], job["tnam"])
os.unlink(path)
os.unlink(fsenc(path))
except:
pass
@ -1281,8 +1284,8 @@ class Up2k(object):
if not reg:
if k not in prev or prev[k] is not None:
prev[k] = None
if os.path.exists(path):
os.unlink(path)
if os.path.exists(fsenc(path)):
os.unlink(fsenc(path))
return
newest = max(x["poke"] for _, x in reg.items()) if reg else 0

View file

@ -271,7 +271,7 @@ def ren_open(fname, *args, **kwargs):
else:
fpath = fname
if suffix and os.path.exists(fpath):
if suffix and os.path.exists(fsenc(fpath)):
fpath += suffix
fname += suffix
ext += suffix
@ -751,6 +751,8 @@ def s3dec(rd, fn):
def atomic_move(src, dst):
src = fsenc(src)
dst = fsenc(dst)
if not PY2:
os.replace(src, dst)
else: