csrd-utils 0.3.89__tar.gz → 0.3.90__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.
Files changed (192) hide show
  1. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/PKG-INFO +1 -1
  2. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/pyproject.toml +1 -1
  3. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/scaffolder.py +41 -0
  4. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/service_renderers.py +66 -19
  5. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/generate/handlers.py +9 -0
  6. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/db-config/dependencies/db.py +3 -3
  7. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/dependencies/db.py +4 -4
  8. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/migrations.py +2 -2
  9. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/.gitignore +0 -0
  10. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/README.md +0 -0
  11. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/__init__.py +0 -0
  12. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/__main__.py +0 -0
  13. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/audit.py +0 -0
  14. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/augmentor.py +0 -0
  15. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/cluster.py +0 -0
  16. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/doctor.py +0 -0
  17. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/caching/conftest.fragment.py +0 -0
  18. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/caching/docker-compose.fragment.yaml +0 -0
  19. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/caching/manifest.yaml +0 -0
  20. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/caching/requirements.fragment +0 -0
  21. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/caching/settings.fragment.py +0 -0
  22. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/caching/src/app/cache.py +0 -0
  23. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/caching/tests/test_cache.py +0 -0
  24. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/logging/conftest.fragment.py +0 -0
  25. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/logging/manifest.yaml +0 -0
  26. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/logging/requirements.fragment +0 -0
  27. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/logging/settings.fragment.py +0 -0
  28. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/logging/src/app/middleware/logging.py +0 -0
  29. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/logging/tests/test_logging_middleware.py +0 -0
  30. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/metrics/conftest.fragment.py +0 -0
  31. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/metrics/docker-compose.fragment.yaml +0 -0
  32. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/metrics/manifest.yaml +0 -0
  33. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/metrics/requirements.fragment +0 -0
  34. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/metrics/settings.fragment.py +0 -0
  35. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/metrics/src/app/middleware/metrics.py +0 -0
  36. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/metrics/tests/test_metrics_middleware.py +0 -0
  37. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/tracing/conftest.fragment.py +0 -0
  38. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/tracing/manifest.yaml +0 -0
  39. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/tracing/requirements.fragment +0 -0
  40. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/tracing/settings.fragment.py +0 -0
  41. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/tracing/src/app/middleware/tracing.py +0 -0
  42. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/tracing/tests/test_tracing_middleware.py +0 -0
  43. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/conftest.fragment.py +0 -0
  44. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/docker-compose.fragment.yaml +0 -0
  45. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/manifest.yaml +0 -0
  46. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/requirements.fragment +0 -0
  47. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/settings.fragment.py +0 -0
  48. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/src/app/workers/__init__.py +0 -0
  49. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/src/app/workers/celery_app.py +0 -0
  50. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/src/app/workers/tasks.py +0 -0
  51. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/features/workers/tests/test_workers.py +0 -0
  52. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/fragments.py +0 -0
  53. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/generator.py +0 -0
  54. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/resources.py +0 -0
  55. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/README.md +0 -0
  56. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/cookiecutter.json +0 -0
  57. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/hooks/post_gen_project.py +0 -0
  58. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.cookiecutterignore +0 -0
  59. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
  60. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
  61. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
  62. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
  63. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/cache.py +0 -0
  64. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
  65. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/delegates/upstreams.py +0 -0
  66. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
  67. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
  68. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/delegates.py +0 -0
  69. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
  70. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/dependencies/worker_broker.py +0 -0
  71. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/docker-compose.yml +0 -0
  72. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/__init__.py +0 -0
  73. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/middleware/logging.py +0 -0
  74. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
  75. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
  76. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
  77. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
  78. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/__init__.py +0 -0
  79. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/__init__.py +0 -0
  80. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/acceptance/test_logging_middleware.py +0 -0
  81. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/conftest.py +0 -0
  82. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/test_items.py +0 -0
  83. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/__init__.py +0 -0
  84. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_cache.py +0 -0
  85. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_database_settings.py +0 -0
  86. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_delegates.py +0 -0
  87. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_settings_contracts.py +0 -0
  88. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/tests/unit/test_worker_broker.py +0 -0
  89. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
  90. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
  91. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
  92. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
  93. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/__init__.py +0 -0
  94. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/cookiecutter-service/{{cookiecutter.__service_name_snake}}/workers/tasks.py +0 -0
  95. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/cookiecutter.json +0 -0
  96. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
  97. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
  98. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
  99. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
  100. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/__init__.py +0 -0
  101. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/auth_delegate.py +0 -0
  102. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/delegates/identity_delegate.py +0 -0
  103. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
  104. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_passthrough.py +0 -0
  105. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/auth_service.py +0 -0
  106. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/dependencies/item_repository.py +0 -0
  107. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
  108. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/auth_service.py +0 -0
  109. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/models/items.py +0 -0
  110. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
  111. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/repositories/item_repository.py +0 -0
  112. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
  113. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
  114. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
  115. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
  116. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_service_view.py +0 -0
  117. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
  118. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-app-service/{{cookiecutter.__service_name_snake}}/views/unversioned/items_view.py +0 -0
  119. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/cookiecutter.json +0 -0
  120. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
  121. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
  122. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
  123. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
  124. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
  125. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
  126. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/models/auth.py +0 -0
  127. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
  128. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/repositories/token_repository.py +0 -0
  129. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
  130. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
  131. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
  132. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
  133. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/auth_view.py +0 -0
  134. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-auth-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
  135. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/cookiecutter.json +0 -0
  136. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/.dockerignore +0 -0
  137. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
  138. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
  139. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
  140. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/dependencies/__init__.py +0 -0
  141. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/models/__init__.py +0 -0
  142. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/models/users.py +0 -0
  143. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/__init__.py +0 -0
  144. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/repositories/user_repository.py +0 -0
  145. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
  146. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
  147. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
  148. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/__init__.py +0 -0
  149. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/health_view.py +0 -0
  150. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/templates/platform-identity-service/{{cookiecutter.__service_name_snake}}/views/unversioned/users_view.py +0 -0
  151. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/AGENTS.md +0 -0
  152. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/__init__.py +0 -0
  153. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/__init__.py +0 -0
  154. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/augments.py +0 -0
  155. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/git.py +0 -0
  156. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/infra.py +0 -0
  157. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/loader.py +0 -0
  158. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/operations.py +0 -0
  159. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/presets.py +0 -0
  160. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/renderer.py +0 -0
  161. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/compose/yaml_editor.py +0 -0
  162. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/generate/__init__.py +0 -0
  163. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/generate/helpers.py +0 -0
  164. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/generate/menu.py +0 -0
  165. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/models/__init__.py +0 -0
  166. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/models/base.py +0 -0
  167. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/models/spec.py +0 -0
  168. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/models/types.py +0 -0
  169. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/db-config/migrations.py +0 -0
  170. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/jwt-auth-consumer/dependencies/auth.py +0 -0
  171. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/repositories/user_repository.py +0 -0
  172. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/views/auth_view.py +0 -0
  173. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/views/jwks_view.py +0 -0
  174. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/augments/jwt-auth-provider/views/users_view.py +0 -0
  175. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/cookiecutter.json +0 -0
  176. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/Dockerfile +0 -0
  177. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/README.md +0 -0
  178. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/__init__.py +0 -0
  179. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/requirements.txt +0 -0
  180. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/settings.py +0 -0
  181. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/tests/__init__.py +0 -0
  182. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/tests/conftest.py +0 -0
  183. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/tests/test_health.py +0 -0
  184. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/views/__init__.py +0 -0
  185. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/csrd_utils/v2/templates/service/{{cookiecutter.__service_name_snake}}/views/health_view.py +0 -0
  186. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/tui_wizard/__init__.py +0 -0
  187. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/tui_wizard/exceptions.py +0 -0
  188. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/tui_wizard/menu.py +0 -0
  189. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/tui_wizard/models.py +0 -0
  190. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/tui_wizard/prompts.py +0 -0
  191. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/src/tui_wizard/terminal.py +0 -0
  192. {csrd_utils-0.3.89 → csrd_utils-0.3.90}/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.89
3
+ Version: 0.3.90
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "csrd-utils"
3
- version = "0.3.89"
3
+ version = "0.3.90"
4
4
  description = "CLI utilities for csrd service generation and feature augmentation"
5
5
  license = { text = "MIT" }
6
6
  requires-python = ">=3.12"
@@ -22,6 +22,7 @@ from cookiecutter.main import cookiecutter
22
22
 
23
23
  from ..models import ComposeSpec, ServiceAugment, ServiceNode
24
24
  from .augments import AUGMENT_REGISTRY
25
+ from .infra import detect_configured_db
25
26
 
26
27
  logger = logging.getLogger(__name__)
27
28
 
@@ -139,6 +140,46 @@ def _augment_template_vars(
139
140
  "port": str(service.port),
140
141
  }
141
142
 
143
+ # Database adapter variables — shared by db-config and jwt-auth-provider
144
+ if augment.name in ("db-config", "jwt-auth-provider"):
145
+ db = detect_configured_db({n.type for n in spec.infra})
146
+ if db == "postgres":
147
+ variables["db_adapter_import"] = "from csrd.repository import PGAdapter"
148
+ variables["db_adapter_class"] = "PGAdapter"
149
+ variables["db_adapter_constructor"] = (
150
+ "PGAdapter(\n"
151
+ " host=settings.db_host,\n"
152
+ " port=int(settings.db_port),\n"
153
+ " user=settings.db_user,\n"
154
+ " password=settings.db_password,\n"
155
+ " database=settings.db_name,\n"
156
+ " )"
157
+ )
158
+ elif db == "mariadb":
159
+ variables["db_adapter_import"] = "from csrd.repository import MariaAdapter"
160
+ variables["db_adapter_class"] = "MariaAdapter"
161
+ variables["db_adapter_constructor"] = (
162
+ "MariaAdapter(\n"
163
+ " host=settings.db_host,\n"
164
+ " port=int(settings.db_port),\n"
165
+ " user=settings.db_user,\n"
166
+ " password=settings.db_password,\n"
167
+ " database=settings.db_name,\n"
168
+ " )"
169
+ )
170
+ else:
171
+ variables["db_adapter_import"] = "from csrd.repository import SQLiteAdapter"
172
+ variables["db_adapter_class"] = "SQLiteAdapter"
173
+ variables["db_adapter_constructor"] = "SQLiteAdapter(db_path=settings.db_path)"
174
+
175
+ # SQL dialect variables for migrations
176
+ if db == "postgres":
177
+ variables["sql_auto_id"] = "SERIAL PRIMARY KEY"
178
+ elif db == "mariadb":
179
+ variables["sql_auto_id"] = "INTEGER PRIMARY KEY AUTO_INCREMENT"
180
+ else:
181
+ variables["sql_auto_id"] = "INTEGER PRIMARY KEY AUTOINCREMENT"
182
+
142
183
  # Dynamic: jwt-auth-consumer — resolve auth service
143
184
  if augment.name == "jwt-auth-consumer":
144
185
  auth_svc = next(
@@ -5,10 +5,22 @@ They are deterministic outputs of the spec; user customization goes in
5
5
  separate scaffolded files (views, repositories, services, dependencies).
6
6
  """
7
7
 
8
+ import re
9
+
8
10
  from ..models import ComposeSpec, ServiceNode
9
11
  from .augments import AUGMENT_REGISTRY
10
12
  from .infra import INFRA_REGISTRY, detect_configured_db
11
13
 
14
+ # Pattern to extract default from docker-compose interpolation: ${VAR:-default}
15
+ _COMPOSE_VAR_RE = re.compile(r"^\$\{[A-Z_]+:-(.+)\}$")
16
+
17
+
18
+ def _plain_default(value: str) -> str:
19
+ """Strip docker-compose ``${VAR:-default}`` syntax to just ``default``."""
20
+ m = _COMPOSE_VAR_RE.match(value)
21
+ return m.group(1) if m else value
22
+
23
+
12
24
  # ---------------------------------------------------------------------------
13
25
  # Base packages always included in every service
14
26
  # ---------------------------------------------------------------------------
@@ -51,6 +63,19 @@ def render_requirements(svc: ServiceNode, spec: ComposeSpec) -> str:
51
63
  if name not in seen:
52
64
  seen[name] = pkg
53
65
 
66
+ # Add DB driver based on configured infra (needed by adapter at runtime)
67
+ _svc_augment_names = {a.name for a in svc.augments}
68
+ _ws_augment_names = {a.name for a in spec.workspace.augments}
69
+ _has_db_augment = bool(
70
+ {"db-config", "jwt-auth-provider"} & (_svc_augment_names | _ws_augment_names)
71
+ )
72
+ if _has_db_augment:
73
+ db = detect_configured_db({n.type for n in spec.infra})
74
+ if db == "postgres" and "psycopg" not in seen:
75
+ seen["psycopg"] = "psycopg[binary]"
76
+ elif db == "mariadb" and "pymysql" not in seen:
77
+ seen["pymysql"] = "pymysql"
78
+
54
79
  return "\n".join(sorted(seen.values())) + "\n"
55
80
 
56
81
 
@@ -89,7 +114,17 @@ def _augment_settings_fields(
89
114
  ws_fields["jwt_key_size"] = "2048"
90
115
  ws_fields["jwt_key_rotation_interval"] = "86400"
91
116
  ws_fields["jwt_key_retention_period"] = "90000"
92
- ws_fields["db_path"] = f'"/app/data/{svc.name}.db"'
117
+
118
+ # Database settings depend on configured infra
119
+ db = detect_configured_db({n.type for n in spec.infra})
120
+ if db == "sqlite" or db is None:
121
+ ws_fields["db_path"] = f'"/app/data/{svc.name}.db"'
122
+ elif db is not None:
123
+ db_desc = INFRA_REGISTRY.get(db)
124
+ if db_desc is not None:
125
+ for env_key, env_val in db_desc.service_env.items():
126
+ field_name = env_key.lower()
127
+ ws_fields[field_name] = f'"{_plain_default(env_val)}"'
93
128
 
94
129
  for field_name, default in ws_fields.items():
95
130
  fields[field_name] = default
@@ -144,7 +179,7 @@ def _augment_settings_fields(
144
179
  # Map infra env vars to settings fields
145
180
  for env_key, env_val in db_desc.service_env.items():
146
181
  field_name = env_key.lower()
147
- augment_fields[field_name] = f'"{env_val}"'
182
+ augment_fields[field_name] = f'"{_plain_default(env_val)}"'
148
183
 
149
184
  # Collision detection
150
185
  for field_name in augment_fields:
@@ -184,7 +219,14 @@ def render_settings(svc: ServiceNode, spec: ComposeSpec) -> str:
184
219
  lines.append("")
185
220
  lines.append(" # Augment-contributed fields")
186
221
  for field_name, default in sorted(augment_fields.items()):
187
- lines.append(f" {field_name}: str = {default}")
222
+ # Infer type from default: quoted → str, bare number → int
223
+ if default.startswith('"') or default.startswith("'"):
224
+ field_type = "str"
225
+ elif default.isdigit():
226
+ field_type = "int"
227
+ else:
228
+ field_type = "str"
229
+ lines.append(f" {field_name}: {field_type} = {default}")
188
230
 
189
231
  lines.extend(
190
232
  [
@@ -248,18 +290,29 @@ def render_init(svc: ServiceNode, spec: ComposeSpec) -> str:
248
290
  "",
249
291
  "",
250
292
  "def build_app() -> FastAPI:",
251
- " app = compose_versioned_apps(",
252
- " version_mapping={UNVERSIONED: unversioned_app},",
253
- " config=VersionedAppComposeConfig(",
254
- f' title="{svc.name}",',
255
- " api=VersionedApiConfig(",
256
- ' prefix="/",',
257
- " include_actuator_endpoints=settings.include_actuator_endpoints,",
258
- " ),",
259
- " ),",
260
- " )",
261
293
  ]
262
294
 
295
+ if is_auth_provider:
296
+ body.append(" unversioned_app.include_router(auth_router)")
297
+ body.append(" unversioned_app.include_router(users_router)")
298
+ body.append(" unversioned_app.include_router(jwks_router)")
299
+ body.append("")
300
+
301
+ body.extend(
302
+ [
303
+ " app = compose_versioned_apps(",
304
+ " version_mapping={UNVERSIONED: unversioned_app},",
305
+ " config=VersionedAppComposeConfig(",
306
+ f' title="{svc.name}",',
307
+ " api=VersionedApiConfig(",
308
+ ' prefix="/",',
309
+ " include_actuator_endpoints=settings.include_actuator_endpoints,",
310
+ " ),",
311
+ " ),",
312
+ " )",
313
+ ]
314
+ )
315
+
263
316
  if "context-logging" in augment_names:
264
317
  body.append("")
265
318
  body.append(" app.add_middleware(RequestContextMiddleware)")
@@ -268,12 +321,6 @@ def render_init(svc: ServiceNode, spec: ComposeSpec) -> str:
268
321
  body.append("")
269
322
  body.append(" app.add_exception_handler(Exception, service_exception_handler)")
270
323
 
271
- if is_auth_provider:
272
- body.append("")
273
- body.append(" app.include_router(auth_router)")
274
- body.append(" app.include_router(users_router)")
275
- body.append(" app.include_router(jwks_router)")
276
-
277
324
  body.extend(
278
325
  [
279
326
  "",
@@ -17,6 +17,7 @@ from ..compose import (
17
17
  )
18
18
  from ..compose import add_infra as compose_add_infra
19
19
  from ..compose import add_service as compose_add_service
20
+ from ..compose import add_workspace_augment as compose_add_workspace_augment
20
21
  from ..compose import apply as compose_apply
21
22
  from ..compose import remove_infra as compose_remove_infra
22
23
  from .helpers import (
@@ -82,6 +83,7 @@ def _finalize_workspace(
82
83
  infra_choices: list[str],
83
84
  services: list[ServiceNode],
84
85
  git_init: bool,
86
+ workspace_augments: list[str] | None = None,
85
87
  ) -> int:
86
88
  """Create workspace, add infra/services, render, and print result.
87
89
 
@@ -104,6 +106,12 @@ def _finalize_workspace(
104
106
  except ValueError as exc:
105
107
  print(f"WARNING: {exc}")
106
108
 
109
+ for aug_name in workspace_augments or []:
110
+ try:
111
+ compose_add_workspace_augment(output_dir, aug_name)
112
+ except ValueError as exc:
113
+ print(f"WARNING: {exc}")
114
+
107
115
  render_workspace(output_dir)
108
116
  print(f"Generated workspace at: {output_dir}")
109
117
  return 0
@@ -513,6 +521,7 @@ def create_workspace_from_preset(default_name: str = "my-workspace") -> int:
513
521
  infra_choices=cast(list[str], state.get("infra_choices", [])),
514
522
  services=[*preset.services, *extra],
515
523
  git_init=cast(bool, state.get("git_init", False)),
524
+ workspace_augments=preset.workspace_augments,
516
525
  )
517
526
 
518
527
 
@@ -4,18 +4,18 @@ This file is scaffolded once and never overwritten. Customize the
4
4
  adapter type, DSN construction, or add connection pooling here.
5
5
  """
6
6
 
7
- from csrd.repository import SQLiteAdapter
7
+ $db_adapter_import
8
8
 
9
9
  from ..settings import settings
10
10
 
11
11
 
12
- def create_adapter() -> SQLiteAdapter:
12
+ def create_adapter() -> $db_adapter_class:
13
13
  """Create the database adapter for this service.
14
14
 
15
15
  Override this to switch adapter types (PGAdapter, MariaAdapter)
16
16
  or customize connection parameters.
17
17
  """
18
- return SQLiteAdapter(db_path=settings.db_path)
18
+ return $db_adapter_constructor
19
19
 
20
20
 
21
21
  __all__ = ("create_adapter",)
@@ -3,18 +3,18 @@
3
3
  This file is scaffolded once and never overwritten.
4
4
  """
5
5
 
6
- from csrd.repository import SQLiteAdapter
6
+ $db_adapter_import
7
7
 
8
8
  from ..settings import settings
9
9
 
10
- _adapter: SQLiteAdapter | None = None
10
+ _adapter: $db_adapter_class | None = None
11
11
 
12
12
 
13
- async def get_adapter() -> SQLiteAdapter:
13
+ async def get_adapter() -> $db_adapter_class:
14
14
  """Get or create the database adapter (singleton per process)."""
15
15
  global _adapter
16
16
  if _adapter is None:
17
- _adapter = SQLiteAdapter(db_path=settings.db_path)
17
+ _adapter = $db_adapter_constructor
18
18
  await _adapter.connect()
19
19
 
20
20
  # Apply migrations on first connect
@@ -15,7 +15,7 @@ migrations: list[Migration] = [
15
15
  CREATE TABLE IF NOT EXISTS users (
16
16
  id TEXT PRIMARY KEY,
17
17
  username TEXT UNIQUE NOT NULL,
18
- created_at TEXT NOT NULL DEFAULT (datetime('now'))
18
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
19
19
  )""",
20
20
  down="DROP TABLE IF EXISTS users",
21
21
  ),
@@ -34,7 +34,7 @@ CREATE TABLE IF NOT EXISTS user_credentials (
34
34
  description="User roles table",
35
35
  up="""\
36
36
  CREATE TABLE IF NOT EXISTS user_roles (
37
- id INTEGER PRIMARY KEY AUTOINCREMENT,
37
+ id $sql_auto_id,
38
38
  user_id TEXT NOT NULL REFERENCES users(id),
39
39
  role TEXT NOT NULL,
40
40
  UNIQUE(user_id, role)
File without changes
File without changes