https://github.com/seankerr/py-celery-sqlalchemy
SQLAlchemy model serialization for celery.
https://github.com/seankerr/py-celery-sqlalchemy
celery serialization sqlalchemy
Last synced: 5 months ago
JSON representation
SQLAlchemy model serialization for celery.
- Host: GitHub
- URL: https://github.com/seankerr/py-celery-sqlalchemy
- Owner: seankerr
- License: bsd-3-clause
- Created: 2023-08-15T14:24:07.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-01-31T16:58:34.000Z (over 2 years ago)
- Last Synced: 2026-01-04T20:42:17.419Z (6 months ago)
- Topics: celery, serialization, sqlalchemy
- Language: Python
- Homepage: https://pypi.org/project/celery-sqlalchemy/
- Size: 84 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# celery-sqlalchemy
SQLAlchemy model serialization for celery. Supports SQLAlchemy 1.4 & 2.0.
### Install
```sh
pip install celery-sqlalchemy
```
### How does it work?
Any model or list of models passed to a celery task as a direct argument will be
serialized/deserialized by `celery-sqlalchemy`.
### Behind the scenes
The [orjson](https://github.com/ijl/orjson) library is used behind the scenes to handle
serialization of commonly used Python types.
### Usage
By default `celery-sqlalchemy` will configure Celery to use the `json+sqlalchemy`
content type for all tasks and no further configuration is needed.
```python
from celery_sqlalchemy.celery import initialize as initialize_celery
from celery_sqlalchemy.json import JsonSerializer
# setup celery
celery = ...
# initialize celery-sqlalchemy
initialize_celery(celery, JsonSerializer())
# dispatch a task
author = "Alan Watts"
title = "Become What You Are"
task.delay(Model(author=author, title=title))
```
### Using the json+sqlalchemy content type in combination with other content types
The first way of doing this is by specifying the `json+sqlalchemy` content type as
the default task serializer.
```python
from celery_sqlalchemy.celery import initialize as initialize_celery
from celery_sqlalchemy.json import JsonSerializer
# setup celery
celery = ...
# initialize celery-sqlalchemy without the `apply_serializer` setting
initialize_celery(celery, JsonSerializer(), apply_serializer=False)
# combine the json+sqlalchemy content type with your other content types
celery.conf.accept_content = ["json+sqlalchemy", "your content type"]
celery.conf.result_accept_content = ["json+sqlalchemy", "your content type"]
# set the default task serializer
celery.conf.task_serializer = "json+sqlalchemy"
# dispatch a model task
author = "Alan Watts"
title = "Become What You Are"
task.delay(Model(author=author, title=title))
# dispatch a task using another content type
task.apply_async((author, title), serializer="your content type")
```
The other way of doing this is by not specifying the default task serializer, and
instead using `apply_async()` to dispatch all tasks.
```python
from celery_sqlalchemy.celery import initialize as initialize_celery
from celery_sqlalchemy.json import JsonSerializer
# setup celery
celery = ...
# initialize celery-sqlalchemy without the `apply_serializer` setting
initialize_celery(celery, JsonSerializer(), apply_serializer=False)
# combine the json+sqlalchemy content type with your other content types
celery.conf.accept_content = ["json+sqlalchemy", "your content type"]
celery.conf.result_accept_content = ["json+sqlalchemy", "your content type"]
# dispatch a model task
author = "Alan Watts"
title = "Become What You Are"
task.apply_async((Model(author=author, title=title),), serializer="json+sqlalchemy")
# dispatch a task using another content type
task.apply_async((author, title), serializer="your content type")
```
### Changelog
- **0.1.6**
- Extract celery support into its own module
- Remove `celery_sqlalchemy.initialize()`
- **0.1.5**
- Bump sqlalchemy dependency
- **0.1.4**
- Bug fix: schema model may already be converted to model instance when chaining
- **0.1.3**
- Check list type when converting json back to argument
- **0.1.2**
- Add py.typed for mypy
- **0.1.1**
- Add support for SQLAlchemy 1.4
- **0.1.0**
- Initial version with support for common Python types