def check_module(config, modname, indent=''): """ Check module """ cnts = [0] * NUMCNTS print "%sChecking module %s..." % (indent, modname) moddict = config[pfwdefs.SW_MODULESECT][modname] dataobjs = {pfwdefs.SW_INPUTS: {}, pfwdefs.SW_OUTPUTS: {}} # check that have wrappername (required) if pfwdefs.SW_WRAPPERNAME not in moddict and \ not miscutils.convertBool(moddict[pfwdefs.PF_NOOP]): error(indent+' ', "module %s - missing %s value" % (modname, pfwdefs.SW_WRAPPERNAME)) cnts[ERRCNT_POS] += 1 # check that have at least 1 exec section (required) execsects = intgmisc.get_exec_sections(moddict, pfwdefs.SW_EXECPREFIX) if not execsects and not miscutils.convertBool(moddict[pfwdefs.PF_NOOP]): error(indent+' ', "module %s - 0 exec sections (%s*)" % (modname, pfwdefs.SW_EXECPREFIX)) cnts[ERRCNT_POS] += 1 else: # check exec sections for xsectname in execsects: xsectdict = moddict[xsectname] cnts2 = check_exec(config, modname, dataobjs, xsectname, xsectdict, indent+" ") cnts = [x + y for x, y in zip(cnts, cnts2)] # increment counts # check file/list sections cnts2 = check_dataobjs(config, modname, moddict, dataobjs, indent+" ") cnts = [x + y for x, y in zip(cnts, cnts2)] # increment counts return cnts
def determine_status(self): """ Check all task status to determine wrapper status """ status = 0 execs = intgmisc.get_exec_sections(self.inputwcl, intgdefs.IW_EXEC_PREFIX) if miscutils.fwdebug_check(6, 'BASICWRAP_DEBUG'): miscutils.fwdebug_print(f"INFO: exec sections = {execs}", WRAPPER_OUTPUT_PREFIX) for ekey in sorted(execs.keys()): if ekey in self.outputwcl: if 'task_info' in self.outputwcl[ekey]: for taskd in self.outputwcl[ekey]['task_info'].values(): if 'status' in taskd: if taskd['status'] != 0: status = taskd['status'] else: if miscutils.fwdebug_check(3, "BASICWRAP_DEBUG"): miscutils.fwdebug_print( f"WARN: Missing status in outputwcl task_info for {ekey}", WRAPPER_OUTPUT_PREFIX) status = 1 else: if miscutils.fwdebug_check(3, "BASICWRAP_DEBUG"): miscutils.fwdebug_print( f"WARN: Missing task_info in outputwcl for {ekey}", WRAPPER_OUTPUT_PREFIX) status = 1 else: status = 1 return status
def run_wrapper(self): """ Workflow for this wrapper """ if miscutils.fwdebug_check(3, 'BASICWRAP_DEBUG'): miscutils.fwdebug_print("INFO: Begin", WRAPPER_OUTPUT_PREFIX) self.outputwcl['wrapper']['start_time'] = time.time() try: execs = intgmisc.get_exec_sections(self.inputwcl, intgdefs.IW_EXEC_PREFIX) if miscutils.fwdebug_check(6, 'BASICWRAP_DEBUG'): miscutils.fwdebug_print(f"INFO: exec sections = {execs}", WRAPPER_OUTPUT_PREFIX) for ekey, iw_exec in sorted(execs.items()): ow_exec = {'task_info': {}} self.outputwcl[ekey] = ow_exec self.curr_exec = ow_exec self.transform_inputs(iw_exec) inputs = self.check_inputs(ekey) self.check_command_line(ekey, iw_exec) self.save_exec_version(iw_exec) self.create_command_line(ekey, iw_exec) self.create_output_dirs(iw_exec) self.run_exec() self.transform_outputs(iw_exec) outexist = self.check_outputs(ekey, ow_exec['status']) self.save_outputs_by_section(ekey, outexist) self.save_provenance(ekey, iw_exec, inputs, outexist, ow_exec['status']) ow_exec['status'] = 0 self.cleanup() self.outputwcl['wrapper']['status'] = self.determine_status() except SystemExit as e: miscutils.fwdebug_print( f"INFO: wrapper called sys.exit ({str(e)}). Halting.", WRAPPER_OUTPUT_PREFIX) self.outputwcl['wrapper']['status'] = int(str(e)) self.end_all_tasks(1) except Exception: (exc_type, exc_value, exc_trback) = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_trback, file=sys.stdout) self.outputwcl['wrapper']['status'] = 1 self.end_all_tasks(1) if miscutils.fwdebug_check(6, 'BASICWRAP_DEBUG'): miscutils.fwdebug_print( f"INFO: outputwcl[intgdefs.OW_OUTPUTS_BY_SECT]={self.outputwcl[intgdefs.OW_OUTPUTS_BY_SECT]}", WRAPPER_OUTPUT_PREFIX) for fsname, fssect in self.outputwcl[ intgdefs.OW_OUTPUTS_BY_SECT].items(): if miscutils.fwdebug_check(6, 'BASICWRAP_DEBUG'): miscutils.fwdebug_print( f"INFO: making string for sect {fsname}: {fssect}", WRAPPER_OUTPUT_PREFIX) for exname, exlist in fssect.items(): self.outputwcl[intgdefs.OW_OUTPUTS_BY_SECT][fsname][ exname] = provdefs.PROV_DELIM.join(exlist) self.outputwcl['wrapper']['end_time'] = time.time() miscutils.fwdebug_print( f"INFO: end - exit status = {self.get_status()}", WRAPPER_OUTPUT_PREFIX)