FastAPI-fastkit 1.3.0__tar.gz → 1.4.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.3.0 → fastapi_fastkit-1.4.1}/PKG-INFO +49 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/README.md +46 -5
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/pyproject.toml +16 -3
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/__init__.py +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/__init__.py +26 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/checks.py +349 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/consistency.py +125 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/context.py +71 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/core.py +351 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/docker.py +320 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/freshness.py +145 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/fsutils.py +139 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/lint.py +103 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/report.py +58 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/smoke.py +381 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/strategies.py +367 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspector.py +34 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/__init__.py +6 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/config_builder.py +45 -63
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/prompts.py +155 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/selectors.py +18 -2
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/main.py +1741 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/package_managers/base.py +322 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/factory.py +5 -4
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +29 -82
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +31 -85
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +70 -110
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +43 -112
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/__init__.py +8 -1
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/project_builder/config_generator.py +957 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/project_builder/config_schema.py +384 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +249 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/project_builder/preset_layout.py +429 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/scaffolder.py +578 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/transducer.py +154 -22
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/cli.py +434 -311
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/core/settings.py +463 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/README.md +26 -10
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +21 -22
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +40 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud}/src/core/config.py-tpl +5 -6
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud}/src/crud/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +9 -1
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud}/src/schemas/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -1
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.env-tpl +21 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.gitignore-tpl +33 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/Dockerfile-tpl +18 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl +210 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/alembic.ini-tpl +119 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/pyproject.toml-tpl +86 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/requirements.txt-tpl +23 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/env.py-tpl +51 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/versions/0001_initial_auth_schema.py-tpl +62 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/deps.py-tpl +91 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/router.py-tpl +17 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/config.py-tpl +64 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/security.py-tpl +100 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/db/session.py-tpl +36 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/models.py-tpl +25 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/repository.py-tpl +41 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/router.py-tpl +82 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/schemas.py-tpl +14 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/service.py-tpl +65 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/models.py-tpl +35 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/repository.py-tpl +33 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/router.py-tpl +71 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/schemas.py-tpl +29 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/service.py-tpl +55 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/main.py-tpl +69 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/template-config.yml-tpl +16 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/conftest.py-tpl +73 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_auth.py-tpl +201 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_health.py-tpl +15 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_users.py-tpl +77 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +21 -22
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +40 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +3 -3
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +5 -6
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/crud/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +8 -8
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +9 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +1 -1
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/schemas/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +18 -19
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +38 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/src/core/config.py-tpl +5 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/src/main.py-tpl +9 -1
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/src/schemas/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +2 -3
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/tests/test_items.py-tpl +0 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +1 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +21 -22
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +42 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/src/core/config.py-tpl +5 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/src/main.py-tpl +9 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +1 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +2 -3
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/tests/test_items.py-tpl +0 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/pyproject.toml-tpl +13 -14
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/requirements.txt-tpl +37 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/lint.sh-tpl +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/run-server.sh-tpl +8 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/test.sh-tpl +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/health.py-tpl +11 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/router.py-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core/config.py-tpl +4 -4
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db/memory.py-tpl +4 -3
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/repository.py-tpl +4 -5
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/router.py-tpl +2 -3
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/service.py-tpl +2 -3
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/main.py-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/conftest.py-tpl +0 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +14 -15
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +37 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +5 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +3 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -1
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.env-tpl +15 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.gitignore-tpl +31 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/Dockerfile-tpl +18 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl +193 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/pyproject.toml-tpl +76 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/requirements.txt-tpl +15 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/chat.sh-tpl +10 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/format.sh-tpl +5 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/lint.sh-tpl +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/run-server.sh-tpl +8 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/test.sh-tpl +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/chat.py-tpl +62 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/deps.py-tpl +23 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/health.py-tpl +11 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/router.py-tpl +13 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/core/config.py-tpl +67 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/agent.py-tpl +136 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/client.py-tpl +30 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/tools.py-tpl +131 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/main.py-tpl +53 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/base.py-tpl +27 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/in_memory.py-tpl +32 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/schemas/chat.py-tpl +46 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/template-config.yml-tpl +16 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/conftest.py-tpl +158 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_chat.py-tpl +160 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_health.py-tpl +12 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_memory.py-tpl +38 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_tools.py-tpl +37 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +1 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +2 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +25 -26
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +66 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +2 -3
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +3 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +13 -14
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +3 -4
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +6 -7
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +5 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +4 -1
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server}/router.py-tpl +3 -5
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +6 -7
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +2 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +1 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +22 -23
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +45 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +5 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +1 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +1 -3
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +26 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +5 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +2 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +2 -4
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +1 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +1 -1
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +4 -6
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +9 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +4 -5
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +1 -5
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm}/tests/test_items.py-tpl +0 -2
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.env-tpl +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.gitignore-tpl +30 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/pyproject.toml-tpl +3 -4
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +27 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/src/main.py-tpl +3 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/conftest.py-tpl +0 -1
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.env-tpl +7 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.gitignore-tpl +35 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/Dockerfile-tpl +18 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl +166 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/alembic.ini-tpl +44 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/pyproject.toml-tpl +82 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/requirements.txt-tpl +21 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/format.sh-tpl +5 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/lint.sh-tpl +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/migrate.sh-tpl +7 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/run-server.sh-tpl +8 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/test.sh-tpl +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/README-tpl +9 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/env.py-tpl +72 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/script.py.mako-tpl +27 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/versions/0001_create_items_table.py-tpl +38 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/health.py-tpl +11 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/router.py-tpl +15 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/core/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/core/config.py-tpl +62 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/base.py-tpl +62 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/pagination.py-tpl +21 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/base.py-tpl +12 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/session.py-tpl +50 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/crud.py-tpl +26 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/models.py-tpl +70 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/router.py-tpl +69 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/main.py-tpl +43 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/template-config.yml-tpl +16 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/conftest.py-tpl +60 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_crud_base.py-tpl +43 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_health.py-tpl +12 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_items.py-tpl +110 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +2 -2
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/README.md +90 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/auth/fastapi_users.py.j2 +8 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/auth/jwt.py.j2 +44 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/auth/oauth2.py.j2 +105 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/auth/session.py.j2 +67 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/db/mongodb.py.j2 +19 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/db/redis.py.j2 +26 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/db/sqlalchemy.py.j2 +45 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/docker/docker_compose.j2 +84 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/docker/dockerfile.j2 +19 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/features/cache.py.j2 +26 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/features/pagination.py.j2 +31 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/features/tasks_celery.py.j2 +50 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/features/tasks_dramatiq.py.j2 +59 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/features/websocket.py.j2 +66 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/header.j2 +4 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/logging/structured.py.j2 +88 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/async_tasks.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/caching.j2 +5 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/fastapi_users.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/jwt.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/loguru.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/mongodb.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/oauth2.j2 +4 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/opentelemetry.j2 +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/pagination.j2 +3 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/prometheus.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/rate_limiting.j2 +3 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/session_auth.j2 +4 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/sqlalchemy.j2 +2 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/structured_logging.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/imports/websocket.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/lifespan/caching.j2 +7 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/lifespan/mongodb.j2 +2 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/lifespan/prometheus.j2 +2 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/lifespan/sqlalchemy.j2 +2 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/async_tasks.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/caching.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/cors.j2 +8 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/oauth2.j2 +3 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/opentelemetry.j2 +19 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/pagination.j2 +2 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/rate_limiting.j2 +3 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/session_auth.j2 +6 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/structured_logging.j2 +2 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main/setup/websocket.j2 +1 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/main.py.j2 +57 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/migrations/alembic_ini.j2 +42 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/migrations/env.py.j2 +76 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/migrations/initial_revision.py.j2 +27 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/migrations/migrate_sh.j2 +34 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/migrations/script.py.mako.j2 +26 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/tasks/celery_worker.py.j2 +49 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/tasks/dramatiq_worker.py.j2 +41 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/test/factories.py.j2 +68 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/test/pytest_ini.j2 +16 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/test/test_factories.py.j2 +27 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/test/test_main.py.j2 +46 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/tooling/devcontainer.j2 +26 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/tooling/github_actions.j2 +37 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/tooling/makefile.j2 +40 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/tooling/pre_commit.j2 +36 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/fragments/tooling/ruff_toml.j2 +16 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/py.typed +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/utils/__init__.py +0 -0
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/utils/config_file.py +263 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/main.py +38 -0
- fastapi_fastkit-1.4.1/tests/__init__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/conftest.py +8 -11
- fastapi_fastkit-1.4.1/tests/test_backends/__init__.py +0 -0
- fastapi_fastkit-1.4.1/tests/test_backends/test_inspection_docker.py +579 -0
- fastapi_fastkit-1.4.1/tests/test_backends/test_inspection_fsutils.py +198 -0
- fastapi_fastkit-1.4.1/tests/test_backends/test_inspector.py +1194 -0
- fastapi_fastkit-1.4.1/tests/test_backends/test_inspector_checks.py +1261 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_config_builder.py +40 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_prompts.py +184 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_validators.py +1 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_main.py +32 -5
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_package_managers.py +146 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_preset_layout.py +127 -0
- fastapi_fastkit-1.4.1/tests/test_backends/test_project_builder_config_generator.py +1091 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_project_builder_dependency_collector.py +125 -4
- fastapi_fastkit-1.4.1/tests/test_backends/test_project_metadata.py +280 -0
- fastapi_fastkit-1.4.1/tests/test_backends/test_safety_regressions.py +382 -0
- fastapi_fastkit-1.4.1/tests/test_backends/test_scaffolder.py +239 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_transducer.py +211 -23
- fastapi_fastkit-1.4.1/tests/test_cli_operations/__init__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli.py +35 -31
- fastapi_fastkit-1.4.1/tests/test_cli_operations/test_cli_config_options.py +766 -0
- fastapi_fastkit-1.4.1/tests/test_cli_operations/test_cli_error_paths.py +567 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_interactive_integration.py +38 -1
- fastapi_fastkit-1.4.1/tests/test_config_file.py +296 -0
- fastapi_fastkit-1.4.1/tests/test_rich/__init__.py +0 -0
- fastapi_fastkit-1.4.1/tests/test_templates/__init__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_templates/template_configs.yaml +2 -2
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_all_templates.py +151 -37
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/__init__.py +0 -1
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/inspector.py +0 -1416
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/main.py +0 -953
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/package_managers/base.py +0 -150
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/project_builder/config_generator.py +0 -601
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +0 -210
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/backend/project_builder/preset_layout.py +0 -203
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/core/settings.py +0 -274
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +0 -37
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.py-tpl +0 -25
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +0 -37
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.py-tpl +0 -27
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +0 -35
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl +0 -22
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +0 -37
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.py-tpl +0 -22
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/requirements.txt-tpl +0 -11
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +0 -11
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.py-tpl +0 -22
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +0 -41
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.py-tpl +0 -51
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +0 -42
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.py-tpl +0 -25
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +0 -7
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.py-tpl +0 -17
- fastapi_fastkit-1.3.0/tests/test_backends/test_inspector.py +0 -2050
- fastapi_fastkit-1.3.0/tests/test_backends/test_project_builder_config_generator.py +0 -438
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/LICENSE +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/__main__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/__init__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/validators.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/__init__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/exceptions.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/alembic/README-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/alembic/script.py.mako-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt}/src/app/api/health.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app}/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/db}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/exceptions.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response}/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/documents.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default}/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized}/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src}/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/mock_items.json-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.env-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter}/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app}/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/models.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/schemas.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_health.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/api → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/api/routes → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/crud → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/modules/schemas → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api}/__init__.py-tpl +0 -0
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/py.typed → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/core/__init__.py-tpl +0 -0
- fastapi_fastkit-1.3.0/src/fastapi_fastkit/utils/__init__.py → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/__init__.py-tpl +0 -0
- fastapi_fastkit-1.3.0/tests/__init__.py → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/__init__.py-tpl +0 -0
- fastapi_fastkit-1.3.0/tests/test_backends/__init__.py → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/schemas/__init__.py-tpl +0 -0
- fastapi_fastkit-1.3.0/tests/test_cli_operations/__init__.py → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp → fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server}/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +1 -1
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/pre-start.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
- /fastapi_fastkit-1.3.0/tests/test_rich/__init__.py → /fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/__init__.py-tpl +0 -0
- /fastapi_fastkit-1.3.0/tests/test_templates/__init__.py → /fastapi_fastkit-1.4.1/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/deps.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/backend_pre_start.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/init_data.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/utils/tests_pre_start.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/test_main.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/logging.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_configure.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_console_sizing.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_selectors.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_extended.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_core.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_rich/test_rich.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_config_based_templates.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_domain_starter_e2e.py +0 -0
- {fastapi_fastkit-1.3.0 → fastapi_fastkit-1.4.1}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: FastAPI-fastkit
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.4.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
|
|
@@ -11,6 +11,7 @@ Project-URL: Changelog, https://bnbong.github.io/FastAPI-fastkit/changelog/
|
|
|
11
11
|
Requires-Python: >=3.12
|
|
12
12
|
Requires-Dist: click>=8.1.7
|
|
13
13
|
Requires-Dist: rich>=13.9.2
|
|
14
|
+
Requires-Dist: jinja2>=3.1
|
|
14
15
|
Provides-Extra: dev
|
|
15
16
|
Requires-Dist: pytest>=9.0.3; extra == "dev"
|
|
16
17
|
Requires-Dist: pytest-cov>=6.2.1; extra == "dev"
|
|
@@ -19,10 +20,11 @@ Requires-Dist: pre-commit>=4.0.1; extra == "dev"
|
|
|
19
20
|
Requires-Dist: mypy>=1.12.0; extra == "dev"
|
|
20
21
|
Requires-Dist: isort>=5.13.2; extra == "dev"
|
|
21
22
|
Requires-Dist: pygments>=2.20.0; extra == "dev"
|
|
23
|
+
Requires-Dist: types-pyyaml>=6.0.12.20260408; extra == "dev"
|
|
22
24
|
Description-Content-Type: text/markdown
|
|
23
25
|
|
|
24
26
|
<p align="center">
|
|
25
|
-
<img align="top" width="70%" src="
|
|
27
|
+
<img align="top" width="70%" src=".github/fastkit_general_logo.png" alt="FastAPI-fastkit"/>
|
|
26
28
|
</p>
|
|
27
29
|
<p align="center">
|
|
28
30
|
<em><b>FastAPI-fastkit</b>: Fast, easy-to-use starter kit for new users of Python and FastAPI</em>
|
|
@@ -57,6 +59,8 @@ This project was inspired by the `SpringBoot initializer` & Python Django's `dja
|
|
|
57
59
|
- **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
|
|
58
60
|
- **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
|
|
59
61
|
- **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
|
|
62
|
+
- **🧾 Reproducible project configs** : Save an interactive session to a `.json` / `.toml` / `.yaml` file and replay it with `fastkit init --config`
|
|
63
|
+
- **🏷️ Self-describing projects** : Every generated project records its template, preset, package manager, entrypoint and selected features in a `[tool.fastapi-fastkit]` block that `runserver` and `addroute` read back
|
|
60
64
|
|
|
61
65
|
## Installation
|
|
62
66
|
|
|
@@ -78,17 +82,27 @@ $ pip install FastAPI-fastkit
|
|
|
78
82
|
```console
|
|
79
83
|
fastkit init [OPTIONS]
|
|
80
84
|
```
|
|
81
|
-
|
|
85
|
+
> [!TIP]
|
|
86
|
+
> Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
|
|
87
|
+
|
|
82
88
|
- Key options:
|
|
83
89
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
84
90
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
91
|
+
- `--config <path>`: create the project from a saved config file (`.json` / `.toml`, and `.yaml` when PyYAML is installed) with no prompts
|
|
92
|
+
- `--save-config <path>`: with `--interactive`, record the answers for later reuse
|
|
93
|
+
- `--dry-run`: print the files and packages that would be created, write nothing
|
|
94
|
+
- `--no-venv`: skip virtual environment creation (implies `--no-install`)
|
|
95
|
+
- `--no-install`: skip dependency installation
|
|
96
|
+
- `--yes` / `-y`: skip the "Overwrite these files?" confirmation when deploying in place
|
|
85
97
|
- Stack selection: `minimal` | `standard` | `full` (interactive)
|
|
86
98
|
|
|
87
99
|
### Create a project with interactive mode
|
|
88
100
|
```console
|
|
89
101
|
fastkit init --interactive
|
|
90
102
|
```
|
|
91
|
-
|
|
103
|
+
> [!TIP]
|
|
104
|
+
> Guided step-by-step project setup with intelligent feature selection
|
|
105
|
+
|
|
92
106
|
- Features:
|
|
93
107
|
- **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
|
|
94
108
|
- **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
|
|
@@ -98,23 +112,33 @@ fastkit init --interactive
|
|
|
98
112
|
- **Monitoring**: Loguru, OpenTelemetry, Prometheus
|
|
99
113
|
- **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
|
|
100
114
|
- **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
|
|
115
|
+
- **Logging**: structured JSON logging with a request-id middleware
|
|
116
|
+
- **Migrations**: Alembic (async env, baseline revision)
|
|
117
|
+
- **Tooling**: ruff, pre-commit, GitHub Actions, devcontainer, Makefile (multi-select)
|
|
101
118
|
- **Deployment**: Docker, docker-compose with auto-generated configs
|
|
102
119
|
- **Package manager**: pip, uv, pdm, poetry
|
|
103
120
|
- **Custom packages**: Add your own dependencies
|
|
104
|
-
- Auto-generates (varies by preset
|
|
121
|
+
- Auto-generates (varies by preset - see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
|
|
105
122
|
- `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
|
|
106
123
|
- Database and authentication configuration files at preset-specific paths
|
|
107
124
|
- Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
|
|
108
125
|
- Test configuration (pytest with coverage)
|
|
126
|
+
- `/health` and `/ready` endpoints on every generated project
|
|
127
|
+
- Real working code — not just installed packages — for background tasks, caching, WebSocket, pagination, OpenTelemetry, OAuth2 and session-based auth
|
|
128
|
+
- `--dry-run` previews the exact file tree a run would create, including logging/migrations/tooling artifacts
|
|
109
129
|
|
|
110
130
|
### Create a project from a template
|
|
111
131
|
```console
|
|
112
132
|
fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
113
133
|
```
|
|
114
|
-
|
|
134
|
+
> [!TIP]
|
|
135
|
+
> Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
|
|
136
|
+
|
|
115
137
|
- Key options:
|
|
116
138
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
117
139
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
140
|
+
- `--dry-run`, `--no-venv`, `--no-install`, `--yes`/`-y` — same meaning as on `init`
|
|
141
|
+
- Refuses to run if the target project directory already exists (`--dry-run` excepted)
|
|
118
142
|
- Tip: List available templates with `fastkit list-templates`
|
|
119
143
|
|
|
120
144
|
### Add a new route
|
|
@@ -136,6 +160,25 @@ fastkit runserver [OPTIONS]
|
|
|
136
160
|
fastkit list-templates
|
|
137
161
|
```
|
|
138
162
|
|
|
163
|
+
Available templates:
|
|
164
|
+
|
|
165
|
+
| Template | Description | Notes |
|
|
166
|
+
|---|---|---|
|
|
167
|
+
| [`fastapi-default`](src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl) | Simple FastAPI project with a classic layered layout | Good first choice |
|
|
168
|
+
| [`fastapi-empty`](src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl) | Minimal FastAPI template | Base for `minimal` preset |
|
|
169
|
+
| [`fastapi-single-module`](src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl) | Single-file FastAPI app | Base for `single-module` preset |
|
|
170
|
+
| [`fastapi-domain-starter`](src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl) | Domain-oriented, pyproject-first starter for medium-sized APIs | Base for `domain-starter` preset |
|
|
171
|
+
| [`fastapi-auth-jwt`](src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl) | JWT authentication with refresh-token rotation, argon2 hashing and scopes | New in v1.4.0 |
|
|
172
|
+
| [`fastapi-sqlmodel`](src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl) | Async SQLModel + Alembic migrations + generic CRUD with pagination | New in v1.4.0 |
|
|
173
|
+
| [`fastapi-llm-agent`](src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl) | Streaming Claude chat agent (SSE) with a tool-call loop | New in v1.4.0 |
|
|
174
|
+
| [`fastapi-mcp`](src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl) | FastAPI app exposed as an MCP server | |
|
|
175
|
+
| [`fastapi-psql-orm`](src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl) | Item management API with PostgreSQL, SQLModel, Alembic and docker-compose | Requires Docker |
|
|
176
|
+
| [`fastapi-custom-response`](src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl) | Item management API with a custom response envelope, error handling and pagination | |
|
|
177
|
+
| [`fastapi-async-crud`](src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl) | Async item management API | **Deprecated** — use `fastapi-sqlmodel` |
|
|
178
|
+
| [`fastapi-dockerized`](src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl) | Dockerized item management API | **Deprecated** — use `fastapi-default` with the Docker option in `init --interactive` |
|
|
179
|
+
|
|
180
|
+
Deprecated templates still work but are no longer recommended starting points. See [Which starter should I choose?](https://bnbong.github.io/FastAPI-fastkit/user-guide/choosing-a-starter/) for a decision guide.
|
|
181
|
+
|
|
139
182
|
### Delete a project
|
|
140
183
|
```console
|
|
141
184
|
fastkit deleteproject <project_name>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img align="top" width="70%" src="
|
|
2
|
+
<img align="top" width="70%" src=".github/fastkit_general_logo.png" alt="FastAPI-fastkit"/>
|
|
3
3
|
</p>
|
|
4
4
|
<p align="center">
|
|
5
5
|
<em><b>FastAPI-fastkit</b>: Fast, easy-to-use starter kit for new users of Python and FastAPI</em>
|
|
@@ -34,6 +34,8 @@ This project was inspired by the `SpringBoot initializer` & Python Django's `dja
|
|
|
34
34
|
- **🔍 Automated template quality assurance** : Weekly automated testing ensures all templates remain functional and up-to-date
|
|
35
35
|
- **🚀 Multiple project templates** : Choose from various pre-configured templates for different use cases (async CRUD, Docker, PostgreSQL, etc.)
|
|
36
36
|
- **📦 Multiple package manager support** : Choose your preferred Python package manager (pip, uv, pdm, poetry) for dependency management
|
|
37
|
+
- **🧾 Reproducible project configs** : Save an interactive session to a `.json` / `.toml` / `.yaml` file and replay it with `fastkit init --config`
|
|
38
|
+
- **🏷️ Self-describing projects** : Every generated project records its template, preset, package manager, entrypoint and selected features in a `[tool.fastapi-fastkit]` block that `runserver` and `addroute` read back
|
|
37
39
|
|
|
38
40
|
## Installation
|
|
39
41
|
|
|
@@ -55,17 +57,27 @@ $ pip install FastAPI-fastkit
|
|
|
55
57
|
```console
|
|
56
58
|
fastkit init [OPTIONS]
|
|
57
59
|
```
|
|
58
|
-
|
|
60
|
+
> [!TIP]
|
|
61
|
+
> Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
|
|
62
|
+
|
|
59
63
|
- Key options:
|
|
60
64
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
61
65
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
66
|
+
- `--config <path>`: create the project from a saved config file (`.json` / `.toml`, and `.yaml` when PyYAML is installed) with no prompts
|
|
67
|
+
- `--save-config <path>`: with `--interactive`, record the answers for later reuse
|
|
68
|
+
- `--dry-run`: print the files and packages that would be created, write nothing
|
|
69
|
+
- `--no-venv`: skip virtual environment creation (implies `--no-install`)
|
|
70
|
+
- `--no-install`: skip dependency installation
|
|
71
|
+
- `--yes` / `-y`: skip the "Overwrite these files?" confirmation when deploying in place
|
|
62
72
|
- Stack selection: `minimal` | `standard` | `full` (interactive)
|
|
63
73
|
|
|
64
74
|
### Create a project with interactive mode
|
|
65
75
|
```console
|
|
66
76
|
fastkit init --interactive
|
|
67
77
|
```
|
|
68
|
-
|
|
78
|
+
> [!TIP]
|
|
79
|
+
> Guided step-by-step project setup with intelligent feature selection
|
|
80
|
+
|
|
69
81
|
- Features:
|
|
70
82
|
- **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
|
|
71
83
|
- **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
|
|
@@ -75,23 +87,33 @@ fastkit init --interactive
|
|
|
75
87
|
- **Monitoring**: Loguru, OpenTelemetry, Prometheus
|
|
76
88
|
- **Testing**: Basic (pytest), Coverage, Advanced (with faker, factory-boy)
|
|
77
89
|
- **Utilities**: CORS, Rate-Limiting, Pagination, WebSocket
|
|
90
|
+
- **Logging**: structured JSON logging with a request-id middleware
|
|
91
|
+
- **Migrations**: Alembic (async env, baseline revision)
|
|
92
|
+
- **Tooling**: ruff, pre-commit, GitHub Actions, devcontainer, Makefile (multi-select)
|
|
78
93
|
- **Deployment**: Docker, docker-compose with auto-generated configs
|
|
79
94
|
- **Package manager**: pip, uv, pdm, poetry
|
|
80
95
|
- **Custom packages**: Add your own dependencies
|
|
81
|
-
- Auto-generates (varies by preset
|
|
96
|
+
- Auto-generates (varies by preset - see [the matrix](https://bnbong.github.io/FastAPI-fastkit/reference/preset-feature-matrix/) for details):
|
|
82
97
|
- `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
|
|
83
98
|
- Database and authentication configuration files at preset-specific paths
|
|
84
99
|
- Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
|
|
85
100
|
- Test configuration (pytest with coverage)
|
|
101
|
+
- `/health` and `/ready` endpoints on every generated project
|
|
102
|
+
- Real working code — not just installed packages — for background tasks, caching, WebSocket, pagination, OpenTelemetry, OAuth2 and session-based auth
|
|
103
|
+
- `--dry-run` previews the exact file tree a run would create, including logging/migrations/tooling artifacts
|
|
86
104
|
|
|
87
105
|
### Create a project from a template
|
|
88
106
|
```console
|
|
89
107
|
fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
90
108
|
```
|
|
91
|
-
|
|
109
|
+
> [!TIP]
|
|
110
|
+
> Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
|
|
111
|
+
|
|
92
112
|
- Key options:
|
|
93
113
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
94
114
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
115
|
+
- `--dry-run`, `--no-venv`, `--no-install`, `--yes`/`-y` — same meaning as on `init`
|
|
116
|
+
- Refuses to run if the target project directory already exists (`--dry-run` excepted)
|
|
95
117
|
- Tip: List available templates with `fastkit list-templates`
|
|
96
118
|
|
|
97
119
|
### Add a new route
|
|
@@ -113,6 +135,25 @@ fastkit runserver [OPTIONS]
|
|
|
113
135
|
fastkit list-templates
|
|
114
136
|
```
|
|
115
137
|
|
|
138
|
+
Available templates:
|
|
139
|
+
|
|
140
|
+
| Template | Description | Notes |
|
|
141
|
+
|---|---|---|
|
|
142
|
+
| [`fastapi-default`](src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl) | Simple FastAPI project with a classic layered layout | Good first choice |
|
|
143
|
+
| [`fastapi-empty`](src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl) | Minimal FastAPI template | Base for `minimal` preset |
|
|
144
|
+
| [`fastapi-single-module`](src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl) | Single-file FastAPI app | Base for `single-module` preset |
|
|
145
|
+
| [`fastapi-domain-starter`](src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl) | Domain-oriented, pyproject-first starter for medium-sized APIs | Base for `domain-starter` preset |
|
|
146
|
+
| [`fastapi-auth-jwt`](src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl) | JWT authentication with refresh-token rotation, argon2 hashing and scopes | New in v1.4.0 |
|
|
147
|
+
| [`fastapi-sqlmodel`](src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl) | Async SQLModel + Alembic migrations + generic CRUD with pagination | New in v1.4.0 |
|
|
148
|
+
| [`fastapi-llm-agent`](src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl) | Streaming Claude chat agent (SSE) with a tool-call loop | New in v1.4.0 |
|
|
149
|
+
| [`fastapi-mcp`](src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl) | FastAPI app exposed as an MCP server | |
|
|
150
|
+
| [`fastapi-psql-orm`](src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl) | Item management API with PostgreSQL, SQLModel, Alembic and docker-compose | Requires Docker |
|
|
151
|
+
| [`fastapi-custom-response`](src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl) | Item management API with a custom response envelope, error handling and pagination | |
|
|
152
|
+
| [`fastapi-async-crud`](src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl) | Async item management API | **Deprecated** — use `fastapi-sqlmodel` |
|
|
153
|
+
| [`fastapi-dockerized`](src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl) | Dockerized item management API | **Deprecated** — use `fastapi-default` with the Docker option in `init --interactive` |
|
|
154
|
+
|
|
155
|
+
Deprecated templates still work but are no longer recommended starting points. See [Which starter should I choose?](https://bnbong.github.io/FastAPI-fastkit/user-guide/choosing-a-starter/) for a decision guide.
|
|
156
|
+
|
|
116
157
|
### Delete a project
|
|
117
158
|
```console
|
|
118
159
|
fastkit deleteproject <project_name>
|
|
@@ -8,10 +8,11 @@ authors = [
|
|
|
8
8
|
dependencies = [
|
|
9
9
|
"click>=8.1.7",
|
|
10
10
|
"rich>=13.9.2",
|
|
11
|
+
"jinja2>=3.1",
|
|
11
12
|
]
|
|
12
13
|
requires-python = ">=3.12"
|
|
13
14
|
readme = "README.md"
|
|
14
|
-
version = "1.
|
|
15
|
+
version = "1.4.1"
|
|
15
16
|
|
|
16
17
|
[project.license]
|
|
17
18
|
text = "MIT"
|
|
@@ -31,6 +32,7 @@ dev = [
|
|
|
31
32
|
"mypy>=1.12.0",
|
|
32
33
|
"isort>=5.13.2",
|
|
33
34
|
"pygments>=2.20.0",
|
|
35
|
+
"types-pyyaml>=6.0.12.20260408",
|
|
34
36
|
]
|
|
35
37
|
|
|
36
38
|
[project.scripts]
|
|
@@ -52,11 +54,21 @@ addopts = [
|
|
|
52
54
|
"--strict-config",
|
|
53
55
|
"--disable-warnings",
|
|
54
56
|
]
|
|
57
|
+
markers = [
|
|
58
|
+
"extended: slower end-to-end coverage, excluded from the fast feedback loop",
|
|
59
|
+
"slow: tests that shell out to real package managers or network services",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[tool.black]
|
|
63
|
+
target-version = [
|
|
64
|
+
"py312",
|
|
65
|
+
]
|
|
55
66
|
|
|
56
67
|
[tool.isort]
|
|
57
68
|
profile = "black"
|
|
58
69
|
|
|
59
70
|
[tool.mypy]
|
|
71
|
+
python_version = "3.12"
|
|
60
72
|
strict = true
|
|
61
73
|
|
|
62
74
|
[[tool.mypy.overrides]]
|
|
@@ -116,14 +128,15 @@ directory = "htmlcov"
|
|
|
116
128
|
[dependency-groups]
|
|
117
129
|
docs = [
|
|
118
130
|
"mkdocs>=1.6.1",
|
|
119
|
-
"mkdocs-material>=9.
|
|
131
|
+
"mkdocs-material>=9.7.7",
|
|
120
132
|
"mdx-include>=1.4.2",
|
|
121
133
|
"mkdocs-static-i18n>=1.3.0",
|
|
122
134
|
"pyyaml>=6.0.3",
|
|
123
135
|
"types-PyYAML>=6.0.12.20250915",
|
|
124
136
|
"pygments>=2.20.0",
|
|
125
137
|
"requests>=2.33.0",
|
|
126
|
-
"
|
|
138
|
+
"idna>=3.15",
|
|
139
|
+
"pymdown-extensions>=11.0.1",
|
|
127
140
|
]
|
|
128
141
|
translation = [
|
|
129
142
|
"openai>=2.8.1",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = 'v1.4.1'
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# Template inspection package.
|
|
3
|
+
#
|
|
4
|
+
# ``TemplateInspector`` generates a throwaway project from a template and runs
|
|
5
|
+
# the checks defined in the sibling modules against it:
|
|
6
|
+
#
|
|
7
|
+
# - ``checks`` : structure, extensions, dependencies, implementation, tests
|
|
8
|
+
# - ``consistency`` : Python-version pins and dependency drift
|
|
9
|
+
# - ``lint`` : compileall (required) and mypy (opt-in)
|
|
10
|
+
# - ``smoke`` : boots the generated app and probes /docs and /health
|
|
11
|
+
# - ``strategies`` : how the template's own test suite is executed
|
|
12
|
+
# - ``docker`` : Docker Compose orchestration
|
|
13
|
+
# - ``freshness`` : PyPI version-lag warnings
|
|
14
|
+
# - ``report`` : report construction and printing
|
|
15
|
+
#
|
|
16
|
+
# @author bnbong
|
|
17
|
+
# --------------------------------------------------------------------------
|
|
18
|
+
from .context import InspectionContext, InspectionOptions
|
|
19
|
+
from .core import TemplateInspector, inspect_fastapi_template
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"InspectionContext",
|
|
23
|
+
"InspectionOptions",
|
|
24
|
+
"TemplateInspector",
|
|
25
|
+
"inspect_fastapi_template",
|
|
26
|
+
]
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# Static template checks: structure, file extensions, declared dependencies,
|
|
3
|
+
# FastAPI implementation and the mandatory test suite.
|
|
4
|
+
#
|
|
5
|
+
# Every function takes an ``InspectionContext`` and returns ``True`` when the
|
|
6
|
+
# check passes, appending a descriptive message to ``ctx.errors`` otherwise.
|
|
7
|
+
#
|
|
8
|
+
# @author bnbong
|
|
9
|
+
# --------------------------------------------------------------------------
|
|
10
|
+
import ast
|
|
11
|
+
import os
|
|
12
|
+
import tomllib
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import List, Optional, Set, Tuple
|
|
15
|
+
|
|
16
|
+
from fastapi_fastkit.backend.main import (
|
|
17
|
+
_parse_setup_dependencies,
|
|
18
|
+
find_template_core_modules,
|
|
19
|
+
)
|
|
20
|
+
from fastapi_fastkit.backend.package_managers.poetry_manager import (
|
|
21
|
+
_parse_pip_requirement,
|
|
22
|
+
)
|
|
23
|
+
from fastapi_fastkit.utils.logging import debug_log
|
|
24
|
+
|
|
25
|
+
from .context import InspectionContext
|
|
26
|
+
|
|
27
|
+
ALWAYS_REQUIRED_PATHS = ["tests", "README.md-tpl"]
|
|
28
|
+
METADATA_CANDIDATES = ["pyproject.toml-tpl", "setup.py-tpl"]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def extract_pyproject_dependency_names(
|
|
32
|
+
pyproject_path: Path,
|
|
33
|
+
) -> Tuple[Set[str], Optional[str]]:
|
|
34
|
+
"""Parse a pyproject file and return (lowercased dep names, error).
|
|
35
|
+
|
|
36
|
+
``error`` is ``None`` on success. Returns an empty set with a descriptive
|
|
37
|
+
error string when the file is unreadable or malformed.
|
|
38
|
+
"""
|
|
39
|
+
try:
|
|
40
|
+
with open(pyproject_path, "rb") as f:
|
|
41
|
+
data = tomllib.load(f)
|
|
42
|
+
except (OSError, tomllib.TOMLDecodeError, UnicodeDecodeError) as e:
|
|
43
|
+
return set(), f"Invalid pyproject.toml-tpl: {e}"
|
|
44
|
+
|
|
45
|
+
project = data.get("project", {})
|
|
46
|
+
raw_deps = project.get("dependencies", []) or []
|
|
47
|
+
if not isinstance(raw_deps, list):
|
|
48
|
+
return set(), "pyproject.toml-tpl [project].dependencies must be a list"
|
|
49
|
+
|
|
50
|
+
names: Set[str] = set()
|
|
51
|
+
for dep in raw_deps:
|
|
52
|
+
if not isinstance(dep, str) or not dep.strip():
|
|
53
|
+
continue
|
|
54
|
+
name = _parse_pip_requirement(dep)[0]
|
|
55
|
+
if name:
|
|
56
|
+
names.add(name.lower())
|
|
57
|
+
return names, None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def parse_requirements_names(requirements_path: Path) -> Set[str]:
|
|
61
|
+
"""Return the lowercased package names declared in a requirements file."""
|
|
62
|
+
with open(requirements_path, encoding="utf-8") as f:
|
|
63
|
+
lines = f.read().splitlines()
|
|
64
|
+
return {
|
|
65
|
+
_parse_pip_requirement(line)[0].lower()
|
|
66
|
+
for line in lines
|
|
67
|
+
if line.strip() and not line.strip().startswith("#")
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def check_file_structure(ctx: InspectionContext) -> bool:
|
|
72
|
+
"""Check the required file and directory structure.
|
|
73
|
+
|
|
74
|
+
Modern templates may ship ``pyproject.toml-tpl`` as the primary metadata
|
|
75
|
+
file; ``setup.py-tpl`` remains accepted for backward compatibility.
|
|
76
|
+
A template must provide at least one of the two. ``requirements.txt-tpl``
|
|
77
|
+
is no longer strictly required when ``pyproject.toml-tpl`` declares
|
|
78
|
+
``[project].dependencies``.
|
|
79
|
+
"""
|
|
80
|
+
missing_required = [
|
|
81
|
+
path
|
|
82
|
+
for path in ALWAYS_REQUIRED_PATHS
|
|
83
|
+
if not (ctx.template_path / path).exists()
|
|
84
|
+
]
|
|
85
|
+
has_metadata = any(
|
|
86
|
+
(ctx.template_path / name).exists() for name in METADATA_CANDIDATES
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
for path in missing_required:
|
|
90
|
+
ctx.add_error(f"Missing required path: {path}")
|
|
91
|
+
if not has_metadata:
|
|
92
|
+
ctx.add_error(
|
|
93
|
+
"Missing metadata file: expected pyproject.toml-tpl "
|
|
94
|
+
"(preferred) or setup.py-tpl"
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
if missing_required or not has_metadata:
|
|
98
|
+
return False
|
|
99
|
+
|
|
100
|
+
debug_log("File structure check passed", "info")
|
|
101
|
+
return True
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def check_file_extensions(ctx: InspectionContext) -> bool:
|
|
105
|
+
"""Check all Python files in the template carry the .py-tpl extension."""
|
|
106
|
+
for path in ctx.template_path.rglob("*"):
|
|
107
|
+
if path.is_file() and path.suffix == ".py":
|
|
108
|
+
ctx.add_error(f"Found .py file instead of .py-tpl: {path}")
|
|
109
|
+
return False
|
|
110
|
+
|
|
111
|
+
debug_log("File extension check passed", "info")
|
|
112
|
+
return True
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def check_dependencies(ctx: InspectionContext) -> bool:
|
|
116
|
+
"""Check that FastAPI is declared in at least one supported source.
|
|
117
|
+
|
|
118
|
+
All three metadata sources are consulted independently:
|
|
119
|
+
|
|
120
|
+
- ``requirements.txt-tpl``
|
|
121
|
+
- ``pyproject.toml-tpl`` ``[project].dependencies``
|
|
122
|
+
- ``setup.py-tpl`` ``install_requires``
|
|
123
|
+
|
|
124
|
+
The check passes if *any* source declares ``fastapi``, so a template
|
|
125
|
+
with a stale ``requirements.txt-tpl`` still passes when
|
|
126
|
+
``pyproject.toml-tpl`` is authoritative.
|
|
127
|
+
"""
|
|
128
|
+
req_path = ctx.template_path / "requirements.txt-tpl"
|
|
129
|
+
pyproject_path = ctx.template_path / "pyproject.toml-tpl"
|
|
130
|
+
setup_path = ctx.template_path / "setup.py-tpl"
|
|
131
|
+
|
|
132
|
+
sources_checked: List[str] = []
|
|
133
|
+
fastapi_declared = False
|
|
134
|
+
|
|
135
|
+
if req_path.exists():
|
|
136
|
+
sources_checked.append("requirements.txt-tpl")
|
|
137
|
+
try:
|
|
138
|
+
package_names = parse_requirements_names(req_path)
|
|
139
|
+
except (OSError, UnicodeDecodeError) as e:
|
|
140
|
+
ctx.add_error(f"Error reading requirements.txt-tpl: {e}")
|
|
141
|
+
return False
|
|
142
|
+
debug_log(
|
|
143
|
+
f"requirements.txt-tpl dependencies: {sorted(package_names)}", "debug"
|
|
144
|
+
)
|
|
145
|
+
fastapi_declared = fastapi_declared or "fastapi" in package_names
|
|
146
|
+
|
|
147
|
+
if pyproject_path.exists():
|
|
148
|
+
sources_checked.append("pyproject.toml-tpl")
|
|
149
|
+
package_names, parse_error = extract_pyproject_dependency_names(pyproject_path)
|
|
150
|
+
if parse_error is not None:
|
|
151
|
+
ctx.add_error(parse_error)
|
|
152
|
+
return False
|
|
153
|
+
debug_log(f"pyproject.toml-tpl dependencies: {sorted(package_names)}", "debug")
|
|
154
|
+
fastapi_declared = fastapi_declared or "fastapi" in package_names
|
|
155
|
+
|
|
156
|
+
if setup_path.exists():
|
|
157
|
+
sources_checked.append("setup.py-tpl")
|
|
158
|
+
try:
|
|
159
|
+
with open(setup_path, encoding="utf-8") as f:
|
|
160
|
+
content = f.read()
|
|
161
|
+
except (OSError, UnicodeDecodeError) as e:
|
|
162
|
+
ctx.add_error(f"Error reading setup.py-tpl: {e}")
|
|
163
|
+
return False
|
|
164
|
+
package_names = {
|
|
165
|
+
_parse_pip_requirement(dep)[0].lower()
|
|
166
|
+
for dep in _parse_setup_dependencies(content)
|
|
167
|
+
if dep
|
|
168
|
+
}
|
|
169
|
+
debug_log(f"setup.py-tpl dependencies: {sorted(package_names)}", "debug")
|
|
170
|
+
fastapi_declared = fastapi_declared or "fastapi" in package_names
|
|
171
|
+
|
|
172
|
+
if not sources_checked:
|
|
173
|
+
ctx.add_error(
|
|
174
|
+
"No dependency source found: expected one of requirements.txt-tpl, "
|
|
175
|
+
"pyproject.toml-tpl, or setup.py-tpl"
|
|
176
|
+
)
|
|
177
|
+
return False
|
|
178
|
+
|
|
179
|
+
if not fastapi_declared:
|
|
180
|
+
ctx.add_error(
|
|
181
|
+
"FastAPI dependency not found in any source ("
|
|
182
|
+
+ ", ".join(sources_checked)
|
|
183
|
+
+ ")"
|
|
184
|
+
)
|
|
185
|
+
return False
|
|
186
|
+
|
|
187
|
+
debug_log(
|
|
188
|
+
f"Dependencies check passed (sources: {', '.join(sources_checked)})", "info"
|
|
189
|
+
)
|
|
190
|
+
return True
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def _module_defines_fastapi_app(source: str) -> bool:
|
|
194
|
+
"""Return True when ``source`` assigns a ``FastAPI(...)`` instance."""
|
|
195
|
+
try:
|
|
196
|
+
tree = ast.parse(source)
|
|
197
|
+
except SyntaxError:
|
|
198
|
+
return False
|
|
199
|
+
|
|
200
|
+
for node in ast.walk(tree):
|
|
201
|
+
if not isinstance(node, (ast.Assign, ast.AnnAssign)):
|
|
202
|
+
continue
|
|
203
|
+
value = node.value
|
|
204
|
+
if not isinstance(value, ast.Call):
|
|
205
|
+
continue
|
|
206
|
+
func = value.func
|
|
207
|
+
name = ""
|
|
208
|
+
if isinstance(func, ast.Name):
|
|
209
|
+
name = func.id
|
|
210
|
+
elif isinstance(func, ast.Attribute):
|
|
211
|
+
name = func.attr
|
|
212
|
+
if name == "FastAPI":
|
|
213
|
+
return True
|
|
214
|
+
return False
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def check_fastapi_implementation(ctx: InspectionContext) -> bool:
|
|
218
|
+
"""Check the generated project really instantiates a FastAPI application.
|
|
219
|
+
|
|
220
|
+
This is a static (AST) guard so a broken main module is reported before
|
|
221
|
+
the far more expensive smoke test boots a server.
|
|
222
|
+
"""
|
|
223
|
+
try:
|
|
224
|
+
core_modules = find_template_core_modules(ctx.temp_dir)
|
|
225
|
+
debug_log(f"Found core modules: {core_modules}", "debug")
|
|
226
|
+
|
|
227
|
+
if not core_modules["main"]:
|
|
228
|
+
ctx.add_error("main.py not found in template")
|
|
229
|
+
return False
|
|
230
|
+
|
|
231
|
+
with open(core_modules["main"], encoding="utf-8") as f:
|
|
232
|
+
content = f.read()
|
|
233
|
+
except (OSError, UnicodeDecodeError) as e:
|
|
234
|
+
ctx.add_error(f"Error checking FastAPI implementation: {e}")
|
|
235
|
+
return False
|
|
236
|
+
|
|
237
|
+
if not _module_defines_fastapi_app(content):
|
|
238
|
+
ctx.add_error("FastAPI app creation not found in main.py")
|
|
239
|
+
debug_log(f"main.py content preview: {content[:200]}...", "debug")
|
|
240
|
+
return False
|
|
241
|
+
|
|
242
|
+
debug_log("FastAPI implementation check passed", "info")
|
|
243
|
+
return True
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def check_tests_present(ctx: InspectionContext) -> bool:
|
|
247
|
+
"""A template must ship at least one test module.
|
|
248
|
+
|
|
249
|
+
Previously a missing ``tests/`` directory only produced a warning; an
|
|
250
|
+
untested template is now a hard failure.
|
|
251
|
+
"""
|
|
252
|
+
tests_dir = ctx.template_path / "tests"
|
|
253
|
+
if not tests_dir.is_dir():
|
|
254
|
+
ctx.add_error("Missing required path: tests (templates must ship tests)")
|
|
255
|
+
return False
|
|
256
|
+
|
|
257
|
+
test_files = [
|
|
258
|
+
path
|
|
259
|
+
for path in tests_dir.rglob("*")
|
|
260
|
+
if path.is_file()
|
|
261
|
+
and path.name.startswith("test_")
|
|
262
|
+
and path.name.endswith((".py-tpl", ".py"))
|
|
263
|
+
]
|
|
264
|
+
if not test_files:
|
|
265
|
+
ctx.add_error(
|
|
266
|
+
"No test module found under tests/: at least one test_*.py-tpl file "
|
|
267
|
+
"is required"
|
|
268
|
+
)
|
|
269
|
+
return False
|
|
270
|
+
|
|
271
|
+
debug_log(f"Test suite check passed ({len(test_files)} test files)", "info")
|
|
272
|
+
return True
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def check_no_junk_files(ctx: InspectionContext) -> bool:
|
|
276
|
+
"""Reject OS/editor artifacts and build leftovers committed to a template."""
|
|
277
|
+
junk_names = {".DS_Store", "Thumbs.db", "desktop.ini", ".AppleDouble"}
|
|
278
|
+
junk_dirs = {"__pycache__", ".pytest_cache", ".mypy_cache", ".venv"}
|
|
279
|
+
found: List[str] = []
|
|
280
|
+
|
|
281
|
+
for path in ctx.template_path.rglob("*"):
|
|
282
|
+
rel = path.relative_to(ctx.template_path)
|
|
283
|
+
if path.is_dir():
|
|
284
|
+
if path.name in junk_dirs:
|
|
285
|
+
found.append(str(rel))
|
|
286
|
+
elif path.name in junk_names or path.suffix in {".pyc", ".pyo"}:
|
|
287
|
+
found.append(str(rel))
|
|
288
|
+
|
|
289
|
+
if found:
|
|
290
|
+
for item in sorted(found):
|
|
291
|
+
ctx.add_error(f"Junk file committed to template: {item}")
|
|
292
|
+
return False
|
|
293
|
+
|
|
294
|
+
debug_log("Junk file check passed", "info")
|
|
295
|
+
return True
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def check_no_placeholder_residue(ctx: InspectionContext) -> bool:
|
|
299
|
+
"""Every ``<placeholder>`` must be substituted during project generation.
|
|
300
|
+
|
|
301
|
+
The inspection generates a real project from the template (copy +
|
|
302
|
+
metadata injection), so any surviving placeholder token means the
|
|
303
|
+
template declares a variable the generator does not know how to fill.
|
|
304
|
+
"""
|
|
305
|
+
placeholders = [
|
|
306
|
+
"<project_name>",
|
|
307
|
+
"<author>",
|
|
308
|
+
"<author_email>",
|
|
309
|
+
"<description>",
|
|
310
|
+
]
|
|
311
|
+
text_suffixes = {
|
|
312
|
+
".py",
|
|
313
|
+
".toml",
|
|
314
|
+
".cfg",
|
|
315
|
+
".txt",
|
|
316
|
+
".md",
|
|
317
|
+
".yml",
|
|
318
|
+
".yaml",
|
|
319
|
+
".json",
|
|
320
|
+
".sh",
|
|
321
|
+
".env",
|
|
322
|
+
".ini",
|
|
323
|
+
}
|
|
324
|
+
residue: List[str] = []
|
|
325
|
+
|
|
326
|
+
for root, dirs, files in os.walk(ctx.temp_dir):
|
|
327
|
+
dirs[:] = [d for d in dirs if d not in {".venv", "venv", "__pycache__", ".git"}]
|
|
328
|
+
for file_name in files:
|
|
329
|
+
file_path = os.path.join(root, file_name)
|
|
330
|
+
suffix = Path(file_name).suffix
|
|
331
|
+
if suffix and suffix not in text_suffixes:
|
|
332
|
+
continue
|
|
333
|
+
try:
|
|
334
|
+
with open(file_path, encoding="utf-8") as f:
|
|
335
|
+
content = f.read()
|
|
336
|
+
except (OSError, UnicodeDecodeError):
|
|
337
|
+
continue
|
|
338
|
+
hits = [token for token in placeholders if token in content]
|
|
339
|
+
if hits:
|
|
340
|
+
rel = os.path.relpath(file_path, ctx.temp_dir)
|
|
341
|
+
residue.append(f"{rel}: {', '.join(hits)}")
|
|
342
|
+
|
|
343
|
+
if residue:
|
|
344
|
+
for item in sorted(residue):
|
|
345
|
+
ctx.add_error(f"Unsubstituted placeholder in generated project: {item}")
|
|
346
|
+
return False
|
|
347
|
+
|
|
348
|
+
debug_log("Placeholder substitution check passed", "info")
|
|
349
|
+
return True
|