Metadata-Version: 2.5 Name: pydocket Version: 0.28.0 Summary: A distributed background task system for Python functions Project-URL: Homepage, https://docket.lol/ Project-URL: Documentation, https://docket.lol/en/latest/ Project-URL: Repository, https://github.com/chrisguidry/docket Project-URL: Bug Tracker, https://github.com/chrisguidry/docket/issues Author-email: Chris Guidry License-Expression: MIT License-File: LICENSE Classifier: Development Status :: 4 - Beta Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: 3.14 Classifier: Programming Language :: Python :: 3.15 Classifier: Typing :: Typed Requires-Python: >=3.11 Requires-Dist: burner-redis>=0.1.7 Requires-Dist: cloudpickle>=3.1.1 Requires-Dist: cronsim>=2.6 Requires-Dist: opentelemetry-api>=1.45.1 Requires-Dist: prometheus-client>=0.21.1 Requires-Dist: py-key-value-aio[memory,redis]>=0.3.0 Requires-Dist: python-json-logger>=2.0.7 Requires-Dist: redis>=6 Requires-Dist: rich>=13.9.4 Requires-Dist: typer>=0.15.1 Requires-Dist: typing-extensions>=4.12.0 Requires-Dist: tzdata>=2025.2; sys_platform == 'win32' Requires-Dist: uncalled-for>=0.6.0 Provides-Extra: metrics Requires-Dist: opentelemetry-sdk>=1.33.0; extra == 'metrics' Description-Content-Type: text/markdown Docket is a distributed background task system for Python functions with a focus on the scheduling of future work as seamlessly and efficiently as immediate work. [![PyPI - Version](https://img.shields.io/pypi/v/pydocket)](https://pypi.org/project/pydocket/) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pydocket)](https://pypi.org/project/pydocket/) [![GitHub main checks](https://img.shields.io/github/check-runs/chrisguidry/docket/main)](https://github.com/chrisguidry/docket/actions) [![Codecov](https://img.shields.io/codecov/c/github/chrisguidry/docket)](https://app.codecov.io/gh/chrisguidry/docket) [![PyPI - License](https://img.shields.io/pypi/l/pydocket)](https://github.com/chrisguidry/docket/blob/main/LICENSE) [![Documentation](https://img.shields.io/badge/docs-latest-blue.svg)](https://docket.lol/) ## At a glance ```python from datetime import datetime, timedelta, timezone from docket import Docket async def greet(name: str, greeting="Hello") -> None: print(f"{greeting}, {name} at {datetime.now()}!") async with Docket() as docket: await docket.add(greet)("Jane") now = datetime.now(timezone.utc) soon = now + timedelta(seconds=3) await docket.add(greet, when=soon)("John", greeting="Howdy") ``` ```python from docket import Docket, Worker async with Docket() as docket: docket.register(greet) async with Worker(docket) as worker: await worker.run_until_finished() ``` ``` Hello, Jane at 2025-03-05 13:58:21.552644! Howdy, John at 2025-03-05 13:58:24.550773! ``` Check out our docs for more [details](https://docket.lol/), [examples](https://docket.lol/en/latest/getting-started/), and the [API reference](https://docket.lol/en/latest/api-reference/). ## Why `docket`? ⚡️ Snappy one-way background task processing without any bloat 📅 Schedule immediate or future work seamlessly with the same interface ⏭️ Skip problematic tasks or parameters without redeploying 🌊 Purpose-built for Redis streams 🧩 Fully type-complete and type-aware for your background task functions 💉 Dependency injection like FastAPI, Typer, and FastMCP for reusable resources ## Installing `docket` Docket is [available on PyPI](https://pypi.org/project/pydocket/) under the package name `pydocket`. It targets Python 3.11 or above. With [`uv`](https://docs.astral.sh/uv/): ```bash uv pip install pydocket or uv add pydocket ``` With `pip`: ```bash pip install pydocket ``` Docket requires [Redis](https://redis.io/) 6.2 or later, or [Valkey](https://valkey.io/) 8.0 or later. Docket is tested with: - Redis 6.2 and 8.10, and Redis 8.10 in cluster mode - Valkey 8.0 and 9.1 - In-memory backend via [burner-redis](https://github.com/prefectlabs/burner-redis) for testing For testing without Redis, use the in-memory backend: ```python from docket import Docket async with Docket(name="my-docket", url="memory://my-docket") as docket: # Use docket normally - all operations are in-memory ... ``` See [Testing with Docket](https://docket.lol/en/latest/testing/#using-in-memory-backend-no-redis-required) for more details. # Hacking on `docket` We use [`uv`](https://docs.astral.sh/uv/) for project management. The repository is a uv workspace, and the Python package lives in its `python/` directory. From a clone of the repository: ```bash uv sync cd python uv run pytest ``` We aim to maintain 100% test coverage, which is required for all PRs to `docket`. We believe that `docket` should stay small, simple, understandable, and reliable, and that begins with testing all the dusty branches and corners. This will give us the confidence to upgrade dependencies quickly and to adapt to new versions of Redis over time. To work on the documentation locally, from the repository root: ```bash uv sync uv run zensical serve ``` This will start a local preview server. The docs are built with [Zensical](https://zensical.org/) and configured in `mkdocs.yml`.