FastAPI-fastkit 1.4.0__tar.gz → 1.4.1__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 (524) hide show
  1. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/PKG-INFO +30 -11
  2. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/README.md +29 -10
  3. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/pyproject.toml +4 -3
  4. fastapi_fastkit-1.4.1/src/fastapi_fastkit/__init__.py +1 -0
  5. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/context.py +4 -0
  6. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/core.py +5 -1
  7. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/docker.py +150 -15
  8. fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/lint.py +103 -0
  9. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/smoke.py +67 -13
  10. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/strategies.py +32 -1
  11. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/transducer.py +101 -2
  12. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/settings.py +3 -3
  13. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +1 -1
  14. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +1 -1
  15. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +2 -3
  16. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +4 -8
  17. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +2 -3
  18. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +9 -9
  19. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +2 -2
  20. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +1 -1
  21. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +2 -0
  22. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/jwt.py.j2 +6 -6
  23. fastapi_fastkit-1.4.1/tests/test_backends/test_inspection_docker.py +579 -0
  24. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_inspector.py +149 -1
  25. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_inspector_checks.py +168 -10
  26. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_config_builder.py +2 -2
  27. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_validators.py +1 -1
  28. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_project_builder_config_generator.py +2 -2
  29. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_project_builder_dependency_collector.py +4 -4
  30. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_transducer.py +169 -0
  31. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_config_options.py +1 -1
  32. fastapi_fastkit-1.4.0/src/fastapi_fastkit/__init__.py +0 -1
  33. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/lint.py +0 -89
  34. fastapi_fastkit-1.4.0/tests/test_backends/test_inspection_docker.py +0 -268
  35. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/LICENSE +0 -0
  36. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/__main__.py +0 -0
  37. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/__init__.py +0 -0
  38. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/__init__.py +0 -0
  39. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/checks.py +0 -0
  40. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/consistency.py +0 -0
  41. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/freshness.py +0 -0
  42. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/fsutils.py +0 -0
  43. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/report.py +0 -0
  44. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspector.py +0 -0
  45. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/__init__.py +0 -0
  46. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/config_builder.py +0 -0
  47. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/prompts.py +0 -0
  48. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/selectors.py +0 -0
  49. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/validators.py +0 -0
  50. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/main.py +0 -0
  51. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
  52. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/base.py +0 -0
  53. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/factory.py +0 -0
  54. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +0 -0
  55. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +0 -0
  56. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +0 -0
  57. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +0 -0
  58. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/__init__.py +0 -0
  59. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/config_generator.py +0 -0
  60. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/config_schema.py +0 -0
  61. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +0 -0
  62. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/preset_layout.py +0 -0
  63. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/scaffolder.py +0 -0
  64. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/cli.py +0 -0
  65. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/__init__.py +0 -0
  66. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/exceptions.py +0 -0
  67. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
  68. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/README.md +0 -0
  69. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
  70. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
  71. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
  72. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +0 -0
  73. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +0 -0
  74. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +0 -0
  75. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
  76. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
  77. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/run-server.sh-tpl +0 -0
  78. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
  79. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
  80. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
  81. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/__init__.py-tpl +0 -0
  82. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +0 -0
  83. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/__init__.py-tpl +0 -0
  84. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +0 -0
  85. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/__init__.py-tpl +0 -0
  86. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/config.py-tpl +0 -0
  87. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/__init__.py-tpl +0 -0
  88. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/items.py-tpl +0 -0
  89. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +0 -0
  90. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/__init__.py-tpl +0 -0
  91. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/mock_items.json-tpl +0 -0
  92. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/__init__.py-tpl +0 -0
  93. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/items.py-tpl +0 -0
  94. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
  95. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -0
  96. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/test_items.py-tpl +0 -0
  97. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.env-tpl +0 -0
  98. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.gitignore-tpl +0 -0
  99. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/Dockerfile-tpl +0 -0
  100. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl +0 -0
  101. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/alembic.ini-tpl +0 -0
  102. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/pyproject.toml-tpl +0 -0
  103. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/requirements.txt-tpl +0 -0
  104. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/format.sh-tpl +0 -0
  105. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/lint.sh-tpl +0 -0
  106. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/run-server.sh-tpl +0 -0
  107. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/test.sh-tpl +0 -0
  108. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/__init__.py-tpl +0 -0
  109. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/__init__.py-tpl +0 -0
  110. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/README-tpl +0 -0
  111. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/env.py-tpl +0 -0
  112. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/script.py.mako-tpl +0 -0
  113. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/versions/0001_initial_auth_schema.py-tpl +0 -0
  114. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/__init__.py-tpl +0 -0
  115. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/deps.py-tpl +0 -0
  116. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/health.py-tpl +0 -0
  117. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/router.py-tpl +0 -0
  118. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/__init__.py-tpl +0 -0
  119. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/config.py-tpl +0 -0
  120. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/security.py-tpl +0 -0
  121. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/db/__init__.py-tpl +0 -0
  122. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/db/session.py-tpl +0 -0
  123. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/__init__.py-tpl +0 -0
  124. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/__init__.py-tpl +0 -0
  125. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/models.py-tpl +0 -0
  126. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/repository.py-tpl +0 -0
  127. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/router.py-tpl +0 -0
  128. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/schemas.py-tpl +0 -0
  129. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/service.py-tpl +0 -0
  130. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/__init__.py-tpl +0 -0
  131. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/models.py-tpl +0 -0
  132. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/repository.py-tpl +0 -0
  133. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/router.py-tpl +0 -0
  134. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/schemas.py-tpl +0 -0
  135. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/service.py-tpl +0 -0
  136. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/main.py-tpl +0 -0
  137. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/template-config.yml-tpl +0 -0
  138. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/__init__.py-tpl +0 -0
  139. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/conftest.py-tpl +0 -0
  140. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_auth.py-tpl +0 -0
  141. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_health.py-tpl +0 -0
  142. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_users.py-tpl +0 -0
  143. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
  144. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
  145. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
  146. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +0 -0
  147. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +0 -0
  148. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/format.sh-tpl +0 -0
  149. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
  150. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/run-server.sh-tpl +0 -0
  151. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/test.sh-tpl +0 -0
  152. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
  153. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/__init__.py-tpl +0 -0
  154. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/__init__.py-tpl +0 -0
  155. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +0 -0
  156. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/__init__.py-tpl +0 -0
  157. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +0 -0
  158. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/__init__.py-tpl +0 -0
  159. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +0 -0
  160. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/__init__.py-tpl +0 -0
  161. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/items.py-tpl +0 -0
  162. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/__init__.py-tpl +0 -0
  163. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/exceptions.py-tpl +0 -0
  164. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +0 -0
  165. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +0 -0
  166. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/__init__.py-tpl +0 -0
  167. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/mock_items.json-tpl +0 -0
  168. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/__init__.py-tpl +0 -0
  169. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +0 -0
  170. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/items.py-tpl +0 -0
  171. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/__init__.py-tpl +0 -0
  172. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/documents.py-tpl +0 -0
  173. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/__init__.py-tpl +0 -0
  174. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -0
  175. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/test_items.py-tpl +0 -0
  176. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
  177. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
  178. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
  179. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +0 -0
  180. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +0 -0
  181. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/format.sh-tpl +0 -0
  182. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
  183. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
  184. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/test.sh-tpl +0 -0
  185. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
  186. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl +0 -0
  187. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/__init__.py-tpl +0 -0
  188. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +0 -0
  189. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/__init__.py-tpl +0 -0
  190. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +0 -0
  191. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl +0 -0
  192. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/config.py-tpl +0 -0
  193. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl +0 -0
  194. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +0 -0
  195. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/main.py-tpl +0 -0
  196. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl +0 -0
  197. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_items.json-tpl +0 -0
  198. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl +0 -0
  199. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/items.py-tpl +0 -0
  200. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/__init__.py-tpl +0 -0
  201. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +0 -0
  202. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/test_items.py-tpl +0 -0
  203. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
  204. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
  205. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +0 -0
  206. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +0 -0
  207. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +0 -0
  208. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +0 -0
  209. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/format.sh-tpl +0 -0
  210. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
  211. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
  212. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/test.sh-tpl +0 -0
  213. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
  214. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/__init__.py-tpl +0 -0
  215. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/__init__.py-tpl +0 -0
  216. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +0 -0
  217. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/__init__.py-tpl +0 -0
  218. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +0 -0
  219. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/__init__.py-tpl +0 -0
  220. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/config.py-tpl +0 -0
  221. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/__init__.py-tpl +0 -0
  222. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +0 -0
  223. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/main.py-tpl +0 -0
  224. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/__init__.py-tpl +0 -0
  225. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/mock_items.json-tpl +0 -0
  226. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/__init__.py-tpl +0 -0
  227. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +0 -0
  228. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/__init__.py-tpl +0 -0
  229. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +0 -0
  230. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/test_items.py-tpl +0 -0
  231. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.env-tpl +0 -0
  232. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.gitignore-tpl +0 -0
  233. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl +0 -0
  234. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/pyproject.toml-tpl +0 -0
  235. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/requirements.txt-tpl +0 -0
  236. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/format.sh-tpl +0 -0
  237. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/lint.sh-tpl +0 -0
  238. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/run-server.sh-tpl +0 -0
  239. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/test.sh-tpl +0 -0
  240. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/__init__.py-tpl +0 -0
  241. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/__init__.py-tpl +0 -0
  242. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/__init__.py-tpl +0 -0
  243. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/health.py-tpl +0 -0
  244. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/router.py-tpl +0 -0
  245. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core/__init__.py-tpl +0 -0
  246. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core/config.py-tpl +0 -0
  247. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db/__init__.py-tpl +0 -0
  248. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db/memory.py-tpl +0 -0
  249. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/__init__.py-tpl +0 -0
  250. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/__init__.py-tpl +0 -0
  251. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/models.py-tpl +0 -0
  252. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/repository.py-tpl +0 -0
  253. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/router.py-tpl +0 -0
  254. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/schemas.py-tpl +0 -0
  255. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/service.py-tpl +0 -0
  256. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/main.py-tpl +0 -0
  257. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/__init__.py-tpl +0 -0
  258. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/conftest.py-tpl +0 -0
  259. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_health.py-tpl +0 -0
  260. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_items.py-tpl +0 -0
  261. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
  262. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
  263. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +0 -0
  264. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +0 -0
  265. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +0 -0
  266. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
  267. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/__init__.py-tpl +0 -0
  268. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/__init__.py-tpl +0 -0
  269. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +0 -0
  270. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +0 -0
  271. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/__init__.py-tpl +0 -0
  272. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -0
  273. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -0
  274. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.env-tpl +0 -0
  275. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.gitignore-tpl +0 -0
  276. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/Dockerfile-tpl +0 -0
  277. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl +0 -0
  278. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/pyproject.toml-tpl +0 -0
  279. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/requirements.txt-tpl +0 -0
  280. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/chat.sh-tpl +0 -0
  281. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/format.sh-tpl +0 -0
  282. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/lint.sh-tpl +0 -0
  283. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/run-server.sh-tpl +0 -0
  284. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/test.sh-tpl +0 -0
  285. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/__init__.py-tpl +0 -0
  286. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/__init__.py-tpl +0 -0
  287. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/__init__.py-tpl +0 -0
  288. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/chat.py-tpl +0 -0
  289. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/deps.py-tpl +0 -0
  290. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/health.py-tpl +0 -0
  291. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/router.py-tpl +0 -0
  292. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/core/__init__.py-tpl +0 -0
  293. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/core/config.py-tpl +0 -0
  294. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/__init__.py-tpl +0 -0
  295. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/agent.py-tpl +0 -0
  296. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/client.py-tpl +0 -0
  297. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/tools.py-tpl +0 -0
  298. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/main.py-tpl +0 -0
  299. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/__init__.py-tpl +0 -0
  300. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/base.py-tpl +0 -0
  301. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/in_memory.py-tpl +0 -0
  302. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/schemas/__init__.py-tpl +0 -0
  303. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/schemas/chat.py-tpl +0 -0
  304. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/template-config.yml-tpl +0 -0
  305. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/__init__.py-tpl +0 -0
  306. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/conftest.py-tpl +0 -0
  307. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_chat.py-tpl +0 -0
  308. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_health.py-tpl +0 -0
  309. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_memory.py-tpl +0 -0
  310. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_tools.py-tpl +0 -0
  311. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
  312. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
  313. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
  314. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
  315. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
  316. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
  317. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +0 -0
  318. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/__init__.py-tpl +0 -0
  319. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +0 -0
  320. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
  321. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
  322. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +0 -0
  323. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server/__init__.py-tpl +0 -0
  324. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server/router.py-tpl +0 -0
  325. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
  326. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +0 -0
  327. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
  328. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +0 -0
  329. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -0
  330. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -0
  331. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -0
  332. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
  333. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +0 -0
  334. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
  335. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
  336. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
  337. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +0 -0
  338. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +0 -0
  339. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +0 -0
  340. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
  341. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/pre-start.sh-tpl +0 -0
  342. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/run-server.sh-tpl +0 -0
  343. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
  344. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
  345. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/__init__.py-tpl +0 -0
  346. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +0 -0
  347. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +0 -0
  348. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +0 -0
  349. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +0 -0
  350. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/__init__.py-tpl +0 -0
  351. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +0 -0
  352. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/deps.py-tpl +0 -0
  353. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/__init__.py-tpl +0 -0
  354. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +0 -0
  355. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/__init__.py-tpl +0 -0
  356. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +0 -0
  357. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +0 -0
  358. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/__init__.py-tpl +0 -0
  359. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +0 -0
  360. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +0 -0
  361. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/__init__.py-tpl +0 -0
  362. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +0 -0
  363. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/__init__.py-tpl +0 -0
  364. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/backend_pre_start.py-tpl +0 -0
  365. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/init_data.py-tpl +0 -0
  366. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/tests_pre_start.py-tpl +0 -0
  367. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
  368. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
  369. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +0 -0
  370. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/test_items.py-tpl +0 -0
  371. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.env-tpl +0 -0
  372. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.gitignore-tpl +0 -0
  373. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl +0 -0
  374. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/pyproject.toml-tpl +0 -0
  375. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +0 -0
  376. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.cfg-tpl +0 -0
  377. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/src/main.py-tpl +0 -0
  378. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/__init__.py-tpl +0 -0
  379. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/conftest.py-tpl +0 -0
  380. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/test_main.py-tpl +0 -0
  381. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.env-tpl +0 -0
  382. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.gitignore-tpl +0 -0
  383. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/Dockerfile-tpl +0 -0
  384. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl +0 -0
  385. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/alembic.ini-tpl +0 -0
  386. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/pyproject.toml-tpl +0 -0
  387. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/requirements.txt-tpl +0 -0
  388. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/format.sh-tpl +0 -0
  389. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/lint.sh-tpl +0 -0
  390. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/migrate.sh-tpl +0 -0
  391. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/run-server.sh-tpl +0 -0
  392. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/test.sh-tpl +0 -0
  393. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/__init__.py-tpl +0 -0
  394. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/__init__.py-tpl +0 -0
  395. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/README-tpl +0 -0
  396. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/env.py-tpl +0 -0
  397. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/script.py.mako-tpl +0 -0
  398. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/versions/0001_create_items_table.py-tpl +0 -0
  399. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/__init__.py-tpl +0 -0
  400. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/health.py-tpl +0 -0
  401. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/router.py-tpl +0 -0
  402. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/core/__init__.py-tpl +0 -0
  403. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/core/config.py-tpl +0 -0
  404. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/__init__.py-tpl +0 -0
  405. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/base.py-tpl +0 -0
  406. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/pagination.py-tpl +0 -0
  407. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/__init__.py-tpl +0 -0
  408. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/base.py-tpl +0 -0
  409. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/session.py-tpl +0 -0
  410. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/__init__.py-tpl +0 -0
  411. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/__init__.py-tpl +0 -0
  412. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/crud.py-tpl +0 -0
  413. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/models.py-tpl +0 -0
  414. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/router.py-tpl +0 -0
  415. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/main.py-tpl +0 -0
  416. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/template-config.yml-tpl +0 -0
  417. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/__init__.py-tpl +0 -0
  418. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/conftest.py-tpl +0 -0
  419. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_crud_base.py-tpl +0 -0
  420. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_health.py-tpl +0 -0
  421. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_items.py-tpl +0 -0
  422. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
  423. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
  424. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +0 -0
  425. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
  426. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
  427. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
  428. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
  429. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/README.md +0 -0
  430. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/fastapi_users.py.j2 +0 -0
  431. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/oauth2.py.j2 +0 -0
  432. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/session.py.j2 +0 -0
  433. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/db/mongodb.py.j2 +0 -0
  434. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/db/redis.py.j2 +0 -0
  435. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/db/sqlalchemy.py.j2 +0 -0
  436. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/docker/docker_compose.j2 +0 -0
  437. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/docker/dockerfile.j2 +0 -0
  438. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/cache.py.j2 +0 -0
  439. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/pagination.py.j2 +0 -0
  440. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/tasks_celery.py.j2 +0 -0
  441. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/tasks_dramatiq.py.j2 +0 -0
  442. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/websocket.py.j2 +0 -0
  443. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/header.j2 +0 -0
  444. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/logging/structured.py.j2 +0 -0
  445. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/async_tasks.j2 +0 -0
  446. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/caching.j2 +0 -0
  447. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/fastapi_users.j2 +0 -0
  448. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/jwt.j2 +0 -0
  449. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/loguru.j2 +0 -0
  450. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/mongodb.j2 +0 -0
  451. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/oauth2.j2 +0 -0
  452. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/opentelemetry.j2 +0 -0
  453. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/pagination.j2 +0 -0
  454. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/prometheus.j2 +0 -0
  455. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/rate_limiting.j2 +0 -0
  456. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/session_auth.j2 +0 -0
  457. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/sqlalchemy.j2 +0 -0
  458. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/structured_logging.j2 +0 -0
  459. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/websocket.j2 +0 -0
  460. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/caching.j2 +0 -0
  461. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/mongodb.j2 +0 -0
  462. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/prometheus.j2 +0 -0
  463. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/sqlalchemy.j2 +0 -0
  464. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/async_tasks.j2 +0 -0
  465. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/caching.j2 +0 -0
  466. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/cors.j2 +0 -0
  467. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/oauth2.j2 +0 -0
  468. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/opentelemetry.j2 +0 -0
  469. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/pagination.j2 +0 -0
  470. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/rate_limiting.j2 +0 -0
  471. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/session_auth.j2 +0 -0
  472. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/structured_logging.j2 +0 -0
  473. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/websocket.j2 +0 -0
  474. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main.py.j2 +0 -0
  475. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/alembic_ini.j2 +0 -0
  476. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/env.py.j2 +0 -0
  477. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/initial_revision.py.j2 +0 -0
  478. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/migrate_sh.j2 +0 -0
  479. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/script.py.mako.j2 +0 -0
  480. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tasks/celery_worker.py.j2 +0 -0
  481. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tasks/dramatiq_worker.py.j2 +0 -0
  482. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/factories.py.j2 +0 -0
  483. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/pytest_ini.j2 +0 -0
  484. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/test_factories.py.j2 +0 -0
  485. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/test_main.py.j2 +0 -0
  486. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/devcontainer.j2 +0 -0
  487. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/github_actions.j2 +0 -0
  488. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/makefile.j2 +0 -0
  489. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/pre_commit.j2 +0 -0
  490. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/ruff_toml.j2 +0 -0
  491. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/py.typed +0 -0
  492. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/__init__.py +0 -0
  493. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/config_file.py +0 -0
  494. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/logging.py +0 -0
  495. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/main.py +0 -0
  496. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/__init__.py +0 -0
  497. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/conftest.py +0 -0
  498. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/__init__.py +0 -0
  499. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_configure.py +0 -0
  500. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_console_sizing.py +0 -0
  501. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_inspection_fsutils.py +0 -0
  502. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_prompts.py +0 -0
  503. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_selectors.py +0 -0
  504. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_main.py +0 -0
  505. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_package_managers.py +0 -0
  506. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_preset_layout.py +0 -0
  507. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_project_metadata.py +0 -0
  508. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_safety_regressions.py +0 -0
  509. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_scaffolder.py +0 -0
  510. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/__init__.py +0 -0
  511. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli.py +0 -0
  512. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_error_paths.py +0 -0
  513. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_extended.py +0 -0
  514. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_interactive_integration.py +0 -0
  515. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_config_file.py +0 -0
  516. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_core.py +0 -0
  517. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_rich/__init__.py +0 -0
  518. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_rich/test_rich.py +0 -0
  519. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/__init__.py +0 -0
  520. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/template_configs.yaml +0 -0
  521. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_all_templates.py +0 -0
  522. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_config_based_templates.py +0 -0
  523. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_domain_starter_e2e.py +0 -0
  524. {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: FastAPI-fastkit
3
- Version: 1.4.0
3
+ Version: 1.4.1
4
4
  Summary: Fast, easy-to-use starter kit for new users of Python and FastAPI
5
5
  Author-Email: bnbong <bbbong9@gmail.com>
6
6
  License: MIT
@@ -82,7 +82,9 @@ $ pip install FastAPI-fastkit
82
82
  ```console
83
83
  fastkit init [OPTIONS]
84
84
  ```
85
- - What it does: Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
85
+ > [!TIP]
86
+ > Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
87
+
86
88
  - Key options:
87
89
  - `--project-name`, `--author`, `--author-email`, `--description`
88
90
  - `--package-manager` [pip|uv|pdm|poetry]
@@ -98,7 +100,9 @@ fastkit init [OPTIONS]
98
100
  ```console
99
101
  fastkit init --interactive
100
102
  ```
101
- - What it does: Guided step-by-step project setup with intelligent feature selection
103
+ > [!TIP]
104
+ > Guided step-by-step project setup with intelligent feature selection
105
+
102
106
  - Features:
103
107
  - **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
104
108
  - **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
@@ -114,7 +118,7 @@ fastkit init --interactive
114
118
  - **Deployment**: Docker, docker-compose with auto-generated configs
115
119
  - **Package manager**: pip, uv, pdm, poetry
116
120
  - **Custom packages**: Add your own dependencies
117
- - Auto-generates (varies by preset see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
121
+ - Auto-generates (varies by preset - see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
118
122
  - `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
119
123
  - Database and authentication configuration files at preset-specific paths
120
124
  - Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
@@ -127,7 +131,9 @@ fastkit init --interactive
127
131
  ```console
128
132
  fastkit startdemo [TEMPLATE] [OPTIONS]
129
133
  ```
130
- - What it does: Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
134
+ > [!TIP]
135
+ > Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
136
+
131
137
  - Key options:
132
138
  - `--project-name`, `--author`, `--author-email`, `--description`
133
139
  - `--package-manager` [pip|uv|pdm|poetry]
@@ -135,12 +141,6 @@ fastkit startdemo [TEMPLATE] [OPTIONS]
135
141
  - Refuses to run if the target project directory already exists (`--dry-run` excepted)
136
142
  - Tip: List available templates with `fastkit list-templates`
137
143
 
138
- New in v1.4.0: `fastapi-auth-jwt` (JWT auth with refresh rotation),
139
- `fastapi-sqlmodel` (async SQLModel + Alembic + generic CRUD), and
140
- `fastapi-llm-agent` (streaming Claude agent with a tool loop).
141
- `fastapi-dockerized` and `fastapi-async-crud` are deprecated — they still
142
- work, but are no longer recommended starting points.
143
-
144
144
  ### Add a new route
145
145
  ```console
146
146
  fastkit addroute <project_name> <route_name>
@@ -160,6 +160,25 @@ fastkit runserver [OPTIONS]
160
160
  fastkit list-templates
161
161
  ```
162
162
 
163
+ Available templates:
164
+
165
+ | Template | Description | Notes |
166
+ |---|---|---|
167
+ | [`fastapi-default`](src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl) | Simple FastAPI project with a classic layered layout | Good first choice |
168
+ | [`fastapi-empty`](src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl) | Minimal FastAPI template | Base for `minimal` preset |
169
+ | [`fastapi-single-module`](src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl) | Single-file FastAPI app | Base for `single-module` preset |
170
+ | [`fastapi-domain-starter`](src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl) | Domain-oriented, pyproject-first starter for medium-sized APIs | Base for `domain-starter` preset |
171
+ | [`fastapi-auth-jwt`](src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl) | JWT authentication with refresh-token rotation, argon2 hashing and scopes | New in v1.4.0 |
172
+ | [`fastapi-sqlmodel`](src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl) | Async SQLModel + Alembic migrations + generic CRUD with pagination | New in v1.4.0 |
173
+ | [`fastapi-llm-agent`](src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl) | Streaming Claude chat agent (SSE) with a tool-call loop | New in v1.4.0 |
174
+ | [`fastapi-mcp`](src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl) | FastAPI app exposed as an MCP server | |
175
+ | [`fastapi-psql-orm`](src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl) | Item management API with PostgreSQL, SQLModel, Alembic and docker-compose | Requires Docker |
176
+ | [`fastapi-custom-response`](src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl) | Item management API with a custom response envelope, error handling and pagination | |
177
+ | [`fastapi-async-crud`](src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl) | Async item management API | **Deprecated** — use `fastapi-sqlmodel` |
178
+ | [`fastapi-dockerized`](src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl) | Dockerized item management API | **Deprecated** — use `fastapi-default` with the Docker option in `init --interactive` |
179
+
180
+ Deprecated templates still work but are no longer recommended starting points. See [Which starter should I choose?](https://bnbong.github.io/FastAPI-fastkit/user-guide/choosing-a-starter/) for a decision guide.
181
+
163
182
  ### Delete a project
164
183
  ```console
165
184
  fastkit deleteproject <project_name>
@@ -57,7 +57,9 @@ $ pip install FastAPI-fastkit
57
57
  ```console
58
58
  fastkit init [OPTIONS]
59
59
  ```
60
- - What it does: Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
60
+ > [!TIP]
61
+ > Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
62
+
61
63
  - Key options:
62
64
  - `--project-name`, `--author`, `--author-email`, `--description`
63
65
  - `--package-manager` [pip|uv|pdm|poetry]
@@ -73,7 +75,9 @@ fastkit init [OPTIONS]
73
75
  ```console
74
76
  fastkit init --interactive
75
77
  ```
76
- - What it does: Guided step-by-step project setup with intelligent feature selection
78
+ > [!TIP]
79
+ > Guided step-by-step project setup with intelligent feature selection
80
+
77
81
  - Features:
78
82
  - **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
79
83
  - **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
@@ -89,7 +93,7 @@ fastkit init --interactive
89
93
  - **Deployment**: Docker, docker-compose with auto-generated configs
90
94
  - **Package manager**: pip, uv, pdm, poetry
91
95
  - **Custom packages**: Add your own dependencies
92
- - Auto-generates (varies by preset see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
96
+ - Auto-generates (varies by preset - see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
93
97
  - `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
94
98
  - Database and authentication configuration files at preset-specific paths
95
99
  - Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
@@ -102,7 +106,9 @@ fastkit init --interactive
102
106
  ```console
103
107
  fastkit startdemo [TEMPLATE] [OPTIONS]
104
108
  ```
105
- - What it does: Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
109
+ > [!TIP]
110
+ > Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
111
+
106
112
  - Key options:
107
113
  - `--project-name`, `--author`, `--author-email`, `--description`
108
114
  - `--package-manager` [pip|uv|pdm|poetry]
@@ -110,12 +116,6 @@ fastkit startdemo [TEMPLATE] [OPTIONS]
110
116
  - Refuses to run if the target project directory already exists (`--dry-run` excepted)
111
117
  - Tip: List available templates with `fastkit list-templates`
112
118
 
113
- New in v1.4.0: `fastapi-auth-jwt` (JWT auth with refresh rotation),
114
- `fastapi-sqlmodel` (async SQLModel + Alembic + generic CRUD), and
115
- `fastapi-llm-agent` (streaming Claude agent with a tool loop).
116
- `fastapi-dockerized` and `fastapi-async-crud` are deprecated — they still
117
- work, but are no longer recommended starting points.
118
-
119
119
  ### Add a new route
120
120
  ```console
121
121
  fastkit addroute <project_name> <route_name>
@@ -135,6 +135,25 @@ fastkit runserver [OPTIONS]
135
135
  fastkit list-templates
136
136
  ```
137
137
 
138
+ Available templates:
139
+
140
+ | Template | Description | Notes |
141
+ |---|---|---|
142
+ | [`fastapi-default`](src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl) | Simple FastAPI project with a classic layered layout | Good first choice |
143
+ | [`fastapi-empty`](src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl) | Minimal FastAPI template | Base for `minimal` preset |
144
+ | [`fastapi-single-module`](src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl) | Single-file FastAPI app | Base for `single-module` preset |
145
+ | [`fastapi-domain-starter`](src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl) | Domain-oriented, pyproject-first starter for medium-sized APIs | Base for `domain-starter` preset |
146
+ | [`fastapi-auth-jwt`](src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl) | JWT authentication with refresh-token rotation, argon2 hashing and scopes | New in v1.4.0 |
147
+ | [`fastapi-sqlmodel`](src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl) | Async SQLModel + Alembic migrations + generic CRUD with pagination | New in v1.4.0 |
148
+ | [`fastapi-llm-agent`](src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl) | Streaming Claude chat agent (SSE) with a tool-call loop | New in v1.4.0 |
149
+ | [`fastapi-mcp`](src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl) | FastAPI app exposed as an MCP server | |
150
+ | [`fastapi-psql-orm`](src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl) | Item management API with PostgreSQL, SQLModel, Alembic and docker-compose | Requires Docker |
151
+ | [`fastapi-custom-response`](src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl) | Item management API with a custom response envelope, error handling and pagination | |
152
+ | [`fastapi-async-crud`](src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl) | Async item management API | **Deprecated** — use `fastapi-sqlmodel` |
153
+ | [`fastapi-dockerized`](src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl) | Dockerized item management API | **Deprecated** — use `fastapi-default` with the Docker option in `init --interactive` |
154
+
155
+ Deprecated templates still work but are no longer recommended starting points. See [Which starter should I choose?](https://bnbong.github.io/FastAPI-fastkit/user-guide/choosing-a-starter/) for a decision guide.
156
+
138
157
  ### Delete a project
139
158
  ```console
140
159
  fastkit deleteproject <project_name>
@@ -12,7 +12,7 @@ dependencies = [
12
12
  ]
13
13
  requires-python = ">=3.12"
14
14
  readme = "README.md"
15
- version = "1.4.0"
15
+ version = "1.4.1"
16
16
 
17
17
  [project.license]
18
18
  text = "MIT"
@@ -128,14 +128,15 @@ directory = "htmlcov"
128
128
  [dependency-groups]
129
129
  docs = [
130
130
  "mkdocs>=1.6.1",
131
- "mkdocs-material>=9.6.15",
131
+ "mkdocs-material>=9.7.7",
132
132
  "mdx-include>=1.4.2",
133
133
  "mkdocs-static-i18n>=1.3.0",
134
134
  "pyyaml>=6.0.3",
135
135
  "types-PyYAML>=6.0.12.20250915",
136
136
  "pygments>=2.20.0",
137
137
  "requests>=2.33.0",
138
- "pymdown-extensions>=10.17.2",
138
+ "idna>=3.15",
139
+ "pymdown-extensions>=11.0.1",
139
140
  ]
140
141
  translation = [
141
142
  "openai>=2.8.1",
@@ -0,0 +1 @@
1
+ __version__ = 'v1.4.1'
@@ -43,6 +43,10 @@ class InspectionContext:
43
43
  warnings: List[str] = field(default_factory=list)
44
44
  #: Populated by a test strategy so later checks can reuse the environment.
45
45
  venv_path: Optional[str] = None
46
+ #: Populated when a test strategy already exercised the app's HTTP surface
47
+ #: (the Docker strategy probes the running container), so the Smoke Test
48
+ #: step reuses that verdict instead of booting a second server.
49
+ smoke_result: Optional[bool] = None
46
50
 
47
51
  def add_error(self, message: str) -> None:
48
52
  """Record a fatal finding."""
@@ -252,8 +252,12 @@ class TemplateInspector:
252
252
  ("Configuration Consistency", self._check_configuration_consistency),
253
253
  ("FastAPI Implementation", self._check_fastapi_implementation),
254
254
  ("Placeholder Substitution", self._check_no_placeholder_residue),
255
- ("Template Tests", self._test_template),
255
+ # Compile Check is a pure static check: it runs before the (much
256
+ # heavier) Template Tests so a syntax error is reported without
257
+ # waiting for an environment, and so it never observes files a
258
+ # containerised test run left behind.
256
259
  ("Compile Check", self._check_compileall),
260
+ ("Template Tests", self._test_template),
257
261
  ("Type Check", self._check_mypy),
258
262
  ("Smoke Test", self._check_smoke_test),
259
263
  ("Dependency Freshness", self._check_dependency_freshness),
@@ -7,6 +7,7 @@
7
7
  # @author bnbong
8
8
  # --------------------------------------------------------------------------
9
9
  import json
10
+ import os
10
11
  import subprocess
11
12
  import time
12
13
  from typing import Any, Dict, List, Optional, Sequence
@@ -14,6 +15,12 @@ from typing import Any, Dict, List, Optional, Sequence
14
15
  from fastapi_fastkit.utils.logging import debug_log
15
16
 
16
17
  COMPOSE_COMMAND = "docker-compose"
18
+ #: Fallback for hosts that only ship the ``docker compose`` CLI plugin.
19
+ COMPOSE_PLUGIN_COMMAND = ["docker", "compose"]
20
+ #: Resolved compose invocation, switched by :meth:`DockerCompose.is_available`.
21
+ _compose_prefix: List[str] = [COMPOSE_COMMAND]
22
+ #: Throwaway image used to give bind-mounted files back to the host user.
23
+ RECLAIM_IMAGE = "alpine:3.20"
17
24
  SHORT_TIMEOUT = 10
18
25
  STATUS_TIMEOUT = 30
19
26
  CLEANUP_TIMEOUT = 60
@@ -43,27 +50,49 @@ class DockerCompose:
43
50
  debug_log(f"Command {' '.join(args)} failed: {e}", "warning")
44
51
  return None
45
52
 
53
+ @staticmethod
54
+ def compose_command() -> List[str]:
55
+ """Return the compose invocation resolved by :meth:`is_available`."""
56
+ return list(_compose_prefix)
57
+
46
58
  def _compose(
47
59
  self, args: Sequence[str], timeout: int
48
60
  ) -> Optional[subprocess.CompletedProcess[str]]:
49
61
  """Run a docker-compose subcommand against the configured compose file."""
50
62
  return self._run(
51
- [COMPOSE_COMMAND, "-f", self.compose_file, *args], timeout=timeout
63
+ [*self.compose_command(), "-f", self.compose_file, *args], timeout=timeout
52
64
  )
53
65
 
66
+ @staticmethod
67
+ def _probe(command: Sequence[str]) -> bool:
68
+ """Return whether ``command`` exits successfully."""
69
+ try:
70
+ result = subprocess.run(
71
+ list(command), capture_output=True, text=True, timeout=SHORT_TIMEOUT
72
+ )
73
+ except (subprocess.TimeoutExpired, OSError):
74
+ return False
75
+ return result.returncode == 0
76
+
54
77
  @staticmethod
55
78
  def is_available() -> bool:
56
- """Check that both docker and docker-compose respond."""
57
- for command in (["docker", "--version"], [COMPOSE_COMMAND, "--version"]):
58
- try:
59
- result = subprocess.run(
60
- command, capture_output=True, text=True, timeout=SHORT_TIMEOUT
61
- )
62
- except (subprocess.TimeoutExpired, OSError):
63
- return False
64
- if result.returncode != 0:
65
- return False
66
- return True
79
+ """Check that docker responds and a compose implementation exists.
80
+
81
+ ``docker-compose`` stays the preferred command; hosts that only ship
82
+ the ``docker compose`` CLI plugin fall back to it.
83
+ """
84
+ global _compose_prefix
85
+
86
+ if not DockerCompose._probe(["docker", "--version"]):
87
+ return False
88
+ if DockerCompose._probe([COMPOSE_COMMAND, "--version"]):
89
+ _compose_prefix = [COMPOSE_COMMAND]
90
+ return True
91
+ if DockerCompose._probe([*COMPOSE_PLUGIN_COMMAND, "version"]):
92
+ debug_log("Falling back to the 'docker compose' CLI plugin", "info")
93
+ _compose_prefix = list(COMPOSE_PLUGIN_COMMAND)
94
+ return True
95
+ return False
67
96
 
68
97
  def _services(self, timeout: int) -> List[Dict[str, Any]]:
69
98
  """Return the parsed ``docker-compose ps --format json`` entries."""
@@ -71,8 +100,34 @@ class DockerCompose:
71
100
  if result is None or result.returncode != 0:
72
101
  return []
73
102
 
103
+ # Compose sometimes interleaves ``time="..." level=warning`` log lines
104
+ # with the JSON payload, so only JSON-looking lines are considered.
105
+ payload = "\n".join(
106
+ line
107
+ for line in result.stdout.splitlines()
108
+ if line.strip().startswith(("[", "{"))
109
+ ).strip()
110
+ if not payload:
111
+ return []
112
+
113
+ # Compose < v2.21 prints a single JSON array, newer versions print one
114
+ # JSON object per line (NDJSON).
115
+ try:
116
+ document = json.loads(payload)
117
+ except json.JSONDecodeError:
118
+ return DockerCompose._parse_json_lines(payload)
119
+
120
+ if isinstance(document, dict):
121
+ return [document]
122
+ if isinstance(document, list):
123
+ return [entry for entry in document if isinstance(entry, dict)]
124
+ return []
125
+
126
+ @staticmethod
127
+ def _parse_json_lines(payload: str) -> List[Dict[str, Any]]:
128
+ """Parse NDJSON output, skipping malformed or non-object lines."""
74
129
  services: List[Dict[str, Any]] = []
75
- for line in result.stdout.strip().split("\n"):
130
+ for line in payload.split("\n"):
76
131
  if not line.strip():
77
132
  continue
78
133
  try:
@@ -109,7 +164,7 @@ class DockerCompose:
109
164
  """Build and start the compose services in the background."""
110
165
  result = self._compose(["up", "-d", "--build"], timeout=timeout)
111
166
  if result is None:
112
- raise subprocess.TimeoutExpired(COMPOSE_COMMAND, timeout)
167
+ raise subprocess.TimeoutExpired(" ".join(self.compose_command()), timeout)
113
168
  return result
114
169
 
115
170
  def wait_until_healthy(self, timeout: int) -> None:
@@ -166,6 +221,50 @@ class DockerCompose:
166
221
  debug_log("All required services are running", "info")
167
222
  return None
168
223
 
224
+ def published_port(self, service_hint: str = "app") -> Optional[int]:
225
+ """Return the host port the app container publishes, if any.
226
+
227
+ ``docker-compose ps --format json`` reports a ``Publishers`` list per
228
+ service; an entry with a non-zero ``PublishedPort`` is a port bound on
229
+ the host, which is what a smoke test can reach. Services whose name
230
+ contains ``service_hint`` are preferred, so a database that happens to
231
+ publish a port is never mistaken for the application.
232
+ """
233
+ services = self._services(timeout=STATUS_TIMEOUT)
234
+ if not services:
235
+ return None
236
+
237
+ def _matches(service: Dict[str, Any]) -> bool:
238
+ name = f"{service.get('Service', '')} {service.get('Name', '')}"
239
+ return service_hint in name
240
+
241
+ for candidate in (
242
+ [entry for entry in services if _matches(entry)],
243
+ services,
244
+ ):
245
+ for service in candidate:
246
+ port = self._first_published_port(service)
247
+ if port is not None:
248
+ return port
249
+ return None
250
+
251
+ @staticmethod
252
+ def _first_published_port(service: Dict[str, Any]) -> Optional[int]:
253
+ """Extract the first host-bound port from one ``ps`` entry."""
254
+ publishers = service.get("Publishers")
255
+ if not isinstance(publishers, list):
256
+ return None
257
+ for publisher in publishers:
258
+ if not isinstance(publisher, dict):
259
+ continue
260
+ try:
261
+ port = int(publisher.get("PublishedPort", 0))
262
+ except (TypeError, ValueError):
263
+ continue
264
+ if port > 0:
265
+ return port
266
+ return None
267
+
169
268
  def exec_tests(
170
269
  self, use_test_script: bool
171
270
  ) -> Optional[subprocess.CompletedProcess[str]]:
@@ -176,10 +275,46 @@ class DockerCompose:
176
275
  command = ["exec", "-T", "app", "python", "-m", "pytest", "tests/", "-v"]
177
276
  return self._compose(command, timeout=TEST_TIMEOUT)
178
277
 
278
+ def reclaim_bind_mount_ownership(self) -> None:
279
+ """Give the bind-mounted project directory back to the host user.
280
+
281
+ Containers run as root, so a test run inside the stack leaves
282
+ root-owned artefacts (``__pycache__``, ``.pytest_cache``, ...) in the
283
+ mounted project. Later host-side steps and the temp directory cleanup
284
+ cannot touch those and fail with a PermissionError, so the ownership
285
+ is reset from inside a throwaway container. Best effort: a failure
286
+ here is never worth failing an inspection over.
287
+ """
288
+ if not hasattr(os, "getuid"): # pragma: no cover - Windows hosts
289
+ return
290
+
291
+ uid, gid = os.getuid(), os.getgid()
292
+ if uid == 0:
293
+ return
294
+
295
+ debug_log("Reclaiming ownership of bind-mounted project files", "info")
296
+ self._run(
297
+ [
298
+ "docker",
299
+ "run",
300
+ "--rm",
301
+ "-v",
302
+ f"{self.project_dir}:/mnt",
303
+ RECLAIM_IMAGE,
304
+ "chown",
305
+ "-R",
306
+ f"{uid}:{gid}",
307
+ "/mnt",
308
+ ],
309
+ timeout=CLEANUP_TIMEOUT,
310
+ )
311
+
179
312
  def cleanup(self) -> None:
180
313
  """Tear down services and volumes, ignoring any failure."""
181
314
  debug_log("Cleaning up Docker services", "info")
315
+ self.reclaim_bind_mount_ownership()
182
316
  self._run(
183
- [COMPOSE_COMMAND, "down", "-v", "--remove-orphans"], timeout=CLEANUP_TIMEOUT
317
+ [*self.compose_command(), "down", "-v", "--remove-orphans"],
318
+ timeout=CLEANUP_TIMEOUT,
184
319
  )
185
320
  self._run(["docker", "system", "prune", "-f"], timeout=STATUS_TIMEOUT)
@@ -0,0 +1,103 @@
1
+ # --------------------------------------------------------------------------
2
+ # Static analysis of the generated project.
3
+ #
4
+ # The compile check is mandatory - a template that cannot be compiled is
5
+ # broken beyond argument. It is performed in-process with ``compile()`` and
6
+ # deliberately writes nothing to disk: a Docker test run beforehand can leave
7
+ # root-owned ``__pycache__`` directories in the bind-mounted project, and
8
+ # ``compileall`` would then fail with a PermissionError that says nothing
9
+ # about the template. ``mypy`` is opt-in because it needs the template's own
10
+ # dependencies installed and is far slower.
11
+ #
12
+ # @author bnbong
13
+ # --------------------------------------------------------------------------
14
+ import os
15
+ import subprocess
16
+ import sys
17
+ from typing import List
18
+
19
+ from fastapi_fastkit.utils.logging import debug_log
20
+
21
+ from .context import InspectionContext
22
+
23
+ MYPY_TIMEOUT = 300
24
+
25
+ #: Directories never worth compiling - third party code and build artefacts.
26
+ EXCLUDED_DIRS = {".venv", "venv", "__pycache__", "node_modules"}
27
+
28
+
29
+ def _interpreter(ctx: InspectionContext) -> str:
30
+ """Prefer the inspection venv interpreter, falling back to the host one."""
31
+ return ctx.python_executable() or sys.executable
32
+
33
+
34
+ def _iter_python_files(root: str) -> List[str]:
35
+ """Collect every ``.py`` file below ``root``, skipping excluded directories."""
36
+ python_files: List[str] = []
37
+ for dirpath, dirnames, filenames in os.walk(root):
38
+ dirnames[:] = [name for name in dirnames if name not in EXCLUDED_DIRS]
39
+ for file_name in sorted(filenames):
40
+ if file_name.endswith(".py"):
41
+ python_files.append(os.path.join(dirpath, file_name))
42
+ return python_files
43
+
44
+
45
+ def check_compileall(ctx: InspectionContext) -> bool:
46
+ """Compile every Python file of the generated project, in memory.
47
+
48
+ Nothing is written to disk - no ``__pycache__`` is created - so the check
49
+ stays a pure syntax gate that cannot trip over file ownership left behind
50
+ by a containerised test run.
51
+ """
52
+ failures: List[str] = []
53
+
54
+ for path in _iter_python_files(ctx.temp_dir):
55
+ try:
56
+ with open(path, "rb") as f:
57
+ source = f.read()
58
+ except OSError as e:
59
+ failures.append(f"{path}: could not be read ({e})")
60
+ continue
61
+
62
+ try:
63
+ compile(source, path, "exec", dont_inherit=True)
64
+ except (SyntaxError, ValueError) as e:
65
+ failures.append(f"{path}: {e}")
66
+
67
+ if failures:
68
+ detail = "\n".join(failures)
69
+ ctx.add_error(f"Generated project failed to compile:\n{detail}")
70
+ return False
71
+
72
+ debug_log("compileall check passed", "info")
73
+ return True
74
+
75
+
76
+ def check_mypy(ctx: InspectionContext) -> bool:
77
+ """Run mypy inside the generated project (opt-in via ``--mypy``)."""
78
+ if not ctx.options.run_mypy:
79
+ debug_log("mypy check disabled", "info")
80
+ return True
81
+
82
+ try:
83
+ result = subprocess.run(
84
+ [_interpreter(ctx), "-m", "mypy", "."],
85
+ cwd=ctx.temp_dir,
86
+ capture_output=True,
87
+ text=True,
88
+ timeout=MYPY_TIMEOUT,
89
+ )
90
+ except subprocess.TimeoutExpired:
91
+ ctx.add_error("mypy timed out")
92
+ return False
93
+ except OSError as e:
94
+ ctx.add_warning(f"Could not run mypy: {e}")
95
+ return True
96
+
97
+ if result.returncode != 0:
98
+ detail = (result.stdout or result.stderr or "").strip()
99
+ ctx.add_error(f"mypy reported errors in the generated project:\n{detail}")
100
+ return False
101
+
102
+ debug_log("mypy check passed", "info")
103
+ return True
@@ -115,12 +115,17 @@ def _probe(url: str, timeout: int = 5) -> Optional[int]:
115
115
 
116
116
 
117
117
  def _wait_for_server(
118
- process: "subprocess.Popen[bytes]", base_url: str, timeout: int
118
+ process: Optional["subprocess.Popen[bytes]"], base_url: str, timeout: int
119
119
  ) -> Tuple[bool, str]:
120
- """Poll ``/docs`` until the server answers, the process dies or time runs out."""
120
+ """Poll ``/docs`` until the server answers, the process dies or time runs out.
121
+
122
+ ``process`` is ``None`` when the server is not ours to watch - a container
123
+ started by the Docker strategy, for one - in which case only the timeout
124
+ bounds the wait.
125
+ """
121
126
  deadline = time.time() + timeout
122
127
  while time.time() < deadline:
123
- if process.poll() is not None:
128
+ if process is not None and process.poll() is not None:
124
129
  return False, "server process exited before becoming reachable"
125
130
  status = _probe(f"{base_url}/docs")
126
131
  if status is not None:
@@ -228,14 +233,70 @@ def _read_log_tail(log_file: IO[bytes]) -> str:
228
233
  return ""
229
234
 
230
235
 
236
+ def _check_health_endpoint(ctx: InspectionContext, base_url: str) -> Optional[str]:
237
+ """Probe ``/health``; return a failure message, or ``None`` when acceptable.
238
+
239
+ A template without a ``/health`` route answers 404, which is fine; an
240
+ unreachable endpoint is only worth a warning, but a route that exists and
241
+ answers with anything other than 200 is a real failure.
242
+ """
243
+ health_status = _probe(f"{base_url}/health")
244
+ if health_status is None:
245
+ ctx.add_warning("Smoke test: /health did not respond")
246
+ elif health_status == 404:
247
+ debug_log("Template exposes no /health endpoint, skipping", "info")
248
+ elif health_status != 200:
249
+ return (
250
+ f"Smoke test failed: /health returned HTTP {health_status} (expected 200)"
251
+ )
252
+ return None
253
+
254
+
255
+ def run_http_smoke(ctx: InspectionContext, base_url: str) -> bool:
256
+ """Verify the HTTP surface of a server someone else already started.
257
+
258
+ Used by the Docker strategy, which has the real application running in a
259
+ container: probing its published port is more honest than booting a second
260
+ copy on the host, and templates that require Docker never get a host venv
261
+ to boot one with in the first place.
262
+ """
263
+ debug_log(f"Running smoke test against {base_url}", "info")
264
+ reachable, reason = _wait_for_server(None, base_url, ctx.options.smoke_timeout)
265
+ if not reachable:
266
+ ctx.add_error(f"Smoke test failed: {reason}")
267
+ return False
268
+
269
+ failure = _check_health_endpoint(ctx, base_url)
270
+ if failure:
271
+ ctx.add_error(failure)
272
+ return False
273
+
274
+ debug_log("Smoke test passed", "info")
275
+ return True
276
+
277
+
278
+ def _requires_docker(ctx: InspectionContext) -> bool:
279
+ """Whether the template declares that it can only run under Docker."""
280
+ return bool((ctx.template_config or {}).get("requires_docker", False))
281
+
282
+
231
283
  def check_smoke_test(ctx: InspectionContext) -> bool:
232
284
  """Boot the generated project and verify its HTTP surface."""
233
285
  if not ctx.options.run_smoke_test:
234
286
  debug_log("Smoke test disabled", "info")
235
287
  return True
236
288
 
289
+ if ctx.smoke_result is not None:
290
+ debug_log("Reusing the smoke test result recorded while testing", "info")
291
+ return ctx.smoke_result
292
+
237
293
  python_executable = ctx.python_executable()
238
294
  if not python_executable or not os.path.exists(python_executable):
295
+ if _requires_docker(ctx):
296
+ ctx.add_warning(
297
+ "smoke test skipped: Docker template without published port"
298
+ )
299
+ return True
239
300
  ctx.add_error(
240
301
  "Smoke test requires an installed environment, but no virtual "
241
302
  "environment was prepared for the generated project"
@@ -306,16 +367,9 @@ def check_smoke_test(ctx: InspectionContext) -> bool:
306
367
  ctx.add_error(last_failure)
307
368
  return False
308
369
 
309
- health_status = _probe(f"{base_url}/health")
310
- if health_status is None:
311
- ctx.add_warning("Smoke test: /health did not respond")
312
- elif health_status == 404:
313
- debug_log("Template exposes no /health endpoint, skipping", "info")
314
- elif health_status != 200:
315
- ctx.add_error(
316
- f"Smoke test failed: /health returned HTTP {health_status} "
317
- "(expected 200)\n" + _read_log_tail(log_file)
318
- )
370
+ failure = _check_health_endpoint(ctx, base_url)
371
+ if failure:
372
+ ctx.add_error(f"{failure}\n{_read_log_tail(log_file)}".rstrip())
319
373
  return False
320
374
  finally:
321
375
  _terminate(process)