FastAPI-fastkit 1.3.0__tar.gz → 1.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (547) hide show
  1. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/PKG-INFO +26 -2
  2. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/README.md +23 -1
  3. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/pyproject.toml +13 -1
  4. fastapi_fastkit-1.4.0/src/fastapi_fastkit/__init__.py +1 -0
  5. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/__init__.py +26 -0
  6. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/checks.py +349 -0
  7. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/consistency.py +125 -0
  8. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/context.py +67 -0
  9. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/core.py +347 -0
  10. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/docker.py +185 -0
  11. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/freshness.py +145 -0
  12. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/fsutils.py +139 -0
  13. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/lint.py +89 -0
  14. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/report.py +58 -0
  15. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/smoke.py +327 -0
  16. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/strategies.py +336 -0
  17. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspector.py +34 -0
  18. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/interactive/__init__.py +6 -0
  19. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/interactive/config_builder.py +45 -63
  20. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/interactive/prompts.py +155 -6
  21. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/interactive/selectors.py +18 -2
  22. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/main.py +1741 -0
  23. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/package_managers/base.py +322 -0
  24. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/package_managers/factory.py +5 -4
  25. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +29 -82
  26. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +31 -85
  27. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +70 -110
  28. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +43 -112
  29. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/project_builder/__init__.py +8 -1
  30. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/project_builder/config_generator.py +957 -0
  31. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/project_builder/config_schema.py +384 -0
  32. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +249 -0
  33. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/project_builder/preset_layout.py +429 -0
  34. fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/scaffolder.py +578 -0
  35. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/transducer.py +54 -21
  36. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/cli.py +434 -311
  37. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/core/settings.py +232 -43
  38. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/README.md +26 -10
  39. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +3 -0
  40. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +21 -22
  41. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +40 -0
  42. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +3 -0
  43. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +1 -2
  44. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud}/src/core/config.py-tpl +5 -6
  45. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud}/src/crud/items.py-tpl +1 -2
  46. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +9 -1
  47. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud}/src/schemas/items.py-tpl +1 -2
  48. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -1
  49. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.env-tpl +21 -0
  50. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.gitignore-tpl +33 -0
  51. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/Dockerfile-tpl +18 -0
  52. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl +210 -0
  53. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/alembic.ini-tpl +119 -0
  54. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/pyproject.toml-tpl +86 -0
  55. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/requirements.txt-tpl +23 -0
  56. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/env.py-tpl +51 -0
  57. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/versions/0001_initial_auth_schema.py-tpl +62 -0
  58. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/deps.py-tpl +91 -0
  59. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/router.py-tpl +17 -0
  60. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/config.py-tpl +64 -0
  61. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/security.py-tpl +100 -0
  62. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/db/session.py-tpl +36 -0
  63. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/models.py-tpl +25 -0
  64. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/repository.py-tpl +41 -0
  65. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/router.py-tpl +82 -0
  66. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/schemas.py-tpl +14 -0
  67. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/service.py-tpl +65 -0
  68. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/models.py-tpl +35 -0
  69. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/repository.py-tpl +33 -0
  70. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/router.py-tpl +71 -0
  71. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/schemas.py-tpl +29 -0
  72. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/service.py-tpl +55 -0
  73. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/main.py-tpl +69 -0
  74. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/template-config.yml-tpl +16 -0
  75. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/conftest.py-tpl +73 -0
  76. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_auth.py-tpl +201 -0
  77. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_health.py-tpl +15 -0
  78. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_users.py-tpl +77 -0
  79. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +21 -22
  80. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +40 -0
  81. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +3 -0
  82. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +3 -3
  83. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +5 -6
  84. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/crud/items.py-tpl +1 -2
  85. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +8 -8
  86. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +9 -0
  87. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +1 -1
  88. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/schemas/items.py-tpl +1 -2
  89. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -1
  90. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +18 -19
  91. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +38 -0
  92. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +3 -0
  93. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +1 -2
  94. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/src/core/config.py-tpl +5 -6
  95. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +1 -2
  96. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/src/main.py-tpl +9 -1
  97. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/src/schemas/items.py-tpl +1 -2
  98. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +2 -3
  99. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/tests/test_items.py-tpl +0 -2
  100. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +1 -1
  101. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +3 -0
  102. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +21 -22
  103. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +42 -0
  104. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +3 -0
  105. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +1 -2
  106. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/src/core/config.py-tpl +5 -6
  107. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +1 -2
  108. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/src/main.py-tpl +9 -1
  109. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +1 -2
  110. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +2 -3
  111. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/tests/test_items.py-tpl +0 -2
  112. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/pyproject.toml-tpl +13 -14
  113. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/requirements.txt-tpl +37 -0
  114. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/lint.sh-tpl +6 -0
  115. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/run-server.sh-tpl +8 -0
  116. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/test.sh-tpl +6 -0
  117. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/health.py-tpl +11 -0
  118. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/router.py-tpl +3 -0
  119. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core/config.py-tpl +4 -4
  120. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db/memory.py-tpl +4 -3
  121. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/repository.py-tpl +4 -5
  122. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/router.py-tpl +2 -3
  123. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/service.py-tpl +2 -3
  124. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/main.py-tpl +3 -0
  125. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/conftest.py-tpl +0 -1
  126. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +14 -15
  127. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +37 -0
  128. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +5 -6
  129. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +3 -1
  130. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -1
  131. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -1
  132. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.env-tpl +15 -0
  133. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.gitignore-tpl +31 -0
  134. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/Dockerfile-tpl +18 -0
  135. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl +193 -0
  136. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/pyproject.toml-tpl +76 -0
  137. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/requirements.txt-tpl +15 -0
  138. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/chat.sh-tpl +10 -0
  139. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/format.sh-tpl +5 -0
  140. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/lint.sh-tpl +6 -0
  141. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/run-server.sh-tpl +8 -0
  142. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/test.sh-tpl +6 -0
  143. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/chat.py-tpl +62 -0
  144. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/deps.py-tpl +23 -0
  145. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/health.py-tpl +11 -0
  146. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/router.py-tpl +13 -0
  147. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/core/config.py-tpl +67 -0
  148. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/agent.py-tpl +136 -0
  149. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/client.py-tpl +30 -0
  150. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/tools.py-tpl +131 -0
  151. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/main.py-tpl +53 -0
  152. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/base.py-tpl +27 -0
  153. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/in_memory.py-tpl +32 -0
  154. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/schemas/chat.py-tpl +46 -0
  155. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/template-config.yml-tpl +16 -0
  156. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/conftest.py-tpl +158 -0
  157. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_chat.py-tpl +160 -0
  158. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_health.py-tpl +12 -0
  159. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_memory.py-tpl +38 -0
  160. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_tools.py-tpl +37 -0
  161. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +1 -1
  162. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +25 -25
  163. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +70 -0
  164. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +3 -0
  165. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +4 -5
  166. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +3 -4
  167. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +4 -5
  168. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +4 -5
  169. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +4 -1
  170. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server}/router.py-tpl +3 -5
  171. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +6 -7
  172. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -1
  173. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -1
  174. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -1
  175. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +1 -1
  176. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +22 -23
  177. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +45 -0
  178. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +5 -0
  179. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +1 -0
  180. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +1 -3
  181. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +26 -0
  182. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +5 -6
  183. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +2 -0
  184. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/__init__.py-tpl +0 -0
  185. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +2 -4
  186. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/__init__.py-tpl +0 -0
  187. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +1 -2
  188. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +1 -1
  189. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/__init__.py-tpl +0 -0
  190. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +4 -6
  191. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +9 -0
  192. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/__init__.py-tpl +0 -0
  193. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +4 -5
  194. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/__init__.py-tpl +0 -0
  195. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
  196. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +1 -5
  197. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm}/tests/test_items.py-tpl +0 -2
  198. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.env-tpl +1 -0
  199. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.gitignore-tpl +30 -0
  200. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/pyproject.toml-tpl +3 -4
  201. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +27 -0
  202. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/src/main.py-tpl +3 -0
  203. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/__init__.py-tpl +0 -0
  204. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/conftest.py-tpl +0 -1
  205. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.env-tpl +7 -0
  206. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.gitignore-tpl +35 -0
  207. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/Dockerfile-tpl +18 -0
  208. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl +166 -0
  209. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/alembic.ini-tpl +44 -0
  210. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/pyproject.toml-tpl +82 -0
  211. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/requirements.txt-tpl +21 -0
  212. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/format.sh-tpl +5 -0
  213. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/lint.sh-tpl +6 -0
  214. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/migrate.sh-tpl +7 -0
  215. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/run-server.sh-tpl +8 -0
  216. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/test.sh-tpl +6 -0
  217. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/__init__.py-tpl +0 -0
  218. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/__init__.py-tpl +0 -0
  219. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/README-tpl +9 -0
  220. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/env.py-tpl +72 -0
  221. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/script.py.mako-tpl +27 -0
  222. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/versions/0001_create_items_table.py-tpl +38 -0
  223. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/__init__.py-tpl +0 -0
  224. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/health.py-tpl +11 -0
  225. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/router.py-tpl +15 -0
  226. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/core/__init__.py-tpl +0 -0
  227. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/core/config.py-tpl +62 -0
  228. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/__init__.py-tpl +0 -0
  229. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/base.py-tpl +62 -0
  230. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/pagination.py-tpl +21 -0
  231. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/__init__.py-tpl +0 -0
  232. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/base.py-tpl +12 -0
  233. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/session.py-tpl +50 -0
  234. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/__init__.py-tpl +0 -0
  235. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/__init__.py-tpl +0 -0
  236. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/crud.py-tpl +26 -0
  237. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/models.py-tpl +70 -0
  238. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/router.py-tpl +69 -0
  239. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/main.py-tpl +43 -0
  240. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/template-config.yml-tpl +16 -0
  241. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/__init__.py-tpl +0 -0
  242. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/conftest.py-tpl +60 -0
  243. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_crud_base.py-tpl +43 -0
  244. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_health.py-tpl +12 -0
  245. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_items.py-tpl +110 -0
  246. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
  247. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
  248. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +2 -2
  249. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
  250. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
  251. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/README.md +90 -0
  252. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/auth/fastapi_users.py.j2 +8 -0
  253. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/auth/jwt.py.j2 +44 -0
  254. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/auth/oauth2.py.j2 +105 -0
  255. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/auth/session.py.j2 +67 -0
  256. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/db/mongodb.py.j2 +19 -0
  257. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/db/redis.py.j2 +26 -0
  258. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/db/sqlalchemy.py.j2 +45 -0
  259. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/docker/docker_compose.j2 +84 -0
  260. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/docker/dockerfile.j2 +19 -0
  261. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/features/cache.py.j2 +26 -0
  262. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/features/pagination.py.j2 +31 -0
  263. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/features/tasks_celery.py.j2 +50 -0
  264. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/features/tasks_dramatiq.py.j2 +59 -0
  265. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/features/websocket.py.j2 +66 -0
  266. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/header.j2 +4 -0
  267. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/logging/structured.py.j2 +88 -0
  268. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/async_tasks.j2 +1 -0
  269. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/caching.j2 +5 -0
  270. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/fastapi_users.j2 +1 -0
  271. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/jwt.j2 +1 -0
  272. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/loguru.j2 +1 -0
  273. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/mongodb.j2 +1 -0
  274. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/oauth2.j2 +4 -0
  275. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/opentelemetry.j2 +6 -0
  276. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/pagination.j2 +3 -0
  277. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/prometheus.j2 +1 -0
  278. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/rate_limiting.j2 +3 -0
  279. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/session_auth.j2 +4 -0
  280. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/sqlalchemy.j2 +2 -0
  281. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/structured_logging.j2 +1 -0
  282. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/imports/websocket.j2 +1 -0
  283. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/lifespan/caching.j2 +7 -0
  284. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/lifespan/mongodb.j2 +2 -0
  285. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/lifespan/prometheus.j2 +2 -0
  286. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/lifespan/sqlalchemy.j2 +2 -0
  287. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/async_tasks.j2 +1 -0
  288. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/caching.j2 +1 -0
  289. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/cors.j2 +8 -0
  290. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/oauth2.j2 +3 -0
  291. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/opentelemetry.j2 +19 -0
  292. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/pagination.j2 +2 -0
  293. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/rate_limiting.j2 +3 -0
  294. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/session_auth.j2 +6 -0
  295. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/structured_logging.j2 +2 -0
  296. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main/setup/websocket.j2 +1 -0
  297. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/main.py.j2 +57 -0
  298. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/migrations/alembic_ini.j2 +42 -0
  299. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/migrations/env.py.j2 +76 -0
  300. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/migrations/initial_revision.py.j2 +27 -0
  301. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/migrations/migrate_sh.j2 +34 -0
  302. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/migrations/script.py.mako.j2 +26 -0
  303. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/tasks/celery_worker.py.j2 +49 -0
  304. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/tasks/dramatiq_worker.py.j2 +41 -0
  305. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/test/factories.py.j2 +68 -0
  306. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/test/pytest_ini.j2 +16 -0
  307. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/test/test_factories.py.j2 +27 -0
  308. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/test/test_main.py.j2 +46 -0
  309. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/tooling/devcontainer.j2 +26 -0
  310. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/tooling/github_actions.j2 +37 -0
  311. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/tooling/makefile.j2 +40 -0
  312. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/tooling/pre_commit.j2 +36 -0
  313. fastapi_fastkit-1.4.0/src/fastapi_fastkit/fragments/tooling/ruff_toml.j2 +16 -0
  314. fastapi_fastkit-1.4.0/src/fastapi_fastkit/py.typed +0 -0
  315. fastapi_fastkit-1.4.0/src/fastapi_fastkit/utils/__init__.py +0 -0
  316. fastapi_fastkit-1.4.0/src/fastapi_fastkit/utils/config_file.py +263 -0
  317. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/utils/main.py +38 -0
  318. fastapi_fastkit-1.4.0/tests/__init__.py +0 -0
  319. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/conftest.py +8 -11
  320. fastapi_fastkit-1.4.0/tests/test_backends/__init__.py +0 -0
  321. fastapi_fastkit-1.4.0/tests/test_backends/test_inspection_docker.py +268 -0
  322. fastapi_fastkit-1.4.0/tests/test_backends/test_inspection_fsutils.py +198 -0
  323. fastapi_fastkit-1.4.0/tests/test_backends/test_inspector.py +1046 -0
  324. fastapi_fastkit-1.4.0/tests/test_backends/test_inspector_checks.py +1103 -0
  325. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_interactive_config_builder.py +38 -0
  326. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_interactive_prompts.py +184 -0
  327. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_main.py +32 -5
  328. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_package_managers.py +146 -2
  329. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_preset_layout.py +127 -0
  330. fastapi_fastkit-1.4.0/tests/test_backends/test_project_builder_config_generator.py +1091 -0
  331. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_project_builder_dependency_collector.py +122 -1
  332. fastapi_fastkit-1.4.0/tests/test_backends/test_project_metadata.py +280 -0
  333. fastapi_fastkit-1.4.0/tests/test_backends/test_safety_regressions.py +382 -0
  334. fastapi_fastkit-1.4.0/tests/test_backends/test_scaffolder.py +239 -0
  335. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_transducer.py +42 -23
  336. fastapi_fastkit-1.4.0/tests/test_cli_operations/__init__.py +0 -0
  337. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_cli_operations/test_cli.py +35 -31
  338. fastapi_fastkit-1.4.0/tests/test_cli_operations/test_cli_config_options.py +766 -0
  339. fastapi_fastkit-1.4.0/tests/test_cli_operations/test_cli_error_paths.py +567 -0
  340. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_cli_operations/test_cli_interactive_integration.py +38 -1
  341. fastapi_fastkit-1.4.0/tests/test_config_file.py +296 -0
  342. fastapi_fastkit-1.4.0/tests/test_rich/__init__.py +0 -0
  343. fastapi_fastkit-1.4.0/tests/test_templates/__init__.py +0 -0
  344. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_templates/template_configs.yaml +2 -2
  345. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_templates/test_all_templates.py +151 -37
  346. fastapi_fastkit-1.3.0/src/fastapi_fastkit/__init__.py +0 -1
  347. fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/inspector.py +0 -1416
  348. fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/main.py +0 -953
  349. fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/package_managers/base.py +0 -150
  350. fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/project_builder/config_generator.py +0 -601
  351. fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +0 -210
  352. fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/project_builder/preset_layout.py +0 -203
  353. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +0 -37
  354. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.py-tpl +0 -25
  355. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +0 -37
  356. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.py-tpl +0 -27
  357. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +0 -35
  358. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl +0 -22
  359. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +0 -37
  360. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.py-tpl +0 -22
  361. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/requirements.txt-tpl +0 -11
  362. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +0 -11
  363. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.py-tpl +0 -22
  364. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +0 -41
  365. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.py-tpl +0 -51
  366. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +0 -42
  367. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.py-tpl +0 -25
  368. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +0 -7
  369. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.py-tpl +0 -17
  370. fastapi_fastkit-1.3.0/tests/test_backends/test_inspector.py +0 -2050
  371. fastapi_fastkit-1.3.0/tests/test_backends/test_project_builder_config_generator.py +0 -438
  372. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/LICENSE +0 -0
  373. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/__main__.py +0 -0
  374. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/__init__.py +0 -0
  375. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/interactive/validators.py +0 -0
  376. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
  377. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/core/__init__.py +0 -0
  378. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/core/exceptions.py +0 -0
  379. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
  380. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
  381. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
  382. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
  383. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
  384. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
  385. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/run-server.sh-tpl +0 -0
  386. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
  387. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
  388. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
  389. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/__init__.py-tpl +0 -0
  390. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/__init__.py-tpl +0 -0
  391. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/__init__.py-tpl +0 -0
  392. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/__init__.py-tpl +0 -0
  393. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/__init__.py-tpl +0 -0
  394. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/mock_items.json-tpl +0 -0
  395. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/__init__.py-tpl +0 -0
  396. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
  397. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/test_items.py-tpl +0 -0
  398. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/format.sh-tpl +0 -0
  399. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/lint.sh-tpl +0 -0
  400. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/run-server.sh-tpl +0 -0
  401. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/test.sh-tpl +0 -0
  402. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/src/__init__.py-tpl +0 -0
  403. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/__init__.py-tpl +0 -0
  404. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/alembic/README-tpl +0 -0
  405. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/alembic/script.py.mako-tpl +0 -0
  406. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api}/__init__.py-tpl +0 -0
  407. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/src/app/api/health.py-tpl +0 -0
  408. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/core/__init__.py-tpl +0 -0
  409. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/db}/__init__.py-tpl +0 -0
  410. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains}/__init__.py-tpl +0 -0
  411. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth}/__init__.py-tpl +0 -0
  412. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users}/__init__.py-tpl +0 -0
  413. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests}/__init__.py-tpl +0 -0
  414. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
  415. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
  416. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
  417. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/scripts/format.sh-tpl +0 -0
  418. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
  419. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/run-server.sh-tpl +0 -0
  420. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/scripts/test.sh-tpl +0 -0
  421. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
  422. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src}/__init__.py-tpl +0 -0
  423. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api}/__init__.py-tpl +0 -0
  424. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes}/__init__.py-tpl +0 -0
  425. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core}/__init__.py-tpl +0 -0
  426. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud}/__init__.py-tpl +0 -0
  427. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper}/__init__.py-tpl +0 -0
  428. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/exceptions.py-tpl +0 -0
  429. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/mocks/__init__.py-tpl +0 -0
  430. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/mock_items.json-tpl +0 -0
  431. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/schemas/__init__.py-tpl +0 -0
  432. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils}/__init__.py-tpl +0 -0
  433. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/documents.py-tpl +0 -0
  434. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests}/__init__.py-tpl +0 -0
  435. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/test_items.py-tpl +0 -0
  436. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
  437. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
  438. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
  439. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/scripts/format.sh-tpl +0 -0
  440. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
  441. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
  442. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/scripts/test.sh-tpl +0 -0
  443. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
  444. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src}/__init__.py-tpl +0 -0
  445. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api}/__init__.py-tpl +0 -0
  446. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes}/__init__.py-tpl +0 -0
  447. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core}/__init__.py-tpl +0 -0
  448. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud}/__init__.py-tpl +0 -0
  449. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks}/__init__.py-tpl +0 -0
  450. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_items.json-tpl +0 -0
  451. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas}/__init__.py-tpl +0 -0
  452. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests}/__init__.py-tpl +0 -0
  453. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
  454. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
  455. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/scripts/format.sh-tpl +0 -0
  456. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
  457. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
  458. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/scripts/test.sh-tpl +0 -0
  459. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
  460. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src}/__init__.py-tpl +0 -0
  461. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src}/api/__init__.py-tpl +0 -0
  462. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes}/__init__.py-tpl +0 -0
  463. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core}/__init__.py-tpl +0 -0
  464. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud}/__init__.py-tpl +0 -0
  465. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks}/__init__.py-tpl +0 -0
  466. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/mock_items.json-tpl +0 -0
  467. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas}/__init__.py-tpl +0 -0
  468. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests}/__init__.py-tpl +0 -0
  469. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.env-tpl +0 -0
  470. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.gitignore-tpl +0 -0
  471. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl +0 -0
  472. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter}/scripts/format.sh-tpl +0 -0
  473. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src}/__init__.py-tpl +0 -0
  474. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app}/__init__.py-tpl +0 -0
  475. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app}/api/__init__.py-tpl +0 -0
  476. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core}/__init__.py-tpl +0 -0
  477. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db}/__init__.py-tpl +0 -0
  478. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains}/__init__.py-tpl +0 -0
  479. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/__init__.py-tpl +0 -0
  480. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/models.py-tpl +0 -0
  481. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/schemas.py-tpl +0 -0
  482. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests}/__init__.py-tpl +0 -0
  483. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_health.py-tpl +0 -0
  484. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_items.py-tpl +0 -0
  485. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
  486. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
  487. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +0 -0
  488. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
  489. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src}/__init__.py-tpl +0 -0
  490. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core}/__init__.py-tpl +0 -0
  491. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/api → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests}/__init__.py-tpl +0 -0
  492. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/api/routes → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src}/__init__.py-tpl +0 -0
  493. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/crud → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app}/__init__.py-tpl +0 -0
  494. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/schemas → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api}/__init__.py-tpl +0 -0
  495. fastapi_fastkit-1.3.0/src/fastapi_fastkit/py.typed → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/core/__init__.py-tpl +0 -0
  496. fastapi_fastkit-1.3.0/src/fastapi_fastkit/utils/__init__.py → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/__init__.py-tpl +0 -0
  497. fastapi_fastkit-1.3.0/tests/__init__.py → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/__init__.py-tpl +0 -0
  498. fastapi_fastkit-1.3.0/tests/test_backends/__init__.py → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/schemas/__init__.py-tpl +0 -0
  499. fastapi_fastkit-1.3.0/tests/test_cli_operations/__init__.py → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/__init__.py-tpl +0 -0
  500. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +0 -0
  501. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
  502. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
  503. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
  504. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
  505. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +0 -0
  506. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
  507. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
  508. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/__init__.py-tpl +0 -0
  509. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
  510. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
  511. {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp → fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server}/__init__.py-tpl +0 -0
  512. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
  513. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
  514. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +1 -1
  515. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +0 -0
  516. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
  517. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
  518. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
  519. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
  520. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
  521. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/pre-start.sh-tpl +0 -0
  522. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/run-server.sh-tpl +0 -0
  523. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
  524. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
  525. /fastapi_fastkit-1.3.0/tests/test_rich/__init__.py → /fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/__init__.py-tpl +0 -0
  526. /fastapi_fastkit-1.3.0/tests/test_templates/__init__.py → /fastapi_fastkit-1.4.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/__init__.py-tpl +0 -0
  527. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/deps.py-tpl +0 -0
  528. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/backend_pre_start.py-tpl +0 -0
  529. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/init_data.py-tpl +0 -0
  530. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/tests_pre_start.py-tpl +0 -0
  531. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
  532. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl +0 -0
  533. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.cfg-tpl +0 -0
  534. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/test_main.py-tpl +0 -0
  535. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
  536. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
  537. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/src/fastapi_fastkit/utils/logging.py +0 -0
  538. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_configure.py +0 -0
  539. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_console_sizing.py +0 -0
  540. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_interactive_selectors.py +0 -0
  541. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_backends/test_interactive_validators.py +0 -0
  542. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_cli_operations/test_cli_extended.py +0 -0
  543. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_core.py +0 -0
  544. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_rich/test_rich.py +0 -0
  545. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_templates/test_config_based_templates.py +0 -0
  546. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_templates/test_domain_starter_e2e.py +0 -0
  547. {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: FastAPI-fastkit
3
- Version: 1.3.0
3
+ Version: 1.4.0
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
@@ -11,6 +11,7 @@ Project-URL: Changelog, https://bnbong.github.io/FastAPI-fastkit/changelog/
11
11
  Requires-Python: >=3.12
12
12
  Requires-Dist: click>=8.1.7
13
13
  Requires-Dist: rich>=13.9.2
14
+ Requires-Dist: jinja2>=3.1
14
15
  Provides-Extra: dev
15
16
  Requires-Dist: pytest>=9.0.3; extra == "dev"
16
17
  Requires-Dist: pytest-cov>=6.2.1; extra == "dev"
@@ -19,10 +20,11 @@ Requires-Dist: pre-commit>=4.0.1; extra == "dev"
19
20
  Requires-Dist: mypy>=1.12.0; extra == "dev"
20
21
  Requires-Dist: isort>=5.13.2; extra == "dev"
21
22
  Requires-Dist: pygments>=2.20.0; extra == "dev"
23
+ Requires-Dist: types-pyyaml>=6.0.12.20260408; extra == "dev"
22
24
  Description-Content-Type: text/markdown
23
25
 
24
26
  <p align="center">
25
- <img align="top" width="70%" src="https://bnbong.github.io/projects/img/fastkit_general_logo.png" alt="FastAPI-fastkit"/>
27
+ <img align="top" width="70%" src=".github/fastkit_general_logo.png" alt="FastAPI-fastkit"/>
26
28
  </p>
27
29
  <p align="center">
28
30
  <em><b>FastAPI-fastkit</b>: Fast, easy-to-use starter kit for new users of Python and FastAPI</em>
@@ -57,6 +59,8 @@ This project was inspired by the `SpringBoot initializer` & Python Django's `dja
57
59
  - **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
58
60
  - **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
59
61
  - **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
62
+ - **🧾 Reproducible project configs** : Save an interactive session to a `.json` / `.toml` / `.yaml` file and replay it with `fastkit init --config`
63
+ - **🏷️ Self-describing projects** : Every generated project records its template, preset, package manager, entrypoint and selected features in a `[tool.fastapi-fastkit]` block that `runserver` and `addroute` read back
60
64
 
61
65
  ## Installation
62
66
 
@@ -82,6 +86,12 @@ fastkit init [OPTIONS]
82
86
  - Key options:
83
87
  - `--project-name`, `--author`, `--author-email`, `--description`
84
88
  - `--package-manager` [pip|uv|pdm|poetry]
89
+ - `--config <path>`: create the project from a saved config file (`.json` / `.toml`, and `.yaml` when PyYAML is installed) with no prompts
90
+ - `--save-config <path>`: with `--interactive`, record the answers for later reuse
91
+ - `--dry-run`: print the files and packages that would be created, write nothing
92
+ - `--no-venv`: skip virtual environment creation (implies `--no-install`)
93
+ - `--no-install`: skip dependency installation
94
+ - `--yes` / `-y`: skip the "Overwrite these files?" confirmation when deploying in place
85
95
  - Stack selection: `minimal` | `standard` | `full` (interactive)
86
96
 
87
97
  ### Create a project with interactive mode
@@ -98,6 +108,9 @@ fastkit init --interactive
98
108
  - **Monitoring**: Loguru, OpenTelemetry, Prometheus
99
109
  - **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
100
110
  - **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
111
+ - **Logging**: structured JSON logging with a request-id middleware
112
+ - **Migrations**: Alembic (async env, baseline revision)
113
+ - **Tooling**: ruff, pre-commit, GitHub Actions, devcontainer, Makefile (multi-select)
101
114
  - **Deployment**: Docker, docker-compose with auto-generated configs
102
115
  - **Package manager**: pip, uv, pdm, poetry
103
116
  - **Custom packages**: Add your own dependencies
@@ -106,6 +119,9 @@ fastkit init --interactive
106
119
  - Database and authentication configuration files at preset-specific paths
107
120
  - Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
108
121
  - Test configuration (pytest with coverage)
122
+ - `/health` and `/ready` endpoints on every generated project
123
+ - Real working code — not just installed packages — for background tasks, caching, WebSocket, pagination, OpenTelemetry, OAuth2 and session-based auth
124
+ - `--dry-run` previews the exact file tree a run would create, including logging/migrations/tooling artifacts
109
125
 
110
126
  ### Create a project from a template
111
127
  ```console
@@ -115,8 +131,16 @@ fastkit startdemo [TEMPLATE] [OPTIONS]
115
131
  - Key options:
116
132
  - `--project-name`, `--author`, `--author-email`, `--description`
117
133
  - `--package-manager` [pip|uv|pdm|poetry]
134
+ - `--dry-run`, `--no-venv`, `--no-install`, `--yes`/`-y` — same meaning as on `init`
135
+ - Refuses to run if the target project directory already exists (`--dry-run` excepted)
118
136
  - Tip: List available templates with `fastkit list-templates`
119
137
 
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
+
120
144
  ### Add a new route
121
145
  ```console
122
146
  fastkit addroute <project_name> <route_name>
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img align="top" width="70%" src="https://bnbong.github.io/projects/img/fastkit_general_logo.png" alt="FastAPI-fastkit"/>
2
+ <img align="top" width="70%" src=".github/fastkit_general_logo.png" alt="FastAPI-fastkit"/>
3
3
  </p>
4
4
  <p align="center">
5
5
  <em><b>FastAPI-fastkit</b>: Fast, easy-to-use starter kit for new users of Python and FastAPI</em>
@@ -34,6 +34,8 @@ This project was inspired by the `SpringBoot initializer` & Python Django's `dja
34
34
  - **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
35
35
  - **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
36
36
  - **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
37
+ - **🧾 Reproducible project configs** : Save an interactive session to a `.json` / `.toml` / `.yaml` file and replay it with `fastkit init --config`
38
+ - **🏷️ Self-describing projects** : Every generated project records its template, preset, package manager, entrypoint and selected features in a `[tool.fastapi-fastkit]` block that `runserver` and `addroute` read back
37
39
 
38
40
  ## Installation
39
41
 
@@ -59,6 +61,12 @@ fastkit init [OPTIONS]
59
61
  - Key options:
60
62
  - `--project-name`, `--author`, `--author-email`, `--description`
61
63
  - `--package-manager` [pip|uv|pdm|poetry]
64
+ - `--config <path>`: create the project from a saved config file (`.json` / `.toml`, and `.yaml` when PyYAML is installed) with no prompts
65
+ - `--save-config <path>`: with `--interactive`, record the answers for later reuse
66
+ - `--dry-run`: print the files and packages that would be created, write nothing
67
+ - `--no-venv`: skip virtual environment creation (implies `--no-install`)
68
+ - `--no-install`: skip dependency installation
69
+ - `--yes` / `-y`: skip the "Overwrite these files?" confirmation when deploying in place
62
70
  - Stack selection: `minimal` | `standard` | `full` (interactive)
63
71
 
64
72
  ### Create a project with interactive mode
@@ -75,6 +83,9 @@ fastkit init --interactive
75
83
  - **Monitoring**: Loguru, OpenTelemetry, Prometheus
76
84
  - **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
77
85
  - **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
86
+ - **Logging**: structured JSON logging with a request-id middleware
87
+ - **Migrations**: Alembic (async env, baseline revision)
88
+ - **Tooling**: ruff, pre-commit, GitHub Actions, devcontainer, Makefile (multi-select)
78
89
  - **Deployment**: Docker, docker-compose with auto-generated configs
79
90
  - **Package manager**: pip, uv, pdm, poetry
80
91
  - **Custom packages**: Add your own dependencies
@@ -83,6 +94,9 @@ fastkit init --interactive
83
94
  - Database and authentication configuration files at preset-specific paths
84
95
  - Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
85
96
  - Test configuration (pytest with coverage)
97
+ - `/health` and `/ready` endpoints on every generated project
98
+ - Real working code — not just installed packages — for background tasks, caching, WebSocket, pagination, OpenTelemetry, OAuth2 and session-based auth
99
+ - `--dry-run` previews the exact file tree a run would create, including logging/migrations/tooling artifacts
86
100
 
87
101
  ### Create a project from a template
88
102
  ```console
@@ -92,8 +106,16 @@ fastkit startdemo [TEMPLATE] [OPTIONS]
92
106
  - Key options:
93
107
  - `--project-name`, `--author`, `--author-email`, `--description`
94
108
  - `--package-manager` [pip|uv|pdm|poetry]
109
+ - `--dry-run`, `--no-venv`, `--no-install`, `--yes`/`-y` — same meaning as on `init`
110
+ - Refuses to run if the target project directory already exists (`--dry-run` excepted)
95
111
  - Tip: List available templates with `fastkit list-templates`
96
112
 
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
+
97
119
  ### Add a new route
98
120
  ```console
99
121
  fastkit addroute <project_name> <route_name>
@@ -8,10 +8,11 @@ authors = [
8
8
  dependencies = [
9
9
  "click>=8.1.7",
10
10
  "rich>=13.9.2",
11
+ "jinja2>=3.1",
11
12
  ]
12
13
  requires-python = ">=3.12"
13
14
  readme = "README.md"
14
- version = "1.3.0"
15
+ version = "1.4.0"
15
16
 
16
17
  [project.license]
17
18
  text = "MIT"
@@ -31,6 +32,7 @@ dev = [
31
32
  "mypy>=1.12.0",
32
33
  "isort>=5.13.2",
33
34
  "pygments>=2.20.0",
35
+ "types-pyyaml>=6.0.12.20260408",
34
36
  ]
35
37
 
36
38
  [project.scripts]
@@ -52,11 +54,21 @@ addopts = [
52
54
  "--strict-config",
53
55
  "--disable-warnings",
54
56
  ]
57
+ markers = [
58
+ "extended: slower end-to-end coverage, excluded from the fast feedback loop",
59
+ "slow: tests that shell out to real package managers or network services",
60
+ ]
61
+
62
+ [tool.black]
63
+ target-version = [
64
+ "py312",
65
+ ]
55
66
 
56
67
  [tool.isort]
57
68
  profile = "black"
58
69
 
59
70
  [tool.mypy]
71
+ python_version = "3.12"
60
72
  strict = true
61
73
 
62
74
  [[tool.mypy.overrides]]
@@ -0,0 +1 @@
1
+ __version__ = 'v1.4.0'
@@ -0,0 +1,26 @@
1
+ # --------------------------------------------------------------------------
2
+ # Template inspection package.
3
+ #
4
+ # ``TemplateInspector`` generates a throwaway project from a template and runs
5
+ # the checks defined in the sibling modules against it:
6
+ #
7
+ # - ``checks`` : structure, extensions, dependencies, implementation, tests
8
+ # - ``consistency`` : Python-version pins and dependency drift
9
+ # - ``lint`` : compileall (required) and mypy (opt-in)
10
+ # - ``smoke`` : boots the generated app and probes /docs and /health
11
+ # - ``strategies`` : how the template's own test suite is executed
12
+ # - ``docker`` : Docker Compose orchestration
13
+ # - ``freshness`` : PyPI version-lag warnings
14
+ # - ``report`` : report construction and printing
15
+ #
16
+ # @author bnbong
17
+ # --------------------------------------------------------------------------
18
+ from .context import InspectionContext, InspectionOptions
19
+ from .core import TemplateInspector, inspect_fastapi_template
20
+
21
+ __all__ = [
22
+ "InspectionContext",
23
+ "InspectionOptions",
24
+ "TemplateInspector",
25
+ "inspect_fastapi_template",
26
+ ]
@@ -0,0 +1,349 @@
1
+ # --------------------------------------------------------------------------
2
+ # Static template checks: structure, file extensions, declared dependencies,
3
+ # FastAPI implementation and the mandatory test suite.
4
+ #
5
+ # Every function takes an ``InspectionContext`` and returns ``True`` when the
6
+ # check passes, appending a descriptive message to ``ctx.errors`` otherwise.
7
+ #
8
+ # @author bnbong
9
+ # --------------------------------------------------------------------------
10
+ import ast
11
+ import os
12
+ import tomllib
13
+ from pathlib import Path
14
+ from typing import List, Optional, Set, Tuple
15
+
16
+ from fastapi_fastkit.backend.main import (
17
+ _parse_setup_dependencies,
18
+ find_template_core_modules,
19
+ )
20
+ from fastapi_fastkit.backend.package_managers.poetry_manager import (
21
+ _parse_pip_requirement,
22
+ )
23
+ from fastapi_fastkit.utils.logging import debug_log
24
+
25
+ from .context import InspectionContext
26
+
27
+ ALWAYS_REQUIRED_PATHS = ["tests", "README.md-tpl"]
28
+ METADATA_CANDIDATES = ["pyproject.toml-tpl", "setup.py-tpl"]
29
+
30
+
31
+ def extract_pyproject_dependency_names(
32
+ pyproject_path: Path,
33
+ ) -> Tuple[Set[str], Optional[str]]:
34
+ """Parse a pyproject file and return (lowercased dep names, error).
35
+
36
+ ``error`` is ``None`` on success. Returns an empty set with a descriptive
37
+ error string when the file is unreadable or malformed.
38
+ """
39
+ try:
40
+ with open(pyproject_path, "rb") as f:
41
+ data = tomllib.load(f)
42
+ except (OSError, tomllib.TOMLDecodeError, UnicodeDecodeError) as e:
43
+ return set(), f"Invalid pyproject.toml-tpl: {e}"
44
+
45
+ project = data.get("project", {})
46
+ raw_deps = project.get("dependencies", []) or []
47
+ if not isinstance(raw_deps, list):
48
+ return set(), "pyproject.toml-tpl [project].dependencies must be a list"
49
+
50
+ names: Set[str] = set()
51
+ for dep in raw_deps:
52
+ if not isinstance(dep, str) or not dep.strip():
53
+ continue
54
+ name = _parse_pip_requirement(dep)[0]
55
+ if name:
56
+ names.add(name.lower())
57
+ return names, None
58
+
59
+
60
+ def parse_requirements_names(requirements_path: Path) -> Set[str]:
61
+ """Return the lowercased package names declared in a requirements file."""
62
+ with open(requirements_path, encoding="utf-8") as f:
63
+ lines = f.read().splitlines()
64
+ return {
65
+ _parse_pip_requirement(line)[0].lower()
66
+ for line in lines
67
+ if line.strip() and not line.strip().startswith("#")
68
+ }
69
+
70
+
71
+ def check_file_structure(ctx: InspectionContext) -> bool:
72
+ """Check the required file and directory structure.
73
+
74
+ Modern templates may ship ``pyproject.toml-tpl`` as the primary metadata
75
+ file; ``setup.py-tpl`` remains accepted for backward compatibility.
76
+ A template must provide at least one of the two. ``requirements.txt-tpl``
77
+ is no longer strictly required when ``pyproject.toml-tpl`` declares
78
+ ``[project].dependencies``.
79
+ """
80
+ missing_required = [
81
+ path
82
+ for path in ALWAYS_REQUIRED_PATHS
83
+ if not (ctx.template_path / path).exists()
84
+ ]
85
+ has_metadata = any(
86
+ (ctx.template_path / name).exists() for name in METADATA_CANDIDATES
87
+ )
88
+
89
+ for path in missing_required:
90
+ ctx.add_error(f"Missing required path: {path}")
91
+ if not has_metadata:
92
+ ctx.add_error(
93
+ "Missing metadata file: expected pyproject.toml-tpl "
94
+ "(preferred) or setup.py-tpl"
95
+ )
96
+
97
+ if missing_required or not has_metadata:
98
+ return False
99
+
100
+ debug_log("File structure check passed", "info")
101
+ return True
102
+
103
+
104
+ def check_file_extensions(ctx: InspectionContext) -> bool:
105
+ """Check all Python files in the template carry the .py-tpl extension."""
106
+ for path in ctx.template_path.rglob("*"):
107
+ if path.is_file() and path.suffix == ".py":
108
+ ctx.add_error(f"Found .py file instead of .py-tpl: {path}")
109
+ return False
110
+
111
+ debug_log("File extension check passed", "info")
112
+ return True
113
+
114
+
115
+ def check_dependencies(ctx: InspectionContext) -> bool:
116
+ """Check that FastAPI is declared in at least one supported source.
117
+
118
+ All three metadata sources are consulted independently:
119
+
120
+ - ``requirements.txt-tpl``
121
+ - ``pyproject.toml-tpl`` ``[project].dependencies``
122
+ - ``setup.py-tpl`` ``install_requires``
123
+
124
+ The check passes if *any* source declares ``fastapi``, so a template
125
+ with a stale ``requirements.txt-tpl`` still passes when
126
+ ``pyproject.toml-tpl`` is authoritative.
127
+ """
128
+ req_path = ctx.template_path / "requirements.txt-tpl"
129
+ pyproject_path = ctx.template_path / "pyproject.toml-tpl"
130
+ setup_path = ctx.template_path / "setup.py-tpl"
131
+
132
+ sources_checked: List[str] = []
133
+ fastapi_declared = False
134
+
135
+ if req_path.exists():
136
+ sources_checked.append("requirements.txt-tpl")
137
+ try:
138
+ package_names = parse_requirements_names(req_path)
139
+ except (OSError, UnicodeDecodeError) as e:
140
+ ctx.add_error(f"Error reading requirements.txt-tpl: {e}")
141
+ return False
142
+ debug_log(
143
+ f"requirements.txt-tpl dependencies: {sorted(package_names)}", "debug"
144
+ )
145
+ fastapi_declared = fastapi_declared or "fastapi" in package_names
146
+
147
+ if pyproject_path.exists():
148
+ sources_checked.append("pyproject.toml-tpl")
149
+ package_names, parse_error = extract_pyproject_dependency_names(pyproject_path)
150
+ if parse_error is not None:
151
+ ctx.add_error(parse_error)
152
+ return False
153
+ debug_log(f"pyproject.toml-tpl dependencies: {sorted(package_names)}", "debug")
154
+ fastapi_declared = fastapi_declared or "fastapi" in package_names
155
+
156
+ if setup_path.exists():
157
+ sources_checked.append("setup.py-tpl")
158
+ try:
159
+ with open(setup_path, encoding="utf-8") as f:
160
+ content = f.read()
161
+ except (OSError, UnicodeDecodeError) as e:
162
+ ctx.add_error(f"Error reading setup.py-tpl: {e}")
163
+ return False
164
+ package_names = {
165
+ _parse_pip_requirement(dep)[0].lower()
166
+ for dep in _parse_setup_dependencies(content)
167
+ if dep
168
+ }
169
+ debug_log(f"setup.py-tpl dependencies: {sorted(package_names)}", "debug")
170
+ fastapi_declared = fastapi_declared or "fastapi" in package_names
171
+
172
+ if not sources_checked:
173
+ ctx.add_error(
174
+ "No dependency source found: expected one of requirements.txt-tpl, "
175
+ "pyproject.toml-tpl, or setup.py-tpl"
176
+ )
177
+ return False
178
+
179
+ if not fastapi_declared:
180
+ ctx.add_error(
181
+ "FastAPI dependency not found in any source ("
182
+ + ", ".join(sources_checked)
183
+ + ")"
184
+ )
185
+ return False
186
+
187
+ debug_log(
188
+ f"Dependencies check passed (sources: {', '.join(sources_checked)})", "info"
189
+ )
190
+ return True
191
+
192
+
193
+ def _module_defines_fastapi_app(source: str) -> bool:
194
+ """Return True when ``source`` assigns a ``FastAPI(...)`` instance."""
195
+ try:
196
+ tree = ast.parse(source)
197
+ except SyntaxError:
198
+ return False
199
+
200
+ for node in ast.walk(tree):
201
+ if not isinstance(node, (ast.Assign, ast.AnnAssign)):
202
+ continue
203
+ value = node.value
204
+ if not isinstance(value, ast.Call):
205
+ continue
206
+ func = value.func
207
+ name = ""
208
+ if isinstance(func, ast.Name):
209
+ name = func.id
210
+ elif isinstance(func, ast.Attribute):
211
+ name = func.attr
212
+ if name == "FastAPI":
213
+ return True
214
+ return False
215
+
216
+
217
+ def check_fastapi_implementation(ctx: InspectionContext) -> bool:
218
+ """Check the generated project really instantiates a FastAPI application.
219
+
220
+ This is a static (AST) guard so a broken main module is reported before
221
+ the far more expensive smoke test boots a server.
222
+ """
223
+ try:
224
+ core_modules = find_template_core_modules(ctx.temp_dir)
225
+ debug_log(f"Found core modules: {core_modules}", "debug")
226
+
227
+ if not core_modules["main"]:
228
+ ctx.add_error("main.py not found in template")
229
+ return False
230
+
231
+ with open(core_modules["main"], encoding="utf-8") as f:
232
+ content = f.read()
233
+ except (OSError, UnicodeDecodeError) as e:
234
+ ctx.add_error(f"Error checking FastAPI implementation: {e}")
235
+ return False
236
+
237
+ if not _module_defines_fastapi_app(content):
238
+ ctx.add_error("FastAPI app creation not found in main.py")
239
+ debug_log(f"main.py content preview: {content[:200]}...", "debug")
240
+ return False
241
+
242
+ debug_log("FastAPI implementation check passed", "info")
243
+ return True
244
+
245
+
246
+ def check_tests_present(ctx: InspectionContext) -> bool:
247
+ """A template must ship at least one test module.
248
+
249
+ Previously a missing ``tests/`` directory only produced a warning; an
250
+ untested template is now a hard failure.
251
+ """
252
+ tests_dir = ctx.template_path / "tests"
253
+ if not tests_dir.is_dir():
254
+ ctx.add_error("Missing required path: tests (templates must ship tests)")
255
+ return False
256
+
257
+ test_files = [
258
+ path
259
+ for path in tests_dir.rglob("*")
260
+ if path.is_file()
261
+ and path.name.startswith("test_")
262
+ and path.name.endswith((".py-tpl", ".py"))
263
+ ]
264
+ if not test_files:
265
+ ctx.add_error(
266
+ "No test module found under tests/: at least one test_*.py-tpl file "
267
+ "is required"
268
+ )
269
+ return False
270
+
271
+ debug_log(f"Test suite check passed ({len(test_files)} test files)", "info")
272
+ return True
273
+
274
+
275
+ def check_no_junk_files(ctx: InspectionContext) -> bool:
276
+ """Reject OS/editor artifacts and build leftovers committed to a template."""
277
+ junk_names = {".DS_Store", "Thumbs.db", "desktop.ini", ".AppleDouble"}
278
+ junk_dirs = {"__pycache__", ".pytest_cache", ".mypy_cache", ".venv"}
279
+ found: List[str] = []
280
+
281
+ for path in ctx.template_path.rglob("*"):
282
+ rel = path.relative_to(ctx.template_path)
283
+ if path.is_dir():
284
+ if path.name in junk_dirs:
285
+ found.append(str(rel))
286
+ elif path.name in junk_names or path.suffix in {".pyc", ".pyo"}:
287
+ found.append(str(rel))
288
+
289
+ if found:
290
+ for item in sorted(found):
291
+ ctx.add_error(f"Junk file committed to template: {item}")
292
+ return False
293
+
294
+ debug_log("Junk file check passed", "info")
295
+ return True
296
+
297
+
298
+ def check_no_placeholder_residue(ctx: InspectionContext) -> bool:
299
+ """Every ``<placeholder>`` must be substituted during project generation.
300
+
301
+ The inspection generates a real project from the template (copy +
302
+ metadata injection), so any surviving placeholder token means the
303
+ template declares a variable the generator does not know how to fill.
304
+ """
305
+ placeholders = [
306
+ "<project_name>",
307
+ "<author>",
308
+ "<author_email>",
309
+ "<description>",
310
+ ]
311
+ text_suffixes = {
312
+ ".py",
313
+ ".toml",
314
+ ".cfg",
315
+ ".txt",
316
+ ".md",
317
+ ".yml",
318
+ ".yaml",
319
+ ".json",
320
+ ".sh",
321
+ ".env",
322
+ ".ini",
323
+ }
324
+ residue: List[str] = []
325
+
326
+ for root, dirs, files in os.walk(ctx.temp_dir):
327
+ dirs[:] = [d for d in dirs if d not in {".venv", "venv", "__pycache__", ".git"}]
328
+ for file_name in files:
329
+ file_path = os.path.join(root, file_name)
330
+ suffix = Path(file_name).suffix
331
+ if suffix and suffix not in text_suffixes:
332
+ continue
333
+ try:
334
+ with open(file_path, encoding="utf-8") as f:
335
+ content = f.read()
336
+ except (OSError, UnicodeDecodeError):
337
+ continue
338
+ hits = [token for token in placeholders if token in content]
339
+ if hits:
340
+ rel = os.path.relpath(file_path, ctx.temp_dir)
341
+ residue.append(f"{rel}: {', '.join(hits)}")
342
+
343
+ if residue:
344
+ for item in sorted(residue):
345
+ ctx.add_error(f"Unsubstituted placeholder in generated project: {item}")
346
+ return False
347
+
348
+ debug_log("Placeholder substitution check passed", "info")
349
+ return True