Source code for asterism.pipeline_manager.analysis_tasks

"""

"""
from __future__ import division, absolute_import
from .analysis_parameters import ParametersList
import inspect
from .processing_tools import *
import traceback
import sys

__author__ = 'andrea tramacere'

[docs]class AnalysisTask(object): """ Class for single Task """ def __init__(self,name,func,parser=None,process=None): self.name=name self.func=func self.parameters_list=ParametersList(name,self,parser=parser) self._build_par_dic() self._parsing_done=False self.parser=parser self.conf_file_dict=None self.process=process def _build_par_dic(self): #print "----------> FUNC in _build_par_dic <------------------" self._par_dic={} varnames=inspect.getargs(self.func.func_code)[0] default=inspect.getargspec(self.func)[-1] if default is None: d=0 else: d=len(varnames)-len(default) for ID,vname in enumerate(varnames): #print"var name",vname self._par_dic[vname]=None if d>0: for ID in xrange(d,len(varnames)): self._par_dic[vname]=default[ID-d] #print "keywordarg",varnames[ID],default[ID-d] #self._par_dic={key: None for (key) in varnames} #print 'v',varnames, self._par_dic #print "----------------------------------------" def _build_conf_pars_dict(self,conf_file_lines): self.conf_file_dict=parse_process_section(conf_file_lines,self.process.name,self.name) def _set_par_dic(self,**kwargs): for par in self.parameters_list.pars: self._par_dic[par.name]=par.value for mex_group in self.parameters_list.mex_groups: for par in mex_group.pars: self._par_dic[par.name]=par.value #print par.name for key in kwargs.keys(): self._par_dic[key]=kwargs[key]
[docs] def set_par(self,name,**kwargs): self.parameters_list.set_par(name,**kwargs)
[docs] def get_par_value(self,name): try: #print "->", name return self.parameters_list.get_par_value(name) except Exception as e: print e
[docs] def add_par(self,name,**kwargs): try: self.parameters_list.add_par(name,**kwargs) except Exception as e: print e
[docs] def list_parameters(self): self.parameters_list.list_paremters()
[docs] def set_pars_from_parser(self,args,argv,args_dict,conf_file_lines=None): if conf_file_lines!=None: self._build_conf_pars_dict(conf_file_lines) self.parameters_list.set_pars_from_parser(args,argv,args_dict,conf_file_dict=self.conf_file_dict) self._parsing_done=True
[docs] def run(self,extra_message=None,**kwargs): self.start_message() if self.parser!=None and self._parsing_done==False: print "set_par_from_parser" self.set_pars_from_parser() self._set_par_dic(**kwargs) try: return self.func(**self._par_dic) except Exception, e: exception_mess=e exit_status='FAILED' print "Failed, task:", self.name print traceback.format_exc() sys.exit(1) return None
[docs] def start_message(self,extra_message=None): print "|------------------------------" print "| Task:",self.name, "Start" print "|------------------------------" if extra_message != None: print "|",extra_message
[docs] def stop_message(self,): print "|-------------------------------------------------------" print "| Task:",self.name, "Done" print "|-------------------------------------------------------" print print