FastAPI-fastkit 1.2.0__tar.gz → 1.3.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 (318) hide show
  1. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/PKG-INFO +33 -3
  2. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/README.md +29 -0
  3. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/pyproject.toml +7 -3
  4. fastapi_fastkit-1.3.0/src/fastapi_fastkit/__init__.py +1 -0
  5. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/inspector.py +153 -32
  6. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/interactive/__init__.py +2 -0
  7. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/interactive/config_builder.py +21 -2
  8. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/interactive/prompts.py +52 -1
  9. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/interactive/selectors.py +10 -0
  10. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/main.py +114 -6
  11. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/package_managers/factory.py +1 -1
  12. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +3 -3
  13. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +71 -10
  14. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +3 -3
  15. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/project_builder/__init__.py +3 -0
  16. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/project_builder/config_generator.py +17 -10
  17. fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/project_builder/preset_layout.py +203 -0
  18. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/transducer.py +0 -1
  19. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/cli.py +109 -44
  20. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/core/settings.py +17 -1
  21. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/README.md +139 -0
  22. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +4 -1
  23. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +4 -1
  24. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +4 -1
  25. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +4 -1
  26. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.env-tpl +2 -0
  27. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.gitignore-tpl +31 -0
  28. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl +128 -0
  29. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/pyproject.toml-tpl +70 -0
  30. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/requirements.txt-tpl +11 -0
  31. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/lint.sh-tpl +6 -0
  32. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/run-server.sh-tpl +8 -0
  33. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/test.sh-tpl +6 -0
  34. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/health.py-tpl +11 -0
  35. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/router.py-tpl +12 -0
  36. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core/config.py-tpl +49 -0
  37. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db/memory.py-tpl +48 -0
  38. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/__init__.py-tpl +9 -0
  39. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/models.py-tpl +17 -0
  40. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/repository.py-tpl +48 -0
  41. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/router.py-tpl +59 -0
  42. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/schemas.py-tpl +23 -0
  43. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/service.py-tpl +52 -0
  44. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/main.py-tpl +25 -0
  45. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/conftest.py-tpl +24 -0
  46. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_health.py-tpl +11 -0
  47. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_items.py-tpl +77 -0
  48. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +2 -2
  49. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +4 -1
  50. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +4 -1
  51. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +4 -1
  52. fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +5 -0
  53. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/pyproject.toml-tpl +4 -1
  54. fastapi_fastkit-1.3.0/src/fastapi_fastkit/py.typed +0 -0
  55. fastapi_fastkit-1.3.0/src/fastapi_fastkit/utils/__init__.py +0 -0
  56. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/utils/main.py +73 -6
  57. fastapi_fastkit-1.3.0/tests/__init__.py +0 -0
  58. fastapi_fastkit-1.3.0/tests/test_backends/__init__.py +0 -0
  59. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_inspector.py +261 -15
  60. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_interactive_config_builder.py +45 -6
  61. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_interactive_prompts.py +88 -3
  62. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_interactive_selectors.py +90 -3
  63. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_interactive_validators.py +0 -1
  64. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_main.py +249 -12
  65. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_package_managers.py +80 -0
  66. fastapi_fastkit-1.3.0/tests/test_backends/test_preset_layout.py +224 -0
  67. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_project_builder_config_generator.py +67 -1
  68. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_project_builder_dependency_collector.py +0 -1
  69. fastapi_fastkit-1.3.0/tests/test_cli_operations/__init__.py +0 -0
  70. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_cli_operations/test_cli.py +23 -3
  71. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_cli_operations/test_cli_extended.py +107 -8
  72. fastapi_fastkit-1.3.0/tests/test_cli_operations/test_cli_interactive_integration.py +639 -0
  73. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_core.py +10 -0
  74. fastapi_fastkit-1.3.0/tests/test_rich/__init__.py +0 -0
  75. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_rich/test_rich.py +3 -6
  76. fastapi_fastkit-1.3.0/tests/test_templates/__init__.py +0 -0
  77. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_templates/test_all_templates.py +71 -2
  78. fastapi_fastkit-1.3.0/tests/test_templates/test_domain_starter_e2e.py +293 -0
  79. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_utils.py +147 -7
  80. fastapi_fastkit-1.2.0/src/fastapi_fastkit/__init__.py +0 -1
  81. fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/README.md +0 -90
  82. fastapi_fastkit-1.2.0/tests/test_cli_operations/test_cli_interactive_integration.py +0 -212
  83. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/LICENSE +0 -0
  84. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/__main__.py +0 -0
  85. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/__init__.py +0 -0
  86. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/interactive/validators.py +0 -0
  87. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
  88. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/package_managers/base.py +0 -0
  89. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +0 -0
  90. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +0 -0
  91. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/core/__init__.py +0 -0
  92. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/core/exceptions.py +0 -0
  93. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
  94. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
  95. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
  96. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
  97. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +0 -0
  98. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +0 -0
  99. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
  100. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
  101. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/run-server.sh-tpl +0 -0
  102. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
  103. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
  104. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.py-tpl +0 -0
  105. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
  106. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/__init__.py-tpl +0 -0
  107. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +0 -0
  108. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/__init__.py-tpl +0 -0
  109. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +0 -0
  110. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/__init__.py-tpl +0 -0
  111. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/config.py-tpl +0 -0
  112. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/__init__.py-tpl +0 -0
  113. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/items.py-tpl +0 -0
  114. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +0 -0
  115. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/__init__.py-tpl +0 -0
  116. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/mock_items.json-tpl +0 -0
  117. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/__init__.py-tpl +0 -0
  118. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/items.py-tpl +0 -0
  119. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
  120. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -0
  121. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/test_items.py-tpl +0 -0
  122. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
  123. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
  124. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
  125. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +0 -0
  126. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/format.sh-tpl +0 -0
  127. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
  128. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/run-server.sh-tpl +0 -0
  129. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/test.sh-tpl +0 -0
  130. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
  131. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.py-tpl +0 -0
  132. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/__init__.py-tpl +0 -0
  133. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/__init__.py-tpl +0 -0
  134. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +0 -0
  135. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/__init__.py-tpl +0 -0
  136. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +0 -0
  137. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/__init__.py-tpl +0 -0
  138. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +0 -0
  139. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/__init__.py-tpl +0 -0
  140. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/items.py-tpl +0 -0
  141. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/__init__.py-tpl +0 -0
  142. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/exceptions.py-tpl +0 -0
  143. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +0 -0
  144. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +0 -0
  145. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/__init__.py-tpl +0 -0
  146. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/mock_items.json-tpl +0 -0
  147. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/__init__.py-tpl +0 -0
  148. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +0 -0
  149. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/items.py-tpl +0 -0
  150. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/__init__.py-tpl +0 -0
  151. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/documents.py-tpl +0 -0
  152. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/__init__.py-tpl +0 -0
  153. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -0
  154. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/test_items.py-tpl +0 -0
  155. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
  156. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
  157. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
  158. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +0 -0
  159. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/format.sh-tpl +0 -0
  160. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
  161. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
  162. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/test.sh-tpl +0 -0
  163. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
  164. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl +0 -0
  165. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl +0 -0
  166. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/__init__.py-tpl +0 -0
  167. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +0 -0
  168. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/__init__.py-tpl +0 -0
  169. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +0 -0
  170. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl +0 -0
  171. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/config.py-tpl +0 -0
  172. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl +0 -0
  173. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +0 -0
  174. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/main.py-tpl +0 -0
  175. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl +0 -0
  176. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_items.json-tpl +0 -0
  177. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl +0 -0
  178. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/items.py-tpl +0 -0
  179. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/__init__.py-tpl +0 -0
  180. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +0 -0
  181. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/test_items.py-tpl +0 -0
  182. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
  183. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
  184. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +0 -0
  185. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +0 -0
  186. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +0 -0
  187. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/format.sh-tpl +0 -0
  188. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
  189. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
  190. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/test.sh-tpl +0 -0
  191. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
  192. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.py-tpl +0 -0
  193. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/__init__.py-tpl +0 -0
  194. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/__init__.py-tpl +0 -0
  195. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +0 -0
  196. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/__init__.py-tpl +0 -0
  197. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +0 -0
  198. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/__init__.py-tpl +0 -0
  199. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/config.py-tpl +0 -0
  200. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/__init__.py-tpl +0 -0
  201. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +0 -0
  202. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/main.py-tpl +0 -0
  203. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/__init__.py-tpl +0 -0
  204. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/mock_items.json-tpl +0 -0
  205. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/__init__.py-tpl +0 -0
  206. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +0 -0
  207. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/__init__.py-tpl +0 -0
  208. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +0 -0
  209. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/test_items.py-tpl +0 -0
  210. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter}/scripts/format.sh-tpl +0 -0
  211. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter}/src/__init__.py-tpl +0 -0
  212. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app}/__init__.py-tpl +0 -0
  213. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api}/__init__.py-tpl +0 -0
  214. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core}/__init__.py-tpl +0 -0
  215. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db}/__init__.py-tpl +0 -0
  216. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains}/__init__.py-tpl +0 -0
  217. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests}/__init__.py-tpl +0 -0
  218. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
  219. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
  220. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +0 -0
  221. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
  222. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.py-tpl +0 -0
  223. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src}/__init__.py-tpl +0 -0
  224. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core}/__init__.py-tpl +0 -0
  225. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +0 -0
  226. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +0 -0
  227. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests}/__init__.py-tpl +0 -0
  228. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -0
  229. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -0
  230. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +0 -0
  231. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +0 -0
  232. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +0 -0
  233. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
  234. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
  235. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
  236. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
  237. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +0 -0
  238. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.py-tpl +0 -0
  239. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
  240. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
  241. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +0 -0
  242. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/__init__.py-tpl +0 -0
  243. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +0 -0
  244. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +0 -0
  245. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
  246. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +0 -0
  247. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
  248. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +0 -0
  249. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +0 -0
  250. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/__init__.py-tpl +0 -0
  251. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/router.py-tpl +0 -0
  252. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
  253. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +0 -0
  254. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
  255. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +0 -0
  256. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -0
  257. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -0
  258. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -0
  259. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +0 -0
  260. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
  261. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +0 -0
  262. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
  263. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
  264. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
  265. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +0 -0
  266. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
  267. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/pre-start.sh-tpl +0 -0
  268. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/run-server.sh-tpl +0 -0
  269. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
  270. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
  271. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.py-tpl +0 -0
  272. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src}/__init__.py-tpl +0 -0
  273. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +0 -0
  274. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +0 -0
  275. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +0 -0
  276. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +0 -0
  277. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/modules → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src}/api/__init__.py-tpl +0 -0
  278. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +0 -0
  279. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/deps.py-tpl +0 -0
  280. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/modules → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src}/api/routes/__init__.py-tpl +0 -0
  281. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +0 -0
  282. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/modules/crud → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core}/__init__.py-tpl +0 -0
  283. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +0 -0
  284. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +0 -0
  285. {fastapi_fastkit-1.2.0/src/fastapi_fastkit/fastapi_project_template/modules/schemas → fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud}/__init__.py-tpl +0 -0
  286. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +0 -0
  287. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +0 -0
  288. /fastapi_fastkit-1.2.0/src/fastapi_fastkit/py.typed → /fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/__init__.py-tpl +0 -0
  289. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +0 -0
  290. /fastapi_fastkit-1.2.0/src/fastapi_fastkit/utils/__init__.py → /fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/__init__.py-tpl +0 -0
  291. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/backend_pre_start.py-tpl +0 -0
  292. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/init_data.py-tpl +0 -0
  293. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/tests_pre_start.py-tpl +0 -0
  294. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
  295. /fastapi_fastkit-1.2.0/tests/__init__.py → /fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
  296. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +0 -0
  297. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/test_items.py-tpl +0 -0
  298. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl +0 -0
  299. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +0 -0
  300. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.cfg-tpl +0 -0
  301. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.py-tpl +0 -0
  302. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/src/main.py-tpl +0 -0
  303. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/conftest.py-tpl +0 -0
  304. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/test_main.py-tpl +0 -0
  305. /fastapi_fastkit-1.2.0/tests/test_backends/__init__.py → /fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
  306. /fastapi_fastkit-1.2.0/tests/test_cli_operations/__init__.py → /fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
  307. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +0 -0
  308. /fastapi_fastkit-1.2.0/tests/test_rich/__init__.py → /fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
  309. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
  310. /fastapi_fastkit-1.2.0/tests/test_templates/__init__.py → /fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
  311. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
  312. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/src/fastapi_fastkit/utils/logging.py +0 -0
  313. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/conftest.py +0 -0
  314. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_configure.py +0 -0
  315. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_console_sizing.py +0 -0
  316. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_backends/test_transducer.py +0 -0
  317. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_templates/template_configs.yaml +0 -0
  318. {fastapi_fastkit-1.2.0 → fastapi_fastkit-1.3.0}/tests/test_templates/test_config_based_templates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: FastAPI-fastkit
3
- Version: 1.2.0
3
+ Version: 1.3.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
@@ -12,12 +12,13 @@ Requires-Python: >=3.12
12
12
  Requires-Dist: click>=8.1.7
13
13
  Requires-Dist: rich>=13.9.2
14
14
  Provides-Extra: dev
15
- Requires-Dist: pytest>=8.3.3; extra == "dev"
15
+ Requires-Dist: pytest>=9.0.3; extra == "dev"
16
16
  Requires-Dist: pytest-cov>=6.2.1; extra == "dev"
17
- Requires-Dist: black>=24.10.0; extra == "dev"
17
+ Requires-Dist: black>=26.3.1; extra == "dev"
18
18
  Requires-Dist: pre-commit>=4.0.1; extra == "dev"
19
19
  Requires-Dist: mypy>=1.12.0; extra == "dev"
20
20
  Requires-Dist: isort>=5.13.2; extra == "dev"
21
+ Requires-Dist: pygments>=2.20.0; extra == "dev"
21
22
  Description-Content-Type: text/markdown
22
23
 
23
24
  <p align="center">
@@ -36,6 +37,9 @@ Description-Content-Type: text/markdown
36
37
  <a href="https://codecov.io/gh/bnbong/FastAPI-fastkit" >
37
38
  <img src="https://codecov.io/gh/bnbong/FastAPI-fastkit/graph/badge.svg?token=WS0B6WWD8K"/>
38
39
  </a>
40
+ <a href="https://pepy.tech/project/fastapi-fastkit">
41
+ <img src="https://static.pepy.tech/personalized-badge/fastapi-fastkit?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads" alt="PyPI Downloads">
42
+ </a>
39
43
  </p>
40
44
 
41
45
  ---
@@ -47,6 +51,7 @@ This project was inspired by the `SpringBoot initializer` & Python Django's `dja
47
51
  ## Key Features
48
52
 
49
53
  - **⚡ Immediate FastAPI project creation** : Super-fast FastAPI workspace & project creation via CLI, inspired by `django-admin` feature of [Python Django](https://github.com/django/django)
54
+ - **✨ Interactive project builder**: Guided step-by-step feature selection for databases, authentication, caching, monitoring, and more with auto-generated code
50
55
  - **🎨 Prettier CLI output** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
51
56
  - **📋 Standards-based FastAPI project templates** : Templates follow Python standards and common FastAPI patterns.
52
57
  - **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
@@ -79,6 +84,29 @@ fastkit init [OPTIONS]
79
84
  - `--package-manager` [pip|uv|pdm|poetry]
80
85
  - Stack selection: `minimal` | `standard` | `full` (interactive)
81
86
 
87
+ ### Create a project with interactive mode
88
+ ```console
89
+ fastkit init --interactive
90
+ ```
91
+ - What it does: Guided step-by-step project setup with intelligent feature selection
92
+ - Features:
93
+ - **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
94
+ - **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
95
+ - **Authentication**: JWT, OAuth2, FastAPI-Users, Session-based
96
+ - **Background tasks**: Celery, Dramatiq
97
+ - **Caching**: Redis, fastapi-cache2
98
+ - **Monitoring**: Loguru, OpenTelemetry, Prometheus
99
+ - **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
100
+ - **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
101
+ - **Deployment**: Docker, docker-compose with auto-generated configs
102
+ - **Package manager**: pip, uv, pdm, poetry
103
+ - **Custom packages**: Add your own dependencies
104
+ - Auto-generates (varies by preset — see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
105
+ - `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
106
+ - Database and authentication configuration files at preset-specific paths
107
+ - Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
108
+ - Test configuration (pytest with coverage)
109
+
82
110
  ### Create a project from a template
83
111
  ```console
84
112
  fastkit startdemo [TEMPLATE] [OPTIONS]
@@ -117,9 +145,11 @@ fastkit deleteproject <project_name>
117
145
 
118
146
  For comprehensive guides and detailed usage instructions, visit our documentation:
119
147
 
148
+ - 🧭 **[Which starter should I choose?](https://bnbong.github.io/FastAPI-fastkit/user-guide/choosing-a-starter/)** - Beginner decision guide for `startdemo` templates and interactive presets
120
149
  - 📚 **[User Guide](https://bnbong.github.io/FastAPI-fastkit/user-guide/quick-start/)** - Detailed installation and usage guides
121
150
  - 🎯 **[Tutorial](https://bnbong.github.io/FastAPI-fastkit/tutorial/getting-started/)** - Step-by-step tutorials for beginners
122
151
  - 📖 **[CLI Reference](https://bnbong.github.io/FastAPI-fastkit/user-guide/cli-reference/)** - Complete command reference
152
+ - 🧱 **[Architecture Preset Matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/)** - Per-preset / per-feature contract for interactive generation
123
153
  - 🔍 **[Template Quality Assurance](https://bnbong.github.io/FastAPI-fastkit/reference/template-quality-assurance/)** - Automated testing and quality standards
124
154
 
125
155
  ## Contributing
@@ -14,6 +14,9 @@
14
14
  <a href="https://codecov.io/gh/bnbong/FastAPI-fastkit" >
15
15
  <img src="https://codecov.io/gh/bnbong/FastAPI-fastkit/graph/badge.svg?token=WS0B6WWD8K"/>
16
16
  </a>
17
+ <a href="https://pepy.tech/project/fastapi-fastkit">
18
+ <img src="https://static.pepy.tech/personalized-badge/fastapi-fastkit?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads" alt="PyPI Downloads">
19
+ </a>
17
20
  </p>
18
21
 
19
22
  ---
@@ -25,6 +28,7 @@ This project was inspired by the `SpringBoot initializer` & Python Django's `dja
25
28
  ## Key Features
26
29
 
27
30
  - **⚡ Immediate FastAPI project creation** : Super-fast FastAPI workspace & project creation via CLI, inspired by `django-admin` feature of [Python Django](https://github.com/django/django)
31
+ - **✨ Interactive project builder**: Guided step-by-step feature selection for databases, authentication, caching, monitoring, and more with auto-generated code
28
32
  - **🎨 Prettier CLI output** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
29
33
  - **📋 Standards-based FastAPI project templates** : Templates follow Python standards and common FastAPI patterns.
30
34
  - **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
@@ -57,6 +61,29 @@ fastkit init [OPTIONS]
57
61
  - `--package-manager` [pip|uv|pdm|poetry]
58
62
  - Stack selection: `minimal` | `standard` | `full` (interactive)
59
63
 
64
+ ### Create a project with interactive mode
65
+ ```console
66
+ fastkit init --interactive
67
+ ```
68
+ - What it does: Guided step-by-step project setup with intelligent feature selection
69
+ - Features:
70
+ - **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
71
+ - **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
72
+ - **Authentication**: JWT, OAuth2, FastAPI-Users, Session-based
73
+ - **Background tasks**: Celery, Dramatiq
74
+ - **Caching**: Redis, fastapi-cache2
75
+ - **Monitoring**: Loguru, OpenTelemetry, Prometheus
76
+ - **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
77
+ - **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
78
+ - **Deployment**: Docker, docker-compose with auto-generated configs
79
+ - **Package manager**: pip, uv, pdm, poetry
80
+ - **Custom packages**: Add your own dependencies
81
+ - Auto-generates (varies by preset — see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
82
+ - `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
83
+ - Database and authentication configuration files at preset-specific paths
84
+ - Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
85
+ - Test configuration (pytest with coverage)
86
+
60
87
  ### Create a project from a template
61
88
  ```console
62
89
  fastkit startdemo [TEMPLATE] [OPTIONS]
@@ -95,9 +122,11 @@ fastkit deleteproject <project_name>
95
122
 
96
123
  For comprehensive guides and detailed usage instructions, visit our documentation:
97
124
 
125
+ - 🧭 **[Which starter should I choose?](https://bnbong.github.io/FastAPI-fastkit/user-guide/choosing-a-starter/)** - Beginner decision guide for `startdemo` templates and interactive presets
98
126
  - 📚 **[User Guide](https://bnbong.github.io/FastAPI-fastkit/user-guide/quick-start/)** - Detailed installation and usage guides
99
127
  - 🎯 **[Tutorial](https://bnbong.github.io/FastAPI-fastkit/tutorial/getting-started/)** - Step-by-step tutorials for beginners
100
128
  - 📖 **[CLI Reference](https://bnbong.github.io/FastAPI-fastkit/user-guide/cli-reference/)** - Complete command reference
129
+ - 🧱 **[Architecture Preset Matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/)** - Per-preset / per-feature contract for interactive generation
101
130
  - 🔍 **[Template Quality Assurance](https://bnbong.github.io/FastAPI-fastkit/reference/template-quality-assurance/)** - Automated testing and quality standards
102
131
 
103
132
  ## Contributing
@@ -11,7 +11,7 @@ dependencies = [
11
11
  ]
12
12
  requires-python = ">=3.12"
13
13
  readme = "README.md"
14
- version = "1.2.0"
14
+ version = "1.3.0"
15
15
 
16
16
  [project.license]
17
17
  text = "MIT"
@@ -24,12 +24,13 @@ Changelog = "https://bnbong.github.io/FastAPI-fastkit/changelog/"
24
24
 
25
25
  [project.optional-dependencies]
26
26
  dev = [
27
- "pytest>=8.3.3",
27
+ "pytest>=9.0.3",
28
28
  "pytest-cov>=6.2.1",
29
- "black>=24.10.0",
29
+ "black>=26.3.1",
30
30
  "pre-commit>=4.0.1",
31
31
  "mypy>=1.12.0",
32
32
  "isort>=5.13.2",
33
+ "pygments>=2.20.0",
33
34
  ]
34
35
 
35
36
  [project.scripts]
@@ -120,6 +121,9 @@ docs = [
120
121
  "mkdocs-static-i18n>=1.3.0",
121
122
  "pyyaml>=6.0.3",
122
123
  "types-PyYAML>=6.0.12.20250915",
124
+ "pygments>=2.20.0",
125
+ "requests>=2.33.0",
126
+ "pymdown-extensions>=10.17.2",
123
127
  ]
124
128
  translation = [
125
129
  "openai>=2.8.1",
@@ -0,0 +1 @@
1
+ __version__ = 'v1.3.0'
@@ -23,19 +23,23 @@ import os
23
23
  import shutil
24
24
  import subprocess
25
25
  import sys
26
+ import tomllib
26
27
  from pathlib import Path
27
28
  from typing import Any, Callable, Dict, List, Optional, Tuple
28
29
 
29
30
  import yaml
30
31
 
31
32
  from fastapi_fastkit.backend.main import (
33
+ _parse_setup_dependencies,
32
34
  create_venv,
33
35
  find_template_core_modules,
34
36
  inject_project_metadata,
35
37
  install_dependencies_with_manager,
36
38
  )
39
+ from fastapi_fastkit.backend.package_managers.poetry_manager import (
40
+ _parse_pip_requirement,
41
+ )
37
42
  from fastapi_fastkit.backend.transducer import copy_and_convert_template
38
- from fastapi_fastkit.core.settings import settings
39
43
  from fastapi_fastkit.utils.logging import debug_log, get_logger
40
44
  from fastapi_fastkit.utils.main import print_error, print_success, print_warning
41
45
 
@@ -127,7 +131,6 @@ class TemplateInspector:
127
131
 
128
132
  def _force_cleanup_directory(self, directory_path: str) -> None:
129
133
  """Force cleanup of directory with multiple strategies."""
130
- import stat
131
134
  import time
132
135
 
133
136
  max_retries = 5
@@ -396,20 +399,39 @@ class TemplateInspector:
396
399
  return True
397
400
 
398
401
  def _check_file_structure(self) -> bool:
399
- """Check the required file and directory structure."""
400
- required_paths = [
401
- "tests",
402
- "requirements.txt-tpl",
403
- "setup.py-tpl",
404
- "README.md-tpl",
402
+ """Check the required file and directory structure.
403
+
404
+ Modern templates may ship ``pyproject.toml-tpl`` as the primary metadata
405
+ file; ``setup.py-tpl`` remains accepted for backward compatibility.
406
+ A template must provide at least one of the two. ``requirements.txt-tpl``
407
+ is no longer strictly required when ``pyproject.toml-tpl`` declares
408
+ ``[project].dependencies``.
409
+ """
410
+ always_required = ["tests", "README.md-tpl"]
411
+ metadata_candidates = ["pyproject.toml-tpl", "setup.py-tpl"]
412
+
413
+ missing_required = [
414
+ path for path in always_required if not (self.template_path / path).exists()
405
415
  ]
416
+ has_metadata = any(
417
+ (self.template_path / name).exists() for name in metadata_candidates
418
+ )
406
419
 
407
- for path in required_paths:
408
- if not (self.template_path / path).exists():
420
+ if missing_required:
421
+ for path in missing_required:
409
422
  error_msg = f"Missing required path: {path}"
410
423
  self.errors.append(error_msg)
411
424
  debug_log(f"File structure check failed: {error_msg}", "error")
412
- return False
425
+ if not has_metadata:
426
+ error_msg = (
427
+ "Missing metadata file: expected pyproject.toml-tpl "
428
+ "(preferred) or setup.py-tpl"
429
+ )
430
+ self.errors.append(error_msg)
431
+ debug_log(f"File structure check failed: {error_msg}", "error")
432
+
433
+ if missing_required or not has_metadata:
434
+ return False
413
435
 
414
436
  debug_log("File structure check passed", "info")
415
437
  return True
@@ -427,40 +449,139 @@ class TemplateInspector:
427
449
  return True
428
450
 
429
451
  def _check_dependencies(self) -> bool:
430
- """Check the dependencies in both setup.py-tpl and requirements.txt-tpl."""
452
+ """Check that FastAPI is declared in at least one supported source.
453
+
454
+ All three metadata sources are consulted independently:
455
+
456
+ - ``requirements.txt-tpl``
457
+ - ``pyproject.toml-tpl`` ``[project].dependencies``
458
+ - ``setup.py-tpl`` ``install_requires``
459
+
460
+ The check passes if *any* source declares ``fastapi``, so a template
461
+ with a stale ``requirements.txt-tpl`` still passes when
462
+ ``pyproject.toml-tpl`` is authoritative. It fails only when every
463
+ present source is missing ``fastapi`` (or when no source exists at
464
+ all — that also implies no metadata file, which
465
+ ``_check_file_structure`` already rejects).
466
+ """
431
467
  req_path = self.template_path / "requirements.txt-tpl"
468
+ pyproject_path = self.template_path / "pyproject.toml-tpl"
432
469
  setup_path = self.template_path / "setup.py-tpl"
433
470
 
434
- if not req_path.exists():
435
- error_msg = "requirements.txt-tpl not found"
436
- self.errors.append(error_msg)
437
- debug_log(f"Dependencies check failed: {error_msg}", "error")
438
- return False
439
- if not setup_path.exists():
440
- error_msg = "setup.py-tpl not found"
471
+ sources_checked: List[str] = []
472
+ fastapi_declared = False
473
+
474
+ if req_path.exists():
475
+ sources_checked.append("requirements.txt-tpl")
476
+ try:
477
+ with open(req_path, encoding="utf-8") as f:
478
+ deps = f.read().splitlines()
479
+ package_names = {
480
+ _parse_pip_requirement(dep)[0].lower()
481
+ for dep in deps
482
+ if dep.strip() and not dep.strip().startswith("#")
483
+ }
484
+ debug_log(
485
+ f"requirements.txt-tpl dependencies: {sorted(package_names)}",
486
+ "debug",
487
+ )
488
+ if "fastapi" in package_names:
489
+ fastapi_declared = True
490
+ except (OSError, UnicodeDecodeError) as e:
491
+ error_msg = f"Error reading requirements.txt-tpl: {e}"
492
+ self.errors.append(error_msg)
493
+ debug_log(f"Dependencies check failed: {error_msg}", "error")
494
+ return False
495
+
496
+ if pyproject_path.exists():
497
+ sources_checked.append("pyproject.toml-tpl")
498
+ package_names, parse_error = self._extract_pyproject_dependency_names(
499
+ pyproject_path
500
+ )
501
+ if parse_error is not None:
502
+ self.errors.append(parse_error)
503
+ debug_log(f"Dependencies check failed: {parse_error}", "error")
504
+ return False
505
+ debug_log(
506
+ f"pyproject.toml-tpl dependencies: {sorted(package_names)}", "debug"
507
+ )
508
+ if "fastapi" in package_names:
509
+ fastapi_declared = True
510
+
511
+ if setup_path.exists():
512
+ sources_checked.append("setup.py-tpl")
513
+ try:
514
+ with open(setup_path, encoding="utf-8") as f:
515
+ content = f.read()
516
+ deps = _parse_setup_dependencies(content)
517
+ package_names = {
518
+ _parse_pip_requirement(dep)[0].lower() for dep in deps if dep
519
+ }
520
+ debug_log(
521
+ f"setup.py-tpl dependencies: {sorted(package_names)}", "debug"
522
+ )
523
+ if "fastapi" in package_names:
524
+ fastapi_declared = True
525
+ except (OSError, UnicodeDecodeError) as e:
526
+ error_msg = f"Error reading setup.py-tpl: {e}"
527
+ self.errors.append(error_msg)
528
+ debug_log(f"Dependencies check failed: {error_msg}", "error")
529
+ return False
530
+
531
+ if not sources_checked:
532
+ error_msg = (
533
+ "No dependency source found: expected one of requirements.txt-tpl, "
534
+ "pyproject.toml-tpl, or setup.py-tpl"
535
+ )
441
536
  self.errors.append(error_msg)
442
537
  debug_log(f"Dependencies check failed: {error_msg}", "error")
443
538
  return False
444
539
 
445
- try:
446
- with open(req_path, encoding="utf-8") as f:
447
- deps = f.read().splitlines()
448
- package_names = [dep.split("==")[0] for dep in deps if dep]
449
- debug_log(f"Found dependencies: {package_names}", "debug")
450
- if "fastapi" not in package_names:
451
- error_msg = "FastAPI dependency not found in requirements.txt-tpl"
452
- self.errors.append(error_msg)
453
- debug_log(f"Dependencies check failed: {error_msg}", "error")
454
- return False
455
- except (OSError, UnicodeDecodeError) as e:
456
- error_msg = f"Error reading requirements.txt-tpl: {e}"
540
+ if not fastapi_declared:
541
+ error_msg = (
542
+ "FastAPI dependency not found in any source ("
543
+ + ", ".join(sources_checked)
544
+ + ")"
545
+ )
457
546
  self.errors.append(error_msg)
458
547
  debug_log(f"Dependencies check failed: {error_msg}", "error")
459
548
  return False
460
549
 
461
- debug_log("Dependencies check passed", "info")
550
+ debug_log(
551
+ f"Dependencies check passed (sources: {', '.join(sources_checked)})",
552
+ "info",
553
+ )
462
554
  return True
463
555
 
556
+ @staticmethod
557
+ def _extract_pyproject_dependency_names(
558
+ pyproject_path: Path,
559
+ ) -> Tuple[set, Optional[str]]: # type: ignore
560
+ """Parse a pyproject.toml-tpl and return (lowercased dep names, error).
561
+
562
+ ``error`` is ``None`` on success. Returns an empty set with a descriptive
563
+ error string when the file is unreadable or malformed.
564
+ """
565
+ try:
566
+ with open(pyproject_path, "rb") as f:
567
+ data = tomllib.load(f)
568
+ except (OSError, tomllib.TOMLDecodeError, UnicodeDecodeError) as e:
569
+ return set(), f"Invalid pyproject.toml-tpl: {e}"
570
+
571
+ project = data.get("project", {})
572
+ raw_deps = project.get("dependencies", []) or []
573
+ if not isinstance(raw_deps, list):
574
+ return set(), "pyproject.toml-tpl [project].dependencies must be a list"
575
+
576
+ names: set = set() # type: ignore
577
+ for dep in raw_deps:
578
+ if not isinstance(dep, str) or not dep.strip():
579
+ continue
580
+ name = _parse_pip_requirement(dep)[0]
581
+ if name:
582
+ names.add(name.lower())
583
+ return names, None
584
+
464
585
  def _check_fastapi_implementation(self) -> bool:
465
586
  """Check if the template has a proper FastAPI server implementation."""
466
587
  try:
@@ -9,6 +9,7 @@
9
9
  from .config_builder import InteractiveConfigBuilder
10
10
  from .prompts import (
11
11
  prompt_additional_features,
12
+ prompt_architecture_preset,
12
13
  prompt_authentication_selection,
13
14
  prompt_basic_info,
14
15
  prompt_caching_selection,
@@ -31,6 +32,7 @@ from .validators import (
31
32
  __all__ = [
32
33
  "InteractiveConfigBuilder",
33
34
  "prompt_basic_info",
35
+ "prompt_architecture_preset",
34
36
  "prompt_template_selection",
35
37
  "prompt_database_selection",
36
38
  "prompt_authentication_selection",
@@ -12,6 +12,7 @@ from fastapi_fastkit.utils.main import console, print_warning
12
12
 
13
13
  from .prompts import (
14
14
  prompt_additional_features,
15
+ prompt_architecture_preset,
15
16
  prompt_basic_info,
16
17
  prompt_template_selection,
17
18
  )
@@ -51,11 +52,15 @@ class InteractiveConfigBuilder:
51
52
  # Step 1: Basic information
52
53
  self._collect_basic_info()
53
54
 
54
- # Step 2: Always use Empty template as base for interactive mode
55
+ # Step 2: Architecture preset chosen early so downstream prompts
56
+ # (and later, preset-specific scaffolding) can branch on the layout.
57
+ self._collect_architecture_preset()
58
+
59
+ # Step 3: Always use Empty template as base for interactive mode
55
60
  # (Feature selection will build the project incrementally)
56
61
  self.config["base_template"] = None # None = Empty project
57
62
 
58
- # Step 3: Feature selections
63
+ # Step 4: Feature selections
59
64
  self._collect_feature_selections()
60
65
 
61
66
  # Step 4: Build final configuration
@@ -78,6 +83,20 @@ class InteractiveConfigBuilder:
78
83
  basic_info = prompt_basic_info()
79
84
  self.config.update(basic_info)
80
85
 
86
+ def _collect_architecture_preset(self) -> None:
87
+ """Collect the user's architecture preset choice.
88
+
89
+ Persists the canonical id on the config under ``architecture_preset``
90
+ (used by downstream code) plus the human-readable description under
91
+ ``architecture_preset_description`` (used by the confirmation summary
92
+ so users see what their choice means, not just the raw id).
93
+ """
94
+ preset = prompt_architecture_preset(self.settings)
95
+ self.config["architecture_preset"] = preset
96
+ self.config["architecture_preset_description"] = (
97
+ self.settings.ARCHITECTURE_PRESETS.get(preset, "")
98
+ )
99
+
81
100
  def _collect_template_selection(self) -> None:
82
101
  """Collect template selection."""
83
102
  template = prompt_template_selection(self.settings)
@@ -15,7 +15,6 @@
15
15
  from typing import Any, Dict, List, Optional, cast
16
16
 
17
17
  import click
18
- from rich.panel import Panel
19
18
 
20
19
  from fastapi_fastkit.utils.main import console, print_error
21
20
 
@@ -64,6 +63,58 @@ def prompt_basic_info() -> Dict[str, str]:
64
63
  }
65
64
 
66
65
 
66
+ def prompt_architecture_preset(settings: Any) -> str:
67
+ """
68
+ Prompt for the project's architecture preset.
69
+
70
+ Run early in the interactive flow so downstream prompts (and later,
71
+ preset-specific scaffolding) can branch on the user's choice. Returns
72
+ the canonical preset id (one of the keys in
73
+ ``settings.ARCHITECTURE_PRESETS``).
74
+
75
+ The recommended default (``settings.DEFAULT_ARCHITECTURE_PRESET``) is
76
+ annotated as such in the rendered table so users can spot it at a glance
77
+ and accept it with a single Enter press.
78
+
79
+ Args:
80
+ settings: FastkitConfig instance
81
+
82
+ Returns:
83
+ Preset id, e.g. ``"domain-starter"``.
84
+ """
85
+ console.print("\n[bold cyan]🧱 Architecture Preset[/bold cyan]")
86
+ console.print(
87
+ "[dim]Pick a project layout. Generation logic for each preset is "
88
+ "rolled out incrementally — your choice is recorded in the "
89
+ "config either way.[/dim]\n"
90
+ )
91
+
92
+ presets: Dict[str, str] = settings.ARCHITECTURE_PRESETS
93
+ default_id: str = settings.DEFAULT_ARCHITECTURE_PRESET
94
+ # Derive a display-only mapping so the recommended default is visibly
95
+ # annotated without mutating the canonical catalog in settings.
96
+ display_options: Dict[str, str] = {
97
+ preset_id: (
98
+ f"{description} [bold green](recommended default)[/bold green]"
99
+ if preset_id == default_id
100
+ else description
101
+ )
102
+ for preset_id, description in presets.items()
103
+ }
104
+ render_selection_table("Architecture Presets", display_options)
105
+
106
+ preset_ids = list(presets.keys())
107
+ default_idx = preset_ids.index(default_id) + 1
108
+
109
+ choice = click.prompt(
110
+ f"\nSelect architecture preset (default: {default_id})",
111
+ type=click.IntRange(1, len(preset_ids)),
112
+ default=default_idx,
113
+ )
114
+
115
+ return cast(str, preset_ids[choice - 1])
116
+
117
+
67
118
  def prompt_template_selection(settings: Any) -> Optional[str]:
68
119
  """
69
120
  Prompt for base template selection.
@@ -133,6 +133,16 @@ def confirm_selections(config: Dict[str, Any]) -> bool:
133
133
  table.add_row("Email", config.get("author_email", "N/A"))
134
134
  table.add_row("Description", config.get("description", "N/A"))
135
135
 
136
+ # Architecture preset (interactive ``init`` always sets this; older
137
+ # callers may not — guard with a falsy check to stay backward compatible).
138
+ preset = config.get("architecture_preset")
139
+ if preset:
140
+ preset_description = config.get("architecture_preset_description", "")
141
+ table.add_row(
142
+ "Architecture Preset",
143
+ f"{preset} — {preset_description}" if preset_description else preset,
144
+ )
145
+
136
146
  # Template
137
147
  if config.get("base_template"):
138
148
  table.add_row("Base Template", config["base_template"])