csrd-utils 0.3.72__tar.gz → 0.3.74__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/PKG-INFO +1 -1
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/pyproject.toml +1 -1
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/__main__.py +7 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/cluster.py +4 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/cookiecutter.json +2 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/README.md +7 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +4 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/auth_delegate.py +11 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/identity_delegate.py +11 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +12 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_passthrough.py +25 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +25 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +3 -0
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +71 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/requirements.txt +3 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/settings.py +2 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +2 -1
- csrd_utils-0.3.74/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_service_view.py +28 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +15 -27
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/cookiecutter.json +1 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/README.md +1 -1
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/settings.py +1 -1
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/cookiecutter.json +1 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/README.md +1 -1
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/settings.py +1 -1
- csrd_utils-0.3.72/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -3
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/.gitignore +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/README.md +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/audit.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/augmentor.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/doctor.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/manifest.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/requirements.fragment +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/manifest.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/requirements.fragment +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/manifest.yaml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/requirements.fragment +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/fragments.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/generator.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/resources.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.cookiecutterignore +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/cache.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/upstreams.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/delegates.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/worker_broker.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/docker-compose.yml +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/logging.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/test_logging_middleware.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/conftest.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/test_items.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_cache.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_database_settings.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_delegates.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_settings_contracts.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_worker_broker.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/tasks.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/token_repository.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_view.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/user_repository.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/users_view.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: csrd-utils
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.74
|
|
4
4
|
Summary: CLI utilities for csrd service generation and feature augmentation
|
|
5
5
|
Project-URL: Repository, https://github.com/csrd-api/fastapi-common
|
|
6
6
|
Project-URL: Documentation, https://github.com/csrd-api/fastapi-common/tree/main/packages/utils
|
|
@@ -485,6 +485,8 @@ def _generate_services_from_cluster_spec(
|
|
|
485
485
|
role = str(service.get("role", "custom")).strip()
|
|
486
486
|
# Build extra_context for platform templates that have additional variables
|
|
487
487
|
extra: dict[str, str] = {}
|
|
488
|
+
if role in {"app", "auth", "identity"}:
|
|
489
|
+
extra["db_path"] = "./platform.db"
|
|
488
490
|
if role == "auth":
|
|
489
491
|
# Resolve the identity-service URL from the port map if present
|
|
490
492
|
identity_port = next(
|
|
@@ -499,7 +501,12 @@ def _generate_services_from_cluster_spec(
|
|
|
499
501
|
elif role == "app":
|
|
500
502
|
auth_port = next((port_map[n] for n in port_map if "auth" in n), 8081)
|
|
501
503
|
auth_name = next((n for n in port_map if "auth" in n), "auth-service")
|
|
504
|
+
identity_port = next((port_map[n] for n in port_map if "identity" in n), 8082)
|
|
505
|
+
identity_name = next(
|
|
506
|
+
(n for n in port_map if "identity" in n), "identity-service"
|
|
507
|
+
)
|
|
502
508
|
extra["auth_service_url"] = f"http://{auth_name}:{auth_port}"
|
|
509
|
+
extra["identity_service_url"] = f"http://{identity_name}:{identity_port}"
|
|
503
510
|
result = generate_platform_service(
|
|
504
511
|
name=name,
|
|
505
512
|
output_dir=workspace_root,
|
|
@@ -292,6 +292,10 @@ def _service_environment(service: ServiceSpec, services: list[ServiceSpec]) -> d
|
|
|
292
292
|
if auth_service and name != auth_service["name"]:
|
|
293
293
|
env["AUTH_SERVICE_URL"] = f"http://{auth_service['name']}:{auth_service['port']}"
|
|
294
294
|
|
|
295
|
+
role = str(service.get("role", "")).strip()
|
|
296
|
+
if service["type"] == "platform" and role in {"app", "auth", "identity"}:
|
|
297
|
+
env["DB_PATH"] = "./platform.db"
|
|
298
|
+
|
|
295
299
|
return env
|
|
296
300
|
|
|
297
301
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"service_name": "app-service",
|
|
3
3
|
"port": "8080",
|
|
4
|
+
"db_path": "./platform.db",
|
|
4
5
|
"auth_service_url": "http://auth-service:8081",
|
|
6
|
+
"identity_service_url": "http://identity-service:8082",
|
|
5
7
|
"__service_name_snake": "{{ cookiecutter.service_name | replace('-', '_') }}"
|
|
6
8
|
}
|
|
@@ -2,9 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Platform app service with auth-guarded item endpoints.
|
|
4
4
|
|
|
5
|
+
Items are persisted in SQLite so this service can share the same DB file
|
|
6
|
+
as platform auth and identity services.
|
|
7
|
+
|
|
5
8
|
## Endpoints
|
|
6
9
|
|
|
7
10
|
- `GET /health` - liveness probe
|
|
11
|
+
- `POST /signup` - passthrough to identity signup (public)
|
|
12
|
+
- `POST /login` - passthrough to auth token issue (public)
|
|
8
13
|
- `POST /api/items` - create item (bearer required)
|
|
9
14
|
- `GET /api/items` - list items (bearer required)
|
|
10
15
|
- `GET /api/items/{entity_id}` - get item (bearer required)
|
|
@@ -16,7 +21,9 @@ Platform app service with auth-guarded item endpoints.
|
|
|
16
21
|
|
|
17
22
|
| Variable | Default | Description |
|
|
18
23
|
|---|---|---|
|
|
24
|
+
| `DB_PATH` | `{{ cookiecutter.db_path }}` | Shared SQLite database file path |
|
|
19
25
|
| `AUTH_SERVICE_URL` | `{{ cookiecutter.auth_service_url }}` | Auth service verify endpoint base URL |
|
|
26
|
+
| `IDENTITY_SERVICE_URL` | `{{ cookiecutter.identity_service_url }}` | Identity service base URL for signup passthrough |
|
|
20
27
|
|
|
21
28
|
## Run
|
|
22
29
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from csrd.delegate import BaseDelegate
|
|
2
|
+
|
|
3
|
+
from ..settings import settings
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AuthDelegate(BaseDelegate):
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
super().__init__(settings.auth_service_url)
|
|
9
|
+
|
|
10
|
+
async def login(self, username: str, password: str) -> dict[str, object]:
|
|
11
|
+
return await self.post("/api/token", json={"username": username, "password": password})
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from csrd.delegate import BaseDelegate
|
|
2
|
+
|
|
3
|
+
from ..settings import settings
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class IdentityDelegate(BaseDelegate):
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
super().__init__(settings.identity_service_url)
|
|
9
|
+
|
|
10
|
+
async def signup(self, username: str, password: str) -> dict[str, object]:
|
|
11
|
+
return await self.post("/api/signup", json={"username": username, "password": password})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from .auth_passthrough import AuthDelegateDep, IdentityDelegateDep
|
|
2
|
+
from .auth_service import VerifiedTokenDep, router_auth
|
|
3
|
+
from .item_repository import ItemRepositoryDep, item_repository_factory
|
|
4
|
+
|
|
5
|
+
__all__ = (
|
|
6
|
+
"AuthDelegateDep",
|
|
7
|
+
"IdentityDelegateDep",
|
|
8
|
+
"ItemRepositoryDep",
|
|
9
|
+
"VerifiedTokenDep",
|
|
10
|
+
"item_repository_factory",
|
|
11
|
+
"router_auth",
|
|
12
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from typing import Annotated
|
|
2
|
+
|
|
3
|
+
from fastapi import Depends
|
|
4
|
+
|
|
5
|
+
from ..delegates import AuthDelegate, IdentityDelegate
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def auth_delegate_factory() -> AuthDelegate:
|
|
9
|
+
return AuthDelegate()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def identity_delegate_factory() -> IdentityDelegate:
|
|
13
|
+
return IdentityDelegate()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
AuthDelegateDep = Annotated[AuthDelegate, Depends(auth_delegate_factory)]
|
|
17
|
+
IdentityDelegateDep = Annotated[IdentityDelegate, Depends(identity_delegate_factory)]
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
__all__ = (
|
|
21
|
+
"AuthDelegateDep",
|
|
22
|
+
"IdentityDelegateDep",
|
|
23
|
+
"auth_delegate_factory",
|
|
24
|
+
"identity_delegate_factory",
|
|
25
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from collections.abc import AsyncIterator
|
|
2
|
+
from typing import Annotated
|
|
3
|
+
|
|
4
|
+
from fastapi import Depends
|
|
5
|
+
|
|
6
|
+
from csrd.repository import SQLiteAdapter
|
|
7
|
+
|
|
8
|
+
from ..repositories import ItemRepository
|
|
9
|
+
from ..settings import settings
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def item_repository_factory() -> AsyncIterator[ItemRepository]:
|
|
13
|
+
adapter = SQLiteAdapter(settings.db_path)
|
|
14
|
+
await adapter.connect()
|
|
15
|
+
repo = ItemRepository(adapter)
|
|
16
|
+
await repo._init_schema()
|
|
17
|
+
try:
|
|
18
|
+
yield repo
|
|
19
|
+
finally:
|
|
20
|
+
await adapter.close()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
ItemRepositoryDep = Annotated[ItemRepository, Depends(item_repository_factory)]
|
|
24
|
+
|
|
25
|
+
__all__ = ("ItemRepositoryDep", "item_repository_factory")
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import uuid
|
|
2
|
+
from datetime import UTC, datetime
|
|
3
|
+
|
|
4
|
+
from csrd.repository import BaseRepository, DBProtocol
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
_CREATE_ITEMS_TABLE_SQL = """
|
|
8
|
+
CREATE TABLE IF NOT EXISTS items (
|
|
9
|
+
id TEXT PRIMARY KEY,
|
|
10
|
+
name TEXT NOT NULL,
|
|
11
|
+
created_at TEXT NOT NULL
|
|
12
|
+
)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ItemRepository(BaseRepository):
|
|
17
|
+
def __init__(self, adapter: DBProtocol) -> None:
|
|
18
|
+
super().__init__(adapter)
|
|
19
|
+
|
|
20
|
+
async def _init_schema(self) -> None:
|
|
21
|
+
await self.execute(_CREATE_ITEMS_TABLE_SQL)
|
|
22
|
+
|
|
23
|
+
async def create_item(self, name: str) -> dict[str, str]:
|
|
24
|
+
item_id = str(uuid.uuid4())
|
|
25
|
+
created_at = datetime.now(UTC).isoformat()
|
|
26
|
+
await self._init_schema()
|
|
27
|
+
await self.insert("items", {"id": item_id, "name": name, "created_at": created_at})
|
|
28
|
+
return {"id": item_id, "name": name, "created_at": created_at}
|
|
29
|
+
|
|
30
|
+
async def list_items(self) -> list[dict[str, str]]:
|
|
31
|
+
await self._init_schema()
|
|
32
|
+
rows = await self.fetch_all("SELECT id, name, created_at FROM items ORDER BY created_at DESC")
|
|
33
|
+
return [
|
|
34
|
+
{
|
|
35
|
+
"id": str(row.get("id", "")),
|
|
36
|
+
"name": str(row.get("name", "")),
|
|
37
|
+
"created_at": str(row.get("created_at", "")),
|
|
38
|
+
}
|
|
39
|
+
for row in rows
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
async def get_item(self, item_id: str) -> dict[str, str] | None:
|
|
43
|
+
await self._init_schema()
|
|
44
|
+
row = await self.fetch_one(
|
|
45
|
+
"SELECT id, name, created_at FROM items WHERE id = :id",
|
|
46
|
+
{"id": item_id},
|
|
47
|
+
)
|
|
48
|
+
if row is None:
|
|
49
|
+
return None
|
|
50
|
+
return {
|
|
51
|
+
"id": str(row.get("id", "")),
|
|
52
|
+
"name": str(row.get("name", "")),
|
|
53
|
+
"created_at": str(row.get("created_at", "")),
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async def update_item(self, item_id: str, name: str) -> int:
|
|
57
|
+
await self._init_schema()
|
|
58
|
+
return await super().update("items", {"name": name}, {"id": item_id})
|
|
59
|
+
|
|
60
|
+
async def delete_item(self, item_id: str) -> int:
|
|
61
|
+
await self._init_schema()
|
|
62
|
+
return await super().delete("items", {"id": item_id})
|
|
63
|
+
|
|
64
|
+
async def upsert_item(self, item_id: str, name: str) -> int:
|
|
65
|
+
await self._init_schema()
|
|
66
|
+
created_at = datetime.now(UTC).isoformat()
|
|
67
|
+
return await super().upsert(
|
|
68
|
+
"items",
|
|
69
|
+
{"name": name, "created_at": created_at},
|
|
70
|
+
{"id": item_id},
|
|
71
|
+
)
|
|
@@ -6,7 +6,9 @@ class Settings(BaseSettings):
|
|
|
6
6
|
|
|
7
7
|
app_name: str = "{{ cookiecutter.service_name }}"
|
|
8
8
|
port: int = {{ cookiecutter.port }}
|
|
9
|
+
db_path: str = "{{ cookiecutter.db_path }}"
|
|
9
10
|
auth_service_url: str = "{{ cookiecutter.auth_service_url }}"
|
|
11
|
+
identity_service_url: str = "{{ cookiecutter.identity_service_url }}"
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
settings = Settings()
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from fastapi import FastAPI
|
|
2
2
|
|
|
3
|
-
from . import health_view, items_view
|
|
3
|
+
from . import auth_service_view, health_view, items_view
|
|
4
4
|
|
|
5
5
|
unversioned_app = FastAPI(title="{{ cookiecutter.service_name }}")
|
|
6
6
|
|
|
7
7
|
unversioned_app.include_router(health_view.router)
|
|
8
|
+
unversioned_app.include_router(auth_service_view.router)
|
|
8
9
|
unversioned_app.include_router(items_view.router)
|
|
9
10
|
|
|
10
11
|
__all__ = ("unversioned_app",)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from fastapi import APIRouter
|
|
2
|
+
from pydantic import BaseModel
|
|
3
|
+
|
|
4
|
+
from ...dependencies import AuthDelegateDep, IdentityDelegateDep
|
|
5
|
+
|
|
6
|
+
router = APIRouter(tags=["Auth Service"])
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class SignupRequest(BaseModel):
|
|
10
|
+
username: str
|
|
11
|
+
password: str
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class LoginRequest(BaseModel):
|
|
15
|
+
username: str
|
|
16
|
+
password: str
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@router.post("/signup")
|
|
20
|
+
async def signup(payload: SignupRequest, delegate: IdentityDelegateDep) -> dict[str, object]:
|
|
21
|
+
async with delegate:
|
|
22
|
+
return await delegate.signup(payload.username, payload.password)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@router.post("/login")
|
|
26
|
+
async def login(payload: LoginRequest, delegate: AuthDelegateDep) -> dict[str, object]:
|
|
27
|
+
async with delegate:
|
|
28
|
+
return await delegate.login(payload.username, payload.password)
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import uuid
|
|
2
|
-
from datetime import UTC, datetime
|
|
3
|
-
|
|
4
1
|
from fastapi import APIRouter, HTTPException
|
|
5
2
|
from pydantic import BaseModel
|
|
6
3
|
|
|
7
|
-
from ...dependencies import router_auth
|
|
4
|
+
from ...dependencies import ItemRepositoryDep, router_auth
|
|
8
5
|
|
|
9
6
|
router = APIRouter(prefix="/api", tags=["Items Endpoints"], dependencies=[router_auth])
|
|
10
7
|
|
|
11
|
-
_ITEMS: dict[str, dict[str, str]] = {}
|
|
12
|
-
|
|
13
|
-
|
|
14
8
|
class CreateItemRequest(BaseModel):
|
|
15
9
|
name: str
|
|
16
10
|
|
|
@@ -49,22 +43,19 @@ class ItemDeleteResponse(BaseModel):
|
|
|
49
43
|
@router.post("/items", response_model=ItemResponse)
|
|
50
44
|
async def create_item(
|
|
51
45
|
payload: CreateItemRequest,
|
|
46
|
+
repo: ItemRepositoryDep,
|
|
52
47
|
) -> ItemResponse:
|
|
53
|
-
|
|
54
|
-
created_at = datetime.now(UTC).isoformat()
|
|
55
|
-
item = {"id": item_id, "name": payload.name, "created_at": created_at}
|
|
56
|
-
_ITEMS[item_id] = item
|
|
57
|
-
return item
|
|
48
|
+
return await repo.create_item(payload.name)
|
|
58
49
|
|
|
59
50
|
|
|
60
51
|
@router.get("/items", response_model=ItemListResponse)
|
|
61
|
-
async def list_items() -> ItemListResponse:
|
|
62
|
-
return {"items":
|
|
52
|
+
async def list_items(repo: ItemRepositoryDep) -> ItemListResponse:
|
|
53
|
+
return {"items": await repo.list_items()}
|
|
63
54
|
|
|
64
55
|
|
|
65
56
|
@router.get("/items/{entity_id}", response_model=ItemResponse)
|
|
66
|
-
async def get_item(entity_id: str) -> ItemResponse:
|
|
67
|
-
item =
|
|
57
|
+
async def get_item(entity_id: str, repo: ItemRepositoryDep) -> ItemResponse:
|
|
58
|
+
item = await repo.get_item(entity_id)
|
|
68
59
|
if item is None:
|
|
69
60
|
raise HTTPException(status_code=404, detail="item not found")
|
|
70
61
|
return item
|
|
@@ -74,11 +65,11 @@ async def get_item(entity_id: str) -> ItemResponse:
|
|
|
74
65
|
async def update_item(
|
|
75
66
|
entity_id: str,
|
|
76
67
|
payload: UpdateItemRequest,
|
|
68
|
+
repo: ItemRepositoryDep,
|
|
77
69
|
) -> ItemUpdateResponse:
|
|
78
|
-
|
|
79
|
-
if
|
|
70
|
+
rows = await repo.update_item(entity_id, payload.name)
|
|
71
|
+
if rows == 0:
|
|
80
72
|
raise HTTPException(status_code=404, detail="item not found")
|
|
81
|
-
item["name"] = payload.name
|
|
82
73
|
return {"id": entity_id, "name": payload.name, "updated": True}
|
|
83
74
|
|
|
84
75
|
|
|
@@ -86,21 +77,18 @@ async def update_item(
|
|
|
86
77
|
async def upsert_item(
|
|
87
78
|
entity_id: str,
|
|
88
79
|
payload: UpdateItemRequest,
|
|
80
|
+
repo: ItemRepositoryDep,
|
|
89
81
|
) -> ItemUpsertResponse:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
created_at = datetime.now(UTC).isoformat()
|
|
93
|
-
_ITEMS[entity_id] = {"id": entity_id, "name": payload.name, "created_at": created_at}
|
|
94
|
-
else:
|
|
95
|
-
existing["name"] = payload.name
|
|
96
|
-
return {"id": entity_id, "name": payload.name, "rows_affected": 1}
|
|
82
|
+
rows = await repo.upsert_item(entity_id, payload.name)
|
|
83
|
+
return {"id": entity_id, "name": payload.name, "rows_affected": rows}
|
|
97
84
|
|
|
98
85
|
|
|
99
86
|
@router.delete("/items/{entity_id}", response_model=ItemDeleteResponse)
|
|
100
87
|
async def delete_item(
|
|
101
88
|
entity_id: str,
|
|
89
|
+
repo: ItemRepositoryDep,
|
|
102
90
|
) -> ItemDeleteResponse:
|
|
103
|
-
rows =
|
|
91
|
+
rows = await repo.delete_item(entity_id)
|
|
104
92
|
if rows == 0:
|
|
105
93
|
raise HTTPException(status_code=404, detail="item not found")
|
|
106
94
|
return {"id": entity_id, "deleted": True}
|
|
@@ -17,7 +17,7 @@ Platform auth service — issues and verifies JWT tokens.
|
|
|
17
17
|
| `JWT_ISSUER` | `{{ cookiecutter.service_name }}` | Token issuer |
|
|
18
18
|
| `JWT_AUDIENCE` | `cluster` | Token audience |
|
|
19
19
|
| `JWT_TTL_SECONDS` | `3600` | Token TTL |
|
|
20
|
-
| `DB_PATH` |
|
|
20
|
+
| `DB_PATH` | `{{ cookiecutter.db_path }}` | SQLite database path |
|
|
21
21
|
| `IDENTITY_SERVICE_URL` | `{{ cookiecutter.identity_service_url }}` | Identity service URL |
|
|
22
22
|
|
|
23
23
|
## Run
|
|
@@ -13,7 +13,7 @@ class Settings(BaseSettings):
|
|
|
13
13
|
jwt_audience: str = "cluster"
|
|
14
14
|
jwt_ttl_seconds: int = 3600
|
|
15
15
|
|
|
16
|
-
db_path: str = "
|
|
16
|
+
db_path: str = "{{ cookiecutter.db_path }}"
|
|
17
17
|
identity_service_url: str = "{{ cookiecutter.identity_service_url }}"
|
|
18
18
|
|
|
19
19
|
|
|
@@ -15,7 +15,7 @@ Platform identity service — manages users and credentials.
|
|
|
15
15
|
|
|
16
16
|
| Variable | Default | Description |
|
|
17
17
|
|---|---|---|
|
|
18
|
-
| `DB_PATH` |
|
|
18
|
+
| `DB_PATH` | `{{ cookiecutter.db_path }}` | SQLite database path |
|
|
19
19
|
|
|
20
20
|
## Run
|
|
21
21
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/caching/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/conftest.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/logging/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/metrics/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/conftest.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/tracing/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/settings.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/src/app/workers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/src/app/workers/tasks.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/features/workers/tests/test_workers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.72 → csrd_utils-0.3.74}/src/csrd_utils/templates/cookiecutter-service/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|