FastAPI-fastkit 1.1.5__tar.gz → 1.2.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 (284) hide show
  1. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/PKG-INFO +9 -6
  2. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/README.md +8 -5
  3. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/pyproject.toml +15 -8
  4. fastapi_fastkit-1.2.0/src/fastapi_fastkit/__init__.py +1 -0
  5. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/inspector.py +170 -12
  6. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/interactive/__init__.py +51 -0
  7. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/interactive/config_builder.py +186 -0
  8. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/interactive/prompts.py +528 -0
  9. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/interactive/selectors.py +241 -0
  10. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/interactive/validators.py +163 -0
  11. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/main.py +77 -0
  12. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/project_builder/__init__.py +17 -0
  13. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/project_builder/config_generator.py +594 -0
  14. fastapi_fastkit-1.2.0/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +210 -0
  15. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/cli.py +210 -15
  16. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/core/settings.py +74 -0
  17. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +2 -1
  18. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +1 -0
  19. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +2 -1
  20. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +1 -0
  21. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +2 -1
  22. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +1 -0
  23. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +2 -1
  24. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +1 -0
  25. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +2 -1
  26. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +1 -0
  27. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +2 -1
  28. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +1 -0
  29. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +2 -1
  30. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +1 -0
  31. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/pyproject.toml-tpl +2 -1
  32. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +1 -0
  33. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_backends/test_inspector.py +508 -115
  34. fastapi_fastkit-1.2.0/tests/test_backends/test_interactive_config_builder.py +437 -0
  35. fastapi_fastkit-1.2.0/tests/test_backends/test_interactive_prompts.py +188 -0
  36. fastapi_fastkit-1.2.0/tests/test_backends/test_interactive_selectors.py +231 -0
  37. fastapi_fastkit-1.2.0/tests/test_backends/test_interactive_validators.py +579 -0
  38. fastapi_fastkit-1.2.0/tests/test_backends/test_package_managers.py +1278 -0
  39. fastapi_fastkit-1.2.0/tests/test_backends/test_project_builder_config_generator.py +372 -0
  40. fastapi_fastkit-1.2.0/tests/test_backends/test_project_builder_dependency_collector.py +503 -0
  41. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_cli_operations/test_cli.py +19 -2
  42. fastapi_fastkit-1.2.0/tests/test_cli_operations/test_cli_interactive_integration.py +212 -0
  43. fastapi_fastkit-1.1.5/src/fastapi_fastkit/__init__.py +0 -1
  44. fastapi_fastkit-1.1.5/tests/test_backends/test_package_managers.py +0 -469
  45. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/LICENSE +0 -0
  46. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/__main__.py +0 -0
  47. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/__init__.py +0 -0
  48. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
  49. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/package_managers/base.py +0 -0
  50. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/package_managers/factory.py +0 -0
  51. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +0 -0
  52. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +0 -0
  53. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +0 -0
  54. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +0 -0
  55. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/backend/transducer.py +0 -0
  56. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/core/__init__.py +0 -0
  57. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/core/exceptions.py +0 -0
  58. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
  59. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/README.md +0 -0
  60. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
  61. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
  62. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
  63. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +0 -0
  64. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
  65. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
  66. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/run-server.sh-tpl +0 -0
  67. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
  68. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
  69. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.py-tpl +0 -0
  70. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
  71. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/__init__.py-tpl +0 -0
  72. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +0 -0
  73. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/__init__.py-tpl +0 -0
  74. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +0 -0
  75. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/__init__.py-tpl +0 -0
  76. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/config.py-tpl +0 -0
  77. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/__init__.py-tpl +0 -0
  78. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/items.py-tpl +0 -0
  79. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +0 -0
  80. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/__init__.py-tpl +0 -0
  81. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/mock_items.json-tpl +0 -0
  82. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/__init__.py-tpl +0 -0
  83. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/items.py-tpl +0 -0
  84. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
  85. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -0
  86. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/test_items.py-tpl +0 -0
  87. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
  88. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
  89. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
  90. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/format.sh-tpl +0 -0
  91. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
  92. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/run-server.sh-tpl +0 -0
  93. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/test.sh-tpl +0 -0
  94. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
  95. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.py-tpl +0 -0
  96. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/__init__.py-tpl +0 -0
  97. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/__init__.py-tpl +0 -0
  98. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +0 -0
  99. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/__init__.py-tpl +0 -0
  100. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +0 -0
  101. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/__init__.py-tpl +0 -0
  102. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +0 -0
  103. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/__init__.py-tpl +0 -0
  104. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/items.py-tpl +0 -0
  105. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/__init__.py-tpl +0 -0
  106. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/exceptions.py-tpl +0 -0
  107. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +0 -0
  108. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +0 -0
  109. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/__init__.py-tpl +0 -0
  110. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/mock_items.json-tpl +0 -0
  111. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/__init__.py-tpl +0 -0
  112. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +0 -0
  113. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/items.py-tpl +0 -0
  114. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/__init__.py-tpl +0 -0
  115. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/documents.py-tpl +0 -0
  116. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/__init__.py-tpl +0 -0
  117. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -0
  118. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/test_items.py-tpl +0 -0
  119. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
  120. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
  121. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
  122. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/format.sh-tpl +0 -0
  123. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
  124. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
  125. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/test.sh-tpl +0 -0
  126. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
  127. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl +0 -0
  128. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl +0 -0
  129. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/__init__.py-tpl +0 -0
  130. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +0 -0
  131. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/__init__.py-tpl +0 -0
  132. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +0 -0
  133. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl +0 -0
  134. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/config.py-tpl +0 -0
  135. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl +0 -0
  136. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +0 -0
  137. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/main.py-tpl +0 -0
  138. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl +0 -0
  139. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_items.json-tpl +0 -0
  140. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl +0 -0
  141. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/items.py-tpl +0 -0
  142. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/__init__.py-tpl +0 -0
  143. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +0 -0
  144. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/test_items.py-tpl +0 -0
  145. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
  146. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
  147. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +0 -0
  148. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +0 -0
  149. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/format.sh-tpl +0 -0
  150. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
  151. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
  152. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/test.sh-tpl +0 -0
  153. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
  154. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.py-tpl +0 -0
  155. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/__init__.py-tpl +0 -0
  156. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/__init__.py-tpl +0 -0
  157. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +0 -0
  158. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/__init__.py-tpl +0 -0
  159. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +0 -0
  160. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/__init__.py-tpl +0 -0
  161. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/config.py-tpl +0 -0
  162. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/__init__.py-tpl +0 -0
  163. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +0 -0
  164. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/main.py-tpl +0 -0
  165. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/__init__.py-tpl +0 -0
  166. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/mock_items.json-tpl +0 -0
  167. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/__init__.py-tpl +0 -0
  168. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +0 -0
  169. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/__init__.py-tpl +0 -0
  170. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +0 -0
  171. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/test_items.py-tpl +0 -0
  172. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
  173. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
  174. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +0 -0
  175. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
  176. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.py-tpl +0 -0
  177. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/__init__.py-tpl +0 -0
  178. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/__init__.py-tpl +0 -0
  179. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +0 -0
  180. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +0 -0
  181. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/__init__.py-tpl +0 -0
  182. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -0
  183. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -0
  184. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +0 -0
  185. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +0 -0
  186. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
  187. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
  188. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
  189. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
  190. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +0 -0
  191. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.py-tpl +0 -0
  192. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
  193. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
  194. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +0 -0
  195. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/__init__.py-tpl +0 -0
  196. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +0 -0
  197. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +0 -0
  198. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
  199. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +0 -0
  200. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
  201. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +0 -0
  202. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +0 -0
  203. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/__init__.py-tpl +0 -0
  204. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/router.py-tpl +0 -0
  205. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
  206. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +0 -0
  207. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
  208. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +0 -0
  209. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -0
  210. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -0
  211. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -0
  212. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +0 -0
  213. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
  214. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +0 -0
  215. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
  216. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
  217. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
  218. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +0 -0
  219. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
  220. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/pre-start.sh-tpl +0 -0
  221. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/run-server.sh-tpl +0 -0
  222. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
  223. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
  224. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.py-tpl +0 -0
  225. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/__init__.py-tpl +0 -0
  226. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +0 -0
  227. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +0 -0
  228. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +0 -0
  229. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +0 -0
  230. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/__init__.py-tpl +0 -0
  231. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +0 -0
  232. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/deps.py-tpl +0 -0
  233. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/__init__.py-tpl +0 -0
  234. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +0 -0
  235. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/__init__.py-tpl +0 -0
  236. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +0 -0
  237. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +0 -0
  238. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/__init__.py-tpl +0 -0
  239. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +0 -0
  240. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +0 -0
  241. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/__init__.py-tpl +0 -0
  242. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +0 -0
  243. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/__init__.py-tpl +0 -0
  244. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/backend_pre_start.py-tpl +0 -0
  245. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/init_data.py-tpl +0 -0
  246. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/tests_pre_start.py-tpl +0 -0
  247. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
  248. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
  249. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +0 -0
  250. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/test_items.py-tpl +0 -0
  251. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl +0 -0
  252. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.cfg-tpl +0 -0
  253. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.py-tpl +0 -0
  254. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/src/main.py-tpl +0 -0
  255. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/conftest.py-tpl +0 -0
  256. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/test_main.py-tpl +0 -0
  257. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
  258. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
  259. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +0 -0
  260. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
  261. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
  262. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
  263. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
  264. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/py.typed +0 -0
  265. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/utils/__init__.py +0 -0
  266. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/utils/logging.py +0 -0
  267. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/src/fastapi_fastkit/utils/main.py +0 -0
  268. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/__init__.py +0 -0
  269. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/conftest.py +0 -0
  270. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_backends/__init__.py +0 -0
  271. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_backends/test_configure.py +0 -0
  272. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_backends/test_console_sizing.py +0 -0
  273. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_backends/test_main.py +0 -0
  274. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_backends/test_transducer.py +0 -0
  275. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_cli_operations/__init__.py +0 -0
  276. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_cli_operations/test_cli_extended.py +0 -0
  277. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_core.py +0 -0
  278. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_rich/__init__.py +0 -0
  279. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_rich/test_rich.py +0 -0
  280. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_templates/__init__.py +0 -0
  281. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_templates/template_configs.yaml +0 -0
  282. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_templates/test_all_templates.py +0 -0
  283. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.0}/tests/test_templates/test_config_based_templates.py +0 -0
  284. {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.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.1.5
3
+ Version: 1.2.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
@@ -33,26 +33,29 @@ Description-Content-Type: text/markdown
33
33
  <a href="https://github.com/bnbong/FastAPI-fastkit/releases" target="_blank">
34
34
  <img src="https://img.shields.io/github/v/release/bnbong/FastAPI-fastkit" alt="GitHub Release">
35
35
  </a>
36
+ <a href="https://codecov.io/gh/bnbong/FastAPI-fastkit" >
37
+ <img src="https://codecov.io/gh/bnbong/FastAPI-fastkit/graph/badge.svg?token=WS0B6WWD8K"/>
38
+ </a>
36
39
  </p>
37
40
 
38
41
  ---
39
42
 
40
43
  This project was created to speed up the configuration of the development environment needed to develop Python-based web apps for new users of Python and [FastAPI](https://github.com/fastapi/fastapi).
41
44
 
42
- This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin` cli operation.
45
+ This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin` CLI operation.
43
46
 
44
47
  ## Key Features
45
48
 
46
49
  - **⚡ 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)
47
- - **🎨 Prettier CLI outputs** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
48
- - **📋 Standards-based FastAPI project templates** : All FastAPI-fastkit templates are based on Python standards and FastAPI's common use patterns
50
+ - **🎨 Prettier CLI output** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
51
+ - **📋 Standards-based FastAPI project templates** : Templates follow Python standards and common FastAPI patterns.
49
52
  - **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
50
53
  - **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
51
54
  - **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
52
55
 
53
56
  ## Installation
54
57
 
55
- Install `FastAPI-fastkit` at your Python environment.
58
+ Install `FastAPI-fastkit` in your Python environment.
56
59
 
57
60
  ```console
58
61
  $ pip install FastAPI-fastkit
@@ -166,7 +169,7 @@ For detailed contribution guidelines, development setup, and project standards,
166
169
 
167
170
  FastAPI-fastkit aims to provide a fast and easy-to-use starter kit for new users of Python and FastAPI.
168
171
 
169
- This idea was initiated with the aim of helping FastAPI newcomers learn from the beginning, which aligns with the production significance of the FastAPI-cli package added with the [FastAPI 0.111.0 version update](https://github.com/fastapi/fastapi/releases/tag/0.111.0).
172
+ This idea was initiated with the aim of helping FastAPI newcomers learn from the beginning, which aligns with the production significance of the FastAPI CLI package added with the [FastAPI 0.111.0 version update](https://github.com/fastapi/fastapi/releases/tag/0.111.0).
170
173
 
171
174
  As someone who has been using and loving FastAPI for a long time, I wanted to develop a project that could help fulfill [the wonderful motivation](https://github.com/fastapi/fastapi/pull/11522#issuecomment-2264639417) that FastAPI developer [tiangolo](https://github.com/tiangolo) has expressed.
172
175
 
@@ -11,26 +11,29 @@
11
11
  <a href="https://github.com/bnbong/FastAPI-fastkit/releases" target="_blank">
12
12
  <img src="https://img.shields.io/github/v/release/bnbong/FastAPI-fastkit" alt="GitHub Release">
13
13
  </a>
14
+ <a href="https://codecov.io/gh/bnbong/FastAPI-fastkit" >
15
+ <img src="https://codecov.io/gh/bnbong/FastAPI-fastkit/graph/badge.svg?token=WS0B6WWD8K"/>
16
+ </a>
14
17
  </p>
15
18
 
16
19
  ---
17
20
 
18
21
  This project was created to speed up the configuration of the development environment needed to develop Python-based web apps for new users of Python and [FastAPI](https://github.com/fastapi/fastapi).
19
22
 
20
- This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin` cli operation.
23
+ This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin` CLI operation.
21
24
 
22
25
  ## Key Features
23
26
 
24
27
  - **⚡ 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)
25
- - **🎨 Prettier CLI outputs** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
26
- - **📋 Standards-based FastAPI project templates** : All FastAPI-fastkit templates are based on Python standards and FastAPI's common use patterns
28
+ - **🎨 Prettier CLI output** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
29
+ - **📋 Standards-based FastAPI project templates** : Templates follow Python standards and common FastAPI patterns.
27
30
  - **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
28
31
  - **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
29
32
  - **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
30
33
 
31
34
  ## Installation
32
35
 
33
- Install `FastAPI-fastkit` at your Python environment.
36
+ Install `FastAPI-fastkit` in your Python environment.
34
37
 
35
38
  ```console
36
39
  $ pip install FastAPI-fastkit
@@ -144,7 +147,7 @@ For detailed contribution guidelines, development setup, and project standards,
144
147
 
145
148
  FastAPI-fastkit aims to provide a fast and easy-to-use starter kit for new users of Python and FastAPI.
146
149
 
147
- This idea was initiated with the aim of helping FastAPI newcomers learn from the beginning, which aligns with the production significance of the FastAPI-cli package added with the [FastAPI 0.111.0 version update](https://github.com/fastapi/fastapi/releases/tag/0.111.0).
150
+ This idea was initiated with the aim of helping FastAPI newcomers learn from the beginning, which aligns with the production significance of the FastAPI CLI package added with the [FastAPI 0.111.0 version update](https://github.com/fastapi/fastapi/releases/tag/0.111.0).
148
151
 
149
152
  As someone who has been using and loving FastAPI for a long time, I wanted to develop a project that could help fulfill [the wonderful motivation](https://github.com/fastapi/fastapi/pull/11522#issuecomment-2264639417) that FastAPI developer [tiangolo](https://github.com/tiangolo) has expressed.
150
153
 
@@ -11,7 +11,7 @@ dependencies = [
11
11
  ]
12
12
  requires-python = ">=3.12"
13
13
  readme = "README.md"
14
- version = "1.1.5"
14
+ version = "1.2.0"
15
15
 
16
16
  [project.license]
17
17
  text = "MIT"
@@ -41,13 +41,6 @@ requires = [
41
41
  ]
42
42
  build-backend = "pdm.backend"
43
43
 
44
- [tool.pdm]
45
- distribution = true
46
-
47
- [tool.pdm.version]
48
- source = "file"
49
- path = "src/fastapi_fastkit/__init__.py"
50
-
51
44
  [tool.pytest.ini_options]
52
45
  testpaths = [
53
46
  "tests",
@@ -76,6 +69,13 @@ module = "fastapi_fastkit.core"
76
69
  ignore_missing_imports = true
77
70
  check_untyped_defs = false
78
71
 
72
+ [tool.pdm]
73
+ distribution = true
74
+
75
+ [tool.pdm.version]
76
+ source = "file"
77
+ path = "src/fastapi_fastkit/__init__.py"
78
+
79
79
  [tool.coverage.run]
80
80
  source = [
81
81
  "src/fastapi_fastkit",
@@ -117,4 +117,11 @@ docs = [
117
117
  "mkdocs>=1.6.1",
118
118
  "mkdocs-material>=9.6.15",
119
119
  "mdx-include>=1.4.2",
120
+ "mkdocs-static-i18n>=1.3.0",
121
+ "pyyaml>=6.0.3",
122
+ "types-PyYAML>=6.0.12.20250915",
123
+ ]
124
+ translation = [
125
+ "openai>=2.8.1",
126
+ "anthropic>=0.74.0",
120
127
  ]
@@ -0,0 +1 @@
1
+ __version__ = 'v1.2.0'
@@ -26,13 +26,12 @@ import sys
26
26
  from pathlib import Path
27
27
  from typing import Any, Callable, Dict, List, Optional, Tuple
28
28
 
29
- import yaml # type: ignore
29
+ import yaml
30
30
 
31
31
  from fastapi_fastkit.backend.main import (
32
32
  create_venv,
33
33
  find_template_core_modules,
34
34
  inject_project_metadata,
35
- install_dependencies,
36
35
  install_dependencies_with_manager,
37
36
  )
38
37
  from fastapi_fastkit.backend.transducer import copy_and_convert_template
@@ -50,17 +49,38 @@ class TemplateInspector:
50
49
  Uses context manager protocol for proper resource cleanup.
51
50
  """
52
51
 
53
- def __init__(self, template_path: str):
52
+ def __init__(self, template_path: str, temp_base_dir: Optional[str] = None):
54
53
  self.template_path = Path(template_path)
55
54
  self.errors: List[str] = []
56
55
  self.warnings: List[str] = []
57
- self.temp_dir = os.path.join(os.path.dirname(__file__), "temp")
56
+ template_name = Path(template_path).name
57
+
58
+ # use temp_base_dir or fall back to backend directory (temp)
59
+ if temp_base_dir:
60
+ self.temp_dir = os.path.join(temp_base_dir, f"temp_{template_name}")
61
+ else:
62
+ self.temp_dir = os.path.join(
63
+ os.path.dirname(__file__), f"temp_{template_name}"
64
+ )
65
+
58
66
  self._cleanup_needed = False
59
67
  self.template_config: Optional[Dict[str, Any]] = None
60
68
 
61
69
  def __enter__(self) -> "TemplateInspector":
62
70
  """Enter context manager - create temp directory and copy template."""
63
71
  try:
72
+ # Clean up any existing temp directory for this template
73
+ if os.path.exists(self.temp_dir):
74
+ debug_log(
75
+ f"Cleaning up existing temp directory: {self.temp_dir}", "info"
76
+ )
77
+ try:
78
+ shutil.rmtree(self.temp_dir)
79
+ except OSError as e:
80
+ debug_log(
81
+ f"Failed to cleanup existing temp directory: {e}", "warning"
82
+ )
83
+
64
84
  os.makedirs(self.temp_dir, exist_ok=True)
65
85
  copy_and_convert_template(str(self.template_path), self.temp_dir)
66
86
 
@@ -81,18 +101,142 @@ class TemplateInspector:
81
101
  self._cleanup()
82
102
 
83
103
  def _cleanup(self) -> None:
84
- """Cleanup temp directory if it exists and cleanup is needed."""
104
+ """Cleanup temp directory."""
85
105
  if self._cleanup_needed and os.path.exists(self.temp_dir):
106
+ temp_dir_path = self.temp_dir
86
107
  try:
87
- shutil.rmtree(self.temp_dir)
88
- debug_log(f"Cleaned up temp directory {self.temp_dir}", "debug")
89
- except OSError as e:
108
+ self._cleanup_docker_services()
109
+
110
+ import time
111
+
112
+ time.sleep(3)
113
+
114
+ self._force_cleanup_directory(temp_dir_path)
115
+
116
+ except Exception as e:
90
117
  debug_log(
91
- f"Failed to cleanup temp directory {self.temp_dir}: {e}", "warning"
118
+ f"Warning: Unexpected error during cleanup of {temp_dir_path}: {e}",
119
+ "warning",
92
120
  )
121
+ try:
122
+ self._force_cleanup_directory(temp_dir_path)
123
+ except Exception:
124
+ pass
93
125
  finally:
94
126
  self._cleanup_needed = False
95
127
 
128
+ def _force_cleanup_directory(self, directory_path: str) -> None:
129
+ """Force cleanup of directory with multiple strategies."""
130
+ import stat
131
+ import time
132
+
133
+ max_retries = 5
134
+ for attempt in range(max_retries):
135
+ try:
136
+ shutil.rmtree(directory_path)
137
+ debug_log(
138
+ f"Successfully cleaned up temp directory: {directory_path}", "info"
139
+ )
140
+ return
141
+ except (OSError, PermissionError) as e:
142
+ if attempt < max_retries - 1:
143
+ debug_log(
144
+ f"Attempt {attempt + 1} failed to cleanup {directory_path}: {e}",
145
+ "warning",
146
+ )
147
+
148
+ try:
149
+ self._fix_directory_permissions(directory_path)
150
+ shutil.rmtree(directory_path)
151
+ debug_log(
152
+ f"Successfully cleaned up temp directory after permission fix: {directory_path}",
153
+ "info",
154
+ )
155
+ return
156
+ except Exception:
157
+ pass
158
+
159
+ try:
160
+ self._remove_directory_contents(directory_path)
161
+ os.rmdir(directory_path)
162
+ debug_log(
163
+ f"Successfully cleaned up temp directory by removing contents: {directory_path}",
164
+ "info",
165
+ )
166
+ return
167
+ except Exception:
168
+ pass
169
+
170
+ time.sleep(2)
171
+ else:
172
+ debug_log(
173
+ f"Failed to cleanup temp directory after {max_retries} attempts: {directory_path}",
174
+ "warning",
175
+ )
176
+ try:
177
+ import subprocess
178
+
179
+ if os.name == "nt": # Windows
180
+ subprocess.run(
181
+ ["rmdir", "/s", "/q", directory_path],
182
+ check=False,
183
+ shell=True,
184
+ )
185
+ else: # Unix-like
186
+ subprocess.run(["rm", "-rf", directory_path], check=False)
187
+ debug_log(
188
+ f"Force cleanup completed for: {directory_path}", "info"
189
+ )
190
+ except Exception:
191
+ debug_log(
192
+ f"All cleanup attempts failed for: {directory_path}",
193
+ "warning",
194
+ )
195
+
196
+ def _fix_directory_permissions(self, directory_path: str) -> None:
197
+ """Fix directory permissions to allow removal."""
198
+ import os
199
+ import stat
200
+
201
+ def fix_permissions(path: str) -> None:
202
+ try:
203
+ os.chmod(path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
204
+ except Exception:
205
+ pass
206
+
207
+ # Fix permissions for directory and all contents
208
+ fix_permissions(directory_path)
209
+ for root, dirs, files in os.walk(directory_path):
210
+ fix_permissions(root)
211
+ for d in dirs:
212
+ fix_permissions(os.path.join(root, d))
213
+ for f in files:
214
+ fix_permissions(os.path.join(root, f))
215
+
216
+ def _remove_directory_contents(self, directory_path: str) -> None:
217
+ """Remove directory contents file by file."""
218
+ import os
219
+ import stat
220
+
221
+ for root, dirs, files in os.walk(directory_path, topdown=False):
222
+ # Remove files first
223
+ for file in files:
224
+ file_path = os.path.join(root, file)
225
+ try:
226
+ os.chmod(file_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
227
+ os.remove(file_path)
228
+ except Exception:
229
+ pass
230
+
231
+ # Remove directories
232
+ for dir_name in dirs:
233
+ dir_path = os.path.join(root, dir_name)
234
+ try:
235
+ os.chmod(dir_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
236
+ os.rmdir(dir_path)
237
+ except Exception:
238
+ pass
239
+
96
240
  def _load_template_config(self) -> Optional[Dict[str, Any]]:
97
241
  """Load template configuration from template-config.yml if available."""
98
242
  config_file = os.path.join(self.temp_dir, "template-config.yml")
@@ -1036,12 +1180,23 @@ class TemplateInspector:
1036
1180
  try:
1037
1181
  debug_log("Cleaning up Docker services", "info")
1038
1182
  subprocess.run(
1039
- ["docker-compose", "down", "-v"],
1183
+ ["docker-compose", "down", "-v", "--remove-orphans"],
1040
1184
  cwd=self.temp_dir,
1041
1185
  capture_output=True,
1042
1186
  text=True,
1043
1187
  timeout=60,
1044
1188
  )
1189
+
1190
+ try:
1191
+ subprocess.run(
1192
+ ["docker", "system", "prune", "-f"],
1193
+ capture_output=True,
1194
+ text=True,
1195
+ timeout=30,
1196
+ )
1197
+ except Exception:
1198
+ pass
1199
+
1045
1200
  except Exception as e:
1046
1201
  debug_log(f"Failed to cleanup Docker services: {e}", "warning")
1047
1202
 
@@ -1086,11 +1241,14 @@ class TemplateInspector:
1086
1241
  }
1087
1242
 
1088
1243
 
1089
- def inspect_fastapi_template(template_path: str) -> Dict[str, Any]:
1244
+ def inspect_fastapi_template(
1245
+ template_path: str, temp_base_dir: Optional[str] = None
1246
+ ) -> Dict[str, Any]:
1090
1247
  """
1091
1248
  Convenience function to inspect a FastAPI template.
1092
1249
 
1093
1250
  :param template_path: Path to the template to inspect
1251
+ :param temp_base_dir: Base directory for temporary files (defaults to backend directory)
1094
1252
  :return: Inspection report dictionary
1095
1253
  """
1096
1254
  template_name = Path(template_path).name
@@ -1098,7 +1256,7 @@ def inspect_fastapi_template(template_path: str) -> Dict[str, Any]:
1098
1256
  f"Starting template inspection for {template_name} at {template_path}", "info"
1099
1257
  )
1100
1258
 
1101
- with TemplateInspector(template_path) as inspector:
1259
+ with TemplateInspector(template_path, temp_base_dir) as inspector:
1102
1260
  is_valid = inspector.inspect_template()
1103
1261
  report = inspector.get_report()
1104
1262
 
@@ -0,0 +1,51 @@
1
+ # --------------------------------------------------------------------------
2
+ # Interactive module for FastAPI-fastkit
3
+ #
4
+ # Provides interactive prompts and configuration building for dynamic
5
+ # project creation.
6
+ #
7
+ # @author bnbong bbbong9@gmail.com
8
+ # --------------------------------------------------------------------------
9
+ from .config_builder import InteractiveConfigBuilder
10
+ from .prompts import (
11
+ prompt_additional_features,
12
+ prompt_authentication_selection,
13
+ prompt_basic_info,
14
+ prompt_caching_selection,
15
+ prompt_custom_packages,
16
+ prompt_database_selection,
17
+ prompt_deployment_options,
18
+ prompt_monitoring_selection,
19
+ prompt_package_manager_selection,
20
+ prompt_template_selection,
21
+ prompt_testing_selection,
22
+ prompt_utilities_selection,
23
+ )
24
+ from .selectors import confirm_selections, multi_select_prompt, render_selection_table
25
+ from .validators import (
26
+ sanitize_custom_packages,
27
+ validate_feature_compatibility,
28
+ validate_package_name,
29
+ )
30
+
31
+ __all__ = [
32
+ "InteractiveConfigBuilder",
33
+ "prompt_basic_info",
34
+ "prompt_template_selection",
35
+ "prompt_database_selection",
36
+ "prompt_authentication_selection",
37
+ "prompt_additional_features",
38
+ "prompt_testing_selection",
39
+ "prompt_deployment_options",
40
+ "prompt_custom_packages",
41
+ "prompt_caching_selection",
42
+ "prompt_monitoring_selection",
43
+ "prompt_utilities_selection",
44
+ "prompt_package_manager_selection",
45
+ "render_selection_table",
46
+ "multi_select_prompt",
47
+ "confirm_selections",
48
+ "validate_package_name",
49
+ "validate_feature_compatibility",
50
+ "sanitize_custom_packages",
51
+ ]
@@ -0,0 +1,186 @@
1
+ # --------------------------------------------------------------------------
2
+ # Build comprehensive project configuration from user selections
3
+ #
4
+ # Aggregates all user choices into a structured configuration dict
5
+ # that can be consumed by the project builder.
6
+ #
7
+ # @author bnbong bbbong9@gmail.com
8
+ # --------------------------------------------------------------------------
9
+ from typing import Any, Dict, List
10
+
11
+ from fastapi_fastkit.utils.main import console, print_warning
12
+
13
+ from .prompts import (
14
+ prompt_additional_features,
15
+ prompt_basic_info,
16
+ prompt_template_selection,
17
+ )
18
+ from .selectors import confirm_selections
19
+ from .validators import sanitize_custom_packages, validate_feature_compatibility
20
+
21
+
22
+ class InteractiveConfigBuilder:
23
+ """
24
+ Builds project configuration from interactive prompts.
25
+
26
+ Orchestrates the entire interactive flow and aggregates all
27
+ user selections into a cohesive configuration dictionary.
28
+ """
29
+
30
+ def __init__(self, settings: Any) -> None:
31
+ """
32
+ Initialize the config builder.
33
+
34
+ Args:
35
+ settings: FastkitConfig instance
36
+ """
37
+ self.settings = settings
38
+ self.config: Dict[str, Any] = {}
39
+
40
+ def run_interactive_flow(self) -> Dict[str, Any]:
41
+ """
42
+ Execute full interactive flow and return config.
43
+
44
+ Returns:
45
+ Complete project configuration dictionary
46
+ """
47
+ console.print(
48
+ "\n[bold magenta]⚡ FastAPI-fastkit Interactive Project Setup ⚡[/bold magenta]\n"
49
+ )
50
+
51
+ # Step 1: Basic information
52
+ self._collect_basic_info()
53
+
54
+ # Step 2: Always use Empty template as base for interactive mode
55
+ # (Feature selection will build the project incrementally)
56
+ self.config["base_template"] = None # None = Empty project
57
+
58
+ # Step 3: Feature selections
59
+ self._collect_feature_selections()
60
+
61
+ # Step 4: Build final configuration
62
+ final_config = self._build_final_config()
63
+
64
+ # Step 5: Validate compatibility
65
+ is_valid, warning = validate_feature_compatibility(final_config)
66
+ if warning:
67
+ print_warning(warning, title="Feature Compatibility")
68
+
69
+ # Step 6: Confirm selections
70
+ if confirm_selections(final_config):
71
+ return final_config
72
+ else:
73
+ print_warning("Project creation cancelled by user.")
74
+ return {}
75
+
76
+ def _collect_basic_info(self) -> None:
77
+ """Collect basic project information."""
78
+ basic_info = prompt_basic_info()
79
+ self.config.update(basic_info)
80
+
81
+ def _collect_template_selection(self) -> None:
82
+ """Collect template selection."""
83
+ template = prompt_template_selection(self.settings)
84
+ self.config["base_template"] = template
85
+
86
+ def _collect_feature_selections(self) -> None:
87
+ """Collect all feature selections."""
88
+ features = prompt_additional_features(self.settings)
89
+ self.config.update(features)
90
+
91
+ def _build_final_config(self) -> Dict[str, Any]:
92
+ """
93
+ Build and validate final configuration.
94
+
95
+ Returns:
96
+ Complete configuration dictionary with collected dependencies
97
+ """
98
+ # Collect all dependencies
99
+ all_deps = self._collect_all_dependencies()
100
+
101
+ # Add to config
102
+ self.config["all_dependencies"] = all_deps
103
+
104
+ return self.config
105
+
106
+ def _collect_all_dependencies(self) -> List[str]:
107
+ """
108
+ Collect all dependencies from selected features.
109
+
110
+ Returns:
111
+ Deduplicated list of all package dependencies
112
+ """
113
+ dependencies = set()
114
+
115
+ # Always add base FastAPI dependencies
116
+ dependencies.update(["fastapi", "uvicorn", "pydantic", "pydantic-settings"])
117
+
118
+ # Database dependencies
119
+ db_info = self.config.get("database", {})
120
+ if isinstance(db_info, dict) and db_info.get("packages"):
121
+ dependencies.update(db_info["packages"])
122
+
123
+ # Authentication dependencies
124
+ auth_type = self.config.get("authentication", "None")
125
+ if auth_type != "None":
126
+ auth_packages = self.settings.PACKAGE_CATALOG["authentication"].get(
127
+ auth_type, []
128
+ )
129
+ dependencies.update(auth_packages)
130
+
131
+ # Async tasks dependencies
132
+ tasks_type = self.config.get("async_tasks", "None")
133
+ if tasks_type != "None":
134
+ task_packages = self.settings.PACKAGE_CATALOG["async_tasks"].get(
135
+ tasks_type, []
136
+ )
137
+ dependencies.update(task_packages)
138
+
139
+ # Caching dependencies
140
+ cache_type = self.config.get("caching", "None")
141
+ if cache_type != "None":
142
+ cache_packages = self.settings.PACKAGE_CATALOG["caching"].get(
143
+ cache_type, []
144
+ )
145
+ dependencies.update(cache_packages)
146
+
147
+ # Monitoring dependencies
148
+ monitoring_type = self.config.get("monitoring", "None")
149
+ if monitoring_type != "None":
150
+ monitoring_packages = self.settings.PACKAGE_CATALOG["monitoring"].get(
151
+ monitoring_type, []
152
+ )
153
+ dependencies.update(monitoring_packages)
154
+
155
+ # Testing dependencies
156
+ testing_type = self.config.get("testing", "None")
157
+ if testing_type != "None":
158
+ testing_packages = self.settings.PACKAGE_CATALOG["testing"].get(
159
+ testing_type, []
160
+ )
161
+ dependencies.update(testing_packages)
162
+
163
+ # Utilities dependencies
164
+ utilities = self.config.get("utilities", [])
165
+ for util in utilities:
166
+ if util in self.settings.PACKAGE_CATALOG["utilities"]:
167
+ util_packages = self.settings.PACKAGE_CATALOG["utilities"][util]
168
+ dependencies.update(util_packages)
169
+
170
+ # Custom packages
171
+ custom_packages = self.config.get("custom_packages", [])
172
+ if custom_packages:
173
+ sanitized = sanitize_custom_packages(custom_packages)
174
+ dependencies.update(sanitized)
175
+
176
+ # Convert to sorted list
177
+ return sorted(list(dependencies))
178
+
179
+ def get_config(self) -> Dict[str, Any]:
180
+ """
181
+ Get the current configuration.
182
+
183
+ Returns:
184
+ Current configuration dictionary
185
+ """
186
+ return self.config