FastAPI-fastkit 1.4.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.4.0 → fastapi_fastkit-1.4.1}/PKG-INFO +30 -11
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/README.md +29 -10
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/pyproject.toml +4 -3
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/__init__.py +1 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/context.py +4 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/core.py +5 -1
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/docker.py +150 -15
- fastapi_fastkit-1.4.1/src/fastapi_fastkit/backend/inspection/lint.py +103 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/smoke.py +67 -13
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/strategies.py +32 -1
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/transducer.py +101 -2
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/settings.py +3 -3
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/.env-tpl +1 -1
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/README.md-tpl +1 -1
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/pyproject.toml-tpl +2 -3
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/requirements.txt-tpl +4 -8
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/setup.cfg-tpl +2 -3
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/auth.py-tpl +9 -9
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/dependencies.py-tpl +2 -2
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/config.py-tpl +1 -1
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.env-tpl +2 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/jwt.py.j2 +6 -6
- fastapi_fastkit-1.4.1/tests/test_backends/test_inspection_docker.py +579 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_inspector.py +149 -1
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_inspector_checks.py +168 -10
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_config_builder.py +2 -2
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_validators.py +1 -1
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_project_builder_config_generator.py +2 -2
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_project_builder_dependency_collector.py +4 -4
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_transducer.py +169 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_config_options.py +1 -1
- fastapi_fastkit-1.4.0/src/fastapi_fastkit/__init__.py +0 -1
- fastapi_fastkit-1.4.0/src/fastapi_fastkit/backend/inspection/lint.py +0 -89
- fastapi_fastkit-1.4.0/tests/test_backends/test_inspection_docker.py +0 -268
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/LICENSE +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/__main__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/checks.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/consistency.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/freshness.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/fsutils.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/report.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspector.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/config_builder.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/prompts.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/selectors.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/interactive/validators.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/main.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/base.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/factory.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/pdm_manager.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/pip_manager.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/poetry_manager.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/package_managers/uv_manager.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/config_generator.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/config_schema.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/dependency_collector.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/project_builder/preset_layout.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/scaffolder.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/cli.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/core/exceptions.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/README.md +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.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.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-async-crud/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/alembic.ini-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/README-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/alembic/env.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.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 +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/deps.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/api/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/core/security.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/db/session.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/models.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/repository.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/schemas.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/auth/service.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/models.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/repository.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/schemas.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/domains/users/service.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/src/app/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/template-config.yml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_auth.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_health.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-auth-jwt/tests/test_users.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/helper/pagination.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/base.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/src/utils/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-custom-response/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-default/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/mocks/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-dockerized/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/health.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/api/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/db/memory.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.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.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/repository.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/domains/items/service.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/src/app/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-domain-starter/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-empty/tests/test_main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/chat.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/chat.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/deps.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/health.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/api/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/agent.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/client.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/llm/tools.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/base.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/memory/in_memory.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/src/app/schemas/chat.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/template-config.yml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_chat.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_health.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_memory.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-llm-agent/tests/test_tools.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/auth/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/mcp_server/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_auth.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-mcp/tests/test_mcp.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/alembic.ini-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/docker-compose.yml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/README-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/env.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/script.py.mako-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/alembic/versions/bedcdc35b64a_first_alembic.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/api.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/api/routes/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/core/db.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/crud/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/src/schemas/items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → 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.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.4.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.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/template-config.yml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/setup.cfg-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/src/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-single-module/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.env-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/.gitignore-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/Dockerfile-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/README.md-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/alembic.ini-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/pyproject.toml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/requirements.txt-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/format.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/lint.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/migrate.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/run-server.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/scripts/test.sh-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/README-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/env.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/script.py.mako-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/alembic/versions/0001_create_items_table.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/health.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/api/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/core/config.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/base.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/crud/pagination.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/base.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/db/session.py-tpl +0 -0
- {fastapi_fastkit-1.4.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.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.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/crud.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/models.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/domains/items/router.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/src/app/main.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/template-config.yml-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/conftest.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_crud_base.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_health.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/fastapi-sqlmodel/tests/test_items.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/api/routes/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/crud/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/crud/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/__init__.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fastapi_project_template/modules/schemas/new_route.py-tpl +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/README.md +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/fastapi_users.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/oauth2.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/auth/session.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/db/mongodb.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/db/redis.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/db/sqlalchemy.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/docker/docker_compose.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/docker/dockerfile.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/cache.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/pagination.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/tasks_celery.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/tasks_dramatiq.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/features/websocket.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/header.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/logging/structured.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/async_tasks.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/caching.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/fastapi_users.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/jwt.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/loguru.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/mongodb.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/oauth2.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/opentelemetry.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/pagination.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/prometheus.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/rate_limiting.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/session_auth.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/sqlalchemy.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/structured_logging.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/imports/websocket.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/caching.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/mongodb.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/prometheus.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/lifespan/sqlalchemy.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/async_tasks.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/caching.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/cors.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/oauth2.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/opentelemetry.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/pagination.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/rate_limiting.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/session_auth.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/structured_logging.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main/setup/websocket.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/main.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/alembic_ini.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/env.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/initial_revision.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/migrate_sh.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/migrations/script.py.mako.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tasks/celery_worker.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tasks/dramatiq_worker.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/factories.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/pytest_ini.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/test_factories.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/test/test_main.py.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/devcontainer.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/github_actions.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/makefile.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/pre_commit.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/fragments/tooling/ruff_toml.j2 +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/py.typed +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/config_file.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/logging.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/utils/main.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/conftest.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_configure.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_console_sizing.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_inspection_fsutils.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_prompts.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_interactive_selectors.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_main.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_package_managers.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_preset_layout.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_project_metadata.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_safety_regressions.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_backends/test_scaffolder.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_error_paths.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_extended.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_cli_operations/test_cli_interactive_integration.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_config_file.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_core.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_rich/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_rich/test_rich.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/__init__.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/template_configs.yaml +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_all_templates.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_config_based_templates.py +0 -0
- {fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/tests/test_templates/test_domain_starter_e2e.py +0 -0
- {fastapi_fastkit-1.4.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.4.
|
|
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
|
|
@@ -82,7 +82,9 @@ $ pip install FastAPI-fastkit
|
|
|
82
82
|
```console
|
|
83
83
|
fastkit init [OPTIONS]
|
|
84
84
|
```
|
|
85
|
-
|
|
85
|
+
> [!TIP]
|
|
86
|
+
> Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
|
|
87
|
+
|
|
86
88
|
- Key options:
|
|
87
89
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
88
90
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
@@ -98,7 +100,9 @@ fastkit init [OPTIONS]
|
|
|
98
100
|
```console
|
|
99
101
|
fastkit init --interactive
|
|
100
102
|
```
|
|
101
|
-
|
|
103
|
+
> [!TIP]
|
|
104
|
+
> Guided step-by-step project setup with intelligent feature selection
|
|
105
|
+
|
|
102
106
|
- Features:
|
|
103
107
|
- **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
|
|
104
108
|
- **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
|
|
@@ -114,7 +118,7 @@ fastkit init --interactive
|
|
|
114
118
|
- **Deployment**: Docker, docker-compose with auto-generated configs
|
|
115
119
|
- **Package manager**: pip, uv, pdm, poetry
|
|
116
120
|
- **Custom packages**: Add your own dependencies
|
|
117
|
-
- 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):
|
|
118
122
|
- `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
|
|
119
123
|
- Database and authentication configuration files at preset-specific paths
|
|
120
124
|
- Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
|
|
@@ -127,7 +131,9 @@ fastkit init --interactive
|
|
|
127
131
|
```console
|
|
128
132
|
fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
129
133
|
```
|
|
130
|
-
|
|
134
|
+
> [!TIP]
|
|
135
|
+
> Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
|
|
136
|
+
|
|
131
137
|
- Key options:
|
|
132
138
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
133
139
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
@@ -135,12 +141,6 @@ fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
|
135
141
|
- Refuses to run if the target project directory already exists (`--dry-run` excepted)
|
|
136
142
|
- Tip: List available templates with `fastkit list-templates`
|
|
137
143
|
|
|
138
|
-
New in v1.4.0: `fastapi-auth-jwt` (JWT auth with refresh rotation),
|
|
139
|
-
`fastapi-sqlmodel` (async SQLModel + Alembic + generic CRUD), and
|
|
140
|
-
`fastapi-llm-agent` (streaming Claude agent with a tool loop).
|
|
141
|
-
`fastapi-dockerized` and `fastapi-async-crud` are deprecated — they still
|
|
142
|
-
work, but are no longer recommended starting points.
|
|
143
|
-
|
|
144
144
|
### Add a new route
|
|
145
145
|
```console
|
|
146
146
|
fastkit addroute <project_name> <route_name>
|
|
@@ -160,6 +160,25 @@ fastkit runserver [OPTIONS]
|
|
|
160
160
|
fastkit list-templates
|
|
161
161
|
```
|
|
162
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
|
+
|
|
163
182
|
### Delete a project
|
|
164
183
|
```console
|
|
165
184
|
fastkit deleteproject <project_name>
|
|
@@ -57,7 +57,9 @@ $ pip install FastAPI-fastkit
|
|
|
57
57
|
```console
|
|
58
58
|
fastkit init [OPTIONS]
|
|
59
59
|
```
|
|
60
|
-
|
|
60
|
+
> [!TIP]
|
|
61
|
+
> Scaffolds an empty FastAPI project, creates a virtual environment, installs dependencies
|
|
62
|
+
|
|
61
63
|
- Key options:
|
|
62
64
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
63
65
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
@@ -73,7 +75,9 @@ fastkit init [OPTIONS]
|
|
|
73
75
|
```console
|
|
74
76
|
fastkit init --interactive
|
|
75
77
|
```
|
|
76
|
-
|
|
78
|
+
> [!TIP]
|
|
79
|
+
> Guided step-by-step project setup with intelligent feature selection
|
|
80
|
+
|
|
77
81
|
- Features:
|
|
78
82
|
- **Architecture preset**: `minimal` | `single-module` | `classic-layered` | `domain-starter` (default)
|
|
79
83
|
- **Database selection**: PostgreSQL, MySQL, MongoDB, Redis, SQLite
|
|
@@ -89,7 +93,7 @@ fastkit init --interactive
|
|
|
89
93
|
- **Deployment**: Docker, docker-compose with auto-generated configs
|
|
90
94
|
- **Package manager**: pip, uv, pdm, poetry
|
|
91
95
|
- **Custom packages**: Add your own dependencies
|
|
92
|
-
- 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):
|
|
93
97
|
- `main.py` regenerated from selected features for `minimal` / `single-module`; preserved as-shipped for `classic-layered` / `domain-starter`
|
|
94
98
|
- Database and authentication configuration files at preset-specific paths
|
|
95
99
|
- Docker deployment files (`Dockerfile`, `docker-compose.yml`) with the preset's correct uvicorn entrypoint
|
|
@@ -102,7 +106,9 @@ fastkit init --interactive
|
|
|
102
106
|
```console
|
|
103
107
|
fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
104
108
|
```
|
|
105
|
-
|
|
109
|
+
> [!TIP]
|
|
110
|
+
> Creates a project from a template (e.g., `fastapi-default`) and installs dependencies
|
|
111
|
+
|
|
106
112
|
- Key options:
|
|
107
113
|
- `--project-name`, `--author`, `--author-email`, `--description`
|
|
108
114
|
- `--package-manager` [pip|uv|pdm|poetry]
|
|
@@ -110,12 +116,6 @@ fastkit startdemo [TEMPLATE] [OPTIONS]
|
|
|
110
116
|
- Refuses to run if the target project directory already exists (`--dry-run` excepted)
|
|
111
117
|
- Tip: List available templates with `fastkit list-templates`
|
|
112
118
|
|
|
113
|
-
New in v1.4.0: `fastapi-auth-jwt` (JWT auth with refresh rotation),
|
|
114
|
-
`fastapi-sqlmodel` (async SQLModel + Alembic + generic CRUD), and
|
|
115
|
-
`fastapi-llm-agent` (streaming Claude agent with a tool loop).
|
|
116
|
-
`fastapi-dockerized` and `fastapi-async-crud` are deprecated — they still
|
|
117
|
-
work, but are no longer recommended starting points.
|
|
118
|
-
|
|
119
119
|
### Add a new route
|
|
120
120
|
```console
|
|
121
121
|
fastkit addroute <project_name> <route_name>
|
|
@@ -135,6 +135,25 @@ fastkit runserver [OPTIONS]
|
|
|
135
135
|
fastkit list-templates
|
|
136
136
|
```
|
|
137
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
|
+
|
|
138
157
|
### Delete a project
|
|
139
158
|
```console
|
|
140
159
|
fastkit deleteproject <project_name>
|
|
@@ -12,7 +12,7 @@ dependencies = [
|
|
|
12
12
|
]
|
|
13
13
|
requires-python = ">=3.12"
|
|
14
14
|
readme = "README.md"
|
|
15
|
-
version = "1.4.
|
|
15
|
+
version = "1.4.1"
|
|
16
16
|
|
|
17
17
|
[project.license]
|
|
18
18
|
text = "MIT"
|
|
@@ -128,14 +128,15 @@ directory = "htmlcov"
|
|
|
128
128
|
[dependency-groups]
|
|
129
129
|
docs = [
|
|
130
130
|
"mkdocs>=1.6.1",
|
|
131
|
-
"mkdocs-material>=9.
|
|
131
|
+
"mkdocs-material>=9.7.7",
|
|
132
132
|
"mdx-include>=1.4.2",
|
|
133
133
|
"mkdocs-static-i18n>=1.3.0",
|
|
134
134
|
"pyyaml>=6.0.3",
|
|
135
135
|
"types-PyYAML>=6.0.12.20250915",
|
|
136
136
|
"pygments>=2.20.0",
|
|
137
137
|
"requests>=2.33.0",
|
|
138
|
-
"
|
|
138
|
+
"idna>=3.15",
|
|
139
|
+
"pymdown-extensions>=11.0.1",
|
|
139
140
|
]
|
|
140
141
|
translation = [
|
|
141
142
|
"openai>=2.8.1",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = 'v1.4.1'
|
{fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/context.py
RENAMED
|
@@ -43,6 +43,10 @@ class InspectionContext:
|
|
|
43
43
|
warnings: List[str] = field(default_factory=list)
|
|
44
44
|
#: Populated by a test strategy so later checks can reuse the environment.
|
|
45
45
|
venv_path: Optional[str] = None
|
|
46
|
+
#: Populated when a test strategy already exercised the app's HTTP surface
|
|
47
|
+
#: (the Docker strategy probes the running container), so the Smoke Test
|
|
48
|
+
#: step reuses that verdict instead of booting a second server.
|
|
49
|
+
smoke_result: Optional[bool] = None
|
|
46
50
|
|
|
47
51
|
def add_error(self, message: str) -> None:
|
|
48
52
|
"""Record a fatal finding."""
|
{fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/core.py
RENAMED
|
@@ -252,8 +252,12 @@ class TemplateInspector:
|
|
|
252
252
|
("Configuration Consistency", self._check_configuration_consistency),
|
|
253
253
|
("FastAPI Implementation", self._check_fastapi_implementation),
|
|
254
254
|
("Placeholder Substitution", self._check_no_placeholder_residue),
|
|
255
|
-
|
|
255
|
+
# Compile Check is a pure static check: it runs before the (much
|
|
256
|
+
# heavier) Template Tests so a syntax error is reported without
|
|
257
|
+
# waiting for an environment, and so it never observes files a
|
|
258
|
+
# containerised test run left behind.
|
|
256
259
|
("Compile Check", self._check_compileall),
|
|
260
|
+
("Template Tests", self._test_template),
|
|
257
261
|
("Type Check", self._check_mypy),
|
|
258
262
|
("Smoke Test", self._check_smoke_test),
|
|
259
263
|
("Dependency Freshness", self._check_dependency_freshness),
|
{fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/docker.py
RENAMED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# @author bnbong
|
|
8
8
|
# --------------------------------------------------------------------------
|
|
9
9
|
import json
|
|
10
|
+
import os
|
|
10
11
|
import subprocess
|
|
11
12
|
import time
|
|
12
13
|
from typing import Any, Dict, List, Optional, Sequence
|
|
@@ -14,6 +15,12 @@ from typing import Any, Dict, List, Optional, Sequence
|
|
|
14
15
|
from fastapi_fastkit.utils.logging import debug_log
|
|
15
16
|
|
|
16
17
|
COMPOSE_COMMAND = "docker-compose"
|
|
18
|
+
#: Fallback for hosts that only ship the ``docker compose`` CLI plugin.
|
|
19
|
+
COMPOSE_PLUGIN_COMMAND = ["docker", "compose"]
|
|
20
|
+
#: Resolved compose invocation, switched by :meth:`DockerCompose.is_available`.
|
|
21
|
+
_compose_prefix: List[str] = [COMPOSE_COMMAND]
|
|
22
|
+
#: Throwaway image used to give bind-mounted files back to the host user.
|
|
23
|
+
RECLAIM_IMAGE = "alpine:3.20"
|
|
17
24
|
SHORT_TIMEOUT = 10
|
|
18
25
|
STATUS_TIMEOUT = 30
|
|
19
26
|
CLEANUP_TIMEOUT = 60
|
|
@@ -43,27 +50,49 @@ class DockerCompose:
|
|
|
43
50
|
debug_log(f"Command {' '.join(args)} failed: {e}", "warning")
|
|
44
51
|
return None
|
|
45
52
|
|
|
53
|
+
@staticmethod
|
|
54
|
+
def compose_command() -> List[str]:
|
|
55
|
+
"""Return the compose invocation resolved by :meth:`is_available`."""
|
|
56
|
+
return list(_compose_prefix)
|
|
57
|
+
|
|
46
58
|
def _compose(
|
|
47
59
|
self, args: Sequence[str], timeout: int
|
|
48
60
|
) -> Optional[subprocess.CompletedProcess[str]]:
|
|
49
61
|
"""Run a docker-compose subcommand against the configured compose file."""
|
|
50
62
|
return self._run(
|
|
51
|
-
[
|
|
63
|
+
[*self.compose_command(), "-f", self.compose_file, *args], timeout=timeout
|
|
52
64
|
)
|
|
53
65
|
|
|
66
|
+
@staticmethod
|
|
67
|
+
def _probe(command: Sequence[str]) -> bool:
|
|
68
|
+
"""Return whether ``command`` exits successfully."""
|
|
69
|
+
try:
|
|
70
|
+
result = subprocess.run(
|
|
71
|
+
list(command), capture_output=True, text=True, timeout=SHORT_TIMEOUT
|
|
72
|
+
)
|
|
73
|
+
except (subprocess.TimeoutExpired, OSError):
|
|
74
|
+
return False
|
|
75
|
+
return result.returncode == 0
|
|
76
|
+
|
|
54
77
|
@staticmethod
|
|
55
78
|
def is_available() -> bool:
|
|
56
|
-
"""Check that
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
79
|
+
"""Check that docker responds and a compose implementation exists.
|
|
80
|
+
|
|
81
|
+
``docker-compose`` stays the preferred command; hosts that only ship
|
|
82
|
+
the ``docker compose`` CLI plugin fall back to it.
|
|
83
|
+
"""
|
|
84
|
+
global _compose_prefix
|
|
85
|
+
|
|
86
|
+
if not DockerCompose._probe(["docker", "--version"]):
|
|
87
|
+
return False
|
|
88
|
+
if DockerCompose._probe([COMPOSE_COMMAND, "--version"]):
|
|
89
|
+
_compose_prefix = [COMPOSE_COMMAND]
|
|
90
|
+
return True
|
|
91
|
+
if DockerCompose._probe([*COMPOSE_PLUGIN_COMMAND, "version"]):
|
|
92
|
+
debug_log("Falling back to the 'docker compose' CLI plugin", "info")
|
|
93
|
+
_compose_prefix = list(COMPOSE_PLUGIN_COMMAND)
|
|
94
|
+
return True
|
|
95
|
+
return False
|
|
67
96
|
|
|
68
97
|
def _services(self, timeout: int) -> List[Dict[str, Any]]:
|
|
69
98
|
"""Return the parsed ``docker-compose ps --format json`` entries."""
|
|
@@ -71,8 +100,34 @@ class DockerCompose:
|
|
|
71
100
|
if result is None or result.returncode != 0:
|
|
72
101
|
return []
|
|
73
102
|
|
|
103
|
+
# Compose sometimes interleaves ``time="..." level=warning`` log lines
|
|
104
|
+
# with the JSON payload, so only JSON-looking lines are considered.
|
|
105
|
+
payload = "\n".join(
|
|
106
|
+
line
|
|
107
|
+
for line in result.stdout.splitlines()
|
|
108
|
+
if line.strip().startswith(("[", "{"))
|
|
109
|
+
).strip()
|
|
110
|
+
if not payload:
|
|
111
|
+
return []
|
|
112
|
+
|
|
113
|
+
# Compose < v2.21 prints a single JSON array, newer versions print one
|
|
114
|
+
# JSON object per line (NDJSON).
|
|
115
|
+
try:
|
|
116
|
+
document = json.loads(payload)
|
|
117
|
+
except json.JSONDecodeError:
|
|
118
|
+
return DockerCompose._parse_json_lines(payload)
|
|
119
|
+
|
|
120
|
+
if isinstance(document, dict):
|
|
121
|
+
return [document]
|
|
122
|
+
if isinstance(document, list):
|
|
123
|
+
return [entry for entry in document if isinstance(entry, dict)]
|
|
124
|
+
return []
|
|
125
|
+
|
|
126
|
+
@staticmethod
|
|
127
|
+
def _parse_json_lines(payload: str) -> List[Dict[str, Any]]:
|
|
128
|
+
"""Parse NDJSON output, skipping malformed or non-object lines."""
|
|
74
129
|
services: List[Dict[str, Any]] = []
|
|
75
|
-
for line in
|
|
130
|
+
for line in payload.split("\n"):
|
|
76
131
|
if not line.strip():
|
|
77
132
|
continue
|
|
78
133
|
try:
|
|
@@ -109,7 +164,7 @@ class DockerCompose:
|
|
|
109
164
|
"""Build and start the compose services in the background."""
|
|
110
165
|
result = self._compose(["up", "-d", "--build"], timeout=timeout)
|
|
111
166
|
if result is None:
|
|
112
|
-
raise subprocess.TimeoutExpired(
|
|
167
|
+
raise subprocess.TimeoutExpired(" ".join(self.compose_command()), timeout)
|
|
113
168
|
return result
|
|
114
169
|
|
|
115
170
|
def wait_until_healthy(self, timeout: int) -> None:
|
|
@@ -166,6 +221,50 @@ class DockerCompose:
|
|
|
166
221
|
debug_log("All required services are running", "info")
|
|
167
222
|
return None
|
|
168
223
|
|
|
224
|
+
def published_port(self, service_hint: str = "app") -> Optional[int]:
|
|
225
|
+
"""Return the host port the app container publishes, if any.
|
|
226
|
+
|
|
227
|
+
``docker-compose ps --format json`` reports a ``Publishers`` list per
|
|
228
|
+
service; an entry with a non-zero ``PublishedPort`` is a port bound on
|
|
229
|
+
the host, which is what a smoke test can reach. Services whose name
|
|
230
|
+
contains ``service_hint`` are preferred, so a database that happens to
|
|
231
|
+
publish a port is never mistaken for the application.
|
|
232
|
+
"""
|
|
233
|
+
services = self._services(timeout=STATUS_TIMEOUT)
|
|
234
|
+
if not services:
|
|
235
|
+
return None
|
|
236
|
+
|
|
237
|
+
def _matches(service: Dict[str, Any]) -> bool:
|
|
238
|
+
name = f"{service.get('Service', '')} {service.get('Name', '')}"
|
|
239
|
+
return service_hint in name
|
|
240
|
+
|
|
241
|
+
for candidate in (
|
|
242
|
+
[entry for entry in services if _matches(entry)],
|
|
243
|
+
services,
|
|
244
|
+
):
|
|
245
|
+
for service in candidate:
|
|
246
|
+
port = self._first_published_port(service)
|
|
247
|
+
if port is not None:
|
|
248
|
+
return port
|
|
249
|
+
return None
|
|
250
|
+
|
|
251
|
+
@staticmethod
|
|
252
|
+
def _first_published_port(service: Dict[str, Any]) -> Optional[int]:
|
|
253
|
+
"""Extract the first host-bound port from one ``ps`` entry."""
|
|
254
|
+
publishers = service.get("Publishers")
|
|
255
|
+
if not isinstance(publishers, list):
|
|
256
|
+
return None
|
|
257
|
+
for publisher in publishers:
|
|
258
|
+
if not isinstance(publisher, dict):
|
|
259
|
+
continue
|
|
260
|
+
try:
|
|
261
|
+
port = int(publisher.get("PublishedPort", 0))
|
|
262
|
+
except (TypeError, ValueError):
|
|
263
|
+
continue
|
|
264
|
+
if port > 0:
|
|
265
|
+
return port
|
|
266
|
+
return None
|
|
267
|
+
|
|
169
268
|
def exec_tests(
|
|
170
269
|
self, use_test_script: bool
|
|
171
270
|
) -> Optional[subprocess.CompletedProcess[str]]:
|
|
@@ -176,10 +275,46 @@ class DockerCompose:
|
|
|
176
275
|
command = ["exec", "-T", "app", "python", "-m", "pytest", "tests/", "-v"]
|
|
177
276
|
return self._compose(command, timeout=TEST_TIMEOUT)
|
|
178
277
|
|
|
278
|
+
def reclaim_bind_mount_ownership(self) -> None:
|
|
279
|
+
"""Give the bind-mounted project directory back to the host user.
|
|
280
|
+
|
|
281
|
+
Containers run as root, so a test run inside the stack leaves
|
|
282
|
+
root-owned artefacts (``__pycache__``, ``.pytest_cache``, ...) in the
|
|
283
|
+
mounted project. Later host-side steps and the temp directory cleanup
|
|
284
|
+
cannot touch those and fail with a PermissionError, so the ownership
|
|
285
|
+
is reset from inside a throwaway container. Best effort: a failure
|
|
286
|
+
here is never worth failing an inspection over.
|
|
287
|
+
"""
|
|
288
|
+
if not hasattr(os, "getuid"): # pragma: no cover - Windows hosts
|
|
289
|
+
return
|
|
290
|
+
|
|
291
|
+
uid, gid = os.getuid(), os.getgid()
|
|
292
|
+
if uid == 0:
|
|
293
|
+
return
|
|
294
|
+
|
|
295
|
+
debug_log("Reclaiming ownership of bind-mounted project files", "info")
|
|
296
|
+
self._run(
|
|
297
|
+
[
|
|
298
|
+
"docker",
|
|
299
|
+
"run",
|
|
300
|
+
"--rm",
|
|
301
|
+
"-v",
|
|
302
|
+
f"{self.project_dir}:/mnt",
|
|
303
|
+
RECLAIM_IMAGE,
|
|
304
|
+
"chown",
|
|
305
|
+
"-R",
|
|
306
|
+
f"{uid}:{gid}",
|
|
307
|
+
"/mnt",
|
|
308
|
+
],
|
|
309
|
+
timeout=CLEANUP_TIMEOUT,
|
|
310
|
+
)
|
|
311
|
+
|
|
179
312
|
def cleanup(self) -> None:
|
|
180
313
|
"""Tear down services and volumes, ignoring any failure."""
|
|
181
314
|
debug_log("Cleaning up Docker services", "info")
|
|
315
|
+
self.reclaim_bind_mount_ownership()
|
|
182
316
|
self._run(
|
|
183
|
-
[
|
|
317
|
+
[*self.compose_command(), "down", "-v", "--remove-orphans"],
|
|
318
|
+
timeout=CLEANUP_TIMEOUT,
|
|
184
319
|
)
|
|
185
320
|
self._run(["docker", "system", "prune", "-f"], timeout=STATUS_TIMEOUT)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# Static analysis of the generated project.
|
|
3
|
+
#
|
|
4
|
+
# The compile check is mandatory - a template that cannot be compiled is
|
|
5
|
+
# broken beyond argument. It is performed in-process with ``compile()`` and
|
|
6
|
+
# deliberately writes nothing to disk: a Docker test run beforehand can leave
|
|
7
|
+
# root-owned ``__pycache__`` directories in the bind-mounted project, and
|
|
8
|
+
# ``compileall`` would then fail with a PermissionError that says nothing
|
|
9
|
+
# about the template. ``mypy`` is opt-in because it needs the template's own
|
|
10
|
+
# dependencies installed and is far slower.
|
|
11
|
+
#
|
|
12
|
+
# @author bnbong
|
|
13
|
+
# --------------------------------------------------------------------------
|
|
14
|
+
import os
|
|
15
|
+
import subprocess
|
|
16
|
+
import sys
|
|
17
|
+
from typing import List
|
|
18
|
+
|
|
19
|
+
from fastapi_fastkit.utils.logging import debug_log
|
|
20
|
+
|
|
21
|
+
from .context import InspectionContext
|
|
22
|
+
|
|
23
|
+
MYPY_TIMEOUT = 300
|
|
24
|
+
|
|
25
|
+
#: Directories never worth compiling - third party code and build artefacts.
|
|
26
|
+
EXCLUDED_DIRS = {".venv", "venv", "__pycache__", "node_modules"}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _interpreter(ctx: InspectionContext) -> str:
|
|
30
|
+
"""Prefer the inspection venv interpreter, falling back to the host one."""
|
|
31
|
+
return ctx.python_executable() or sys.executable
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _iter_python_files(root: str) -> List[str]:
|
|
35
|
+
"""Collect every ``.py`` file below ``root``, skipping excluded directories."""
|
|
36
|
+
python_files: List[str] = []
|
|
37
|
+
for dirpath, dirnames, filenames in os.walk(root):
|
|
38
|
+
dirnames[:] = [name for name in dirnames if name not in EXCLUDED_DIRS]
|
|
39
|
+
for file_name in sorted(filenames):
|
|
40
|
+
if file_name.endswith(".py"):
|
|
41
|
+
python_files.append(os.path.join(dirpath, file_name))
|
|
42
|
+
return python_files
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def check_compileall(ctx: InspectionContext) -> bool:
|
|
46
|
+
"""Compile every Python file of the generated project, in memory.
|
|
47
|
+
|
|
48
|
+
Nothing is written to disk - no ``__pycache__`` is created - so the check
|
|
49
|
+
stays a pure syntax gate that cannot trip over file ownership left behind
|
|
50
|
+
by a containerised test run.
|
|
51
|
+
"""
|
|
52
|
+
failures: List[str] = []
|
|
53
|
+
|
|
54
|
+
for path in _iter_python_files(ctx.temp_dir):
|
|
55
|
+
try:
|
|
56
|
+
with open(path, "rb") as f:
|
|
57
|
+
source = f.read()
|
|
58
|
+
except OSError as e:
|
|
59
|
+
failures.append(f"{path}: could not be read ({e})")
|
|
60
|
+
continue
|
|
61
|
+
|
|
62
|
+
try:
|
|
63
|
+
compile(source, path, "exec", dont_inherit=True)
|
|
64
|
+
except (SyntaxError, ValueError) as e:
|
|
65
|
+
failures.append(f"{path}: {e}")
|
|
66
|
+
|
|
67
|
+
if failures:
|
|
68
|
+
detail = "\n".join(failures)
|
|
69
|
+
ctx.add_error(f"Generated project failed to compile:\n{detail}")
|
|
70
|
+
return False
|
|
71
|
+
|
|
72
|
+
debug_log("compileall check passed", "info")
|
|
73
|
+
return True
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def check_mypy(ctx: InspectionContext) -> bool:
|
|
77
|
+
"""Run mypy inside the generated project (opt-in via ``--mypy``)."""
|
|
78
|
+
if not ctx.options.run_mypy:
|
|
79
|
+
debug_log("mypy check disabled", "info")
|
|
80
|
+
return True
|
|
81
|
+
|
|
82
|
+
try:
|
|
83
|
+
result = subprocess.run(
|
|
84
|
+
[_interpreter(ctx), "-m", "mypy", "."],
|
|
85
|
+
cwd=ctx.temp_dir,
|
|
86
|
+
capture_output=True,
|
|
87
|
+
text=True,
|
|
88
|
+
timeout=MYPY_TIMEOUT,
|
|
89
|
+
)
|
|
90
|
+
except subprocess.TimeoutExpired:
|
|
91
|
+
ctx.add_error("mypy timed out")
|
|
92
|
+
return False
|
|
93
|
+
except OSError as e:
|
|
94
|
+
ctx.add_warning(f"Could not run mypy: {e}")
|
|
95
|
+
return True
|
|
96
|
+
|
|
97
|
+
if result.returncode != 0:
|
|
98
|
+
detail = (result.stdout or result.stderr or "").strip()
|
|
99
|
+
ctx.add_error(f"mypy reported errors in the generated project:\n{detail}")
|
|
100
|
+
return False
|
|
101
|
+
|
|
102
|
+
debug_log("mypy check passed", "info")
|
|
103
|
+
return True
|
{fastapi_fastkit-1.4.0 → fastapi_fastkit-1.4.1}/src/fastapi_fastkit/backend/inspection/smoke.py
RENAMED
|
@@ -115,12 +115,17 @@ def _probe(url: str, timeout: int = 5) -> Optional[int]:
|
|
|
115
115
|
|
|
116
116
|
|
|
117
117
|
def _wait_for_server(
|
|
118
|
-
process: "subprocess.Popen[bytes]", base_url: str, timeout: int
|
|
118
|
+
process: Optional["subprocess.Popen[bytes]"], base_url: str, timeout: int
|
|
119
119
|
) -> Tuple[bool, str]:
|
|
120
|
-
"""Poll ``/docs`` until the server answers, the process dies or time runs out.
|
|
120
|
+
"""Poll ``/docs`` until the server answers, the process dies or time runs out.
|
|
121
|
+
|
|
122
|
+
``process`` is ``None`` when the server is not ours to watch - a container
|
|
123
|
+
started by the Docker strategy, for one - in which case only the timeout
|
|
124
|
+
bounds the wait.
|
|
125
|
+
"""
|
|
121
126
|
deadline = time.time() + timeout
|
|
122
127
|
while time.time() < deadline:
|
|
123
|
-
if process.poll() is not None:
|
|
128
|
+
if process is not None and process.poll() is not None:
|
|
124
129
|
return False, "server process exited before becoming reachable"
|
|
125
130
|
status = _probe(f"{base_url}/docs")
|
|
126
131
|
if status is not None:
|
|
@@ -228,14 +233,70 @@ def _read_log_tail(log_file: IO[bytes]) -> str:
|
|
|
228
233
|
return ""
|
|
229
234
|
|
|
230
235
|
|
|
236
|
+
def _check_health_endpoint(ctx: InspectionContext, base_url: str) -> Optional[str]:
|
|
237
|
+
"""Probe ``/health``; return a failure message, or ``None`` when acceptable.
|
|
238
|
+
|
|
239
|
+
A template without a ``/health`` route answers 404, which is fine; an
|
|
240
|
+
unreachable endpoint is only worth a warning, but a route that exists and
|
|
241
|
+
answers with anything other than 200 is a real failure.
|
|
242
|
+
"""
|
|
243
|
+
health_status = _probe(f"{base_url}/health")
|
|
244
|
+
if health_status is None:
|
|
245
|
+
ctx.add_warning("Smoke test: /health did not respond")
|
|
246
|
+
elif health_status == 404:
|
|
247
|
+
debug_log("Template exposes no /health endpoint, skipping", "info")
|
|
248
|
+
elif health_status != 200:
|
|
249
|
+
return (
|
|
250
|
+
f"Smoke test failed: /health returned HTTP {health_status} (expected 200)"
|
|
251
|
+
)
|
|
252
|
+
return None
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def run_http_smoke(ctx: InspectionContext, base_url: str) -> bool:
|
|
256
|
+
"""Verify the HTTP surface of a server someone else already started.
|
|
257
|
+
|
|
258
|
+
Used by the Docker strategy, which has the real application running in a
|
|
259
|
+
container: probing its published port is more honest than booting a second
|
|
260
|
+
copy on the host, and templates that require Docker never get a host venv
|
|
261
|
+
to boot one with in the first place.
|
|
262
|
+
"""
|
|
263
|
+
debug_log(f"Running smoke test against {base_url}", "info")
|
|
264
|
+
reachable, reason = _wait_for_server(None, base_url, ctx.options.smoke_timeout)
|
|
265
|
+
if not reachable:
|
|
266
|
+
ctx.add_error(f"Smoke test failed: {reason}")
|
|
267
|
+
return False
|
|
268
|
+
|
|
269
|
+
failure = _check_health_endpoint(ctx, base_url)
|
|
270
|
+
if failure:
|
|
271
|
+
ctx.add_error(failure)
|
|
272
|
+
return False
|
|
273
|
+
|
|
274
|
+
debug_log("Smoke test passed", "info")
|
|
275
|
+
return True
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def _requires_docker(ctx: InspectionContext) -> bool:
|
|
279
|
+
"""Whether the template declares that it can only run under Docker."""
|
|
280
|
+
return bool((ctx.template_config or {}).get("requires_docker", False))
|
|
281
|
+
|
|
282
|
+
|
|
231
283
|
def check_smoke_test(ctx: InspectionContext) -> bool:
|
|
232
284
|
"""Boot the generated project and verify its HTTP surface."""
|
|
233
285
|
if not ctx.options.run_smoke_test:
|
|
234
286
|
debug_log("Smoke test disabled", "info")
|
|
235
287
|
return True
|
|
236
288
|
|
|
289
|
+
if ctx.smoke_result is not None:
|
|
290
|
+
debug_log("Reusing the smoke test result recorded while testing", "info")
|
|
291
|
+
return ctx.smoke_result
|
|
292
|
+
|
|
237
293
|
python_executable = ctx.python_executable()
|
|
238
294
|
if not python_executable or not os.path.exists(python_executable):
|
|
295
|
+
if _requires_docker(ctx):
|
|
296
|
+
ctx.add_warning(
|
|
297
|
+
"smoke test skipped: Docker template without published port"
|
|
298
|
+
)
|
|
299
|
+
return True
|
|
239
300
|
ctx.add_error(
|
|
240
301
|
"Smoke test requires an installed environment, but no virtual "
|
|
241
302
|
"environment was prepared for the generated project"
|
|
@@ -306,16 +367,9 @@ def check_smoke_test(ctx: InspectionContext) -> bool:
|
|
|
306
367
|
ctx.add_error(last_failure)
|
|
307
368
|
return False
|
|
308
369
|
|
|
309
|
-
|
|
310
|
-
if
|
|
311
|
-
ctx.
|
|
312
|
-
elif health_status == 404:
|
|
313
|
-
debug_log("Template exposes no /health endpoint, skipping", "info")
|
|
314
|
-
elif health_status != 200:
|
|
315
|
-
ctx.add_error(
|
|
316
|
-
f"Smoke test failed: /health returned HTTP {health_status} "
|
|
317
|
-
"(expected 200)\n" + _read_log_tail(log_file)
|
|
318
|
-
)
|
|
370
|
+
failure = _check_health_endpoint(ctx, base_url)
|
|
371
|
+
if failure:
|
|
372
|
+
ctx.add_error(f"{failure}\n{_read_log_tail(log_file)}".rstrip())
|
|
319
373
|
return False
|
|
320
374
|
finally:
|
|
321
375
|
_terminate(process)
|