# HG changeset patch # User Goffi # Date 1588532842 -7200 # Node ID 6161076193e06f48d2879565ff32731b14723ffa # Parent 0b269d4a46a363abf87dd05f6d640dff5e9b0ea2 tasks: dir event filter: if a Task instance implements `onDirEvent`, it will be called instead of `start`, this way the task can filter the events or modify the workflow. diff -r 0b269d4a46a3 -r 6161076193e0 libervia/server/tasks/manager.py --- a/libervia/server/tasks/manager.py Sun May 03 19:32:20 2020 +0200 +++ b/libervia/server/tasks/manager.py Sun May 03 21:07:22 2020 +0200 @@ -140,17 +140,19 @@ """Called when an event is received from a watched directory""" if flags == ['create']: return - return defer.ensureDeferred(self.runTask(task_name)) - - async def runTask(self, task_name): - """Run a single task + try: + task = self.tasks[task_name] + on_dir_event_cb = task.onDirEvent + except AttributeError: + return defer.ensureDeferred(self.runTask(task_name)) + else: + return utils.asDeferred( + on_dir_event_cb, host, Path(filepath.path.decode()), flags) - @param task_name(unicode): name of the task to run - """ - task = self.tasks[task_name] - self._current_task = task_name + async def runTaskInstance(self, task: Task) -> None: + self._current_task = task.name log.info(_('== running task "{task_name}" for {site_name} =='.format( - task_name=task_name, site_name=self.site_name or DEFAULT_SITE_LABEL))) + task_name=task.name, site_name=self.site_name or DEFAULT_SITE_LABEL))) os.chdir(self.site_path) try: await utils.asDeferred(task.start) @@ -160,11 +162,19 @@ raise e elif on_error == 'continue': log.warning(_('Task "{task_name}" failed for {site_name}: {reason}') - .format(task_name=task_name, site_name=self.site_name, reason=e)) + .format(task_name=task.name, site_name=self.site_name, reason=e)) else: raise exceptions.InternalError("we should never reach this point") self._current_task = None + async def runTask(self, task_name: str) -> None: + """Run a single task + + @param task_name(unicode): name of the task to run + """ + task = self.tasks[task_name] + await self.runTaskInstance(task) + async def runTasks(self): """Run all the tasks found""" old_path = os.getcwd() diff -r 0b269d4a46a3 -r 6161076193e0 libervia/server/tasks/task.py --- a/libervia/server/tasks/task.py Sun May 03 19:32:20 2020 +0200 +++ b/libervia/server/tasks/task.py Sun May 03 21:07:22 2020 +0200 @@ -31,6 +31,8 @@ ON_ERROR: str = "stop" LOG_OUTPUT: bool = True # list of directories to check for restarting this task + # Task.onDirEvent will be called if it exists, otherwise + # the task will be run and Task.start will be called WATCH_DIRS: Optional[list] = None def __init__(self, manager):