csrd-utils 0.3.110__tar.gz → 0.4.0__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.110 → csrd_utils-0.4.0}/PKG-INFO +1 -1
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/pyproject.toml +1 -1
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/augments.py +142 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/scaffolder.py +22 -3
- csrd_utils-0.4.0/src/csrd_utils/v2/templates/augments/crud-proxy/delegates/${entity_name_snake}_delegate.py.template +55 -0
- csrd_utils-0.4.0/src/csrd_utils/v2/templates/augments/crud-proxy/dependencies/${entity_name_snake}_delegate.py.template +21 -0
- csrd_utils-0.4.0/src/csrd_utils/v2/templates/augments/crud-proxy/models/${entity_name_snake}.py.template +31 -0
- csrd_utils-0.4.0/src/csrd_utils/v2/templates/augments/crud-proxy/views/${entity_name_snake}_proxy_view.py.template +61 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/.gitignore +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/README.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/__main__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/audit.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/augmentor.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/cluster.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/doctor.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/manifest.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/requirements.fragment +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/manifest.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/requirements.fragment +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/manifest.yaml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/requirements.fragment +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/fragments.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/generator.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/resources.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.cookiecutterignore +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/cache.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/upstreams.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/delegates.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/worker_broker.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/docker-compose.yml +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/logging.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/test_logging_middleware.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/conftest.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/test_items.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_cache.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_database_settings.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_delegates.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_settings_contracts.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_worker_broker.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/tasks.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/cookiecutter.json +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/auth_delegate.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/identity_delegate.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_passthrough.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/auth_service.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/items.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_service_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/cookiecutter.json +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/models/auth.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/token_repository.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/cookiecutter.json +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/models/users.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/user_repository.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/users_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/AGENTS.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/git.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/infra.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/loader.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/operations.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/presets.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/renderer.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/service_renderers.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/compose/yaml_editor.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/generate/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/generate/handlers.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/generate/helpers.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/generate/menu.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/models/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/models/base.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/models/spec.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/models/types.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/auth-passthrough/delegates/auth_delegate.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/auth-passthrough/dependencies/auth_passthrough.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/auth-passthrough/models/auth_passthrough.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/auth-passthrough/views/auth_passthrough_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/crud-scaffold/dependencies/${entity_name_snake}_repository.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/crud-scaffold/migrations_${entity_name_snake}.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/crud-scaffold/models/${entity_name_snake}.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/crud-scaffold/repositories/${entity_name_snake}_repository.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/crud-scaffold/views/${entity_name_snake}_view.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/db-config/dependencies/db.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-consumer/dependencies/auth.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/AUTH.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/dependencies/auth.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/dependencies/db.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/dependencies/token_service.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/migrations.py.template +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/models/auth.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/models/jwks.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/models/users.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/repositories/user_repository.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/services/token_service.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/views/auth_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/views/jwks_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/views/users_admin_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/views/users_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/cookiecutter.json +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/models/health.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/tests/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/tests/conftest.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/tests/test_health.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/views/health_view.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/tui_wizard/__init__.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/tui_wizard/exceptions.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/tui_wizard/menu.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/tui_wizard/models.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/tui_wizard/prompts.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/tui_wizard/terminal.py +0 -0
- {csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/tui_wizard/wizard.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: csrd-utils
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
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
|
|
@@ -42,6 +42,10 @@ DynamicMigrationResolver = Callable[
|
|
|
42
42
|
[ServiceAugment, ServiceNode, ComposeSpec], list[tuple[str, str]]
|
|
43
43
|
]
|
|
44
44
|
|
|
45
|
+
#: Returns multiple variable dicts for multi-instance template rendering.
|
|
46
|
+
#: Each dict is used to render the full template set once (e.g. per entity).
|
|
47
|
+
MultiScaffoldResolver = Callable[[ServiceAugment, ServiceNode, ComposeSpec], list[dict[str, str]]]
|
|
48
|
+
|
|
45
49
|
|
|
46
50
|
# ---------------------------------------------------------------------------
|
|
47
51
|
# Role registry
|
|
@@ -297,6 +301,10 @@ class AugmentDescriptor:
|
|
|
297
301
|
# Dynamic migration imports resolved from augment options
|
|
298
302
|
resolve_dynamic_migrations: DynamicMigrationResolver | None = None
|
|
299
303
|
|
|
304
|
+
# Multi-instance scaffolding: when set, templates are rendered once
|
|
305
|
+
# per returned variable dict (e.g. one per discovered entity).
|
|
306
|
+
resolve_multi_scaffold_vars: MultiScaffoldResolver | None = None
|
|
307
|
+
|
|
300
308
|
|
|
301
309
|
# ---------------------------------------------------------------------------
|
|
302
310
|
# Resolver functions — dynamic wiring extracted from renderer/scaffolder
|
|
@@ -597,6 +605,126 @@ def _crud_scaffold_dynamic_migrations(
|
|
|
597
605
|
return [(import_line, f"{snake}_migration")]
|
|
598
606
|
|
|
599
607
|
|
|
608
|
+
# ── crud-proxy ───────────────────────────────────────────────────────────
|
|
609
|
+
|
|
610
|
+
|
|
611
|
+
def _resolve_target_entities(
|
|
612
|
+
augment: ServiceAugment, svc: ServiceNode, spec: ComposeSpec
|
|
613
|
+
) -> list[dict[str, str]]:
|
|
614
|
+
"""Introspect target services' crud-scaffold augments to discover entities.
|
|
615
|
+
|
|
616
|
+
Returns a list of dicts with keys: target_name, target_port,
|
|
617
|
+
entity_name_snake, entity_name_pascal, entity_name_plural.
|
|
618
|
+
"""
|
|
619
|
+
targets = augment.options.get("targets", [])
|
|
620
|
+
if isinstance(targets, str):
|
|
621
|
+
targets = [targets]
|
|
622
|
+
|
|
623
|
+
entities: list[dict[str, str]] = []
|
|
624
|
+
for target_name in targets:
|
|
625
|
+
target_svc = find_service_by_name(spec, target_name)
|
|
626
|
+
if target_svc is None:
|
|
627
|
+
continue
|
|
628
|
+
for target_aug in target_svc.augments:
|
|
629
|
+
if target_aug.name != "crud-scaffold":
|
|
630
|
+
continue
|
|
631
|
+
entity_raw = target_aug.options.get("entity_name", "item")
|
|
632
|
+
entity = entity_raw if isinstance(entity_raw, str) else entity_raw[0]
|
|
633
|
+
snake = entity.replace("-", "_").lower()
|
|
634
|
+
pascal = "".join(w.capitalize() for w in snake.split("_"))
|
|
635
|
+
plural_raw = target_aug.options.get("entity_name_plural", snake + "s")
|
|
636
|
+
plural = plural_raw if isinstance(plural_raw, str) else plural_raw[0]
|
|
637
|
+
entities.append(
|
|
638
|
+
{
|
|
639
|
+
"target_name": target_name,
|
|
640
|
+
"target_name_snake": target_name.replace("-", "_"),
|
|
641
|
+
"target_port": str(target_svc.port),
|
|
642
|
+
"entity_name_snake": snake,
|
|
643
|
+
"entity_name_pascal": pascal,
|
|
644
|
+
"entity_name_plural": plural,
|
|
645
|
+
}
|
|
646
|
+
)
|
|
647
|
+
return entities
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
def _crud_proxy_compose_env(
|
|
651
|
+
augment: ServiceAugment, svc: ServiceNode, spec: ComposeSpec
|
|
652
|
+
) -> dict[str, str]:
|
|
653
|
+
"""Compose env vars: delegate URLs for each target service."""
|
|
654
|
+
return _delegate_compose_env(augment, svc, spec)
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
def _crud_proxy_settings(
|
|
658
|
+
augment: ServiceAugment, svc: ServiceNode, spec: ComposeSpec
|
|
659
|
+
) -> dict[str, str]:
|
|
660
|
+
"""Settings fields: service URL for each target."""
|
|
661
|
+
return _delegate_settings(augment, svc, spec)
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def _crud_proxy_template_vars(
|
|
665
|
+
augment: ServiceAugment, svc: ServiceNode, spec: ComposeSpec
|
|
666
|
+
) -> dict[str, str]:
|
|
667
|
+
"""Template vars for rendering proxy files.
|
|
668
|
+
|
|
669
|
+
Passes target and entity info as comma-separated lists for template
|
|
670
|
+
iteration. Individual entity templates use per-entity variables.
|
|
671
|
+
"""
|
|
672
|
+
variables: dict[str, str] = {}
|
|
673
|
+
entities = _resolve_target_entities(augment, svc, spec)
|
|
674
|
+
|
|
675
|
+
# For multi-file scaffolding, each entity gets its own template render.
|
|
676
|
+
# Here we export the first entity's vars for the template (each entity
|
|
677
|
+
# file is scaffolded separately via resolve_dynamic_routers and the
|
|
678
|
+
# file-path substitution).
|
|
679
|
+
if entities:
|
|
680
|
+
for key, value in entities[0].items():
|
|
681
|
+
variables[key] = value
|
|
682
|
+
|
|
683
|
+
# Also pass delegate-config style target vars
|
|
684
|
+
variables.update(_delegate_template_vars(augment, svc, spec))
|
|
685
|
+
|
|
686
|
+
return variables
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
def _crud_proxy_dynamic_routers(
|
|
690
|
+
augment: ServiceAugment, svc: ServiceNode, spec: ComposeSpec
|
|
691
|
+
) -> list[tuple[str, str]]:
|
|
692
|
+
"""Resolve dynamic router imports for each proxied entity."""
|
|
693
|
+
entities = _resolve_target_entities(augment, svc, spec)
|
|
694
|
+
result: list[tuple[str, str]] = []
|
|
695
|
+
for ent in entities:
|
|
696
|
+
snake = ent["entity_name_snake"]
|
|
697
|
+
alias = f"{snake}_proxy_router"
|
|
698
|
+
import_line = f"from .views.{snake}_proxy_view import router as {alias}"
|
|
699
|
+
result.append((import_line, alias))
|
|
700
|
+
return result
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
def _crud_proxy_multi_scaffold_vars(
|
|
704
|
+
augment: ServiceAugment, svc: ServiceNode, spec: ComposeSpec
|
|
705
|
+
) -> list[dict[str, str]]:
|
|
706
|
+
"""Return one variable dict per discovered entity for multi-file scaffolding."""
|
|
707
|
+
svc_snake = svc.name.replace("-", "_")
|
|
708
|
+
base: dict[str, str] = {
|
|
709
|
+
"service_name": svc.name,
|
|
710
|
+
"service_name_snake": svc_snake,
|
|
711
|
+
"port": str(svc.port),
|
|
712
|
+
}
|
|
713
|
+
# Merge delegate-config style target vars
|
|
714
|
+
base.update(_delegate_template_vars(augment, svc, spec))
|
|
715
|
+
|
|
716
|
+
entities = _resolve_target_entities(augment, svc, spec)
|
|
717
|
+
if not entities:
|
|
718
|
+
return []
|
|
719
|
+
|
|
720
|
+
result: list[dict[str, str]] = []
|
|
721
|
+
for ent in entities:
|
|
722
|
+
variables = dict(base)
|
|
723
|
+
variables.update(ent)
|
|
724
|
+
result.append(variables)
|
|
725
|
+
return result
|
|
726
|
+
|
|
727
|
+
|
|
600
728
|
# ── jwt-auth-provider ────────────────────────────────────────────────────
|
|
601
729
|
|
|
602
730
|
|
|
@@ -811,6 +939,20 @@ AUGMENT_REGISTRY: dict[str, AugmentDescriptor] = {
|
|
|
811
939
|
resolve_dynamic_routers=_crud_scaffold_dynamic_routers,
|
|
812
940
|
resolve_dynamic_migrations=_crud_scaffold_dynamic_migrations,
|
|
813
941
|
),
|
|
942
|
+
"crud-proxy": AugmentDescriptor(
|
|
943
|
+
name="crud-proxy",
|
|
944
|
+
scope="service",
|
|
945
|
+
description="Delegate-backed CRUD proxy endpoints mirroring another service's entities",
|
|
946
|
+
packages=["csrd-delegate", "csrd-models"],
|
|
947
|
+
template_dir="crud-proxy",
|
|
948
|
+
needs_target_selection=True,
|
|
949
|
+
routers=[], # routers are dynamic per entity — wired via resolve_dynamic_routers
|
|
950
|
+
resolve_template_vars=_crud_proxy_template_vars,
|
|
951
|
+
resolve_dynamic_routers=_crud_proxy_dynamic_routers,
|
|
952
|
+
resolve_compose_env=_crud_proxy_compose_env,
|
|
953
|
+
resolve_settings_fields=_crud_proxy_settings,
|
|
954
|
+
resolve_multi_scaffold_vars=_crud_proxy_multi_scaffold_vars,
|
|
955
|
+
),
|
|
814
956
|
}
|
|
815
957
|
|
|
816
958
|
|
|
@@ -167,6 +167,10 @@ def scaffold_augment(
|
|
|
167
167
|
Each file is rendered with ``string.Template`` substitution and copied
|
|
168
168
|
into the service's source directory, preserving subdirectory structure.
|
|
169
169
|
|
|
170
|
+
When the descriptor provides ``resolve_multi_scaffold_vars``, templates
|
|
171
|
+
are rendered once per returned variable dict (e.g. one per discovered
|
|
172
|
+
entity). Otherwise templates are rendered once with the standard vars.
|
|
173
|
+
|
|
170
174
|
Files that already exist are **never overwritten** — they may contain
|
|
171
175
|
user edits. This makes the operation idempotent and safe to re-run.
|
|
172
176
|
"""
|
|
@@ -186,8 +190,23 @@ def scaffold_augment(
|
|
|
186
190
|
if not svc_dest.exists():
|
|
187
191
|
return
|
|
188
192
|
|
|
189
|
-
|
|
190
|
-
|
|
193
|
+
# Multi-instance scaffolding (e.g. crud-proxy renders per entity)
|
|
194
|
+
if desc.resolve_multi_scaffold_vars is not None:
|
|
195
|
+
var_sets = desc.resolve_multi_scaffold_vars(augment, service, spec)
|
|
196
|
+
for variables in var_sets:
|
|
197
|
+
_render_template_set(template_dir, svc_dest, variables, augment.name)
|
|
198
|
+
else:
|
|
199
|
+
variables = _augment_template_vars(augment, service, spec)
|
|
200
|
+
_render_template_set(template_dir, svc_dest, variables, augment.name)
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
def _render_template_set(
|
|
204
|
+
template_dir: Path,
|
|
205
|
+
svc_dest: Path,
|
|
206
|
+
variables: dict[str, str],
|
|
207
|
+
augment_name: str,
|
|
208
|
+
) -> None:
|
|
209
|
+
"""Render a set of template files with the given variables."""
|
|
191
210
|
for template_file in sorted(template_dir.rglob("*")):
|
|
192
211
|
if template_file.is_dir():
|
|
193
212
|
continue
|
|
@@ -215,4 +234,4 @@ def scaffold_augment(
|
|
|
215
234
|
rendered = Template(content).safe_substitute(variables)
|
|
216
235
|
dest.write_text(rendered, encoding="utf-8")
|
|
217
236
|
|
|
218
|
-
logger.debug("Scaffolded %s for augment '%s'", dest,
|
|
237
|
+
logger.debug("Scaffolded %s for augment '%s'", dest, augment_name)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""${entity_name_pascal} delegate — proxies CRUD operations to ${target_name}.
|
|
2
|
+
|
|
3
|
+
This file is scaffolded once and never overwritten.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from csrd.delegate import BaseDelegate
|
|
7
|
+
|
|
8
|
+
from ..models.${entity_name_snake} import (
|
|
9
|
+
${entity_name_pascal}ListResponse,
|
|
10
|
+
${entity_name_pascal}Response,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ${entity_name_pascal}Delegate(BaseDelegate):
|
|
15
|
+
"""HTTP delegate for ${entity_name_plural} on ${target_name}."""
|
|
16
|
+
|
|
17
|
+
def __init__(self, base_url: str) -> None:
|
|
18
|
+
super().__init__(base_url)
|
|
19
|
+
|
|
20
|
+
async def list_all(self) -> ${entity_name_pascal}ListResponse:
|
|
21
|
+
"""List all ${entity_name_plural}."""
|
|
22
|
+
return await self.get(
|
|
23
|
+
"/api/${entity_name_plural}",
|
|
24
|
+
response_model=${entity_name_pascal}ListResponse,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
async def get_by_id(self, entity_id: str) -> ${entity_name_pascal}Response:
|
|
28
|
+
"""Get a ${entity_name_snake} by ID."""
|
|
29
|
+
return await self.get(
|
|
30
|
+
f"/api/${entity_name_plural}/{entity_id}",
|
|
31
|
+
response_model=${entity_name_pascal}Response,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
async def create(self, name: str) -> ${entity_name_pascal}Response:
|
|
35
|
+
"""Create a new ${entity_name_snake}."""
|
|
36
|
+
return await self.post(
|
|
37
|
+
"/api/${entity_name_plural}",
|
|
38
|
+
json={"name": name},
|
|
39
|
+
response_model=${entity_name_pascal}Response,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
async def update(self, entity_id: str, name: str) -> ${entity_name_pascal}Response:
|
|
43
|
+
"""Update an existing ${entity_name_snake}."""
|
|
44
|
+
return await self.put(
|
|
45
|
+
f"/api/${entity_name_plural}/{entity_id}",
|
|
46
|
+
json={"name": name},
|
|
47
|
+
response_model=${entity_name_pascal}Response,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
async def remove(self, entity_id: str) -> None:
|
|
51
|
+
"""Delete a ${entity_name_snake}."""
|
|
52
|
+
await self.delete(f"/api/${entity_name_plural}/{entity_id}")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
__all__ = ("${entity_name_pascal}Delegate",)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""${entity_name_pascal} delegate dependency.
|
|
2
|
+
|
|
3
|
+
This file is scaffolded once and never overwritten.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from typing import Annotated
|
|
7
|
+
|
|
8
|
+
from fastapi import Depends
|
|
9
|
+
|
|
10
|
+
from ..delegates.${entity_name_snake}_delegate import ${entity_name_pascal}Delegate
|
|
11
|
+
from ..settings import settings
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _${entity_name_snake}_delegate_factory() -> ${entity_name_pascal}Delegate:
|
|
15
|
+
"""Create a ``${entity_name_pascal}Delegate`` bound to ${target_name}."""
|
|
16
|
+
return ${entity_name_pascal}Delegate(settings.${target_name_snake}_service_url)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
${entity_name_pascal}Del = Annotated[${entity_name_pascal}Delegate, Depends(_${entity_name_snake}_delegate_factory)]
|
|
20
|
+
|
|
21
|
+
__all__ = ("${entity_name_pascal}Del",)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""${entity_name_pascal} models — mirrors target service's entity schema.
|
|
2
|
+
|
|
3
|
+
This file is scaffolded once and never overwritten.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from csrd.models import BaseModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Create${entity_name_pascal}Request(BaseModel):
|
|
10
|
+
"""Request body for creating a new ${entity_name_snake}."""
|
|
11
|
+
|
|
12
|
+
name: str
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Update${entity_name_pascal}Request(BaseModel):
|
|
16
|
+
"""Request body for updating an existing ${entity_name_snake}."""
|
|
17
|
+
|
|
18
|
+
name: str
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ${entity_name_pascal}Response(BaseModel):
|
|
22
|
+
"""Response model for a single ${entity_name_snake}."""
|
|
23
|
+
|
|
24
|
+
id: str
|
|
25
|
+
name: str
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ${entity_name_pascal}ListResponse(BaseModel):
|
|
29
|
+
"""Response model for a list of ${entity_name_plural}."""
|
|
30
|
+
|
|
31
|
+
items: list[${entity_name_pascal}Response]
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""${entity_name_pascal} proxy endpoints — delegates to ${target_name}.
|
|
2
|
+
|
|
3
|
+
This file is scaffolded once and never overwritten.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from fastapi import APIRouter
|
|
7
|
+
|
|
8
|
+
from ..dependencies.${entity_name_snake}_delegate import ${entity_name_pascal}Del
|
|
9
|
+
from ..models.${entity_name_snake} import (
|
|
10
|
+
Create${entity_name_pascal}Request,
|
|
11
|
+
${entity_name_pascal}ListResponse,
|
|
12
|
+
${entity_name_pascal}Response,
|
|
13
|
+
Update${entity_name_pascal}Request,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
router = APIRouter(prefix="/api/${entity_name_plural}", tags=["${entity_name_plural}"])
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@router.get("", response_model=${entity_name_pascal}ListResponse)
|
|
20
|
+
async def list_${entity_name_plural}(
|
|
21
|
+
delegate: ${entity_name_pascal}Del,
|
|
22
|
+
) -> ${entity_name_pascal}ListResponse:
|
|
23
|
+
"""List all ${entity_name_plural} (proxied from ${target_name})."""
|
|
24
|
+
return await delegate.list_all()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@router.get("/{entity_id}", response_model=${entity_name_pascal}Response)
|
|
28
|
+
async def get_${entity_name_snake}(
|
|
29
|
+
entity_id: str,
|
|
30
|
+
delegate: ${entity_name_pascal}Del,
|
|
31
|
+
) -> ${entity_name_pascal}Response:
|
|
32
|
+
"""Get a ${entity_name_snake} by ID (proxied from ${target_name})."""
|
|
33
|
+
return await delegate.get_by_id(entity_id)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@router.post("", status_code=201, response_model=${entity_name_pascal}Response)
|
|
37
|
+
async def create_${entity_name_snake}(
|
|
38
|
+
body: Create${entity_name_pascal}Request,
|
|
39
|
+
delegate: ${entity_name_pascal}Del,
|
|
40
|
+
) -> ${entity_name_pascal}Response:
|
|
41
|
+
"""Create a new ${entity_name_snake} (proxied to ${target_name})."""
|
|
42
|
+
return await delegate.create(body.name)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@router.put("/{entity_id}", response_model=${entity_name_pascal}Response)
|
|
46
|
+
async def update_${entity_name_snake}(
|
|
47
|
+
entity_id: str,
|
|
48
|
+
body: Update${entity_name_pascal}Request,
|
|
49
|
+
delegate: ${entity_name_pascal}Del,
|
|
50
|
+
) -> ${entity_name_pascal}Response:
|
|
51
|
+
"""Update a ${entity_name_snake} (proxied to ${target_name})."""
|
|
52
|
+
return await delegate.update(entity_id, body.name)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@router.delete("/{entity_id}", status_code=204)
|
|
56
|
+
async def delete_${entity_name_snake}(
|
|
57
|
+
entity_id: str,
|
|
58
|
+
delegate: ${entity_name_pascal}Del,
|
|
59
|
+
) -> None:
|
|
60
|
+
"""Delete a ${entity_name_snake} (proxied to ${target_name})."""
|
|
61
|
+
await delegate.remove(entity_id)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/caching/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/conftest.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/logging/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/metrics/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/conftest.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/tracing/settings.fragment.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/conftest.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/docker-compose.fragment.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/requirements.fragment
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/settings.fragment.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/src/app/workers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/src/csrd_utils/features/workers/src/app/workers/tasks.py
RENAMED
|
File without changes
|
{csrd_utils-0.3.110 → csrd_utils-0.4.0}/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.110 → csrd_utils-0.4.0}/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
|