Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thoas/django-rq-mail
Store mails with waiting and active queues and send them asynchronously
https://github.com/thoas/django-rq-mail
Last synced: about 2 months ago
JSON representation
Store mails with waiting and active queues and send them asynchronously
- Host: GitHub
- URL: https://github.com/thoas/django-rq-mail
- Owner: thoas
- Created: 2012-09-19T08:32:28.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2023-03-31T14:39:03.000Z (over 1 year ago)
- Last Synced: 2024-10-14T14:43:28.529Z (2 months ago)
- Language: Python
- Homepage: https://django-rq-mail.readthedocs.org
- Size: 32.2 KB
- Stars: 20
- Watchers: 3
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: README.rst
Awesome Lists containing this project
README
==============
django-rq-mail
==============**This project is not maintained anymore, it doesn't support latest changes from rq**
django-rq-mail is a simple Python library based on rq_ to store emails sent
by Django_ and process them in the background with workers.As django-rq-mail is based on rq_, it's entirely backed by Redis_.
Architecture
------------django-rq-mail adds new elements to enjoy `Sorted Sets `_
from Redis_.For the purpose of django-rq-mail, it implements the concept of ``WaitingQueue``
which delays the processing of a job with a timestamp.The default behavior of rq_ is to process jobs via `BLPOP `_ which
blocks the connection when there are no elements to pop from any of the given queues.
With this behavior there is no way to delays the processing of a job and when it's failing
rq_ pushs it in a failed queue.
Of course, you can requeue this job later but there is no fallback mechanism.In django-rq-mail you can define fallback steps (in seconds) to retry a job until
it's not failing. When a job has been tested on each steps we reintroduce
the default behavior of rq_ on pushing it in the failed queue.Each steps will create a waiting queue and when a job is failing we take the
current timestamp with the delta to retry it in the future... image:: http://yuml.me/895ce159
This mechanism is possible with `ZADD `_ which
adds a serialized job in the queue with a score and `ZREVRANGEBYSCORE `_
to return all the elements in the sorted set with a score between max (current timestamp) and min.As you may understood, we have dropped the default blocking behavior
to replace it by a daemon which is running each seconds.Installation
------------1. Either check out the package from GitHub_ or it pull from a release via PyPI ::
pip install django-rq-mail
2. Add 'rq_mail' to your ``INSTALLED_APPS`` ::
INSTALLED_APPS = (
'rq_mail',
)to use the `rq_mail` command (via Django commandline) shipped by django-rq-mail.
This command is a minimal integration of rq_ into Django_ to launch the
**Dispatcher**.3. Define ``EMAIL_BACKEND`` ::
EMAIL_BACKEND = 'rq_mail.backends.RqBackend'
4. Define ``RQ_MAIL_EMAIL_BACKEND`` the backend used to send your emails, for example ::
RQ_MAIL_EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Logging
-------RQ 0.3.3 uses standard Python's ``logging``, this means
you can easily configure ``rqworker``'s logging mechanism in django's
``settings.py``. For example:.. code-block:: python
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'rq_console': {
'format': '%(asctime)s %(message)s',
'datefmt': '%H:%M:%S',
},
},
'handlers': {
'rq_console': {
'level': 'DEBUG',
'class': 'rq.utils.ColorizingStreamHandler',
'formatter': 'rq_console',
'exclude': ['%(asctime)s'],
},
},
'loggers': {
'rq.worker': {
'handlers': ['rq_console'],
'level': 'DEBUG'
},
}
}Utilisation
-----------Once you have installed it, you can run ``python manage.py rq_mail`` from your shell.
Configuration
-------------``RQ_MAIL_PREFIX``
..................The prefix used to name all queues created by django-rq-mail.
``RQ_MAIL_MAIN_QUEUE``
......................The name of the main queue.
``RQ_MAIL_EMAIL_BACKEND``
.........................The email backend used to send emails when they are processed in the background.
``RQ_MAIL_REDIS_HOST``
......................The Redis host used to connect.
``RQ_MAIL_REDIS_PORT``
......................The Redis port used to connect.
``RQ_MAIL_REDIS_DB``
....................The Redis database used to connect.
``RQ_MAIL_REDIS_PASSWORD``
..........................The Redis password used to connect.
``RQ_MAIL_REDIS_URL``
..........................The Redis url used to connect.
``RQ_MAIL_REDIS_SOCKET``
..........................The Redis socket used to connect.
``RQ_MAIL_FALLBACK_STEPS``
..........................A simple list of timing to create waiting queues.
You can define as much steps as you want, each will be transformed to a queue.
So if you define 10 steps, you will allow a message to fail 10 times until it
will go in the failed queue... _Django: https://www.djangoproject.com/
.. _rq: https://github.com/nvie/rq
.. _Redis: http://redis.io/
.. _GitHub: https://github.com/thoas/django-rq-mail