Easy configuration for celery app using Yaml file
Project description
Easy Configuration For Celery App Using a Yaml File
celery-yaml is a library to inject a --yaml option to the celery worker
command in order to inject its configuration.
It also handle help to configurate this application for Pyramid application.
Usage
celery -A my_application.module_containing_my.app worker --yaml development.yaml ...
This will configure the application my_application containing an application
app in a submodule module_containing_my.
The celery app must register the --yaml using the add_yaml_option on the
app instance, this way:
from celery import Celery
from celery_yaml import add_yaml_option
app = Celery()
add_yaml_option(app)
Yaml format
celery:
broker_url: "amqp://guest:guest@localhost:5672//"
result_backend: "rpc://"
imports:
- my_application.tasks
# see all settings in the celery docs:
# https://docs.celeryproject.org/en/stable/userguide/configuration.html
logging:
version: 1
# dictConfig format
# https://docs.python.org/3/library/logging.config.html#logging-config-dictschema
NOTE
To avoid password in the configuration file:
-
Every variables can be substitute with an environment variable. The yaml file will replace variable using envsub.
celery: broker_url: "${CELERY_BROKER_URL-amqp://guest:guest@localhost:5672//}"
-
DEPRECATED: The
broker_urlis always overriden by the environment variableCELERY_BROKER_URLwithout any declaration.
Using celery beat
Celery beat can schedule tasks using interval or crontab.
The schedule parameter can be an int, a float or a mapping. If it is a mapping, it will be cast to a crontab, the mapping will be passed as acrontab parameters.
celery:
beat_schedule:
beat_second:
task: beat_it
schedule: 10 # example of interval schedule, every 10 seconds
beat_crontab:
task: beat_it
schedule: # example of crontab
hour: 9
minute: 0
day_of_week: 1
Using Celery in a Pyramid App.
The extras "pyramid" must be added to install the extras depencencies.
With PEP 621 (uv, pdm, ...)
[dependency-groups]
celery = ["celery >=5.2.7,<6", "celery-yaml[pyramid]>=2.0.0,<3"]
[project.entry-points."paste.app_factory"]
main = "pyramid_helloworld:main"
[project.entry-points."celery_yaml.app"]
main = "pyramid_helloworld.backend:app"
With poetry
[tool.poetry.dependencies]
celery-yaml = { version = "^2.0.0", extras = ["pyramid"] }
[tool.poetry.plugins."paste.app_factory"]
main = "pyramid_app.wsgi:main"
[tool.poetry.plugins."celery_yaml.app"]
main = "pyramid_app.backend:app"
[tool.poetry.plugins."plaster.loader_factory"]
"file+yaml" = "plaster_yaml:Loader"
the paste.app_factory is used by Pyramid itself to build the WSGI
sergivice but we add a plaster.loader_factory to configure the usage
of a yaml file instead of an ini file to configure it.
Then the celery_yaml.app is used by celery-yaml as an entrypoint to
the celery app.
Then, in the configuration file,
celery: &celery
result_backend: "rpc://"
imports:
- pyramid_app.tasks
app:
"use": "egg:pyramid_app"
"pyramid.includes": ["celery_yaml"]
"celery":
<<: *celery
"use": "egg:pyramid_app"
foo: "bar"
More configuration
if the celery app as a method on_yaml_loaded then the function
is called with the data and the filepath in parameter.
It may be used to get mode configuration available readed from the yaml file.
Example
from celery import Celery as CeleryBase
class Celery(CeleryBase):
def on_yaml_loaded(self, data: dict[str, Any], config_path: str):
data['foo'] # you can access to the value of foo here
This is particullary usefull for depenency injection purpose.
Environment substitution
celery:
broker_url: ${CELERY_BROKER_URL}
result_backend: ${CELERY_BACKEND_RESULT}
imports:
- pyramid_app.tasks
database_dsn: ${DATABASE_DSN}
The CELERY_BROKER_URL and CELERY_BACKEND_RESULT environment variable
are interpreted by celery, so can be outside your yaml file, but, it is not
True for all the variable, using celery-yaml, you can still inject configuration
in the yaml that are substituted in the configuration during the yaml load.
This is particullary usefull to keep your configuration structured but keep secrets in environment variable, for security reason. And also to build docker container that can be easily customizable.
See full example in the examples directory:
https://github.com/mardiros/celery-yaml/tree/master/examples/pyramid-app
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file celery_yaml-2.2.1.tar.gz.
File metadata
- Download URL: celery_yaml-2.2.1.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.26.8 CPython/3.12.13 Linux/6.17.0-1010-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb3d10aec0d0c76538f99001de8ec000b12d33b44fcbeca24cb5e67a6861121b
|
|
| MD5 |
7693913afc3a3933e4c35f264535377b
|
|
| BLAKE2b-256 |
33326b41668b0f61cc56b4cc5c106c836aeb0a97a82a6e9e8ab4611c983ac06a
|
File details
Details for the file celery_yaml-2.2.1-py3-none-any.whl.
File metadata
- Download URL: celery_yaml-2.2.1-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: pdm/2.26.8 CPython/3.12.13 Linux/6.17.0-1010-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6c0b5b9946ad6e644a050df9b34db6d63107ed6a0181ec7ef5ca4225afb2a22
|
|
| MD5 |
1e29a0f23c9b08742e4d46de14b47e5e
|
|
| BLAKE2b-256 |
2c7d767e2cdcecd28fda75536eb08da48b97c6d33718c9a7d2a489ffaa00c18f
|