Skip to content

Commit 7752c8c

Browse files
committed
lava_callback: Add patch upload support to /patchset endpoint
Signed-off-by: Paweł Wieczorek <[email protected]>
1 parent 16d31f9 commit 7752c8c

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/lava_callback.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,14 @@ def _upload_log(log_parser, job_node, storage):
207207
return _upload_file(storage, job_node, src, 'log.txt.gz')
208208

209209

210+
def _upload_patch(data, upload_id, filename, storage):
211+
with tempfile.TemporaryDirectory() as tmp_dir:
212+
src = os.path.join(tmp_dir, filename)
213+
with open(src, 'wt') as f:
214+
f.write(data)
215+
return _upload_file(storage, upload_id, src, filename)
216+
217+
210218
@app.get('/', response_class=HTMLResponse)
211219
async def read_root():
212220
page = '''
@@ -741,6 +749,11 @@ async def patchset(data: PatchSet, request: Request,
741749
item['message'] = 'Node is not a checkout'
742750
return JSONResponse(content=item, status_code=400)
743751

752+
# Maybe add field who requested the patchset?
753+
treeidsrc = node['data']['kernel_revision']['url'] + \
754+
node['data']['kernel_revision']['branch'] + str(datetime.now())
755+
treeid = hashlib.sha256(treeidsrc.encode()).hexdigest()
756+
744757
# validate patch URL
745758
if data.patchurl:
746759
if isinstance(data.patchurl, list):
@@ -754,20 +767,22 @@ async def patchset(data: PatchSet, request: Request,
754767
else:
755768
return 'Invalid patch URL type', 400
756769
elif data.patch:
757-
# We need to implement upload to storage and return URL
758-
item['message'] = 'Not implemented yet'
759-
return JSONResponse(content=item, status_code=501)
770+
if isinstance(data.patch, list):
771+
data.patchurl = []
772+
upload_id = {
773+
'name': 'patchset',
774+
'id': treeid,
775+
}
776+
for i, patch in enumerate(data.patch):
777+
patchurl = _upload_patch(patch, upload_id, f'patch{i}', storage)
778+
data.patchurl.append(patchurl)
760779
else:
761780
item['message'] = 'Missing patch URL or patch'
762781
return JSONResponse(content=item, status_code=400)
763782

764783
# Now we can submit custom patchset node to the API
765-
# Maybe add field who requested the patchset?
766784
timeout = 300
767785
patchset_timeout = datetime.utcnow() + timedelta(minutes=timeout)
768-
treeidsrc = node['data']['kernel_revision']['url'] + \
769-
node['data']['kernel_revision']['branch'] + str(datetime.now())
770-
treeid = hashlib.sha256(treeidsrc.encode()).hexdigest()
771786
# copy node to newnode
772787
newnode = node.copy()
773788
# delete some fields, like id, created, updated, timeout

0 commit comments

Comments
 (0)