"""Handles interaction with scancel command.Copyright 2021, Bill & Melinda Gates Foundation. All rights reserved."""importsubprocessfromloggingimportDEBUG,getLoggerfromtypingimportDict,Tuple,List,UnionERROR_NO_JOB_ID="No job id provided for command"logger=getLogger()
[docs]defcommand_scancel(info:Dict)->Dict:""" Interacts with the scancel command. Args: info: Info on what to cancel Returns: Result from cancel """if'job_ids'ininfo:job_ids=info['job_ids']output,return_code=run_cancel(job_ids)result=dict(status="success"ifreturn_code==0else"error",return_code=return_code,output=output)else:result=dict(status="error",return_code=-1,output=ERROR_NO_JOB_ID)returnresult
[docs]defrun_cancel(job_ids:Union[str,List[str]])->Tuple:""" Kick out slurm scancel command. Args: job_ids: slurm job id list """ifisinstance(job_ids,str):job_ids=[job_ids]result=subprocess.run(['scancel',*job_ids],stdout=subprocess.PIPE)print('result: ',result)stdout="success"ifresult.returncode==0else'error'iflogger.isEnabledFor(DEBUG):logger.debug(f"Result for scancel job {job_ids}\n=============\n{stdout}\n=============\n\n")returnstdout,result.returncode