Metadata-Version: 2.1
Name: celery-client-stubs
Version: 0.7.1
Summary: Client-side stubs for celery task execution
Home-page: https://github.com/carstencodes/celery_client_stubs
Author: Carsten Igel
Author-email: cig@bite-that-bit.de
License: BSD 3-Clause
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: BSD License
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System
Classifier: Typing :: Typed
Requires-Python: >=3.7, < 4
Description-Content-Type: text/markdown
Requires-Dist: celery (>=5.0)

# Celery stubs

This is a small library for client side function stubs for celery.

The name `stubs` does not refer to the testing aspect but rather to a proxy behavior coming from the stub / skeleton pattern known from remote method invocations. At celery, there is no need to create a skeleton, since this is handled by the middleware.

The stubs approach uses the `send_task` to schedule a remote task for execution. Since the stub does not know the arguments to apply, this is the part of the blueprint method.

## Example

```python

## Server

@app.task(name="calculate_sum")
def sum(a, b):
    return a + b

## Client

# Proxy Definition
class _CalculateSumTask(celery_client_stubs.AsyncRemoteTask):
    def __init__(self, celery, *args):
        super().__init__("calculate_sum", celery, *args)

def celery_sum(celery, a, b):
    return _CalculateSumTask(celery, a, b)

# Definition of methods
app = Celery(...)

...

def sum(a, b):
    return celery_sum(app, a, b)

# Usage

async_result = sum(1, 2).schedule_immediately()

# Wait for method to complete ...

```

## Task Factory

The class itself provides an `RemoteTaskFactory`, that can be used:

```python

# Definition

class MyRemoteTasks(celery_client_stubs.RemoteTaskFactory):
    def sum(self, a, b):
        task = celery.AsyncRemoteTask("calculate_sum", self._celery, a, b)

        return task

# Usage

app = Celery(...)

tasks = MyRemoteTasks(app)
async_result = tasks.sum(1, 2).schedule_immediately()

```

## Licensing

This library is published under BSD-3-Clause license, just like Celery is.

## Versioning

This library follows semantic versioning 2.0. Any breaking change will produce a new major release. Versions below 1.0 are considered to have a unstable interface.


