* performance improvements

meow
Dominika Liberda 2021-12-20 15:33:37 +01:00
parent 4ec1ea41c2
commit dfe6c493de
1 changed files with 20 additions and 16 deletions

36
main.py
View File

@ -15,7 +15,7 @@ headers = {"Authorization": "token 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",
user = "DomiOwO"
repo = "iwisoftware"
files=[{}]
files_buffers=[b""]
files_buffers=[[]]
def getReleases():
if not releases:
@ -33,9 +33,10 @@ def allocateFd(path):
global files, files_buffers
fd = len(files)
files += [{"path": path,
"state": None # 0 - read, 1 - write
"state": None, # 0 - read, 1 - write
"len": 0
}]
files_buffers += [b""]
files_buffers += [[]]
return fd
class Passthrough(Operations):
@ -206,29 +207,31 @@ class Passthrough(Operations):
return allocateFd(path)
def read(self, path, length, offset, fh):
f = files[h]
f = files[fh]
f["state"] = 0
print("-- read: offset ", offset, " len ", length, " path ", path)
if offset == 0:
fetch_len = 16384 # small buffer arrives like wroom
else:
fetch_len = 10485760 # big buffer goes whoosh
if offset + length > len(files_buffers[fh]):
print("buffer exhausted: ", len(files_buffers[fh]))
#fetch_len = 524289 # small buffer arrives like wroom
#if offset != 0:
fetch_len = 10485760 # big buffer goes whoosh
print(len(files_buffers[fh]) + fetch_len)
if offset + length > f["len"]:
print("buffer exhausted: ", f["len"])
_h = headers
_h["Range"] = "bytes=" + str(len(files_buffers[fh])) + "-" + str(len(files_buffers[fh]) + fetch_len)
_h["Range"] = "bytes=" + str(f["len"]) + "-" + str(f["len"] + fetch_len - 1)
f["len"] += fetch_len
_h["Accept"] = "application/octet-stream"
a = requests.get("https://api.github.com/repos/" + user + "/" + repo + "/releases/assets/" + str(assets[path.split("/")[-2]][path.split("/")[-1]]["id"]),
headers = _h);
files_buffers[fh] += a.content
return files_buffers[fh][offset:offset+length]
files_buffers[fh].append(bytes(a.content))
return b''.join(files_buffers[fh])[offset:offset+length]
def write(self, path, buf, offset, fh):
#print("-- write: offset ", offset, " path ", path)
f = files[fh]
f["state"] = 1
files_buffers[fh] += buf
files_buffers[fh].append(bytes(buf))
return len(buf)
def truncate(self, path, length, fh=None):
@ -253,13 +256,14 @@ class Passthrough(Operations):
a = requests.post(
"https://uploads.github.com/repos/" + user + "/" + repo + "/releases/" + str(id) + "/assets?name=" +
path.split('/')[-1],
data = files_buffers[fh],
data = b''.join(files_buffers[fh]),
headers = _h)
print(a.content)
res = a.json()
print(assets[path.split('/')[-2]])
if not assets[path.split('/')[-2]]:
assets[path.split('/')[-2]]={}
print(assets[path.split('/')[-2]])
assets[path.split('/')[-2]][path.split('/')[-1]] = {"id": res["id"], "size": res["size"]}
del(files[fh]) # idk, bad syntax?
del(files_buffers[fh])