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