Skip to content

Commit efba883

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

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/lava_callback.py

+22-7
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,14 @@ def _upload_log(log_parser, job_node, storage):
174174
return _upload_file(storage, job_node, src, 'log.txt.gz')
175175

176176

177+
def _upload_patch(data, upload_id, filename, storage):
178+
with tempfile.TemporaryDirectory() as tmp_dir:
179+
src = os.path.join(tmp_dir, filename)
180+
with open(src, 'wt') as f:
181+
f.write(data)
182+
return _upload_file(storage, upload_id, src, filename)
183+
184+
177185
@app.get('/')
178186
async def read_root():
179187
page = '''
@@ -675,6 +683,11 @@ async def patchset(data: PatchSet, request: Request,
675683
item['message'] = 'Node is not a checkout'
676684
return JSONResponse(content=item, status_code=400)
677685

686+
# Maybe add field who requested the patchset?
687+
treeidsrc = node['data']['kernel_revision']['url'] + \
688+
node['data']['kernel_revision']['branch'] + str(datetime.now())
689+
treeid = hashlib.sha256(treeidsrc.encode()).hexdigest()
690+
678691
# validate patch URL
679692
if data.patchurl:
680693
if isinstance(data.patchurl, list):
@@ -688,20 +701,22 @@ async def patchset(data: PatchSet, request: Request,
688701
else:
689702
return 'Invalid patch URL type', 400
690703
elif data.patch:
691-
# We need to implement upload to storage and return URL
692-
item['message'] = 'Not implemented yet'
693-
return JSONResponse(content=item, status_code=501)
704+
if isinstance(data.patch, list):
705+
data.patchurl = []
706+
upload_id = {
707+
'name' = 'patchset',
708+
'id' = treeid,
709+
}
710+
for i, patch in enumerate(data.patch):
711+
patchurl = _upload_patch(patch, upload_id, f'patch{i}', storage)
712+
data.patchurl.append(patchurl)
694713
else:
695714
item['message'] = 'Missing patch URL or patch'
696715
return JSONResponse(content=item, status_code=400)
697716

698717
# Now we can submit custom patchset node to the API
699-
# Maybe add field who requested the patchset?
700718
timeout = 300
701719
patchset_timeout = datetime.utcnow() + timedelta(minutes=timeout)
702-
treeidsrc = node['data']['kernel_revision']['url'] + \
703-
node['data']['kernel_revision']['branch'] + str(datetime.now())
704-
treeid = hashlib.sha256(treeidsrc.encode()).hexdigest()
705720
# copy node to newnode
706721
newnode = node.copy()
707722
# delete some fields, like id, created, updated, timeout

0 commit comments

Comments
 (0)