@@ -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 ('/' )
178186async 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