class TaskMng(object): def __init__(self, filenames = ()): self._cp = ConfigParser() self._cp.read(filenames) self._mng = AppsMng() def resolve(self, taskname): def listify_values(section, d): list_keys = [] if section == 'global': list_keys += ['notifiers'] elif section.startswith('task.'): list_keys += ['zizi.include', 'zizi.subtasks'] for k in list_keys: if k in d: d[k] = re.split(r',\s+', d[k]) if not self._cp.has_section(taskname): raise Exception('task not found', taskname) d = { k : v for (k, v) in self._cp[taskname].items() } listify_values(taskname, d) # Resolve subtasks if 'zizi.subtasks' in d: r = [] for x in [self.resolve(x) for x in d['zizi.subtasks']]: r += x return r # Resolve includes if 'zizi.include' in d: tmp = {} for subtask in [self.resolve(x) for x in d['zizi.include']]: tmp.update(subtask) d.update(tmp) del(d['zizi.include']) # Check for app key if not 'zizi.app' in d: raise Exception('Task %s must specify zizi.app (%s)' % (taskname, repr(d))) return [{ k.replace('-','_') : v for (k, v) in d.items() if k == 'zizi.app' or not k.startswith('zizi.') }] def execute(self, taskname): tasks = self.resolve(taskname) for task in tasks: app = task['zizi.app'] del (task['zizi.app']) cls = self._mng.get_addon(app) try: cls().run(**task) except Exception as e: print("Task %s(%s) failed: %s" % (app, task, repr(e)))
def __init__(self, filenames = ()): self._cp = ConfigParser() self._cp.read(filenames) self._mng = AppsMng()