.gitignore
.pre-commit-config.yaml
CHANGELOG.md
LICENSE
Makefile
README.md
noxfile.py
pyproject.toml
ruff-shared.toml
uv.lock
.github/CODE_OF_CONDUCT
.github/CONTRIBUTING.md
.github/dependabot.yml
.github/workflows/ci.yaml
.github/workflows/periodic-ci.yaml
changelog.d/_template.md.jinja
docs/_rst_epilog.rst
docs/api.rst
docs/changelog.md
docs/conf.py
docs/documenteer.toml
docs/index.rst
docs/dev/development.rst
docs/dev/index.rst
docs/dev/release.rst
docs/user-guide/arq.rst
docs/user-guide/asyncio-queue.rst
docs/user-guide/click.rst
docs/user-guide/datetime.rst
docs/user-guide/fastapi-errors.rst
docs/user-guide/gafaelfawr.rst
docs/user-guide/gcs.rst
docs/user-guide/http-client.rst
docs/user-guide/index.rst
docs/user-guide/ivoa.rst
docs/user-guide/kubernetes.rst
docs/user-guide/logging.rst
docs/user-guide/pydantic-redis.rst
docs/user-guide/pydantic.rst
docs/user-guide/sentry.rst
docs/user-guide/set-up-from-template.rst
docs/user-guide/slack-webhook.rst
docs/user-guide/template-manual.rst
docs/user-guide/test-data.rst
docs/user-guide/uvicorn.rst
docs/user-guide/x-forwarded.rst
docs/user-guide/database/datetime.rst
docs/user-guide/database/dependency.rst
docs/user-guide/database/index.rst
docs/user-guide/database/initialize.rst
docs/user-guide/database/pagination.rst
docs/user-guide/database/retry.rst
docs/user-guide/database/schema.rst
docs/user-guide/database/session.rst
docs/user-guide/database/testing.rst
docs/user-guide/github-apps/api-resources.rst
docs/user-guide/github-apps/create-a-github-client.rst
docs/user-guide/github-apps/handling-webhooks.rst
docs/user-guide/github-apps/index.rst
docs/user-guide/github-apps/webhook-models.rst
docs/user-guide/kafka/faststream.rst
docs/user-guide/kafka/index.rst
docs/user-guide/kafka/kafka-connection-settings.rst
docs/user-guide/kafka/pydantic-schema-manager.rst
docs/user-guide/kafka/testing.rst
docs/user-guide/metrics/index.rst
docs/user-guide/uws/create-a-service.rst
docs/user-guide/uws/define-inputs.rst
docs/user-guide/uws/define-models.rst
docs/user-guide/uws/index.rst
docs/user-guide/uws/testing.rst
docs/user-guide/uws/write-backend.rst
safir-arq/LICENSE
safir-arq/README.md
safir-arq/pyproject.toml
safir-arq/src/safir/arq/__init__.py
safir-arq/src/safir/arq/_config.py
safir-arq/src/safir/arq/_exceptions.py
safir-arq/src/safir/arq/_models.py
safir-arq/src/safir/arq/_queue.py
safir-arq/src/safir/arq/py.typed
safir-arq/src/safir/arq/uws.py
safir-logging/LICENSE
safir-logging/README.md
safir-logging/pyproject.toml
safir-logging/src/safir/logging/__init__.py
safir-logging/src/safir/logging/_alembic.py
safir-logging/src/safir/logging/_models.py
safir-logging/src/safir/logging/_structlog.py
safir-logging/src/safir/logging/_uvicorn.py
safir-logging/src/safir/logging/py.typed
safir-logging/src/safir/testing/logging/__init__.py
safir-logging/src/safir/testing/logging/_parse.py
safir-logging/src/safir/testing/logging/py.typed
src/safir.egg-info/PKG-INFO
src/safir.egg-info/SOURCES.txt
src/safir.egg-info/dependency_links.txt
src/safir.egg-info/requires.txt
src/safir.egg-info/top_level.txt
src/safir/asyncio/__init__.py
src/safir/asyncio/_multiqueue.py
src/safir/asyncio/_run.py
src/safir/asyncio/py.typed
src/safir/click/__init__.py
src/safir/click/_help.py
src/safir/click/py.typed
src/safir/database/__init__.py
src/safir/database/_alembic.py
src/safir/database/_connection.py
src/safir/database/_datetime.py
src/safir/database/_initialize.py
src/safir/database/_pagination.py
src/safir/database/_retry.py
src/safir/database/py.typed
src/safir/datetime/__init__.py
src/safir/datetime/_current.py
src/safir/datetime/_format.py
src/safir/datetime/_parse.py
src/safir/datetime/py.typed
src/safir/dependencies/__init__.py
src/safir/dependencies/arq.py
src/safir/dependencies/db_session.py
src/safir/dependencies/gafaelfawr.py
src/safir/dependencies/http_client.py
src/safir/dependencies/logger.py
src/safir/dependencies/metrics.py
src/safir/dependencies/py.typed
src/safir/fastapi/__init__.py
src/safir/fastapi/_errors.py
src/safir/fastapi/py.typed
src/safir/gcs/__init__.py
src/safir/gcs/_signing.py
src/safir/gcs/py.typed
src/safir/github/__init__.py
src/safir/github/_client.py
src/safir/github/models.py
src/safir/github/py.typed
src/safir/github/webhooks.py
src/safir/kafka/__init__.py
src/safir/kafka/_exceptions.py
src/safir/kafka/_kafka_config.py
src/safir/kafka/_manager.py
src/safir/kafka/_schema_registry_config.py
src/safir/kafka/py.typed
src/safir/kubernetes/__init__.py
src/safir/kubernetes/_init.py
src/safir/kubernetes/py.typed
src/safir/metadata/__init__.py
src/safir/metadata/_models.py
src/safir/metadata/_retrieve.py
src/safir/metadata/py.typed
src/safir/metrics/__init__.py
src/safir/metrics/_config.py
src/safir/metrics/_constants.py
src/safir/metrics/_event_manager.py
src/safir/metrics/_exceptions.py
src/safir/metrics/_models.py
src/safir/metrics/_testing.py
src/safir/metrics/arq.py
src/safir/metrics/py.typed
src/safir/middleware/__init__.py
src/safir/middleware/ivoa.py
src/safir/middleware/py.typed
src/safir/middleware/x_forwarded.py
src/safir/models/__init__.py
src/safir/models/_errors.py
src/safir/models/py.typed
src/safir/pydantic/__init__.py
src/safir/pydantic/_camel.py
src/safir/pydantic/_types.py
src/safir/pydantic/_validators.py
src/safir/pydantic/py.typed
src/safir/redis/__init__.py
src/safir/redis/_storage.py
src/safir/redis/py.typed
src/safir/sentry/__init__.py
src/safir/sentry/_config.py
src/safir/sentry/_helpers.py
src/safir/sentry/py.typed
src/safir/slack/__init__.py
src/safir/slack/blockkit.py
src/safir/slack/py.typed
src/safir/slack/sentry.py
src/safir/slack/webhook.py
src/safir/testing/containers/__init__.py
src/safir/testing/containers/_constants.py
src/safir/testing/containers/_kafka.py
src/safir/testing/containers/_schema_registry.py
src/safir/testing/containers/py.typed
src/safir/testing/containers/data/generate-kafka-secrets.bash
src/safir/testing/data/__init__.py
src/safir/testing/data/_data.py
src/safir/testing/data/py.typed
src/safir/testing/gcs/__init__.py
src/safir/testing/gcs/_mock.py
src/safir/testing/gcs/py.typed
src/safir/testing/kubernetes/__init__.py
src/safir/testing/kubernetes/_mock.py
src/safir/testing/kubernetes/_strip.py
src/safir/testing/kubernetes/py.typed
src/safir/testing/sentry/__init__.py
src/safir/testing/sentry/_fixtures.py
src/safir/testing/sentry/_mocks.py
src/safir/testing/sentry/py.typed
src/safir/testing/slack/__init__.py
src/safir/testing/slack/_mocks.py
src/safir/testing/slack/py.typed
src/safir/testing/uvicorn/__init__.py
src/safir/testing/uvicorn/_spawn.py
src/safir/testing/uvicorn/py.typed
src/safir/testing/uws/__init__.py
src/safir/testing/uws/_assert.py
src/safir/testing/uws/_mocks.py
src/safir/testing/uws/py.typed
src/safir/uws/__init__.py
src/safir/uws/_app.py
src/safir/uws/_config.py
src/safir/uws/_constants.py
src/safir/uws/_dependencies.py
src/safir/uws/_exceptions.py
src/safir/uws/_handlers.py
src/safir/uws/_models.py
src/safir/uws/_responses.py
src/safir/uws/_results.py
src/safir/uws/_service.py
src/safir/uws/_storage.py
src/safir/uws/_workers.py
src/safir/uws/py.typed
src/safir/uws/templates/error.xml
tests/__init__.py
tests/arq_test.py
tests/asyncio_test.py
tests/click_test.py
tests/conftest.py
tests/constants.py
tests/database_test.py
tests/datetime_test.py
tests/fastapi_test.py
tests/gcs_test.py
tests/kubernetes_test.py
tests/logging_test.py
tests/metadata_test.py
tests/models_test.py
tests/pydantic_test.py
tests/redis_test.py
tests/sentry_test.py
tests/data/database/docker-compose.yaml
tests/data/database/v1/README.md
tests/data/database/v1/alembic.ini
tests/data/database/v1/alembic/env.py
tests/data/database/v1/alembic/script.py.mako
tests/data/database/v1/alembic/versions/20240910_2304_a6e49b57e3c9_v1_schema.py
tests/data/database/v2/README.md
tests/data/database/v2/alembic.ini
tests/data/database/v2/alembic/env.py
tests/data/database/v2/alembic/script.py.mako
tests/data/database/v2/alembic/versions/20240910_2304_a6e49b57e3c9_v1_schema.py
tests/data/database/v2/alembic/versions/20240910_2316_e843cec7e694_v2_schema.py
tests/data/slack/exception.json
tests/data/slack/message.json
tests/data/slack/one-block.json
tests/data/slack/single-line.json
tests/data/slack/special.json
tests/data/slack/web-exception.json
tests/dependencies/__init__.py
tests/dependencies/arq_test.py
tests/dependencies/db_session_test.py
tests/dependencies/gafaelfawr_test.py
tests/dependencies/http_client_test.py
tests/dependencies/logger_test.py
tests/github/__init__.py
tests/github/webhooks_test.py
tests/github/data/webhooks/check_run_created.json
tests/github/data/webhooks/check_suite_completed.json
tests/github/data/webhooks/installation.json
tests/github/data/webhooks/installation_repositories.json
tests/github/data/webhooks/pull_request_event.json
tests/github/data/webhooks/push_event.json
tests/kafka/__init__.py
tests/kafka/exceptions_test.py
tests/kafka/kafka_config_test.py
tests/kafka/schema_manager_test.py
tests/metrics/__init__.py
tests/metrics/arq_metrics_test.py
tests/metrics/config_test.py
tests/metrics/event_manager_test.py
tests/metrics/mock_publisher_test.py
tests/middleware/__init__.py
tests/middleware/ivoa_test.py
tests/middleware/x_forwarded_test.py
tests/slack/__init__.py
tests/slack/blockkit_test.py
tests/slack/webhook_test.py
tests/support/__init__.py
tests/support/alembic.py
tests/support/kafka.py
tests/support/metrics.py
tests/support/uws.py
tests/testing/__init__.py
tests/testing/conftest.py
tests/testing/data_test.py
tests/testing/gcs_test.py
tests/testing/kubernetes_test.py
tests/testing/logging_test.py
tests/uws/__init__.py
tests/uws/conftest.py
tests/uws/errors_test.py
tests/uws/exceptions_test.py
tests/uws/job_api_test.py
tests/uws/job_error_test.py
tests/uws/job_list_test.py
tests/uws/long_polling_test.py
tests/uws/vosi_test.py
tests/uws/workers_test.py