Batched and bounded-concurrent enrichment

PrefetchListSerializer for one batch per list; ConcurrentListSerializer for independent item I/O with separate item contexts and stable ordering.

Run with Docker

From the repository root:

docker compose -f examples/compose.yaml up --build --wait list-enrichment
docker compose -f examples/compose.yaml exec list-enrichment python manage.py check

The API is available on http://127.0.0.1:8104. See container setup for port overrides, required services, optional profiles, tests and data retention. The commands below run the same application directly with uv.

Run

From this directory (Python 3.12+ and uv):

uv venv
uv pip install --python .venv/bin/python -r pyproject.toml --group test -e ../..
uv run --no-sync python manage.py check
uv run --no-sync uvicorn project.asgi:application --host 127.0.0.1 --port 8104

Change --host and --port as needed. For another hostname also set EXAMPLE_ALLOWED_HOSTS=localhost,127.0.0.1,your-host. The default is loopback. This project depends on this checkout through [tool.uv.sources]; it does not import another example. Its virtual environment and SQLite database are local.

Requests

curl http://127.0.0.1:8104/batch/
curl http://127.0.0.1:8104/concurrent/

Tests

uv run --no-sync pytest -q

The tests send requests through the project's ASGI application, with lifespan startup/shutdown. Database tests use an isolated test database.

Compatibility and limits

The service delay is simulated. Prefer the batch API when the real service provides one. Concurrency is limited to two items at a time; do not use it to run ORM transactions in parallel.

The endpoints are public and the settings use a development secret key: do not deploy this project as it is. See the feature guide and example catalogue for related examples.