FastAPI-fastkit 1.1.5__tar.gz → 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/PKG-INFO +38 -8
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/README.md +34 -5
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/pyproject.toml +21 -10
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/__init__.py +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/inspector.py +170 -12
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/interactive/__init__.py +51 -0
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/interactive/config_builder.py +186 -0
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/interactive/prompts.py +528 -0
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/interactive/selectors.py +241 -0
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/interactive/validators.py +163 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/main.py +112 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +68 -7
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/project_builder/__init__.py +17 -0
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/project_builder/config_generator.py +594 -0
- fastapi_fastkit-1.2.1/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +210 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/cli.py +235 -20
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/core/settings.py +74 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/pyproject.toml-tpl +2 -1
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_backends/test_inspector.py +508 -115
- fastapi_fastkit-1.2.1/tests/test_backends/test_interactive_config_builder.py +435 -0
- fastapi_fastkit-1.2.1/tests/test_backends/test_interactive_prompts.py +188 -0
- fastapi_fastkit-1.2.1/tests/test_backends/test_interactive_selectors.py +231 -0
- fastapi_fastkit-1.2.1/tests/test_backends/test_interactive_validators.py +579 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_backends/test_main.py +60 -12
- fastapi_fastkit-1.2.1/tests/test_backends/test_package_managers.py +1358 -0
- fastapi_fastkit-1.2.1/tests/test_backends/test_project_builder_config_generator.py +411 -0
- fastapi_fastkit-1.2.1/tests/test_backends/test_project_builder_dependency_collector.py +503 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_cli_operations/test_cli.py +19 -2
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_cli_operations/test_cli_extended.py +107 -8
- fastapi_fastkit-1.2.1/tests/test_cli_operations/test_cli_interactive_integration.py +282 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_core.py +10 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_utils.py +2 -4
- fastapi_fastkit-1.1.5/src/fastapi_fastkit/__init__.py +0 -1
- fastapi_fastkit-1.1.5/tests/test_backends/test_package_managers.py +0 -469
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/LICENSE +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/__main__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/package_managers/base.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/package_managers/factory.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/backend/transducer.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/core/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/core/exceptions.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/README.md +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/exceptions.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/documents.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/router.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/pre-start.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/deps.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/backend_pre_start.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/init_data.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/tests_pre_start.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/test_main.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/py.typed +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/utils/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/utils/logging.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/src/fastapi_fastkit/utils/main.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/conftest.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_backends/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_backends/test_configure.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_backends/test_console_sizing.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_backends/test_transducer.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_cli_operations/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_rich/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_rich/test_rich.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_templates/__init__.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_templates/template_configs.yaml +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/tests/test_templates/test_all_templates.py +0 -0
- {fastapi_fastkit-1.1.5 → fastapi_fastkit-1.2.1}/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.1
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: Fast, easy-to-use starter kit for new users of Python and FastAPI
|
|
5
5
|
Author-Email: bnbong <bbbong9@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -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>=
|
|
15
|
+
Requires-Dist: pytest>=9.0.3; extra == "dev"
|
|
16
16
|
Requires-Dist: pytest-cov>=6.2.1; extra == "dev"
|
|
17
|
-
Requires-Dist: black>=
|
|
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">
|
|
@@ -33,26 +34,33 @@ Description-Content-Type: text/markdown
|
|
|
33
34
|
<a href="https://github.com/bnbong/FastAPI-fastkit/releases" target="_blank">
|
|
34
35
|
<img src="https://img.shields.io/github/v/release/bnbong/FastAPI-fastkit" alt="GitHub Release">
|
|
35
36
|
</a>
|
|
37
|
+
<a href="https://codecov.io/gh/bnbong/FastAPI-fastkit" >
|
|
38
|
+
<img src="https://codecov.io/gh/bnbong/FastAPI-fastkit/graph/badge.svg?token=WS0B6WWD8K"/>
|
|
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>
|
|
36
43
|
</p>
|
|
37
44
|
|
|
38
45
|
---
|
|
39
46
|
|
|
40
47
|
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
48
|
|
|
42
|
-
This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin`
|
|
49
|
+
This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin` CLI operation.
|
|
43
50
|
|
|
44
51
|
## Key Features
|
|
45
52
|
|
|
46
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)
|
|
47
|
-
-
|
|
48
|
-
-
|
|
54
|
+
- **✨ Interactive project builder**: Guided step-by-step feature selection for databases, authentication, caching, monitoring, and more with auto-generated code
|
|
55
|
+
- **🎨 Prettier CLI output** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
|
|
56
|
+
- **📋 Standards-based FastAPI project templates** : Templates follow Python standards and common FastAPI patterns.
|
|
49
57
|
- **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
|
|
50
58
|
- **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
|
|
51
59
|
- **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
|
|
52
60
|
|
|
53
61
|
## Installation
|
|
54
62
|
|
|
55
|
-
Install `FastAPI-fastkit`
|
|
63
|
+
Install `FastAPI-fastkit` in your Python environment.
|
|
56
64
|
|
|
57
65
|
```console
|
|
58
66
|
$ pip install FastAPI-fastkit
|
|
@@ -76,6 +84,28 @@ fastkit init [OPTIONS]
|
|
|
76
84
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
77
85
|
- Stack selection: `minimal` | `standard` | `full` (interactive)
|
|
78
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
|
+
- **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
|
|
94
|
+
- **Authentication**: JWT, OAuth2, FastAPI-Users, Session-based
|
|
95
|
+
- **Background tasks**: Celery, Dramatiq
|
|
96
|
+
- **Caching**: Redis, fastapi-cache2
|
|
97
|
+
- **Monitoring**: Loguru, OpenTelemetry, Prometheus
|
|
98
|
+
- **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
|
|
99
|
+
- **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
|
|
100
|
+
- **Deployment**: Docker, docker-compose with auto-generated configs
|
|
101
|
+
- **Package manager**: pip, uv, pdm, poetry
|
|
102
|
+
- **Custom packages**: Add your own dependencies
|
|
103
|
+
- Auto-generates:
|
|
104
|
+
- `main.py` with selected features integrated
|
|
105
|
+
- Database and authentication configuration files
|
|
106
|
+
- Docker deployment files (Dockerfile, docker-compose.yml)
|
|
107
|
+
- Test configuration (pytest with coverage)
|
|
108
|
+
|
|
79
109
|
### Create a project from a template
|
|
80
110
|
```console
|
|
81
111
|
fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
@@ -166,7 +196,7 @@ For detailed contribution guidelines, development setup, and project standards,
|
|
|
166
196
|
|
|
167
197
|
FastAPI-fastkit aims to provide a fast and easy-to-use starter kit for new users of Python and FastAPI.
|
|
168
198
|
|
|
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
|
|
199
|
+
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
200
|
|
|
171
201
|
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
202
|
|
|
@@ -11,26 +11,33 @@
|
|
|
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>
|
|
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>
|
|
14
20
|
</p>
|
|
15
21
|
|
|
16
22
|
---
|
|
17
23
|
|
|
18
24
|
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
25
|
|
|
20
|
-
This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin`
|
|
26
|
+
This project was inspired by the `SpringBoot initializer` & Python Django's `django-admin` CLI operation.
|
|
21
27
|
|
|
22
28
|
## Key Features
|
|
23
29
|
|
|
24
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)
|
|
25
|
-
-
|
|
26
|
-
-
|
|
31
|
+
- **✨ Interactive project builder**: Guided step-by-step feature selection for databases, authentication, caching, monitoring, and more with auto-generated code
|
|
32
|
+
- **🎨 Prettier CLI output** : Beautiful CLI experience powered by [rich library](https://github.com/Textualize/rich)
|
|
33
|
+
- **📋 Standards-based FastAPI project templates** : Templates follow Python standards and common FastAPI patterns.
|
|
27
34
|
- **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
|
|
28
35
|
- **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
|
|
29
36
|
- **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
|
|
30
37
|
|
|
31
38
|
## Installation
|
|
32
39
|
|
|
33
|
-
Install `FastAPI-fastkit`
|
|
40
|
+
Install `FastAPI-fastkit` in your Python environment.
|
|
34
41
|
|
|
35
42
|
```console
|
|
36
43
|
$ pip install FastAPI-fastkit
|
|
@@ -54,6 +61,28 @@ fastkit init [OPTIONS]
|
|
|
54
61
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
55
62
|
- Stack selection: `minimal` | `standard` | `full` (interactive)
|
|
56
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
|
+
- **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
|
|
71
|
+
- **Authentication**: JWT, OAuth2, FastAPI-Users, Session-based
|
|
72
|
+
- **Background tasks**: Celery, Dramatiq
|
|
73
|
+
- **Caching**: Redis, fastapi-cache2
|
|
74
|
+
- **Monitoring**: Loguru, OpenTelemetry, Prometheus
|
|
75
|
+
- **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
|
|
76
|
+
- **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
|
|
77
|
+
- **Deployment**: Docker, docker-compose with auto-generated configs
|
|
78
|
+
- **Package manager**: pip, uv, pdm, poetry
|
|
79
|
+
- **Custom packages**: Add your own dependencies
|
|
80
|
+
- Auto-generates:
|
|
81
|
+
- `main.py` with selected features integrated
|
|
82
|
+
- Database and authentication configuration files
|
|
83
|
+
- Docker deployment files (Dockerfile, docker-compose.yml)
|
|
84
|
+
- Test configuration (pytest with coverage)
|
|
85
|
+
|
|
57
86
|
### Create a project from a template
|
|
58
87
|
```console
|
|
59
88
|
fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
@@ -144,7 +173,7 @@ For detailed contribution guidelines, development setup, and project standards,
|
|
|
144
173
|
|
|
145
174
|
FastAPI-fastkit aims to provide a fast and easy-to-use starter kit for new users of Python and FastAPI.
|
|
146
175
|
|
|
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
|
|
176
|
+
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
177
|
|
|
149
178
|
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
179
|
|
|
@@ -11,7 +11,7 @@ dependencies = [
|
|
|
11
11
|
]
|
|
12
12
|
requires-python = ">=3.12"
|
|
13
13
|
readme = "README.md"
|
|
14
|
-
version = "1.1
|
|
14
|
+
version = "1.2.1"
|
|
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>=
|
|
27
|
+
"pytest>=9.0.3",
|
|
28
28
|
"pytest-cov>=6.2.1",
|
|
29
|
-
"black>=
|
|
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]
|
|
@@ -41,13 +42,6 @@ requires = [
|
|
|
41
42
|
]
|
|
42
43
|
build-backend = "pdm.backend"
|
|
43
44
|
|
|
44
|
-
[tool.pdm]
|
|
45
|
-
distribution = true
|
|
46
|
-
|
|
47
|
-
[tool.pdm.version]
|
|
48
|
-
source = "file"
|
|
49
|
-
path = "src/fastapi_fastkit/__init__.py"
|
|
50
|
-
|
|
51
45
|
[tool.pytest.ini_options]
|
|
52
46
|
testpaths = [
|
|
53
47
|
"tests",
|
|
@@ -76,6 +70,13 @@ module = "fastapi_fastkit.core"
|
|
|
76
70
|
ignore_missing_imports = true
|
|
77
71
|
check_untyped_defs = false
|
|
78
72
|
|
|
73
|
+
[tool.pdm]
|
|
74
|
+
distribution = true
|
|
75
|
+
|
|
76
|
+
[tool.pdm.version]
|
|
77
|
+
source = "file"
|
|
78
|
+
path = "src/fastapi_fastkit/__init__.py"
|
|
79
|
+
|
|
79
80
|
[tool.coverage.run]
|
|
80
81
|
source = [
|
|
81
82
|
"src/fastapi_fastkit",
|
|
@@ -117,4 +118,14 @@ docs = [
|
|
|
117
118
|
"mkdocs>=1.6.1",
|
|
118
119
|
"mkdocs-material>=9.6.15",
|
|
119
120
|
"mdx-include>=1.4.2",
|
|
121
|
+
"mkdocs-static-i18n>=1.3.0",
|
|
122
|
+
"pyyaml>=6.0.3",
|
|
123
|
+
"types-PyYAML>=6.0.12.20250915",
|
|
124
|
+
"pygments>=2.20.0",
|
|
125
|
+
"requests>=2.33.0",
|
|
126
|
+
"pymdown-extensions>=10.17.2",
|
|
127
|
+
]
|
|
128
|
+
translation = [
|
|
129
|
+
"openai>=2.8.1",
|
|
130
|
+
"anthropic>=0.74.0",
|
|
120
131
|
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = 'v1.2.1'
|
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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"
|
|
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(
|
|
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
|
+
]
|