def load_task(self, task_name) -> tasks.Task: if task_name in self.known_missing_tasks: raise exceptions.TaskNotFound( f"Cannot run job for task {task_name} previsouly not found" ) try: # Simple case: the task is already known return self.app.tasks[task_name] except KeyError: pass # Will raise if not found or not a task try: task = tasks.load_task(task_name) except exceptions.ProcrastinateException: self.known_missing_tasks.add(task_name) raise logger.warning( f"Task at {task_name} was not registered, it's been loaded dynamically.", extra={"action": "load_dynamic_task", "task_name": task_name}, ) self.app.tasks[task_name] = task return task
def load_task(self, task_name: str, worker_id: int) -> tasks.Task: if task_name in self.known_missing_tasks: raise exceptions.TaskNotFound( f"Cancelling job for {task_name} (not found)") try: # Simple case: the task is already known return self.app.tasks[task_name] except KeyError: pass # Will raise if not found or not a task try: task = tasks.load_task(task_name) except exceptions.ProcrastinateException: self.known_missing_tasks.add(task_name) raise context = self.context_for_worker(worker_id=worker_id) self.logger.warning( f"Task at {task_name} was not registered, it's been loaded dynamically.", extra=context.log_extra(action="load_dynamic_task", task_name=task_name), ) self.app.tasks[task_name] = task return task
def load_task(path: str) -> "Task": try: task = utils.load_from_path(path, Task) except exceptions.LoadFromPathError as exc: raise exceptions.TaskNotFound(f"Task at {path} cannot be imported: {str(exc)}") return task
await test_worker.run() single_worker.assert_called() assert caplog.messages == [ "Starting worker on all queues", "Stopped worker on all queues", ] @pytest.mark.parametrize( "side_effect, status", [ (None, "succeeded"), (exceptions.JobError(), "failed"), (exceptions.TaskNotFound(), "failed"), ], ) async def test_process_job(mocker, test_worker, job_factory, connector, side_effect, status): async def coro(*args, **kwargs): pass test_worker.run_job = mocker.Mock(side_effect=side_effect or coro) job = job_factory(id=1) await test_worker.job_store.defer_job(job) await test_worker.process_job(job=job) test_worker.run_job.assert_called_with( job=job,