Exemplo n.º 1
0
async def test_defer(pg_app, aiopg_connector):

    sum_results = []
    product_results = []

    @pg_app.task(queue="default", name="sum_task")
    def sum_task(a, b):
        sum_results.append(a + b)

    @pg_app.task(queue="default", name="product_task")
    async def product_task(a, b):
        product_results.append(a * b)

    sum_task.defer(a=1, b=2)
    sum_task.configure().defer(a=3, b=4)
    pg_app.configure_task(name="sum_task").defer(a=5, b=6)
    product_task.defer(a=3, b=4)

    async_app = procrastinate.App(connector=aiopg_connector)
    async_app.tasks = pg_app.tasks

    await async_app.run_worker_async(queues=["default"], wait=False)

    assert sum_results == [3, 7, 11]
    assert product_results == [12]
Exemplo n.º 2
0
def cli(
    ctx: click.Context,
    app: str,
    verbose: int,
    log_format: str,
    log_format_style: Style,
) -> None:
    """
    Interact with a Procrastinate app. See subcommands for details.

    All arguments can be passed by environment variables: PROCRASTINATE_UPPERCASE_NAME
    or PROCRASTINATE_COMMAND_UPPERCASE_NAME (examples: PROCRASTINATE_APP,
    PROCRASTINATE_DEFER_UNKNOWN, ...).
    """
    configure_logging(verbosity=verbose,
                      format=log_format,
                      style=log_format_style)
    if app:
        app_obj = procrastinate.App.from_path(dotted_path=app)
    else:
        # If we don't provide an app, initialize a default one that will fail if it
        # needs a connector.
        app_obj = procrastinate.App(connector=MissingAppConnector())
    app_obj.open()
    ctx.obj = app_obj

    worker_defaults = app_obj.worker_defaults.copy()
    worker_defaults["queues"] = ",".join(worker_defaults.get("queues") or [])
    ctx.default_map = {"worker": worker_defaults}
Exemplo n.º 3
0
def cli(ctx: click.Context, app: str, **kwargs) -> None:
    """
    Interact with a Procrastinate app. See subcommands for details.

    All arguments can be passed by environment variables: PROCRASTINATE_UPPERCASE_NAME
    or PROCRASTINATE_COMMAND_UPPERCASE_NAME (examples: PROCRASTINATE_APP,
    PROCRASTINATE_DEFER_UNKNOWN, ...).
    """
    if app:
        ctx.obj = procrastinate.App.from_path(dotted_path=app)
    else:
        # If we don't provide an app, initialize a default one that will fail if it
        # needs its job store.
        ctx.obj = procrastinate.App(job_store=procrastinate.BaseJobStore())
Exemplo n.º 4
0
def cli(ctx: click.Context, app: str, **kwargs) -> None:
    """
@handle_errors()
    Interact with a Procrastinate app. See subcommands for details.

    All arguments can be passed by environment variables: PROCRASTINATE_UPPERCASE_NAME
    or PROCRASTINATE_COMMAND_UPPERCASE_NAME (examples: PROCRASTINATE_APP,
    PROCRASTINATE_DEFER_UNKNOWN, ...).
    """
    if app:
        app_obj = procrastinate.App.from_path(dotted_path=app)
    else:
        # If we don't provide an app, initialize a default one that will fail if it
        # needs its job store.
        app_obj = procrastinate.App(connector=connector.BaseConnector())
    ctx.obj = app_obj

    worker_defaults = app_obj.worker_defaults.copy()
    worker_defaults["queues"] = ",".join(worker_defaults.get("queues") or [])
    ctx.default_map = {"worker": worker_defaults}
Exemplo n.º 5
0
import procrastinate

app = procrastinate.App(
    connector=procrastinate.AiopgConnector(), import_paths=["procrastinate_demo.tasks"],
)
Exemplo n.º 6
0
import procrastinate

app = procrastinate.App(
    job_store=procrastinate.PostgresJobStore(
        dsn="postgresql://postgres@localhost/procrastinate"
    ),
    import_paths=["procrastinate_demo.tasks"],
)
Exemplo n.º 7
0
def pg_app(psycopg2_connector):
    return procrastinate.App(connector=psycopg2_connector)
Exemplo n.º 8
0
import procrastinate

import_paths = ["procrastinate_demo.tasks"]

connector_class = procrastinate.AiopgConnector
# connector_class = procrastinate.Psycopg2Connector

app = procrastinate.App(connector=connector_class(listen_notify=False),
                        import_paths=import_paths)
Exemplo n.º 9
0
import procrastinate

import_paths = ["procrastinate_demo.tasks"]
is_async = False  # set to True to run async demo
if is_async:
    connector_class = procrastinate.AiopgConnector
else:
    connector_class = procrastinate.Psycopg2Connector

app = procrastinate.App(
    connector=connector_class(),
    import_paths=import_paths,
    worker_defaults={"listen_notify": False},
)
app.open()
Exemplo n.º 10
0
def pg_app(aiopg_connector):
    return procrastinate.App(connector=aiopg_connector)
Exemplo n.º 11
0
from typing import Type

import procrastinate

USE_ASYNC = True

import_paths = ["procrastinate_demo.tasks"]

connector_class: Type[procrastinate.BaseConnector]
if USE_ASYNC:
    connector_class = procrastinate.AiopgConnector
else:
    connector_class = procrastinate.Psycopg2Connector

app = procrastinate.App(connector=connector_class(), import_paths=import_paths)
app.open()
Exemplo n.º 12
0
async def async_app_context_manager(not_opened_aiopg_connector):
    async with procrastinate.App(
        connector=not_opened_aiopg_connector
    ).open_async() as app:
        yield app
Exemplo n.º 13
0
def sync_app_explicit_open(not_opened_psycopg2_connector):
    app = procrastinate.App(connector=not_opened_psycopg2_connector).open()
    yield app
    app.close()
Exemplo n.º 14
0
def sync_app_context_manager(not_opened_psycopg2_connector):
    with procrastinate.App(connector=not_opened_psycopg2_connector).open() as app:
        yield app
Exemplo n.º 15
0
        return obj.p
    raise TypeError()


def decode(dct):
    if "p1" in dct:
        dct["p1"] = Param(dct["p1"])
    if "p2" in dct:
        dct["p2"] = Param(dct["p2"])
    return dct


json_dumps = functools.partial(json.dumps, default=encode)
json_loads = functools.partial(json.loads, object_hook=decode)

app = procrastinate.App(connector=procrastinate.AiopgConnector(
    json_dumps=json_dumps, json_loads=json_loads))

sync_app = procrastinate.App(connector=procrastinate.Psycopg2Connector(
    json_dumps=json_dumps, json_loads=json_loads))


@app.task(queue="default")
def sum_task(a, b):
    print(a + b)


@app.task(queue="default")
def sum_task_param(p1: Param, p2: Param):
    if not isinstance(p1, Param):
        raise Exception("wrong type for p1")
    if not isinstance(p2, Param):
Exemplo n.º 16
0
    raise TypeError()


def decode(dct):
    if "p1" in dct:
        dct["p1"] = Param(dct["p1"])
    if "p2" in dct:
        dct["p2"] = Param(dct["p2"])
    return dct


json_dumps = functools.partial(json.dumps, default=encode)
json_loads = functools.partial(json.loads, object_hook=decode)

app = procrastinate.App(
    connector=procrastinate.AiopgConnector(json_dumps=json_dumps, json_loads=json_loads)
)


@app.task(queue="default")
def sum_task(a, b):
    print(a + b)


@app.task(queue="default")
def sum_task_param(p1: Param, p2: Param):
    if not isinstance(p1, Param):
        raise Exception("wrong type for p1")
    if not isinstance(p2, Param):
        raise Exception("wrong type for p2")
    print(p1 + p2)
Exemplo n.º 17
0
import time

import procrastinate

app = procrastinate.App(job_store=procrastinate.PostgresJobStore())


@app.task(queue="default")
def sum_task(a, b):
    print(a + b)


@app.task()
def increment_task(a):
    print(a + 1)


@app.task(queue="product_queue")
def product_task(a, b):
    print(a * b)


nb_tries = 0


@app.task(queue="retry", retry=10)
def two_fails():
    global nb_tries
    if nb_tries < 2:
        nb_tries += 1
        raise Exception("This should fail")