├── .coveragerc ├── .editorconfig ├── .github └── workflows │ ├── python-publish.yml │ └── tests.yml ├── .gitignore ├── LICENSE ├── README.rst ├── doc ├── Makefile ├── _static │ └── .gitkeep ├── conf.py ├── hacking │ ├── contributing.rst │ └── internals.rst ├── index.rst └── user │ ├── asyncio.rst │ ├── design.rst │ ├── engine.rst │ ├── faq.rst │ ├── install.rst │ ├── integrations.rst │ ├── jobs.rst │ ├── production.rst │ ├── queues.rst │ ├── signals.rst │ └── tasks.rst ├── examples ├── asyncio_workers.py ├── flaskapp.py ├── periodic.py ├── queues.py └── quickstart.py ├── pytest.ini ├── setup.py ├── spinach ├── __init__.py ├── brokers │ ├── __init__.py │ ├── base.py │ ├── memory.py │ ├── redis.py │ └── redis_scripts │ │ ├── __init__.py │ │ ├── deregister.lua │ │ ├── enqueue_job.lua │ │ ├── enqueue_jobs_from_dead_broker.lua │ │ ├── flush.lua │ │ ├── get_jobs_from_queue.lua │ │ ├── move_future_jobs.lua │ │ ├── register_periodic_tasks.lua │ │ ├── remove_job_from_running.lua │ │ └── set_concurrency_keys.lua ├── const.py ├── contrib │ ├── __init__.py │ ├── datadog.py │ ├── flask_spinach.py │ ├── sentry_sdk_spinach.py │ └── spinachd │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── mail.py │ │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── spinach.py │ │ ├── settings.py │ │ ├── signals.py │ │ └── tasks.py ├── engine.py ├── exc.py ├── job.py ├── queuey.py ├── signals.py ├── task.py ├── utils.py └── worker.py ├── tests ├── __init__.py ├── conftest.py ├── contrib │ ├── __init__.py │ ├── test_datadog.py │ ├── test_django.py │ └── test_flask.py ├── docker-compose.yml ├── functional │ ├── __init__.py │ └── test_concurrency.py ├── test_brokers.py ├── test_engine.py ├── test_job.py ├── test_memory_brokers.py ├── test_queuey.py ├── test_redis_brokers.py ├── test_signals.py ├── test_task.py ├── test_utils.py └── test_worker.py └── tox.ini /.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | relative_files = True 3 | include = 4 | spinach/* -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/.editorconfig -------------------------------------------------------------------------------- /.github/workflows/python-publish.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/.github/workflows/python-publish.yml -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/.github/workflows/tests.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/.gitignore -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/LICENSE -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/README.rst -------------------------------------------------------------------------------- /doc/Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/Makefile -------------------------------------------------------------------------------- /doc/_static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /doc/conf.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/conf.py -------------------------------------------------------------------------------- /doc/hacking/contributing.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/hacking/contributing.rst -------------------------------------------------------------------------------- /doc/hacking/internals.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/hacking/internals.rst -------------------------------------------------------------------------------- /doc/index.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/index.rst -------------------------------------------------------------------------------- /doc/user/asyncio.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/asyncio.rst -------------------------------------------------------------------------------- /doc/user/design.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/design.rst -------------------------------------------------------------------------------- /doc/user/engine.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/engine.rst -------------------------------------------------------------------------------- /doc/user/faq.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/faq.rst -------------------------------------------------------------------------------- /doc/user/install.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/install.rst -------------------------------------------------------------------------------- /doc/user/integrations.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/integrations.rst -------------------------------------------------------------------------------- /doc/user/jobs.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/jobs.rst -------------------------------------------------------------------------------- /doc/user/production.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/production.rst -------------------------------------------------------------------------------- /doc/user/queues.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/queues.rst -------------------------------------------------------------------------------- /doc/user/signals.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/signals.rst -------------------------------------------------------------------------------- /doc/user/tasks.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/doc/user/tasks.rst -------------------------------------------------------------------------------- /examples/asyncio_workers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/examples/asyncio_workers.py -------------------------------------------------------------------------------- /examples/flaskapp.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/examples/flaskapp.py -------------------------------------------------------------------------------- /examples/periodic.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/examples/periodic.py -------------------------------------------------------------------------------- /examples/queues.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/examples/queues.py -------------------------------------------------------------------------------- /examples/quickstart.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/examples/quickstart.py -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | threadleak = True -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/setup.py -------------------------------------------------------------------------------- /spinach/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/__init__.py -------------------------------------------------------------------------------- /spinach/brokers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /spinach/brokers/base.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/base.py -------------------------------------------------------------------------------- /spinach/brokers/memory.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/memory.py -------------------------------------------------------------------------------- /spinach/brokers/redis.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis.py -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/deregister.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/deregister.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/enqueue_job.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/enqueue_job.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/enqueue_jobs_from_dead_broker.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/enqueue_jobs_from_dead_broker.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/flush.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/flush.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/get_jobs_from_queue.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/get_jobs_from_queue.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/move_future_jobs.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/move_future_jobs.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/register_periodic_tasks.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/register_periodic_tasks.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/remove_job_from_running.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/remove_job_from_running.lua -------------------------------------------------------------------------------- /spinach/brokers/redis_scripts/set_concurrency_keys.lua: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/brokers/redis_scripts/set_concurrency_keys.lua -------------------------------------------------------------------------------- /spinach/const.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/const.py -------------------------------------------------------------------------------- /spinach/contrib/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /spinach/contrib/datadog.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/datadog.py -------------------------------------------------------------------------------- /spinach/contrib/flask_spinach.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/flask_spinach.py -------------------------------------------------------------------------------- /spinach/contrib/sentry_sdk_spinach.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/sentry_sdk_spinach.py -------------------------------------------------------------------------------- /spinach/contrib/spinachd/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/spinachd/__init__.py -------------------------------------------------------------------------------- /spinach/contrib/spinachd/apps.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/spinachd/apps.py -------------------------------------------------------------------------------- /spinach/contrib/spinachd/mail.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/spinachd/mail.py -------------------------------------------------------------------------------- /spinach/contrib/spinachd/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /spinach/contrib/spinachd/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /spinach/contrib/spinachd/management/commands/spinach.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/spinachd/management/commands/spinach.py -------------------------------------------------------------------------------- /spinach/contrib/spinachd/settings.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/spinachd/settings.py -------------------------------------------------------------------------------- /spinach/contrib/spinachd/signals.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/spinachd/signals.py -------------------------------------------------------------------------------- /spinach/contrib/spinachd/tasks.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/contrib/spinachd/tasks.py -------------------------------------------------------------------------------- /spinach/engine.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/engine.py -------------------------------------------------------------------------------- /spinach/exc.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/exc.py -------------------------------------------------------------------------------- /spinach/job.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/job.py -------------------------------------------------------------------------------- /spinach/queuey.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/queuey.py -------------------------------------------------------------------------------- /spinach/signals.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/signals.py -------------------------------------------------------------------------------- /spinach/task.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/task.py -------------------------------------------------------------------------------- /spinach/utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/utils.py -------------------------------------------------------------------------------- /spinach/worker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/spinach/worker.py -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/conftest.py -------------------------------------------------------------------------------- /tests/contrib/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/contrib/test_datadog.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/contrib/test_datadog.py -------------------------------------------------------------------------------- /tests/contrib/test_django.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/contrib/test_django.py -------------------------------------------------------------------------------- /tests/contrib/test_flask.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/contrib/test_flask.py -------------------------------------------------------------------------------- /tests/docker-compose.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/docker-compose.yml -------------------------------------------------------------------------------- /tests/functional/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/functional/test_concurrency.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/functional/test_concurrency.py -------------------------------------------------------------------------------- /tests/test_brokers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_brokers.py -------------------------------------------------------------------------------- /tests/test_engine.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_engine.py -------------------------------------------------------------------------------- /tests/test_job.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_job.py -------------------------------------------------------------------------------- /tests/test_memory_brokers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_memory_brokers.py -------------------------------------------------------------------------------- /tests/test_queuey.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_queuey.py -------------------------------------------------------------------------------- /tests/test_redis_brokers.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_redis_brokers.py -------------------------------------------------------------------------------- /tests/test_signals.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_signals.py -------------------------------------------------------------------------------- /tests/test_task.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_task.py -------------------------------------------------------------------------------- /tests/test_utils.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_utils.py -------------------------------------------------------------------------------- /tests/test_worker.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tests/test_worker.py -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NicolasLM/spinach/HEAD/tox.ini --------------------------------------------------------------------------------