FastAPI-fastkit 1.1.0__tar.gz → 1.1.2__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.0 → fastapi_fastkit-1.1.2}/PKG-INFO +1 -1
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/pyproject.toml +1 -1
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/__init__.py +1 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/inspector.py +86 -2
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/main.py +133 -4
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +14 -3
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/cli.py +70 -32
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/core/settings.py +3 -0
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +85 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +1 -1
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/config.py-tpl +6 -6
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +85 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +6 -6
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +6 -6
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/exceptions.py-tpl +2 -2
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +81 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/config.py-tpl +6 -6
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +84 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/config.py-tpl +6 -6
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +77 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +1 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +6 -6
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +88 -0
- fastapi_fastkit-1.1.2/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +90 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_backends/test_inspector.py +23 -4
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_backends/test_main.py +93 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_cli_operations/test_cli.py +265 -35
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_cli_operations/test_cli_extended.py +11 -7
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_templates/test_all_templates.py +4 -2
- fastapi_fastkit-1.1.0/src/fastapi_fastkit/__init__.py +0 -1
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/LICENSE +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/README.md +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/__main__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/package_managers/base.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/package_managers/factory.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/backend/transducer.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/core/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/core/exceptions.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/README.md +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/documents.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp/router.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/pre-start.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/deps.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/backend_pre_start.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/init_data.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/tests_pre_start.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/py.typed +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/utils/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/utils/logging.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/src/fastapi_fastkit/utils/main.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/conftest.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_backends/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_backends/test_configure.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_backends/test_package_managers.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_backends/test_transducer.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_cli_operations/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_core.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_rich/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_rich/test_rich.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_templates/__init__.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_templates/template_configs.yaml +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_templates/test_config_based_templates.py +0 -0
- {fastapi_fastkit-1.1.0 → fastapi_fastkit-1.1.2}/tests/test_utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = 'v1.1.2'
|
|
@@ -31,7 +31,9 @@ import yaml # type: ignore
|
|
|
31
31
|
from fastapi_fastkit.backend.main import (
|
|
32
32
|
create_venv,
|
|
33
33
|
find_template_core_modules,
|
|
34
|
+
inject_project_metadata,
|
|
34
35
|
install_dependencies,
|
|
36
|
+
install_dependencies_with_manager,
|
|
35
37
|
)
|
|
36
38
|
from fastapi_fastkit.backend.transducer import copy_and_convert_template
|
|
37
39
|
from fastapi_fastkit.core.settings import settings
|
|
@@ -61,6 +63,10 @@ class TemplateInspector:
|
|
|
61
63
|
try:
|
|
62
64
|
os.makedirs(self.temp_dir, exist_ok=True)
|
|
63
65
|
copy_and_convert_template(str(self.template_path), self.temp_dir)
|
|
66
|
+
|
|
67
|
+
# Inject dummy metadata for inspection
|
|
68
|
+
self._inject_dummy_metadata()
|
|
69
|
+
|
|
64
70
|
self._cleanup_needed = True
|
|
65
71
|
self.template_config = self._load_template_config()
|
|
66
72
|
debug_log(f"Created temporary directory at {self.temp_dir}", "debug")
|
|
@@ -112,6 +118,43 @@ class TemplateInspector:
|
|
|
112
118
|
debug_log(f"Failed to load template configuration: {e}", "warning")
|
|
113
119
|
return None
|
|
114
120
|
|
|
121
|
+
def _inject_dummy_metadata(self) -> None:
|
|
122
|
+
"""Inject dummy metadata for template inspection."""
|
|
123
|
+
try:
|
|
124
|
+
# Use dummy metadata for inspection
|
|
125
|
+
dummy_metadata = {
|
|
126
|
+
"project_name": "test-template",
|
|
127
|
+
"author": "Template Inspector",
|
|
128
|
+
"author_email": "inspector@fastapi-fastkit.dev",
|
|
129
|
+
"description": "Test project for template inspection",
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
inject_project_metadata(
|
|
133
|
+
self.temp_dir,
|
|
134
|
+
dummy_metadata["project_name"],
|
|
135
|
+
dummy_metadata["author"],
|
|
136
|
+
dummy_metadata["author_email"],
|
|
137
|
+
dummy_metadata["description"],
|
|
138
|
+
)
|
|
139
|
+
debug_log("Injected dummy metadata for template inspection", "info")
|
|
140
|
+
|
|
141
|
+
except Exception as e:
|
|
142
|
+
debug_log(f"Failed to inject dummy metadata: {e}", "warning")
|
|
143
|
+
self.warnings.append(f"Failed to inject metadata: {str(e)}")
|
|
144
|
+
|
|
145
|
+
def _detect_package_manager(self) -> str:
|
|
146
|
+
"""Detect the appropriate package manager for the template."""
|
|
147
|
+
# Check for pyproject.toml (modern Python packaging)
|
|
148
|
+
if os.path.exists(os.path.join(self.temp_dir, "pyproject.toml")):
|
|
149
|
+
return "uv" # Use UV for pyproject.toml based projects
|
|
150
|
+
|
|
151
|
+
# Check for requirements.txt (traditional pip)
|
|
152
|
+
if os.path.exists(os.path.join(self.temp_dir, "requirements.txt")):
|
|
153
|
+
return "pip"
|
|
154
|
+
|
|
155
|
+
# Default to pip if no dependency file found
|
|
156
|
+
return "pip"
|
|
157
|
+
|
|
115
158
|
def _check_docker_available(self) -> bool:
|
|
116
159
|
"""Check if Docker and Docker Compose are available."""
|
|
117
160
|
try:
|
|
@@ -393,7 +436,21 @@ class TemplateInspector:
|
|
|
393
436
|
try:
|
|
394
437
|
# Create virtual environment for testing
|
|
395
438
|
venv_path = create_venv(self.temp_dir)
|
|
396
|
-
|
|
439
|
+
|
|
440
|
+
# Detect and use appropriate package manager
|
|
441
|
+
package_manager = self._detect_package_manager()
|
|
442
|
+
debug_log(f"Using package manager: {package_manager}", "info")
|
|
443
|
+
|
|
444
|
+
try:
|
|
445
|
+
install_dependencies_with_manager(
|
|
446
|
+
self.temp_dir, venv_path, package_manager
|
|
447
|
+
)
|
|
448
|
+
except Exception as dep_error:
|
|
449
|
+
# Capture detailed dependency installation error
|
|
450
|
+
error_msg = f"Failed to install dependencies: {str(dep_error)}"
|
|
451
|
+
debug_log(f"Dependency installation failed: {dep_error}", "error")
|
|
452
|
+
self.errors.append(error_msg)
|
|
453
|
+
return False
|
|
397
454
|
|
|
398
455
|
# Check if scripts/test.sh exists
|
|
399
456
|
test_script_path = os.path.join(self.temp_dir, "scripts", "test.sh")
|
|
@@ -557,7 +614,21 @@ class TemplateInspector:
|
|
|
557
614
|
try:
|
|
558
615
|
# Create virtual environment for testing
|
|
559
616
|
venv_path = create_venv(self.temp_dir)
|
|
560
|
-
|
|
617
|
+
|
|
618
|
+
# Detect and use appropriate package manager
|
|
619
|
+
package_manager = self._detect_package_manager()
|
|
620
|
+
debug_log(f"Using package manager: {package_manager}", "info")
|
|
621
|
+
|
|
622
|
+
try:
|
|
623
|
+
install_dependencies_with_manager(
|
|
624
|
+
self.temp_dir, venv_path, package_manager
|
|
625
|
+
)
|
|
626
|
+
except Exception as dep_error:
|
|
627
|
+
# Capture detailed dependency installation error
|
|
628
|
+
error_msg = f"Failed to install dependencies: {str(dep_error)}"
|
|
629
|
+
debug_log(f"Dependency installation failed: {dep_error}", "error")
|
|
630
|
+
self.errors.append(error_msg)
|
|
631
|
+
return False
|
|
561
632
|
|
|
562
633
|
# Set up fallback environment (e.g., SQLite database)
|
|
563
634
|
fallback_config = self.template_config["fallback_testing"]
|
|
@@ -683,6 +754,14 @@ class TemplateInspector:
|
|
|
683
754
|
# Check if all services are running
|
|
684
755
|
all_running = True
|
|
685
756
|
for service in services:
|
|
757
|
+
# Ensure service is a dictionary before calling .get()
|
|
758
|
+
if not isinstance(service, dict):
|
|
759
|
+
debug_log(
|
|
760
|
+
f"Service info is not a dictionary: {service}",
|
|
761
|
+
"warning",
|
|
762
|
+
)
|
|
763
|
+
continue
|
|
764
|
+
|
|
686
765
|
if service.get("State") != "running":
|
|
687
766
|
all_running = False
|
|
688
767
|
debug_log(
|
|
@@ -738,6 +817,11 @@ class TemplateInspector:
|
|
|
738
817
|
app_running = False
|
|
739
818
|
|
|
740
819
|
for service in services:
|
|
820
|
+
# Ensure service is a dictionary before calling .get()
|
|
821
|
+
if not isinstance(service, dict):
|
|
822
|
+
debug_log(f"Service info is not a dictionary: {service}", "warning")
|
|
823
|
+
continue
|
|
824
|
+
|
|
741
825
|
service_name = service.get("Name", "")
|
|
742
826
|
service_state = service.get("State", "")
|
|
743
827
|
|
|
@@ -7,10 +7,15 @@ import os
|
|
|
7
7
|
import re
|
|
8
8
|
from typing import Dict, List
|
|
9
9
|
|
|
10
|
+
import click
|
|
11
|
+
|
|
10
12
|
from fastapi_fastkit import console
|
|
11
13
|
from fastapi_fastkit.backend.package_managers import PackageManagerFactory
|
|
12
|
-
from fastapi_fastkit.backend.transducer import
|
|
13
|
-
|
|
14
|
+
from fastapi_fastkit.backend.transducer import (
|
|
15
|
+
copy_and_convert_template,
|
|
16
|
+
copy_and_convert_template_file,
|
|
17
|
+
)
|
|
18
|
+
from fastapi_fastkit.core.exceptions import BackendExceptions
|
|
14
19
|
from fastapi_fastkit.core.settings import settings
|
|
15
20
|
from fastapi_fastkit.utils.logging import debug_log, get_logger
|
|
16
21
|
from fastapi_fastkit.utils.main import (
|
|
@@ -32,12 +37,12 @@ logger = get_logger(__name__)
|
|
|
32
37
|
def find_template_core_modules(project_dir: str) -> Dict[str, str]:
|
|
33
38
|
"""
|
|
34
39
|
Find core module files in the template project structure.
|
|
35
|
-
Returns a dictionary with paths to main.py, setup.py, and config files.
|
|
40
|
+
Returns a dictionary with paths to main.py, setup.py, pyproject.toml and config files.
|
|
36
41
|
|
|
37
42
|
:param project_dir: Path to the project directory
|
|
38
43
|
:return: Dictionary with paths to core modules
|
|
39
44
|
"""
|
|
40
|
-
core_modules = {"main": "", "setup": "", "config": ""}
|
|
45
|
+
core_modules = {"main": "", "setup": "", "pyproject": "", "config": ""}
|
|
41
46
|
template_paths = settings.TEMPLATE_PATHS
|
|
42
47
|
|
|
43
48
|
# Find main.py
|
|
@@ -54,6 +59,13 @@ def find_template_core_modules(project_dir: str) -> Dict[str, str]:
|
|
|
54
59
|
core_modules["setup"] = full_path
|
|
55
60
|
break
|
|
56
61
|
|
|
62
|
+
# Find pyproject.toml
|
|
63
|
+
for pyproject_path in template_paths["pyproject"]:
|
|
64
|
+
full_path = os.path.join(project_dir, pyproject_path)
|
|
65
|
+
if os.path.exists(full_path):
|
|
66
|
+
core_modules["pyproject"] = full_path
|
|
67
|
+
break
|
|
68
|
+
|
|
57
69
|
# Find config file
|
|
58
70
|
config_info = template_paths["config"]
|
|
59
71
|
if isinstance(config_info, dict):
|
|
@@ -166,6 +178,13 @@ def inject_project_metadata(
|
|
|
166
178
|
author_email,
|
|
167
179
|
description,
|
|
168
180
|
)
|
|
181
|
+
_process_pyproject_file(
|
|
182
|
+
core_modules.get("pyproject", ""),
|
|
183
|
+
project_name,
|
|
184
|
+
author,
|
|
185
|
+
author_email,
|
|
186
|
+
description,
|
|
187
|
+
)
|
|
169
188
|
_process_config_file(core_modules.get("config", ""), project_name)
|
|
170
189
|
|
|
171
190
|
print_success("Project metadata injected successfully")
|
|
@@ -245,6 +264,51 @@ def _process_config_file(config_py: str, project_name: str) -> None:
|
|
|
245
264
|
raise BackendExceptions(f"Failed to process config file: {e}")
|
|
246
265
|
|
|
247
266
|
|
|
267
|
+
def _process_pyproject_file(
|
|
268
|
+
pyproject_toml: str,
|
|
269
|
+
project_name: str,
|
|
270
|
+
author: str,
|
|
271
|
+
author_email: str,
|
|
272
|
+
description: str,
|
|
273
|
+
) -> None:
|
|
274
|
+
"""
|
|
275
|
+
Process pyproject.toml file and inject metadata.
|
|
276
|
+
|
|
277
|
+
:param pyproject_toml: Path to pyproject.toml file
|
|
278
|
+
:param project_name: Project name
|
|
279
|
+
:param author: Author name
|
|
280
|
+
:param author_email: Author email
|
|
281
|
+
:param description: Project description
|
|
282
|
+
"""
|
|
283
|
+
if not pyproject_toml or not os.path.exists(pyproject_toml):
|
|
284
|
+
return
|
|
285
|
+
|
|
286
|
+
try:
|
|
287
|
+
with open(pyproject_toml, "r", encoding="utf-8") as f:
|
|
288
|
+
content = f.read()
|
|
289
|
+
|
|
290
|
+
# Replace placeholders
|
|
291
|
+
replacements = {
|
|
292
|
+
"<project_name>": project_name,
|
|
293
|
+
"<author>": author,
|
|
294
|
+
"<author_email>": author_email,
|
|
295
|
+
"<description>": description,
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
for placeholder, value in replacements.items():
|
|
299
|
+
content = content.replace(placeholder, value)
|
|
300
|
+
|
|
301
|
+
with open(pyproject_toml, "w", encoding="utf-8") as f:
|
|
302
|
+
f.write(content)
|
|
303
|
+
|
|
304
|
+
debug_log("Injected metadata into pyproject.toml", "info")
|
|
305
|
+
print_info("Injected metadata into pyproject.toml")
|
|
306
|
+
|
|
307
|
+
except (OSError, UnicodeDecodeError) as e:
|
|
308
|
+
debug_log(f"Error processing pyproject.toml: {e}", "error")
|
|
309
|
+
raise BackendExceptions(f"Failed to process pyproject.toml: {e}")
|
|
310
|
+
|
|
311
|
+
|
|
248
312
|
def create_venv_with_manager(project_dir: str, manager_type: str = "pip") -> str:
|
|
249
313
|
"""
|
|
250
314
|
Create a virtual environment using the specified package manager.
|
|
@@ -638,3 +702,68 @@ def add_new_route(project_dir: str, route_name: str) -> None:
|
|
|
638
702
|
debug_log(f"Unexpected error while adding route {route_name}: {e}", "error")
|
|
639
703
|
handle_exception(e, f"Error adding new route: {str(e)}")
|
|
640
704
|
raise BackendExceptions(f"Failed to add new route: {str(e)}")
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
# ------------------------------------------------------------
|
|
708
|
+
# Create Project Folder Functions
|
|
709
|
+
# ------------------------------------------------------------
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
def ask_create_project_folder(project_name: str) -> bool:
|
|
713
|
+
"""
|
|
714
|
+
Ask user whether to create a new project folder.
|
|
715
|
+
|
|
716
|
+
:param project_name: Name of the project
|
|
717
|
+
:return: True if user wants to create a folder, False otherwise
|
|
718
|
+
"""
|
|
719
|
+
return click.confirm(
|
|
720
|
+
f"\nCreate a new project folder named '{project_name}'?\n"
|
|
721
|
+
f"Yes: Templates will be placed in './{project_name}/'\n"
|
|
722
|
+
f"No: Templates will be placed in current directory",
|
|
723
|
+
default=True,
|
|
724
|
+
)
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
def deploy_template_with_folder_option(
|
|
728
|
+
target_template: str, user_local: str, project_name: str, create_folder: bool
|
|
729
|
+
) -> tuple[str, str]:
|
|
730
|
+
"""
|
|
731
|
+
Deploy template based on folder creation option.
|
|
732
|
+
|
|
733
|
+
:param target_template: Path to template directory
|
|
734
|
+
:param user_local: User's workspace directory
|
|
735
|
+
:param project_name: Name of the project
|
|
736
|
+
:param create_folder: Whether to create a new folder
|
|
737
|
+
:return: Tuple of (project_dir, deployment_message)
|
|
738
|
+
"""
|
|
739
|
+
if create_folder:
|
|
740
|
+
project_dir = os.path.join(user_local, project_name)
|
|
741
|
+
deployment_message = f"FastAPI template project will deploy at '{user_local}' in folder '{project_name}'"
|
|
742
|
+
copy_and_convert_template(target_template, user_local, project_name)
|
|
743
|
+
else:
|
|
744
|
+
project_dir = user_local
|
|
745
|
+
deployment_message = (
|
|
746
|
+
f"FastAPI template project will deploy directly at '{user_local}'"
|
|
747
|
+
)
|
|
748
|
+
copy_and_convert_template(target_template, user_local, "")
|
|
749
|
+
|
|
750
|
+
click.echo(deployment_message)
|
|
751
|
+
return project_dir, deployment_message
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
def get_deployment_success_message(
|
|
755
|
+
template: str, project_name: str, user_local: str, create_folder: bool
|
|
756
|
+
) -> str:
|
|
757
|
+
"""
|
|
758
|
+
Get appropriate success message based on deployment option.
|
|
759
|
+
|
|
760
|
+
:param template: Template name used
|
|
761
|
+
:param project_name: Name of the project
|
|
762
|
+
:param user_local: User's workspace directory
|
|
763
|
+
:param create_folder: Whether folder was created
|
|
764
|
+
:return: Success message string
|
|
765
|
+
"""
|
|
766
|
+
if create_folder:
|
|
767
|
+
return f"FastAPI project '{project_name}' from '{template}' has been created and saved to {user_local}!"
|
|
768
|
+
else:
|
|
769
|
+
return f"FastAPI project '{project_name}' from '{template}' has been deployed directly to {user_local}!"
|
|
@@ -93,16 +93,27 @@ class UvManager(BasePackageManager):
|
|
|
93
93
|
print_error(f"pyproject.toml file not found at {pyproject_path}")
|
|
94
94
|
raise BackendExceptions("pyproject.toml file not found")
|
|
95
95
|
|
|
96
|
-
# Install dependencies using UV sync
|
|
96
|
+
# Install dependencies using UV sync (including dev dependencies)
|
|
97
|
+
cmd = ["uv", "sync", "--group", "dev"]
|
|
98
|
+
debug_log(
|
|
99
|
+
f"Running UV command: {' '.join(cmd)} in {self.project_dir}", "info"
|
|
100
|
+
)
|
|
101
|
+
|
|
97
102
|
with console.status("[bold green]Installing dependencies with UV..."):
|
|
98
|
-
subprocess.run(
|
|
99
|
-
|
|
103
|
+
result = subprocess.run(
|
|
104
|
+
cmd,
|
|
100
105
|
cwd=str(self.project_dir),
|
|
101
106
|
check=True,
|
|
102
107
|
capture_output=True,
|
|
103
108
|
text=True,
|
|
104
109
|
)
|
|
105
110
|
|
|
111
|
+
# Log UV output for debugging
|
|
112
|
+
if result.stdout:
|
|
113
|
+
debug_log(f"UV stdout: {result.stdout}", "debug")
|
|
114
|
+
if result.stderr:
|
|
115
|
+
debug_log(f"UV stderr: {result.stderr}", "debug")
|
|
116
|
+
|
|
106
117
|
debug_log("Dependencies installed successfully with UV", "info")
|
|
107
118
|
print_success("Dependencies installed successfully with UV")
|
|
108
119
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# TODO : add a feature to automatically fix appropriate fastkit output console size
|
|
1
2
|
# --------------------------------------------------------------------------
|
|
2
3
|
# The Module defines main and core CLI operations for FastAPI-fastkit.
|
|
3
4
|
#
|
|
@@ -17,14 +18,16 @@ from rich.panel import Panel
|
|
|
17
18
|
|
|
18
19
|
from fastapi_fastkit.backend.main import (
|
|
19
20
|
add_new_route,
|
|
21
|
+
ask_create_project_folder,
|
|
20
22
|
create_venv_with_manager,
|
|
23
|
+
deploy_template_with_folder_option,
|
|
21
24
|
find_template_core_modules,
|
|
22
25
|
generate_dependency_file_with_manager,
|
|
26
|
+
get_deployment_success_message,
|
|
23
27
|
inject_project_metadata,
|
|
24
28
|
install_dependencies_with_manager,
|
|
25
29
|
read_template_stack,
|
|
26
30
|
)
|
|
27
|
-
from fastapi_fastkit.backend.transducer import copy_and_convert_template
|
|
28
31
|
from fastapi_fastkit.core.exceptions import CLIExceptions
|
|
29
32
|
from fastapi_fastkit.core.settings import FastkitConfig
|
|
30
33
|
from fastapi_fastkit.utils.logging import get_logger, setup_logging
|
|
@@ -191,6 +194,7 @@ def startdemo(
|
|
|
191
194
|
"""
|
|
192
195
|
Create a new FastAPI project from templates and inject metadata.
|
|
193
196
|
"""
|
|
197
|
+
# TODO : add --template-name option to specify the template name
|
|
194
198
|
settings = ctx.obj["settings"]
|
|
195
199
|
|
|
196
200
|
template_dir = settings.FASTKIT_TEMPLATE_ROOT
|
|
@@ -258,25 +262,27 @@ def startdemo(
|
|
|
258
262
|
print_error("Project creation aborted!")
|
|
259
263
|
return
|
|
260
264
|
|
|
265
|
+
# Ask user whether to create a new project folder
|
|
266
|
+
create_project_folder = ask_create_project_folder(project_name)
|
|
267
|
+
|
|
261
268
|
try:
|
|
262
269
|
user_local = settings.USER_WORKSPACE
|
|
263
|
-
project_dir = os.path.join(user_local, project_name)
|
|
264
|
-
|
|
265
|
-
click.echo(f"FastAPI template project will deploy at '{user_local}'")
|
|
266
270
|
|
|
267
|
-
|
|
271
|
+
project_dir, _ = deploy_template_with_folder_option(
|
|
272
|
+
target_template, user_local, project_name, create_project_folder
|
|
273
|
+
)
|
|
268
274
|
|
|
269
275
|
inject_project_metadata(
|
|
270
276
|
project_dir, project_name, author, author_email, description
|
|
271
277
|
)
|
|
272
278
|
|
|
273
|
-
# Create virtual environment and install dependencies with selected package manager
|
|
274
279
|
venv_path = create_venv_with_manager(project_dir, package_manager)
|
|
275
280
|
install_dependencies_with_manager(project_dir, venv_path, package_manager)
|
|
276
281
|
|
|
277
|
-
|
|
278
|
-
|
|
282
|
+
success_message = get_deployment_success_message(
|
|
283
|
+
template, project_name, user_local, create_project_folder
|
|
279
284
|
)
|
|
285
|
+
print_success(success_message)
|
|
280
286
|
|
|
281
287
|
except Exception as e:
|
|
282
288
|
if settings.DEBUG_MODE:
|
|
@@ -323,8 +329,11 @@ def init(
|
|
|
323
329
|
) -> None:
|
|
324
330
|
"""
|
|
325
331
|
Start a empty FastAPI project setup.
|
|
332
|
+
|
|
326
333
|
This command will automatically create a new FastAPI project directory and a python virtual environment.
|
|
334
|
+
|
|
327
335
|
Dependencies will be automatically installed based on the selected stack at venv.
|
|
336
|
+
|
|
328
337
|
Project metadata will be injected to the project files.
|
|
329
338
|
"""
|
|
330
339
|
settings = ctx.obj["settings"]
|
|
@@ -402,13 +411,15 @@ def init(
|
|
|
402
411
|
print_error("Project creation aborted!")
|
|
403
412
|
return
|
|
404
413
|
|
|
414
|
+
# Ask user whether to create a new project folder
|
|
415
|
+
create_project_folder = ask_create_project_folder(project_name)
|
|
416
|
+
|
|
405
417
|
try:
|
|
406
418
|
user_local = settings.USER_WORKSPACE
|
|
407
|
-
project_dir = os.path.join(user_local, project_name)
|
|
408
|
-
|
|
409
|
-
click.echo(f"FastAPI project will deploy at '{user_local}'")
|
|
410
419
|
|
|
411
|
-
|
|
420
|
+
project_dir, _ = deploy_template_with_folder_option(
|
|
421
|
+
target_template, user_local, project_name, create_project_folder
|
|
422
|
+
)
|
|
412
423
|
|
|
413
424
|
inject_project_metadata(
|
|
414
425
|
project_dir, project_name, author, author_email, description
|
|
@@ -439,9 +450,10 @@ def init(
|
|
|
439
450
|
venv_path = create_venv_with_manager(project_dir, package_manager)
|
|
440
451
|
install_dependencies_with_manager(project_dir, venv_path, package_manager)
|
|
441
452
|
|
|
442
|
-
|
|
443
|
-
|
|
453
|
+
success_message = get_deployment_success_message(
|
|
454
|
+
template, project_name, user_local, create_project_folder
|
|
444
455
|
)
|
|
456
|
+
print_success(success_message)
|
|
445
457
|
|
|
446
458
|
print_info(
|
|
447
459
|
"To start your project, run 'fastkit runserver' at newly created FastAPI project directory"
|
|
@@ -457,25 +469,43 @@ def init(
|
|
|
457
469
|
|
|
458
470
|
|
|
459
471
|
@fastkit_cli.command()
|
|
460
|
-
@click.argument("project_name")
|
|
461
472
|
@click.argument("route_name")
|
|
473
|
+
@click.argument("project_dir", default=".")
|
|
462
474
|
@click.pass_context
|
|
463
|
-
def addroute(ctx: Context,
|
|
475
|
+
def addroute(ctx: Context, route_name: str, project_dir: str) -> None:
|
|
464
476
|
"""
|
|
465
477
|
Add a new route to the FastAPI project.
|
|
478
|
+
|
|
479
|
+
Examples:\n
|
|
480
|
+
fastkit addroute user . # Add 'user' route to current directory
|
|
481
|
+
fastkit addroute user my_project # Add 'user' route to 'my_project' in workspace
|
|
466
482
|
"""
|
|
467
483
|
settings = ctx.obj["settings"]
|
|
468
|
-
|
|
469
|
-
project_dir
|
|
484
|
+
|
|
485
|
+
if project_dir == ".":
|
|
486
|
+
actual_project_dir = os.getcwd()
|
|
487
|
+
project_name = os.path.basename(actual_project_dir)
|
|
488
|
+
else:
|
|
489
|
+
user_local = settings.USER_WORKSPACE
|
|
490
|
+
actual_project_dir = os.path.join(user_local, project_dir)
|
|
491
|
+
project_name = project_dir
|
|
470
492
|
|
|
471
493
|
# Check if project exists
|
|
472
|
-
if not os.path.exists(
|
|
473
|
-
|
|
494
|
+
if not os.path.exists(actual_project_dir):
|
|
495
|
+
if project_dir == ".":
|
|
496
|
+
print_error("Current directory is not a valid project directory.")
|
|
497
|
+
else:
|
|
498
|
+
print_error(
|
|
499
|
+
f"Project '{project_dir}' does not exist in '{settings.USER_WORKSPACE}'."
|
|
500
|
+
)
|
|
474
501
|
return
|
|
475
502
|
|
|
476
503
|
# Verify it's a fastkit project
|
|
477
|
-
if not is_fastkit_project(
|
|
478
|
-
|
|
504
|
+
if not is_fastkit_project(actual_project_dir):
|
|
505
|
+
if project_dir == ".":
|
|
506
|
+
print_error("Current directory is not a FastAPI-fastkit project.")
|
|
507
|
+
else:
|
|
508
|
+
print_error(f"'{project_dir}' is not a FastAPI-fastkit project.")
|
|
479
509
|
return
|
|
480
510
|
|
|
481
511
|
# Validate route name
|
|
@@ -499,26 +529,34 @@ def addroute(ctx: Context, project_name: str, route_name: str) -> None:
|
|
|
499
529
|
{
|
|
500
530
|
"Project": project_name,
|
|
501
531
|
"Route Name": route_name,
|
|
502
|
-
"Target Directory":
|
|
532
|
+
"Target Directory": actual_project_dir,
|
|
503
533
|
},
|
|
504
534
|
)
|
|
505
535
|
console.print(table)
|
|
506
536
|
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
537
|
+
if project_dir == ".":
|
|
538
|
+
confirm_message = (
|
|
539
|
+
f"\nDo you want to add route '{route_name}' to the current project?"
|
|
540
|
+
)
|
|
541
|
+
else:
|
|
542
|
+
confirm_message = f"\nDo you want to add route '{route_name}' to project '{project_name}'?"
|
|
543
|
+
|
|
544
|
+
confirm = click.confirm(confirm_message, default=True)
|
|
512
545
|
if not confirm:
|
|
513
546
|
print_error("Operation cancelled!")
|
|
514
547
|
return
|
|
515
548
|
|
|
516
549
|
# Add the new route
|
|
517
|
-
add_new_route(
|
|
550
|
+
add_new_route(actual_project_dir, route_name)
|
|
518
551
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
552
|
+
if project_dir == ".":
|
|
553
|
+
print_success(
|
|
554
|
+
f"Successfully added new route '{route_name}' to the current project!"
|
|
555
|
+
)
|
|
556
|
+
else:
|
|
557
|
+
print_success(
|
|
558
|
+
f"Successfully added new route '{route_name}' to project '{project_name}'!"
|
|
559
|
+
)
|
|
522
560
|
|
|
523
561
|
except Exception as e:
|
|
524
562
|
logger = get_logger()
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "<project_name>"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "<description>"
|
|
5
|
+
authors = [
|
|
6
|
+
{name = "<author>", email = "<author_email>"},
|
|
7
|
+
]
|
|
8
|
+
readme = "README.md"
|
|
9
|
+
license = "MIT"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
dependencies = [
|
|
12
|
+
"fastapi>=0.115.8",
|
|
13
|
+
"uvicorn[standard]>=0.34.0",
|
|
14
|
+
"pydantic>=2.10.6",
|
|
15
|
+
"pydantic-settings>=2.7.1",
|
|
16
|
+
"SQLAlchemy>=2.0.38",
|
|
17
|
+
"python-dotenv>=1.0.1",
|
|
18
|
+
"aiofiles>=24.1.0",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
[project.optional-dependencies]
|
|
22
|
+
dev = [
|
|
23
|
+
"pytest>=8.3.4",
|
|
24
|
+
"pytest-asyncio>=0.25.3",
|
|
25
|
+
"httpx>=0.28.1",
|
|
26
|
+
"black>=25.1.0",
|
|
27
|
+
"isort>=6.0.0",
|
|
28
|
+
"mypy>=1.15.0",
|
|
29
|
+
"PyYAML>=6.0.2",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[dependency-groups]
|
|
33
|
+
dev = [
|
|
34
|
+
"pytest>=8.3.4",
|
|
35
|
+
"pytest-asyncio>=0.25.3",
|
|
36
|
+
"httpx>=0.28.1",
|
|
37
|
+
"black>=25.1.0",
|
|
38
|
+
"isort>=6.0.0",
|
|
39
|
+
"mypy>=1.15.0",
|
|
40
|
+
"PyYAML>=6.0.2",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[build-system]
|
|
44
|
+
requires = ["hatchling"]
|
|
45
|
+
build-backend = "hatchling.build"
|
|
46
|
+
|
|
47
|
+
[tool.hatch.build.targets.wheel]
|
|
48
|
+
packages = ["src"]
|
|
49
|
+
|
|
50
|
+
[tool.black]
|
|
51
|
+
line-length = 88
|
|
52
|
+
target-version = ["py39"]
|
|
53
|
+
include = '\.pyi?$'
|
|
54
|
+
exclude = '''
|
|
55
|
+
/(
|
|
56
|
+
\.git
|
|
57
|
+
| \.venv
|
|
58
|
+
| \.mypy_cache
|
|
59
|
+
| \.pytest_cache
|
|
60
|
+
| __pycache__
|
|
61
|
+
| build
|
|
62
|
+
| dist
|
|
63
|
+
)/
|
|
64
|
+
'''
|
|
65
|
+
|
|
66
|
+
[tool.isort]
|
|
67
|
+
profile = "black"
|
|
68
|
+
multi_line_output = 3
|
|
69
|
+
line_length = 88
|
|
70
|
+
known_first_party = ["src"]
|
|
71
|
+
|
|
72
|
+
[tool.mypy]
|
|
73
|
+
python_version = "3.9"
|
|
74
|
+
strict = true
|
|
75
|
+
warn_return_any = true
|
|
76
|
+
warn_unused_configs = true
|
|
77
|
+
disallow_untyped_defs = true
|
|
78
|
+
|
|
79
|
+
[tool.pytest.ini_options]
|
|
80
|
+
testpaths = ["tests"]
|
|
81
|
+
python_files = ["test_*.py"]
|
|
82
|
+
python_classes = ["Test*"]
|
|
83
|
+
python_functions = ["test_*"]
|
|
84
|
+
addopts = "-v --tb=short"
|
|
85
|
+
asyncio_mode = "auto"
|