Exemple #1
0
async def test_run_job_log_result(caplog, app, job_store):
    caplog.set_level("INFO")

    result = []

    def task_func(a, b):  # pylint: disable=unused-argument
        s = a + b
        result.append(s)
        return s

    task = tasks.Task(task_func, app=app, queue="yay", name="job")

    app.tasks = {"task_func": task}

    job = jobs.Job(
        id=16,
        task_kwargs={
            "a": 9,
            "b": 3
        },
        lock="sherlock",
        task_name="task_func",
        queue="yay",
    )
    test_worker = worker.Worker(app, queues=["yay"])
    await test_worker.run_job(job)

    assert result == [12]

    records = [
        record for record in caplog.records if record.action == "job_success"
    ]
    assert len(records) == 1
    record = records[0]
    assert record.result == 12
Exemple #2
0
def test_app_register(app):
    task = tasks.Task(task_func, blueprint=app, queue="queue", name="bla")

    app._register_task(task)

    assert "bla" in app.tasks
    assert app.tasks["bla"] == task
Exemple #3
0
def test_app_register(app):
    task = tasks.Task(task_func, app=app, queue="queue", name="bla")

    app._register(task)

    assert app.queues == {"queue", "builtin"}
    assert "bla" in app.tasks
    assert app.tasks["bla"] == task
Exemple #4
0
def test_task_init_explicit_name(app, mocker, caplog):
    task = tasks.Task(task_func, app=app, queue="queue", name="other")

    assert task.name == "other"

    assert [
        record for record in caplog.records
        if record.action == "task_name_differ_from_path"
    ]
Exemple #5
0
def test_task_get_retry_exception(app, mocker):
    mock = mocker.patch(
        "procrastinate.retry.RetryStrategy.get_retry_exception")

    task = tasks.Task(task_func, app=app, queue="queue", retry=10)
    job = task.configure().job

    assert task.get_retry_exception(job) is mock.return_value
    mock.assert_called_with(0)
Exemple #6
0
def test_app_register_queue_already_exists(app):
    app.queues.add("queue")
    task = tasks.Task(task_func, app=app, queue="queue", name="bla")

    app._register(task)

    assert app.queues == {"queue", "builtin"}
    assert "bla" in app.tasks
    assert app.tasks["bla"] == task
def test_task_get_retry_exception(app, mocker):
    mock = mocker.patch("procrastinate.retry.RetryStrategy.get_retry_exception")

    task = tasks.Task(task_func, blueprint=app, queue="queue", retry=10)
    job = task.configure().job

    exception = ValueError()
    assert task.get_retry_exception(exception=exception, job=job) is mock.return_value
    mock.assert_called_with(exception=exception, attempts=0)
Exemple #8
0
def test_task_configure(app):
    task = tasks.Task(task_func, app=app, queue="queue")

    job = task.configure(lock="sher", task_kwargs={"yay": "ho"}).job

    assert job.task_name == "tests.unit.test_tasks.task_func"
    assert job.lock == "sher"
    assert job.task_kwargs == {"yay": "ho"}
    assert job.queue == "queue"
Exemple #9
0
        def _wrap(func: Callable[..., "tasks.Task"]):
            from procrastinate import tasks

            task = tasks.Task(func,
                              app=self,
                              queue=queue,
                              name=name,
                              retry=retry)
            self._register(task)

            return functools.update_wrapper(task, func)
Exemple #10
0
        def _wrap(func: Callable[..., "tasks.Task"]):
            from procrastinate import tasks

            task = tasks.Task(
                func,
                app=self,
                queue=queue,
                lock=lock,
                queueing_lock=queueing_lock,
                name=name,
                aliases=aliases,
                retry=retry,
                pass_context=pass_context,
            )
            self._register(task)

            return functools.update_wrapper(task, func)
Exemple #11
0
async def test_task_defer_async(app, connector):
    task = tasks.Task(task_func, blueprint=app, queue="queue")

    await task.defer_async(c=3)

    # The lock is the only thing we can't predict
    lock = connector.jobs[1]["lock"]
    assert connector.jobs == {
        1: {
            "id": 1,
            "queue_name": "queue",
            "task_name": "tests.unit.test_tasks.task_func",
            "lock": lock,
            "queueing_lock": None,
            "args": {"c": 3},
            "status": "todo",
            "scheduled_at": None,
            "attempts": 0,
        }
    }
Exemple #12
0
async def test_run_job_retry(app, job_store):
    def job(a, b):  # pylint: disable=unused-argument
        raise ValueError("nope")

    task = tasks.Task(job, app=app, queue="yay", name="job", retry=True)
    task.func = job

    app.tasks = {"job": task}

    job = jobs.Job(
        id=16,
        task_kwargs={
            "a": 9,
            "b": 3
        },
        lock="sherlock",
        task_name="job",
        queue="yay",
    )
    test_worker = worker.Worker(app, queues=["yay"])
    with pytest.raises(exceptions.JobRetry):
        await test_worker.run_job(job)
Exemple #13
0
def test_task_defer(app):
    task = tasks.Task(task_func, app=app, queue="queue")

    task.defer(c=3)

    # The lock is the only thing we can't predict
    lock = app.job_store.jobs[1]["lock"]
    assert app.job_store.jobs == {
        1: {
            "id": 1,
            "queue_name": "queue",
            "task_name": "tests.unit.test_tasks.task_func",
            "lock": lock,
            "args": {
                "c": 3
            },
            "status": "todo",
            "scheduled_at": None,
            "started_at": None,
            "attempts": 0,
        }
    }
async def test_run_job_error(app):
    def job(a, b):  # pylint: disable=unused-argument
        raise ValueError("nope")

    task = tasks.Task(job, blueprint=app, queue="yay", name="job")
    task.func = job

    app.tasks = {"job": task}

    job = jobs.Job(
        id=16,
        task_kwargs={
            "a": 9,
            "b": 3
        },
        lock="sherlock",
        queueing_lock="houba",
        task_name="job",
        queue="yay",
    )
    test_worker = worker.Worker(app, queues=["yay"])
    with pytest.raises(exceptions.JobError):
        await test_worker.run_job(job=job, worker_id=3)
Exemple #15
0
def test_task_configure_override_queue(app):
    task = tasks.Task(task_func, app=app, queue="queue")

    job = task.configure(queue="other_queue").job

    assert job.queue == "other_queue"
Exemple #16
0
def test_task_init_with_no_name(app):
    task = tasks.Task(task_func, app=app, queue="queue")

    assert task.func is task_func
    assert task.name == "tests.unit.test_tasks.task_func"
Exemple #17
0
def test_task_get_retry_exception_none(app):
    task = tasks.Task(task_func, app=app, queue="queue")
    job = task.configure().job

    assert task.get_retry_exception(exception=None, job=job) is None