csrd-utils 0.3.78__tar.gz → 0.3.80__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.78 → csrd_utils-0.3.80}/PKG-INFO +1 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/pyproject.toml +1 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/__main__.py +0 -2
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/cluster.py +3 -3
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/cookiecutter.json +0 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +8 -2
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +1 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/requirements.txt +1 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/settings.py +7 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/cookiecutter.json +0 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +9 -2
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/token_repository.py +3 -2
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/requirements.txt +1 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/settings.py +6 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_view.py +1 -5
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/cookiecutter.json +0 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +8 -2
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/user_repository.py +8 -7
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/requirements.txt +1 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/settings.py +6 -1
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/.gitignore +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/README.md +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/audit.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/augmentor.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/doctor.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/manifest.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/requirements.fragment +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/manifest.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/requirements.fragment +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/manifest.yaml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/requirements.fragment +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/fragments.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/generator.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/resources.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.cookiecutterignore +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/cache.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/upstreams.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/delegates.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/worker_broker.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/docker-compose.yml +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/logging.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/test_logging_middleware.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/conftest.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/test_items.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_cache.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_database_settings.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_delegates.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_settings_contracts.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_worker_broker.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/tasks.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/auth_delegate.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/identity_delegate.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_passthrough.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/auth_service.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/items.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_service_view.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/models/auth.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/models/users.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.78 → csrd_utils-0.3.80}/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.80
|
|
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,8 +485,6 @@ 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"
|
|
490
488
|
if role == "auth":
|
|
491
489
|
# Resolve the identity-service URL from the port map if present
|
|
492
490
|
identity_port = next(
|
|
@@ -313,7 +313,7 @@ def render_compose(spec: ClusterSpec) -> dict[str, Any]:
|
|
|
313
313
|
services = spec["services"]
|
|
314
314
|
infra = _infer_infra(services)
|
|
315
315
|
compose: dict[str, Any] = {"services": {}}
|
|
316
|
-
compose_volumes: dict[str,
|
|
316
|
+
compose_volumes: dict[str, None] = {}
|
|
317
317
|
|
|
318
318
|
for service in services:
|
|
319
319
|
name = str(service["name"])
|
|
@@ -366,14 +366,14 @@ def render_compose(spec: ClusterSpec) -> dict[str, Any]:
|
|
|
366
366
|
|
|
367
367
|
if volume_name is not None:
|
|
368
368
|
app_service["volumes"] = [f"{volume_name}:/data"]
|
|
369
|
-
compose_volumes[volume_name] =
|
|
369
|
+
compose_volumes[volume_name] = None
|
|
370
370
|
|
|
371
371
|
if depends_on:
|
|
372
372
|
app_service["depends_on"] = depends_on
|
|
373
373
|
compose["services"][name] = app_service
|
|
374
374
|
|
|
375
375
|
if "postgres" in infra:
|
|
376
|
-
compose_volumes["postgres-data"] =
|
|
376
|
+
compose_volumes["postgres-data"] = None
|
|
377
377
|
compose["services"]["postgres"] = {
|
|
378
378
|
"image": "postgres:16",
|
|
379
379
|
"environment": {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"service_name": "app-service",
|
|
3
3
|
"port": "8080",
|
|
4
|
-
"db_path": "./platform.db",
|
|
5
4
|
"auth_service_url": "http://auth-service:8081",
|
|
6
5
|
"identity_service_url": "http://identity-service:8082",
|
|
7
6
|
"__service_name_snake": "{{ cookiecutter.service_name | replace('-', '_') }}"
|
|
@@ -3,14 +3,20 @@ from typing import Annotated
|
|
|
3
3
|
|
|
4
4
|
from fastapi import Depends
|
|
5
5
|
|
|
6
|
-
from csrd.repository import
|
|
6
|
+
from csrd.repository import PGAdapter
|
|
7
7
|
|
|
8
8
|
from ..repositories import ItemRepository
|
|
9
9
|
from ..settings import settings
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
async def item_repository_factory() -> AsyncIterator[ItemRepository]:
|
|
13
|
-
adapter =
|
|
13
|
+
adapter = PGAdapter(
|
|
14
|
+
host=settings.db_host,
|
|
15
|
+
port=settings.db_port,
|
|
16
|
+
user=settings.db_user,
|
|
17
|
+
password=settings.db_password,
|
|
18
|
+
database=settings.db_name,
|
|
19
|
+
)
|
|
14
20
|
await adapter.connect()
|
|
15
21
|
repo = ItemRepository(adapter)
|
|
16
22
|
await repo._init_schema()
|
|
@@ -42,7 +42,7 @@ class ItemRepository(BaseRepository):
|
|
|
42
42
|
async def get_item(self, item_id: str) -> dict[str, str] | None:
|
|
43
43
|
await self._init_schema()
|
|
44
44
|
row = await self.fetch_one(
|
|
45
|
-
"SELECT id, name, created_at FROM items WHERE id =
|
|
45
|
+
"SELECT id, name, created_at FROM items WHERE id = %(id)s",
|
|
46
46
|
{"id": item_id},
|
|
47
47
|
)
|
|
48
48
|
if row is None:
|
|
@@ -6,7 +6,13 @@ class Settings(BaseSettings):
|
|
|
6
6
|
|
|
7
7
|
app_name: str = "{{ cookiecutter.service_name }}"
|
|
8
8
|
port: int = {{ cookiecutter.port }}
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
db_host: str = "localhost"
|
|
11
|
+
db_port: int = 5432
|
|
12
|
+
db_user: str = "service_user"
|
|
13
|
+
db_password: str = "change_me"
|
|
14
|
+
db_name: str = "service_db"
|
|
15
|
+
|
|
10
16
|
auth_service_url: str = "{{ cookiecutter.auth_service_url }}"
|
|
11
17
|
identity_service_url: str = "{{ cookiecutter.identity_service_url }}"
|
|
12
18
|
|
|
@@ -1,16 +1,23 @@
|
|
|
1
|
+
# Auth service dependencies
|
|
1
2
|
from collections.abc import AsyncIterator
|
|
2
3
|
from typing import Annotated
|
|
3
4
|
|
|
4
5
|
from fastapi import Depends
|
|
5
6
|
|
|
6
|
-
from csrd.repository import
|
|
7
|
+
from csrd.repository import PGAdapter
|
|
7
8
|
|
|
8
9
|
from ..repositories.token_repository import TokenRepository
|
|
9
10
|
from ..settings import settings
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
async def token_repository_factory() -> AsyncIterator[TokenRepository]:
|
|
13
|
-
adapter =
|
|
14
|
+
adapter = PGAdapter(
|
|
15
|
+
host=settings.db_host,
|
|
16
|
+
port=settings.db_port,
|
|
17
|
+
user=settings.db_user,
|
|
18
|
+
password=settings.db_password,
|
|
19
|
+
database=settings.db_name,
|
|
20
|
+
)
|
|
14
21
|
await adapter.connect()
|
|
15
22
|
repo = TokenRepository(adapter)
|
|
16
23
|
await repo._init_schema()
|
|
@@ -26,7 +26,8 @@ class TokenRepository(BaseRepository):
|
|
|
26
26
|
issued_at = datetime.now(UTC).isoformat()
|
|
27
27
|
await self._init_schema()
|
|
28
28
|
await self.execute(
|
|
29
|
-
"INSERT
|
|
30
|
-
"VALUES (
|
|
29
|
+
"INSERT INTO issued_tokens (token, subject, issued_at) "
|
|
30
|
+
"VALUES (%(token)s, %(subject)s, %(issued_at)s) "
|
|
31
|
+
"ON CONFLICT (token) DO UPDATE SET subject = EXCLUDED.subject, issued_at = EXCLUDED.issued_at",
|
|
31
32
|
{"token": token, "subject": subject, "issued_at": issued_at},
|
|
32
33
|
)
|
|
@@ -13,8 +13,13 @@ class Settings(BaseSettings):
|
|
|
13
13
|
jwt_audience: str = "cluster"
|
|
14
14
|
jwt_ttl_seconds: int = 3600
|
|
15
15
|
|
|
16
|
-
db_path: str = "{{ cookiecutter.db_path }}"
|
|
17
16
|
identity_service_url: str = "{{ cookiecutter.identity_service_url }}"
|
|
18
17
|
|
|
18
|
+
db_host: str = "localhost"
|
|
19
|
+
db_port: int = 5432
|
|
20
|
+
db_user: str = "service_user"
|
|
21
|
+
db_password: str = "change_me"
|
|
22
|
+
db_name: str = "service_db"
|
|
23
|
+
|
|
19
24
|
|
|
20
25
|
settings = Settings()
|
|
@@ -6,7 +6,6 @@ from fastapi import APIRouter, HTTPException, Request
|
|
|
6
6
|
|
|
7
7
|
from csrd.auth import JWTAuthenticator, StaticKeyProvider
|
|
8
8
|
|
|
9
|
-
from ...dependencies import TokenRepositoryDep
|
|
10
9
|
from ...models import TokenRequest, TokenResponse, TokenVerifyResponse, VerifyClaims, VerifyRequest
|
|
11
10
|
from ...settings import settings
|
|
12
11
|
|
|
@@ -48,9 +47,7 @@ async def _validate_credentials(username: str, password: str) -> list[str]:
|
|
|
48
47
|
|
|
49
48
|
|
|
50
49
|
@router.post("/token", response_model=TokenResponse)
|
|
51
|
-
async def issue_token(
|
|
52
|
-
payload: TokenRequest, token_repo: TokenRepositoryDep
|
|
53
|
-
) -> TokenResponse:
|
|
50
|
+
async def issue_token(payload: TokenRequest) -> TokenResponse:
|
|
54
51
|
roles = await _validate_credentials(payload.username, payload.password)
|
|
55
52
|
|
|
56
53
|
now = datetime.now(UTC)
|
|
@@ -64,7 +61,6 @@ async def issue_token(
|
|
|
64
61
|
"roles": roles,
|
|
65
62
|
}
|
|
66
63
|
token = jwt.encode(claims, settings.jwt_secret, algorithm=settings.jwt_algorithm)
|
|
67
|
-
await token_repo.record_issued_token(token=token, subject=payload.username)
|
|
68
64
|
return TokenResponse(
|
|
69
65
|
access_token=token, token_type="bearer", expires_in=settings.jwt_ttl_seconds
|
|
70
66
|
)
|
|
@@ -3,14 +3,20 @@ from typing import Annotated
|
|
|
3
3
|
|
|
4
4
|
from fastapi import Depends
|
|
5
5
|
|
|
6
|
-
from csrd.repository import
|
|
6
|
+
from csrd.repository import PGAdapter
|
|
7
7
|
|
|
8
8
|
from ..repositories.user_repository import UserRepository
|
|
9
9
|
from ..settings import settings
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
async def user_repository_factory() -> AsyncIterator[UserRepository]:
|
|
13
|
-
adapter =
|
|
13
|
+
adapter = PGAdapter(
|
|
14
|
+
host=settings.db_host,
|
|
15
|
+
port=settings.db_port,
|
|
16
|
+
user=settings.db_user,
|
|
17
|
+
password=settings.db_password,
|
|
18
|
+
database=settings.db_name,
|
|
19
|
+
)
|
|
14
20
|
await adapter.connect()
|
|
15
21
|
repo = UserRepository(adapter)
|
|
16
22
|
await repo._init_schema()
|
|
@@ -49,7 +49,7 @@ class UserRepository(BaseRepository):
|
|
|
49
49
|
created_at = datetime.now(UTC).isoformat()
|
|
50
50
|
await self._init_schema()
|
|
51
51
|
await self.execute(
|
|
52
|
-
"INSERT INTO users (id, username, created_at) VALUES (
|
|
52
|
+
"INSERT INTO users (id, username, created_at) VALUES (%(id)s, %(username)s, %(created_at)s)",
|
|
53
53
|
{"id": user_id, "username": username, "created_at": created_at},
|
|
54
54
|
)
|
|
55
55
|
return {"id": user_id, "username": username, "created_at": created_at}
|
|
@@ -57,7 +57,7 @@ class UserRepository(BaseRepository):
|
|
|
57
57
|
async def get_user(self, user_id: str) -> dict[str, str] | None:
|
|
58
58
|
await self._init_schema()
|
|
59
59
|
row = await self.fetch_one(
|
|
60
|
-
"SELECT id, username, created_at FROM users WHERE id =
|
|
60
|
+
"SELECT id, username, created_at FROM users WHERE id = %(id)s",
|
|
61
61
|
{"id": user_id},
|
|
62
62
|
)
|
|
63
63
|
if row is None:
|
|
@@ -71,7 +71,7 @@ class UserRepository(BaseRepository):
|
|
|
71
71
|
async def get_roles(self, user_id: str) -> list[str]:
|
|
72
72
|
await self._init_schema()
|
|
73
73
|
rows = await self.fetch_all(
|
|
74
|
-
"SELECT role FROM user_roles WHERE user_id =
|
|
74
|
+
"SELECT role FROM user_roles WHERE user_id = %(user_id)s",
|
|
75
75
|
{"user_id": user_id},
|
|
76
76
|
)
|
|
77
77
|
return [str(row["role"]) for row in rows]
|
|
@@ -79,7 +79,8 @@ class UserRepository(BaseRepository):
|
|
|
79
79
|
async def assign_role(self, user_id: str, role: str) -> None:
|
|
80
80
|
await self._init_schema()
|
|
81
81
|
await self.execute(
|
|
82
|
-
"INSERT
|
|
82
|
+
"INSERT INTO user_roles (user_id, role) VALUES (%(user_id)s, %(role)s) "
|
|
83
|
+
"ON CONFLICT (user_id, role) DO NOTHING",
|
|
83
84
|
{"user_id": user_id, "role": role},
|
|
84
85
|
)
|
|
85
86
|
|
|
@@ -88,7 +89,7 @@ class UserRepository(BaseRepository):
|
|
|
88
89
|
row = await self.fetch_one(
|
|
89
90
|
"SELECT u.id, u.username, u.created_at FROM users u "
|
|
90
91
|
"JOIN user_credentials c ON c.user_id = u.id "
|
|
91
|
-
"WHERE u.username =
|
|
92
|
+
"WHERE u.username = %(username)s AND c.password_hash = %(password_hash)s",
|
|
92
93
|
{"username": username, "password_hash": self._hash_password(username, password)},
|
|
93
94
|
)
|
|
94
95
|
if row is None:
|
|
@@ -105,7 +106,7 @@ class UserRepository(BaseRepository):
|
|
|
105
106
|
async def signup(self, username: str, password: str) -> dict[str, str]:
|
|
106
107
|
await self._init_schema()
|
|
107
108
|
existing = await self.fetch_one(
|
|
108
|
-
"SELECT id FROM users WHERE username =
|
|
109
|
+
"SELECT id FROM users WHERE username = %(username)s",
|
|
109
110
|
{"username": username},
|
|
110
111
|
)
|
|
111
112
|
if existing is not None:
|
|
@@ -114,7 +115,7 @@ class UserRepository(BaseRepository):
|
|
|
114
115
|
user = await self.create_user(username)
|
|
115
116
|
await self.execute(
|
|
116
117
|
"INSERT INTO user_credentials (user_id, password_hash) "
|
|
117
|
-
"VALUES (
|
|
118
|
+
"VALUES (%(user_id)s, %(password_hash)s)",
|
|
118
119
|
{
|
|
119
120
|
"user_id": user["id"],
|
|
120
121
|
"password_hash": self._hash_password(username, password),
|
|
@@ -6,7 +6,12 @@ class Settings(BaseSettings):
|
|
|
6
6
|
|
|
7
7
|
app_name: str = "{{ cookiecutter.service_name }}"
|
|
8
8
|
port: int = {{ cookiecutter.port }}
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
db_host: str = "localhost"
|
|
11
|
+
db_port: int = 5432
|
|
12
|
+
db_user: str = "service_user"
|
|
13
|
+
db_password: str = "change_me"
|
|
14
|
+
db_name: str = "service_db"
|
|
10
15
|
|
|
11
16
|
|
|
12
17
|
settings = Settings()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/caching/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/conftest.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/logging/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/metrics/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/conftest.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/tracing/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/settings.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/src/app/workers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/src/csrd_utils/features/workers/src/app/workers/tasks.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.78 → csrd_utils-0.3.80}/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.78 → csrd_utils-0.3.80}/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
|
|
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
|