@@ -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 )
211219async 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