tempest-fastapi-sdk 0.321.0__tar.gz → 0.322.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/CHANGELOG.md +45 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/PKG-INFO +19 -9
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/README.md +18 -8
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/SHIPPED.md +16 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/migration.en.md +23 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/migration.md +23 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/auth-flow.en.md +135 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/auth-flow.md +135 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/email.en.md +60 -13
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/email.md +61 -14
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/reference.md +1 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/pyproject.toml +1 -1
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/__init__.py +5 -1
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/router.py +24 -6
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/service.py +192 -10
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/email.py +11 -2
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/__init__.py +4 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/i18n.py +6 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/integration.py +27 -1
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/settings/mixins.py +50 -2
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/email.py +96 -22
- tempest_fastapi_sdk-0.322.0/tests/auth/test_email_delivery_failure.py +447 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_email_storage.py +21 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_integration_flags.py +100 -0
- tempest_fastapi_sdk-0.322.0/tests/utils/smtp_server.py +102 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_email.py +143 -105
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/uv.lock +1 -1
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/ISSUE_TEMPLATE/docs.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/dependabot.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/workflows/audit.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/workflows/docs.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.github/workflows/release-pypi.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.gitignore +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/.python-version +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/CLAUDE.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/LESSONS.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/Makefile +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/CLAUDE.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/admin-showcase.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/admin-showcase.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/architecture.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/architecture.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/changelog.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/changelog.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/contributing.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/contributing.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/fullstack-web.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/fullstack-web.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/genai-examples.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/genai-examples.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/first-project.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/first-project.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/python-versions.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/python-versions.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/references.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/references.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/uv.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/getting-started/uv.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/index.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/index.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/installation.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/installation.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/integrated.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/integrated.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/index.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/index.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/api.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/api.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/business-rules.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/business-rules.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/domain.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/domain.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/flows.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/flows.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/index.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/learning/marketplace/index.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/marketplace-local.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/marketplace-local.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/admin-sql-console.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/admin-sql-console.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/admin.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/admin.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-advanced.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-advanced.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-architecture.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-architecture.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-concepts.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-concepts.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-db.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-db.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-prompts.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-prompts.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-testing.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-testing.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-tools.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents-tools.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/agents.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/app-errors.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/app-errors.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/artifact-registry.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/artifact-registry.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/asyncapi-client.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/asyncapi-client.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/audit-trail.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/audit-trail.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/authz.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/authz.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/br-helpers.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/br-helpers.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/cache.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/cache.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/chat.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/chat.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/cli.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/cli.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/database.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/database.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/deploy-safety.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/deploy-safety.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/downloads.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/downloads.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/enum-columns.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/enum-columns.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/faces.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/faces.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/fakes.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/fakes.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/feature-flags.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/feature-flags.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/fields.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/fields.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/file-store.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/file-store.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/firebase-auth.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/firebase-auth.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/genai-hosted.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/genai-hosted.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/genai.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/genai.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/geo.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/geo.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/hostbridge.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/hostbridge.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/http-client.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/http-client.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/http.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/http.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/idempotency.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/idempotency.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/image-generation.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/image-generation.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/index.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/index.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/introspection-auth.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/introspection-auth.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/jobs.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/jobs.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/kestra.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/kestra.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/logging.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/logging.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/management-commands.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/management-commands.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mercado-pago-sandbox.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mercado-pago-sandbox.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mercado-pago-webhooks.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mercado-pago-webhooks.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mercado-pago.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mercado-pago.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/metrics.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/metrics.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mfa.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/mfa.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/migrations.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/migrations.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/model-weights.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/model-weights.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/modelops.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/modelops.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/models.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/models.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/multi-tenant.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/multi-tenant.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/n8n.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/n8n.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/oauth.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/oauth.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/observability.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/observability.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/offline-sync.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/offline-sync.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openapi-client.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openapi-client.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openapi-errors.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openapi-errors.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openpix-subscriptions.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openpix-subscriptions.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openpix.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/openpix.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/outbox.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/outbox.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/pdf.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/pdf.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/permission-guards.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/permission-guards.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/pix-protocol.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/pix-protocol.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/push.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/push.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/query-plans.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/query-plans.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/queue-tasks.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/queue-tasks.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/react-spa.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/react-spa.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/realtime.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/realtime.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/refresh-tokens.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/refresh-tokens.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/revenuecat.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/revenuecat.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/reviews.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/reviews.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/security.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/security.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/sessions.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/sessions.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/spreadsheets.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/spreadsheets.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/sse.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/sse.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ssr-actions.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ssr-actions.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/storage.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/storage.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/stored-files.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/stored-files.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/stripe.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/stripe.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/subject-data.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/subject-data.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/system-checks.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/system-checks.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/tempestweb-frontend.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/tempestweb-frontend.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/testing.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/testing.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/text-search.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/text-search.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/transactions.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/transactions.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/transcription-pipeline.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/transcription-pipeline.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/typing.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/typing.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ui-css.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ui-css.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ui-forms.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ui-forms.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ui.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/ui.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/uploads.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/uploads.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/utilities.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/utilities.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/vision.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/vision.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/wallet.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/wallet.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/webauthn.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/webauthn.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/webpush.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/webpush.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/websocket.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/websocket.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/zap-inbound.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/zap-inbound.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/zap.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/recipes/zap.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/reference.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/roadmap.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/roadmap.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/ssr.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/ssr.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/tutorial.en.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/docs/tutorial.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/mkdocs.yml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/mkdocs_hooks/llmstxt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/planning/genai/README.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/planning/genai/manual-validation.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/planning/genai/phase-0.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/planning/genai/phase-1.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/planning/genai/phase-2.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/planning/genai/phase-3.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/planning/genai/validation-strategy.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/export_order.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/extract_recipe.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/face_separation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/mercadopago_diff.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/mercadopago_overlay.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/openpix_diff.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/openpix_overlay.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/overlay_enums.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/regen_mercado_pago.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/regen_openpix.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/regen_stripe.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/regen_zap.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/scripts/regen_zap_ws.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/actions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/auth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/config.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/dashboard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/discovery.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/forms.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/permissions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/session.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/site.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/sql_shell.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/static/admin.css +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/tasks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/autocomplete.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/base.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/dashboard.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/detail.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/form.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/import.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/list.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/login.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/logs.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/mfa.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/sql_shell.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/task_detail.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/templates/tasks.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/admin/theme.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/agent.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/builtin.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/fact_stores.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/loop.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/memory.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/multi.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/protocols.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/skills.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/storage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/structured.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/testing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/tools.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/agents/typed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/cookies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/dependencies/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/dependencies/_session.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/dependencies/auth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/dependencies/rate_limit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/dependencies/signed_url.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/error_docs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/handlers.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/_exempt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/_streaming.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/access_log.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/body_size.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/cors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/csrf.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/error_envelope.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/graceful.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/honeypot.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/idempotency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/quota.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/rate_limit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/request_id.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/middlewares/response_cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/oauth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/oidc_verifier.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/redaction.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/routers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/routers/health.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/routers/logs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/routers/metrics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/routers/tool_spec.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/server.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/spa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/static.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/tracing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/api/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/app_errors/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/app_errors/constants.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/app_errors/models.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/app_errors/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/app_errors/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/app_errors/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/artifacts/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/artifacts/actions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/artifacts/digest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/artifacts/model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/artifacts/registry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/asyncapi/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/asyncapi/emit_stream.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/asyncapi/generate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/asyncapi/ir.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/asyncapi/loader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/asyncapi/parse.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/exceptions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/firebase.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/guards.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/introspection.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/locale.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/page_renderer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/activation.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/email_changed_notice.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_form.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_changed_notice.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_error.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_form.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_success.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/token_delivery.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/auth/webauthn.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/authz/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/authz/dependencies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/authz/permissions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/authz/requires.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cache/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cache/decorator.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cache/invalidation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cache/redis_manager.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/chat/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/chat/constants.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/chat/models.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/chat/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/chat/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/chat/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/checks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/checks/builtins.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/checks/messages.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/checks/registry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/CLAUDE.md.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/Dockerfile.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/README.md.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/dockerignore.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/env.example.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/gitignore.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/main.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/pyproject.toml.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/api/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/api/app.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/auth.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/controllers.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/resources.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/api/routers/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/controllers/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/controllers/service_info.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/core/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/core/exceptions.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/core/settings.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/db/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/db/configs/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/db/configs/names.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/user.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/db/repositories/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/schemas/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/schemas/service_info.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/server.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/services/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/src/utils/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/tests/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/_templates/tests/test_smoke.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/agents.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/commands.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/config.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/db.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/docker_compose.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/doctor.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/entrypoint.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/flags.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/generate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/integrations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/layer_lint.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/lint.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/main.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/new.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/openapi_errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/openapi_export.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/openapi_fix.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/pdf.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/permissions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/pr_prompt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/project.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/queue.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/routes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/secrets.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/serve.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/shell.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/src_layers.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/storage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/tasks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/user.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/cli/voice.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/controllers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/controllers/base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/core/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/core/context.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/core/enums.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/core/logging.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/core/redaction.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/core/typed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/_alembic_templates/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/_alembic_templates/env.py.template +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/_alembic_templates/script.py.mako +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/alembic_env.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/alembic_hooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/audit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/backup.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/connection.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/datetime_type.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/device_token_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/enum_migrations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/enums.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/explain.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/expressions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/integrity.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/migrations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/mixins.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/naming.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/outbox.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/repository.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/search.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/signals.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/slow_query.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/tenant.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/transaction.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/user_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/user_oauth_account_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/user_recovery_code_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/user_refresh_token_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/user_token_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/user_webauthn_credential_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/voice_profile_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/webhook_inbox.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/db/webpush_subscription_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/conflict.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/factories.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/forbidden.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/jwt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/not_found.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/oauth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/signed_url.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/too_many_requests.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/unauthorized.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/upload.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/validation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/value_errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/exceptions/wallet.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/faces/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/faces/detector.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/faces/geometry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/faces/models.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/faces/recognizer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/faces/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/flags/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/flags/backends.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/flags/dependencies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/flags/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/admin.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/anthropic.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/conversation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/diarization.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/language.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/profiles.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/speaker_count.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/stt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/tts.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/audio/voiceprint.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/batching.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/catalog.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/embeddings.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/generation_cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/hardware.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/hosted.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/hub.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/image.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/inventory.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/metrics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/moderation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/ollama.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/onnx_embed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/openai_compat.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/pipeline.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/chroma.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/chunking.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/context.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/extract.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/fusion.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/hybrid.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/pdf.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/rerank.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/retriever.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/search.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/rag/vectorstore.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/registry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/structured.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/text.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/tokens.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/tracing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/usage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/genai/vision_text.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/br.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/db.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/distance.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/enums.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/estimate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/geocoding.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/geometry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/polyline.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/routing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/geo/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/bridge.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/config.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/exceptions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/paths.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/hostbridge/shell.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/CLAUDE.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap/client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap_ws/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap_ws/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/messaging/zap_ws/stream.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/adapters/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/adapters/mercado_pago.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/adapters/openpix.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/mercado_pago/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/mercado_pago/client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/mercado_pago/environment.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/mercado_pago/events.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/mercado_pago/money.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/mercado_pago/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/mercado_pago/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/openpix/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/openpix/client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/openpix/environment.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/openpix/events.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/openpix/money.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/openpix/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/openpix/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/routing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/settlement.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/stripe/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/stripe/client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/stripe/environment.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/stripe/events.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/stripe/money.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/stripe/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/payment/stripe/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/subscriptions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/subscriptions/revenuecat/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/subscriptions/revenuecat/client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/subscriptions/revenuecat/events.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/subscriptions/revenuecat/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/subscriptions/revenuecat/snapshot.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/integrations/subscriptions/revenuecat/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/_fs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/bench.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/compact.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/compose.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/edge.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/energy.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/export.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/monitoring.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/pickled.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/quantize.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/ranking.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/serving.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/sklearn.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/modelops/static.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/emit_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/emit_schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/generate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/ir.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/loader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/naming.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/parse.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/openapi/source.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/assets.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/documents.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/formatting.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/pages.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/qr.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/reader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/renderer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/_base.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/_party.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/_styles.css +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/contract.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/quote.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/receipt.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/report.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/pdf/templates/voucher.html +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/privacy/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/privacy/graph.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/privacy/storage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/dispatcher.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/transports/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/transports/fcm.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/push/transports/webpush.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/py.typed +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/broker.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/consumer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/dedup.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/manager.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/publisher.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/reliability.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/topology.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/queue/tracing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/reviews/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/reviews/models.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/reviews/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/reviews/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/reviews/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/schemas/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/schemas/base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/schemas/errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/schemas/link_headers.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/schemas/logs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/schemas/pagination.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/schemas/response.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/services/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/services/base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/services/file_mixin.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/authenticator.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/dependencies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/middleware.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sessions/store.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/settings/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/settings/base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/settings/version.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/spreadsheet/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/spreadsheet/formats.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/spreadsheet/google.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/spreadsheet/reader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/spreadsheet/styles.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/spreadsheet/writer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sse/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sse/broker.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/sse/event_stream.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/_static/confirm.js +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/_static/htmx.min.js +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/assets.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/attributes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/flashes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/page.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/redirects.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/response.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ssr/webapp.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/storage/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/storage/minio_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/cancellation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/cron.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/dead_letter.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/heartbeat/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/heartbeat/__main__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/heartbeat/files.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/heartbeat/source.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/jobs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/lock.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/manager.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/observability.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/oop.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/progress.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/queue.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/scheduler.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/tasks/stages.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/database.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/factories.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/_control.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/email.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/genai.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/geo.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/payment.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/push.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/search.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/storage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/fakes/subscriptions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/testing/privacy.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/_core.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/alert.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/card.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/classes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/empty.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/flash.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/nav.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/pagination.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/styles.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/components/table.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/css/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/css/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/css/rules.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/css/tokens.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/forms/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/forms/introspect.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/forms/parse.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/forms/render.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/forms/spec.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/forms/styles.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/layout/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/layout/grid.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/layout/shell.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/pages/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/pages/error.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/pages/page.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/ui/stylesheet.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/_http_cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/_lifecycle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/_security_headers.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/_settings_discovery.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/_signature.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/_url.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/client_ip.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/currency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/data/br_locations.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/datetime.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/dict.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/download.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/fields.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/file_store.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/forms.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/http_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/jwt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/locations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/log.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/media_types.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/metrics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/naming.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/opaque_token.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/password.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/regex.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/retry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/signed_url.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/storage_backends.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/throttle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/token_types.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/totp.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/utils/upload.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/vision/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/vision/mapping.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/vision/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/vision/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/wallet/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/wallet/models.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/wallet/money.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/wallet/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/wallet/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/wallet/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/webpush/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/webpush/dispatcher.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/webpush/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/webpush/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/webpush/service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/websockets/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/websockets/heartbeat.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/websockets/hub.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/websockets/router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tempest_fastapi_sdk/websockets/schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/CLAUDE.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/_seed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_actions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_audit_viewer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_auth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_auth_role_and_mfa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_autocomplete_fk.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_csv_import.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_dashboard_cards.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_discovery.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_display_timezone.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_exclude_fields.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_form_error_rollback.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_forms.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_inlines.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_lenses.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_local_assets.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_login_throttle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_logs_nav.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_logs_traceback_export.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_mfa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_mfa_attempt_limit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_password_field.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_principal_revalidation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_rbac.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_rich_filters.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_site.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_sql_shell.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_sql_shell_page.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_tasks_panel.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_theme.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_upload_field.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_user_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/admin/test_widgets_json_time.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_agent.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_agent_limits.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_agent_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_builtin_tools.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_fact_stores.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_loop.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_memory.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_multi_agent.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_skills.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_structured.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_testing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/agents/test_typed_tools.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_access_log.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_body_size.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_business_metrics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_client_error_envelope.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_cookies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_cors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_csrf.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_dependencies_auth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_error_docs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_error_envelope.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_error_field.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_graceful.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_handlers.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_health_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_honeypot.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_idempotency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_jwt_dependency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_lazy_dependencies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_log_redaction.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_logs_rotated_backups.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_logs_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_middleware_exempt_semantics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_oauth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_oidc_introspection.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_oidc_verifier.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_outbound_webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_prometheus.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_prometheus_auth.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_quota.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_quota_redis_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_rate_limit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_rate_limit_dependency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_rate_limit_envelope.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_rate_limit_extras.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_rate_limit_fail_open.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_rate_limit_redis_proxy.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_request_id_middleware.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_response_cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_role_dependency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_server.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_server_error_notify.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_session_provider.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_signed_path_dependency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_spa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_static.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_streaming_passthrough.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_token_type_strict.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_tool_spec.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_tracing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_validation_envelope.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/api/test_webhooks_rsa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/app_errors/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/app_errors/test_app_errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/artifacts/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/artifacts/support.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/artifacts/test_actions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/artifacts/test_digest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/artifacts/test_registry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/asyncapi/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/asyncapi/conftest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/asyncapi/test_generate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/asyncapi/test_loader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/asyncapi/test_parse.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_activation_resend.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_backend_links_dependencies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_change_password_mfa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_consume_token_race.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_cookie_delivery.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_current_user_active.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_email_change.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_email_integration_disabled.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_email_link_amr.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_email_link_refusal.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_expire_on_commit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_firebase.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_guards.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_introspection.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_locale.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_login_throttle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_me.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_mfa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_mfa_amr.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_mfa_token_paths.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_oauth_login.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_oauth_mfa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_oauth_token_login.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_password_reset_mfa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_password_reset_revoke.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_refresh.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_refresh_db.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_refusal_codes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_router_session_sharing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_signup_extension.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_signup_fields.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_signup_mounting.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_token_supersede.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/test_webauthn.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/auth/webauthn_authenticator.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/authz/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/authz/test_dependencies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/authz/test_permissions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/authz/test_requires.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cache/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cache/test_decorator.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cache/test_invalidation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cache/test_redis_manager.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/chat/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/chat/test_attachment_uploader_migration.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/chat/test_chat.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/chat/test_messenger.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/chat/test_messenger_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/chat/test_router_stream.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/checks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/checks/test_check_config_cli.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/checks/test_checks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_agents.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_config.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_db.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_db_alembic_errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_db_resolution.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_db_seed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_docker_compose.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_docker_compose_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_dockerfile_spa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_doctor.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_entrypoint.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_flags_cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_generate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_integrations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_layer_lint.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_main.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_management_commands.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_new_required_extras.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_openapi_errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_openapi_errors_bare_calls.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_openapi_errors_callgraph.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_openapi_errors_configured.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_openapi_errors_delegation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_openapi_export.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_openapi_fix.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_permissions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_project_claude_md.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_quality_gate_integration.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_queue_tasks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_routes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_scaffold_dependencies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_scaffold_placeholders.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_scaffold_project_version.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_scaffold_runtime.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_secrets.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_serve.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_shell.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_src_layers_import.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_user.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/cli/test_user_mfa.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/conftest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/controllers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/controllers/test_base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/controllers/test_controller.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/controllers/test_generic_bounds.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/core/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/core/test_context.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/core/test_enums.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/core/test_logging.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/core/test_logging_time_rotation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/core/test_redaction.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/core/test_typed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_alembic_env.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_alembic_env_sqlalchemy_matrix.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_alembic_hooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_audit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_backup.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_bulk_ops.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_bulk_upsert_conflict.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_connection.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_cursor_types.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_eager_load.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_enum_column.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_enum_downgrade.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_enum_migration_lifecycle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_enum_migrations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_explain.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_expressions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_filters_contract.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_integrity.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_integrity_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_integrity_sqlalchemy_matrix.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_migrations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_migrations_async.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_migrations_foreign_keys.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_mixins.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_model.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_naming.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_naming_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_none_filter_is_null.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_outbox.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_repository.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_repository_conflict_exceptions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_repository_order_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_safe_upgrade.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_schema_sync.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_search.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_session_helpers.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_signals.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_slow_query.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_sqlite_failed_commit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_sqlite_foreign_keys.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_sqlite_wal.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_table_name.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_tenant.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_transaction.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_utc_datetime.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/db/test_webhook_inbox.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/exceptions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/exceptions/test_exceptions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/exceptions/test_factories.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/exceptions/test_i18n.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/exceptions/test_inherited_code_warning.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/exceptions/test_integration_disabled.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/exceptions/test_value_error_codes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/faces/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/faces/test_faces.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/flags/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/flags/test_flags.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/_eval/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/_eval/corpus.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_audio.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_audio_runtime_extra.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_concurrency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_diarization.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_diarization_models.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_language.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_profiles.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_speaker_count.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_stt_loading.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_tts_tempfile.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/audio/test_voice_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/conftest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_anthropic.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_batching.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_chat_memory.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_chat_memory_ranking.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_embedding_cache_redis.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_embeddings.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_env_defaults.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_eval_harness.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_genai_metrics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_genai_observability.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_generation_cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_generation_config.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_generator_defaults.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_gpu_validation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_hardware.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_hardware_cgroup.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_hardware_nvml.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_hosted.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_hosted_interchangeability.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_hub.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_hybrid.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_image.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_inventory.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_lifecycle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_moderation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_ollama.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_onnx_embed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_openai_compat.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_pipeline.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_pipeline_integration.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_precision_kwarg.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_rag.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_rag_extract_pinning.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_rag_identity.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_refinements.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_registry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_rerank.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_router_limits.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_structured.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_structured_extraction.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_structured_parity.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_structured_retry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_text.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_text_cancellation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_text_concurrency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_text_lifecycle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_text_seed.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_textgen_embed_metrics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_tokens.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_tracing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_usage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_usage_cache_hit.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_vectorstore.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_vectorstore_ann.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_vectorstore_pg_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_vision_text.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/genai/test_vision_text_config.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/fixtures/nominatim_reverse_coivaras.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/fixtures/nominatim_reverse_sao_jose_da_tenda.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/fixtures/nominatim_reverse_sao_paulo.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/fixtures/nominatim_reverse_teresina.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_br.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_db.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_db_postgres_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_distance.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_estimate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_geocoding.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_geocoding_cache.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_geometry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_polyline.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_routing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/geo/test_routing_extra.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/conftest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/test_bridge_files.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/test_bridge_host.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/test_messages.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/test_paths.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/hostbridge/test_shell.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/messaging/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/messaging/zap/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/messaging/zap/test_generated_drift.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/messaging/zap/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/messaging/zap/test_webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/messaging/zap_ws/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/messaging/zap_ws/test_generated_drift.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_approved.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_cancel_auth.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_capture.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_get_after_refund.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_manual.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_manual_cancel.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_refund_partial.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_refund_rest.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/card_rejected.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_cancel.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_create.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_get.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_get_after_cancel.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_get_after_partial_refund.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_get_after_refund.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_get_expired.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_get_paid.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_refund_partial.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_refund_rest.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/fixtures/mercado_pago_orders/pix_refund_unpaid.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/test_mercado_pago_adapter.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/test_mercado_pago_sandbox.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/test_openpix_adapter.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/test_openpix_adapter_wire.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/adapters/test_openpix_payout_wire.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/fixtures/chargebacks_search.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/fixtures/users_me.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_deprecations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_generated_drift.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_mercado_pago.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_overlay.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_provenance.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_sandbox_observations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_sdk_coverage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/mercado_pago/test_webhook_dependency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/openpix/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/openpix/test_generated_drift.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/openpix/test_openpix.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/openpix/test_overlay.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/openpix/test_real_payload_shapes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/openpix/test_request_body_shape.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/openpix/test_spec_type_conflicts.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/stripe/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/stripe/test_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/stripe/test_generated_drift.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/stripe/test_money.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/stripe/test_webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/test_contract.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/test_routing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/payment/test_settlement.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/subscriptions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/subscriptions/revenuecat/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/subscriptions/revenuecat/conftest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/subscriptions/revenuecat/test_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/subscriptions/revenuecat/test_snapshot.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/subscriptions/revenuecat/test_vendored_docs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/integrations/subscriptions/revenuecat/test_webhooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/conftest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_bench.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_compact.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_compose.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_edge.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_energy.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_export.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_monitoring.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_pickled.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_quantize.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_ranking.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_serving.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_sklearn_export.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/modelops/test_static.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/conftest.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_divergent_success.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_form_bodies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_generate.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_hostile_spec.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_loader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_multipart_bodies.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_naming.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_nested_capture.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_parse.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_payload_arrays.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/openapi/test_raw_responses.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/test_assets.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/test_formatting.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/test_pages.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/test_qr.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/test_reader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/test_renderer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/pdf/test_router_and_cli.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/privacy/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/privacy/test_graph.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/privacy/test_storage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/privacy/test_storage_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/push/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/push/test_fcm_disabled.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/push/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/push/test_router_ownership.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/push/test_service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/push/test_transports.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_broker.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_consumer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_dedup.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_manager.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_prefetch.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_publisher.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_reliability.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_topology.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/queue/test_tracing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/reviews/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/reviews/test_reviews.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/test_base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/test_cursor_pagination.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/test_errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/test_link_headers.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/test_pagination.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/test_pagination_order_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/schemas/test_response.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/services/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/services/test_base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/services/test_file_mixin.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/sessions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/sessions/test_credentials_html.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/sessions/test_session_dependency_factory.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/sessions/test_sessions.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_auth_link_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_base.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_environment.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_hosted_genai_settings.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_mixins.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_session_cookie_kwargs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_storage_settings.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_trusted_ip_header.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/settings/test_version.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/spreadsheet/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/spreadsheet/test_formats.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/spreadsheet/test_google.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/spreadsheet/test_limits.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/spreadsheet/test_reader.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/spreadsheet/test_reader_async.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/spreadsheet/test_writer.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/sse/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/sse/test_broker.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/sse/test_event_stream.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_attributes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_confirm.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_flashes.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_html_errors.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_integration.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_page.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_page_document.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_redirects.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_response.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_web_app_theme.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_webapp.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ssr/test_webapp_caching.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/storage/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/storage/test_accel_redirect_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/storage/test_disabled_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/storage/test_download_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/storage/test_minio_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/storage/test_signed_url_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_cancellation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_cron.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_dead_letter.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_heartbeat.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_jobs.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_jobs_cancellation.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_jobs_dispatch.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_manager.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_observability.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_oop.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_progress.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_queue.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_queue_from_settings.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_queue_lifecycle_hooks.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_queue_typing.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_scheduler.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_scheduler_lease.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/tasks/test_stages.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_admin_principal_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_agent_docs_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_alembic_env_lint_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_alias_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_cli_extra_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_constraint_shape_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docs_api_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docs_examples_compile.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docs_examples_names.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docs_method_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docs_organization.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docs_signature_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docs_type_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_docstring_example_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_engine_configuration_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_enum_schema_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_factory_param_exports_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_i18n_coverage_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_kwargs_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_llmstxt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_lock_version_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_mfa_token_paths_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_protocol_shape_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_pydantic_error_types_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_pydantic_mypy_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_reexport_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_reference_coverage.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_release_flow_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_schedule_projection_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_sdist_payload.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_session_factory_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_settings_passthrough_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_spreadsheet_event_loop_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_supply_chain_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_testclient_httpx2_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_timeout_method_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_vacuous_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_version_agreement.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_wallet_concurrency_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_wallet_update_shape_guard.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/test_wheel_payload.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/testing/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/testing/test_database.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/testing/test_factories.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/testing/test_fakes_behaviour.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/testing/test_fakes_contract.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_components.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_core_contract.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_css.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_css_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_forms_dependency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_forms_file.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_forms_help_text.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_forms_hidden.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_forms_introspect.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_forms_parse.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_forms_render.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_integration.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_layout_and_pages.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/ui/test_stylesheet.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_client_ip.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_currency.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_datetime.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_dict.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_download.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_email_disabled.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_fields.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_file_store.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_forms.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_http_client.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_jwt.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_lazy_extras.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_locations.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_log.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_media_types.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_metrics.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_opaque_token.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_password.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_regex.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_retry.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_settings_discovery.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_signed_url.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_storage_backends.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_throttle.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_token_types.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_upload.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_upload_signature_policy.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/utils/test_url.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/vision/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/vision/test_detect_classify.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/vision/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/vision/test_vision.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/wallet/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/wallet/support.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/wallet/test_money.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/wallet/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/wallet/test_service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/wallet/test_wallet_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/webpush/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/webpush/test_dispatcher.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/webpush/test_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/webpush/test_router_ownership.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/webpush/test_schemas.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/webpush/test_service.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/websockets/__init__.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/websockets/test_heartbeat.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/websockets/test_hub_and_router.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/tests/websockets/test_router_live.py +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/PROVENANCE.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/mercadopago-evidence.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/mercadopago-openapi.yaml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/openpix-evidence.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/openpix-openapi.json +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/revenuecat-webhook-event-types.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/revenuecat-webhook-sample-events.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/revenuecat-webhooks.md +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/stripe-api-facts.yaml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/zap-asyncapi.yaml +0 -0
- {tempest_fastapi_sdk-0.321.0 → tempest_fastapi_sdk-0.322.0}/vendor/zap-openapi.yaml +0 -0
|
@@ -7,6 +7,51 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.322.0] — 2026-10-21
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `EmailDeliveryException` (`503`, `code="EMAIL_UNAVAILABLE"`, sem
|
|
15
|
+
`details`), exportada no topo ao lado da `IntegrationDisabledException`,
|
|
16
|
+
com mensagem no catálogo em pt-BR e en-US. Distingue o e-mail configurado
|
|
17
|
+
e falhando do e-mail desligado (`INTEGRATION_DISABLED`).
|
|
18
|
+
- Regra de produção do `EmailSettings` (com `EMAIL_ENABLED` ligado):
|
|
19
|
+
`SMTP_USE_SSL` e `SMTP_USE_TLS` os dois `true`, `SMTP_USE_SSL=true` com
|
|
20
|
+
`SMTP_PORT=587` e `SMTP_USE_TLS=true` com `SMTP_PORT=465` viram violação,
|
|
21
|
+
e a mensagem diz o par que a porta pede. Outras portas não são julgadas.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- `EmailUtils.send` levanta `EmailDeliveryException` em toda falha de
|
|
26
|
+
transporte (DNS, conexão recusada ou com timeout, handshake TLS, login
|
|
27
|
+
negado, mensagem recusada) em vez de deixar escapar o erro do
|
|
28
|
+
`aiosmtplib` — **quem pega `aiosmtplib.SMTPException` em volta do envio
|
|
29
|
+
precisa pegar `EmailDeliveryException`**; falha de rede ou TLS encadeia o
|
|
30
|
+
erro original em `__cause__`, e recusa respondida pelo servidor sai
|
|
31
|
+
`from None` (a resposta pode citar o endereço, e o handler de
|
|
32
|
+
`AppException` loga todo 5xx com traceback). Antes de levantar, loga uma vez em `ERROR` com `smtp_host` e
|
|
33
|
+
`smtp_port` (nunca destinatário nem credencial; recusa respondida pelo
|
|
34
|
+
servidor vai sem traceback, porque a resposta pode citar o endereço).
|
|
35
|
+
Erro do chamador (anexo que não existe, `ValueError`) segue com o tipo
|
|
36
|
+
original. `send_many` levanta a mesma exceção para falha da operação
|
|
37
|
+
(conexão, login, queda no meio do lote); recusa por destinatário continua
|
|
38
|
+
no relatório.
|
|
39
|
+
- Rotas do `make_auth_router` com o SMTP falhando: `/signup`,
|
|
40
|
+
`/email-change/request`, `/email-change/confirm` (aviso ao endereço
|
|
41
|
+
antigo), `/email-verify/request` e `/email-recovery/request` (depois da
|
|
42
|
+
senha e do MFA) respondem `503 EMAIL_UNAVAILABLE` em vez de `500`, sem
|
|
43
|
+
gravar nada — a confirmação de troca mantém o e-mail antigo e o link
|
|
44
|
+
válido. `/activation/request` e `/password-reset/request` continuam
|
|
45
|
+
respondendo o `202` de sempre (um `503` só para conta existente seria
|
|
46
|
+
oráculo de enumeração): a falha é logada e o token só é gravado depois
|
|
47
|
+
que o e-mail sai, então o link pendente anterior não é invalidado.
|
|
48
|
+
- **Serviço com o modo TLS trocado com a porta deixa de subir em
|
|
49
|
+
`ENV=production`** (a regra nova acima). Antes de atualizar, confira
|
|
50
|
+
`SMTP_PORT`/`SMTP_USE_TLS`/`SMTP_USE_SSL`: `587` pede `SMTP_USE_TLS=true`
|
|
51
|
+
e `SMTP_USE_SSL=false`; `465` pede o contrário.
|
|
52
|
+
- `tempest email test` mostra o erro SMTP encadeado (por exemplo
|
|
53
|
+
`[SSL: WRONG_VERSION_NUMBER]`) em vez da mensagem genérica do `503`.
|
|
54
|
+
|
|
10
55
|
## [0.321.0] — 2026-10-21
|
|
11
56
|
|
|
12
57
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tempest-fastapi-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.322.0
|
|
4
4
|
Summary: Shared FastAPI building blocks: base schemas, ORM model, async repository, exceptions, pagination and settings — the conventions used across Tempest projects.
|
|
5
5
|
Project-URL: Homepage, https://github.com/mauriciobenjamin700/tempest-fastapi-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/mauriciobenjamin700/tempest-fastapi-sdk
|
|
@@ -1693,10 +1693,12 @@ mailer = EmailUtils(
|
|
|
1693
1693
|
```python
|
|
1694
1694
|
# src/services/password_reset.py
|
|
1695
1695
|
|
|
1696
|
+
import logging
|
|
1696
1697
|
from datetime import timedelta
|
|
1697
1698
|
from uuid import UUID
|
|
1698
1699
|
|
|
1699
1700
|
from tempest_fastapi_sdk import (
|
|
1701
|
+
EmailDeliveryException,
|
|
1700
1702
|
EmailUtils,
|
|
1701
1703
|
InvalidTokenException,
|
|
1702
1704
|
JWTUtils,
|
|
@@ -1706,6 +1708,8 @@ from tempest_fastapi_sdk import (
|
|
|
1706
1708
|
|
|
1707
1709
|
from src.db.repositories import UserRepository
|
|
1708
1710
|
|
|
1711
|
+
logger: logging.Logger = logging.getLogger(__name__)
|
|
1712
|
+
|
|
1709
1713
|
|
|
1710
1714
|
class PasswordResetService:
|
|
1711
1715
|
def __init__(
|
|
@@ -1722,7 +1726,10 @@ class PasswordResetService:
|
|
|
1722
1726
|
"""Send a password-reset link to `email`.
|
|
1723
1727
|
|
|
1724
1728
|
Always returns silently — don't reveal whether the email
|
|
1725
|
-
is registered or not (avoids account enumeration).
|
|
1729
|
+
is registered or not (avoids account enumeration). That
|
|
1730
|
+
includes an SMTP failure: `send` raises
|
|
1731
|
+
`EmailDeliveryException` (503), which only a registered
|
|
1732
|
+
address could trigger, so it is logged, not raised.
|
|
1726
1733
|
"""
|
|
1727
1734
|
user = await self.repo.get_or_none({"email": email})
|
|
1728
1735
|
if user is None:
|
|
@@ -1732,12 +1739,15 @@ class PasswordResetService:
|
|
|
1732
1739
|
ttl=timedelta(minutes=15),
|
|
1733
1740
|
)
|
|
1734
1741
|
reset_url = f"https://my-app.com/reset-password?token={token}"
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1742
|
+
try:
|
|
1743
|
+
await self.mailer.send(
|
|
1744
|
+
to=user.email,
|
|
1745
|
+
subject="Reset your password",
|
|
1746
|
+
body=f"Click here to reset your password: {reset_url}",
|
|
1747
|
+
html=f'<p>Click <a href="{reset_url}">here</a> to reset.</p>',
|
|
1748
|
+
)
|
|
1749
|
+
except EmailDeliveryException:
|
|
1750
|
+
logger.error("Reset link not sent; answer kept the same")
|
|
1741
1751
|
|
|
1742
1752
|
async def consume_reset(
|
|
1743
1753
|
self,
|
|
@@ -2540,7 +2550,7 @@ Each mixin owns its own env-var prefix — pick only the ones the service needs:
|
|
|
2540
2550
|
| `WebPushSettings` | `VAPID_PUBLIC_KEY`, `VAPID_PRIVATE_KEY`, `VAPID_SUBJECT`, `WEBPUSH_DEFAULT_TTL_SECONDS` |
|
|
2541
2551
|
| `StorageSettings` | `STORAGE_ENABLED`, `STORAGE_ENDPOINT`, `STORAGE_ACCESS_KEY`, `STORAGE_SECRET_KEY`, `STORAGE_SECURE`, `STORAGE_REGION`, `STORAGE_DEFAULT_BUCKET`, `STORAGE_PUBLIC_ENDPOINT`, `STORAGE_PUBLIC_SECURE`, `STORAGE_ACCEL_REDIRECT`, `STORAGE_ACCEL_PREFIX` |
|
|
2542
2552
|
|
|
2543
|
-
**Production guard.** Compose `EnvironmentSettings` and set `ENV=production`: the settings then refuse to build while any composed mixin still holds a development value — SQLite in `DATABASE_URL`, the placeholder `JWT_SECRET`, `"*"` in `CORS_ORIGINS`, an empty `TOKEN_SECRET`, `SERVER_DEBUG` / `SERVER_RELOAD` on, an empty `TASKIQ_BROKER_URL` (the in-memory broker), the `minioadmin` storage keys or `STORAGE_SECURE=false`, a Mailpit/MailHog SMTP host
|
|
2553
|
+
**Production guard.** Compose `EnvironmentSettings` and set `ENV=production`: the settings then refuse to build while any composed mixin still holds a development value — SQLite in `DATABASE_URL`, the placeholder `JWT_SECRET`, `"*"` in `CORS_ORIGINS`, an empty `TOKEN_SECRET`, `SERVER_DEBUG` / `SERVER_RELOAD` on, an empty `TASKIQ_BROKER_URL` (the in-memory broker), the `minioadmin` storage keys or `STORAGE_SECURE=false`, a Mailpit/MailHog SMTP host, a placeholder `SMTP_FROM_ADDR` (`noreply@example.com`), or a TLS mode swapped with the port (`SMTP_USE_SSL=true` on `587`, `SMTP_USE_TLS=true` on `465`, or both on). Every offending field is listed in one error, by name, never by value. Each mixin declares its own rules in `production_violations()`; override it (calling `super()`) to add a rule of yours or drop one you accepted on purpose. `BaseAppSettings` also sets `hide_input_in_errors=True`, so no validation error echoes the environment. An integration that ships later is switched off instead of faked: `STORAGE_ENABLED`, `EMAIL_ENABLED`, `FIREBASE_ENABLED` or `REVENUECAT_ENABLED` set to `false` skips that mixin's rules, lists it in `settings.disabled_integrations()`, and makes the client built from the same settings (`AsyncMinIOClient(**settings.storage_kwargs())`, `EmailUtils(**settings.email_kwargs())`, `FirebaseAuth(**settings.firebase_kwargs())`) refuse every call with `IntegrationDisabledException` — `503`, `code="INTEGRATION_DISABLED"`.
|
|
2544
2554
|
|
|
2545
2555
|
**`MinIOSettings` → `StorageSettings`.** The storage mixin speaks to any S3-compatible target, so its variables are now `STORAGE_*`. The old `MINIO_*` names keep working — each field reads `STORAGE_X` first and falls back to `MINIO_X` — and setting both names of a pair to different values refuses to boot instead of silently picking one. `MinIOSettings` stays importable as a deprecated subclass (it emits `DeprecationWarning` and keeps the `settings.MINIO_*` attributes); `minio_kwargs()` returns the same dict as the new `storage_kwargs()`.
|
|
2546
2556
|
|
|
@@ -1474,10 +1474,12 @@ mailer = EmailUtils(
|
|
|
1474
1474
|
```python
|
|
1475
1475
|
# src/services/password_reset.py
|
|
1476
1476
|
|
|
1477
|
+
import logging
|
|
1477
1478
|
from datetime import timedelta
|
|
1478
1479
|
from uuid import UUID
|
|
1479
1480
|
|
|
1480
1481
|
from tempest_fastapi_sdk import (
|
|
1482
|
+
EmailDeliveryException,
|
|
1481
1483
|
EmailUtils,
|
|
1482
1484
|
InvalidTokenException,
|
|
1483
1485
|
JWTUtils,
|
|
@@ -1487,6 +1489,8 @@ from tempest_fastapi_sdk import (
|
|
|
1487
1489
|
|
|
1488
1490
|
from src.db.repositories import UserRepository
|
|
1489
1491
|
|
|
1492
|
+
logger: logging.Logger = logging.getLogger(__name__)
|
|
1493
|
+
|
|
1490
1494
|
|
|
1491
1495
|
class PasswordResetService:
|
|
1492
1496
|
def __init__(
|
|
@@ -1503,7 +1507,10 @@ class PasswordResetService:
|
|
|
1503
1507
|
"""Send a password-reset link to `email`.
|
|
1504
1508
|
|
|
1505
1509
|
Always returns silently — don't reveal whether the email
|
|
1506
|
-
is registered or not (avoids account enumeration).
|
|
1510
|
+
is registered or not (avoids account enumeration). That
|
|
1511
|
+
includes an SMTP failure: `send` raises
|
|
1512
|
+
`EmailDeliveryException` (503), which only a registered
|
|
1513
|
+
address could trigger, so it is logged, not raised.
|
|
1507
1514
|
"""
|
|
1508
1515
|
user = await self.repo.get_or_none({"email": email})
|
|
1509
1516
|
if user is None:
|
|
@@ -1513,12 +1520,15 @@ class PasswordResetService:
|
|
|
1513
1520
|
ttl=timedelta(minutes=15),
|
|
1514
1521
|
)
|
|
1515
1522
|
reset_url = f"https://my-app.com/reset-password?token={token}"
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1523
|
+
try:
|
|
1524
|
+
await self.mailer.send(
|
|
1525
|
+
to=user.email,
|
|
1526
|
+
subject="Reset your password",
|
|
1527
|
+
body=f"Click here to reset your password: {reset_url}",
|
|
1528
|
+
html=f'<p>Click <a href="{reset_url}">here</a> to reset.</p>',
|
|
1529
|
+
)
|
|
1530
|
+
except EmailDeliveryException:
|
|
1531
|
+
logger.error("Reset link not sent; answer kept the same")
|
|
1522
1532
|
|
|
1523
1533
|
async def consume_reset(
|
|
1524
1534
|
self,
|
|
@@ -2321,7 +2331,7 @@ Each mixin owns its own env-var prefix — pick only the ones the service needs:
|
|
|
2321
2331
|
| `WebPushSettings` | `VAPID_PUBLIC_KEY`, `VAPID_PRIVATE_KEY`, `VAPID_SUBJECT`, `WEBPUSH_DEFAULT_TTL_SECONDS` |
|
|
2322
2332
|
| `StorageSettings` | `STORAGE_ENABLED`, `STORAGE_ENDPOINT`, `STORAGE_ACCESS_KEY`, `STORAGE_SECRET_KEY`, `STORAGE_SECURE`, `STORAGE_REGION`, `STORAGE_DEFAULT_BUCKET`, `STORAGE_PUBLIC_ENDPOINT`, `STORAGE_PUBLIC_SECURE`, `STORAGE_ACCEL_REDIRECT`, `STORAGE_ACCEL_PREFIX` |
|
|
2323
2333
|
|
|
2324
|
-
**Production guard.** Compose `EnvironmentSettings` and set `ENV=production`: the settings then refuse to build while any composed mixin still holds a development value — SQLite in `DATABASE_URL`, the placeholder `JWT_SECRET`, `"*"` in `CORS_ORIGINS`, an empty `TOKEN_SECRET`, `SERVER_DEBUG` / `SERVER_RELOAD` on, an empty `TASKIQ_BROKER_URL` (the in-memory broker), the `minioadmin` storage keys or `STORAGE_SECURE=false`, a Mailpit/MailHog SMTP host
|
|
2334
|
+
**Production guard.** Compose `EnvironmentSettings` and set `ENV=production`: the settings then refuse to build while any composed mixin still holds a development value — SQLite in `DATABASE_URL`, the placeholder `JWT_SECRET`, `"*"` in `CORS_ORIGINS`, an empty `TOKEN_SECRET`, `SERVER_DEBUG` / `SERVER_RELOAD` on, an empty `TASKIQ_BROKER_URL` (the in-memory broker), the `minioadmin` storage keys or `STORAGE_SECURE=false`, a Mailpit/MailHog SMTP host, a placeholder `SMTP_FROM_ADDR` (`noreply@example.com`), or a TLS mode swapped with the port (`SMTP_USE_SSL=true` on `587`, `SMTP_USE_TLS=true` on `465`, or both on). Every offending field is listed in one error, by name, never by value. Each mixin declares its own rules in `production_violations()`; override it (calling `super()`) to add a rule of yours or drop one you accepted on purpose. `BaseAppSettings` also sets `hide_input_in_errors=True`, so no validation error echoes the environment. An integration that ships later is switched off instead of faked: `STORAGE_ENABLED`, `EMAIL_ENABLED`, `FIREBASE_ENABLED` or `REVENUECAT_ENABLED` set to `false` skips that mixin's rules, lists it in `settings.disabled_integrations()`, and makes the client built from the same settings (`AsyncMinIOClient(**settings.storage_kwargs())`, `EmailUtils(**settings.email_kwargs())`, `FirebaseAuth(**settings.firebase_kwargs())`) refuse every call with `IntegrationDisabledException` — `503`, `code="INTEGRATION_DISABLED"`.
|
|
2325
2335
|
|
|
2326
2336
|
**`MinIOSettings` → `StorageSettings`.** The storage mixin speaks to any S3-compatible target, so its variables are now `STORAGE_*`. The old `MINIO_*` names keep working — each field reads `STORAGE_X` first and falls back to `MINIO_X` — and setting both names of a pair to different values refuses to boot instead of silently picking one. `MinIOSettings` stays importable as a deprecated subclass (it emits `DeprecationWarning` and keeps the `settings.MINIO_*` attributes); `minio_kwargs()` returns the same dict as the new `storage_kwargs()`.
|
|
2327
2337
|
|
|
@@ -3601,3 +3601,19 @@ cadastro pendente comum. Com `AUTH_AUTO_ACTIVATE=true` o cadastro não consulta
|
|
|
3601
3601
|
local/reservado ou sem `https` (pula com `EMAIL_ENABLED=false`).
|
|
3602
3602
|
`is_reserved_domain` é compartilhado com a regra do `SMTP_FROM_ADDR`.
|
|
3603
3603
|
Testes: `tests/settings/test_auth_link_guard.py`.
|
|
3604
|
+
- **SMTP fora do ar vira `503 EMAIL_UNAVAILABLE`, Unreleased** —
|
|
3605
|
+
`EmailUtils.send` e `send_many` traduzem falha de transporte
|
|
3606
|
+
(`aiosmtplib.SMTPException`, `OSError`, timeout, TLS) em
|
|
3607
|
+
`EmailDeliveryException` (`503`, sem `details`, causa encadeada), logando
|
|
3608
|
+
uma vez em `ERROR` só com host e porta. No `make_auth_router`: cadastro,
|
|
3609
|
+
troca/confirmação/verificação de e-mail e recuperação (depois da senha)
|
|
3610
|
+
respondem `503` e o rollback leva tudo; reenvio de ativação e reset de
|
|
3611
|
+
senha respondem o `202` de sempre, logam e não gravam token
|
|
3612
|
+
(`UserAuthService._issue_token_after_mail` manda antes de gravar). Regra de
|
|
3613
|
+
produção do `EmailSettings`: `SMTP_USE_SSL` + `SMTP_USE_TLS`,
|
|
3614
|
+
`SMTP_USE_SSL` na 587, `SMTP_USE_TLS` na 465. Receitas:
|
|
3615
|
+
`docs/recipes/email.md`, `docs/recipes/auth-flow.md` ("SMTP fora do ar").
|
|
3616
|
+
Testes: `tests/utils/test_email.py` (`TestTransportFailure`),
|
|
3617
|
+
`tests/auth/test_email_delivery_failure.py`,
|
|
3618
|
+
`tests/settings/test_integration_flags.py` (`TestEmailTLSModeRule`),
|
|
3619
|
+
`tests/cli/test_email_storage.py`.
|
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
Breaking-change walkthroughs grouped by minor release. Stick to the version that matches what you're upgrading **from**. The release sections are listed newest-first, so on a multi-version jump read and apply them bottom-up.
|
|
4
4
|
|
|
5
|
+
## 0.322.0 — SMTP failure becomes `503 EMAIL_UNAVAILABLE` and the guard checks TLS × port
|
|
6
|
+
|
|
7
|
+
`EmailUtils.send` and `send_many` now raise `EmailDeliveryException`
|
|
8
|
+
(`503`, `code="EMAIL_UNAVAILABLE"`) on every transport failure instead of the
|
|
9
|
+
`aiosmtplib` error. With `ENV=production` and e-mail enabled,
|
|
10
|
+
`EmailSettings` refuses a TLS mode that does not match the port.
|
|
11
|
+
|
|
12
|
+
### What to do
|
|
13
|
+
|
|
14
|
+
- Code that caught `aiosmtplib.SMTPException` (or `OSError`) around a send:
|
|
15
|
+
catch `EmailDeliveryException` (exported at the package top level). A
|
|
16
|
+
network or TLS failure carries the original error in `__cause__`; a refusal
|
|
17
|
+
answered by the server is raised `from None`.
|
|
18
|
+
- Check `SMTP_PORT`, `SMTP_USE_TLS` and `SMTP_USE_SSL` before deploying to
|
|
19
|
+
production: `587` needs `SMTP_USE_TLS=true` and `SMTP_USE_SSL=false`;
|
|
20
|
+
`465` needs `SMTP_USE_SSL=true` and `SMTP_USE_TLS=false`. Both enabled
|
|
21
|
+
also fails the boot.
|
|
22
|
+
- `make_auth_router` clients: `/signup`, `/email-change/*`,
|
|
23
|
+
`/email-verify/request` and `/email-recovery/request` may answer
|
|
24
|
+
`503 EMAIL_UNAVAILABLE` (nothing stored; safe to retry).
|
|
25
|
+
`/activation/request` and `/password-reset/request` keep their usual
|
|
26
|
+
`202`.
|
|
27
|
+
|
|
5
28
|
## 0.321.0 — `SubjectStorageClient` gains three methods
|
|
6
29
|
|
|
7
30
|
The `SubjectStorageClient` protocol (the type of `SubjectObjectStorage.client`)
|
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
Passo a passo das mudanças que quebram compatibilidade, agrupadas por release minor. Siga a versão que casa com aquela **de onde** você está atualizando. As seções estão listadas da mais nova para a mais antiga, então num salto de várias versões leia e aplique-as de baixo para cima.
|
|
4
4
|
|
|
5
|
+
## 0.322.0 — falha de SMTP vira `503 EMAIL_UNAVAILABLE` e o guard confere TLS × porta
|
|
6
|
+
|
|
7
|
+
`EmailUtils.send` e `send_many` passam a levantar `EmailDeliveryException`
|
|
8
|
+
(`503`, `code="EMAIL_UNAVAILABLE"`) em toda falha de transporte, no lugar do
|
|
9
|
+
erro do `aiosmtplib`. Com `ENV=production` e o e-mail ligado, o
|
|
10
|
+
`EmailSettings` recusa o modo TLS trocado com a porta.
|
|
11
|
+
|
|
12
|
+
### O que fazer
|
|
13
|
+
|
|
14
|
+
- Código que pegava `aiosmtplib.SMTPException` (ou `OSError`) em volta do
|
|
15
|
+
envio: pegue `EmailDeliveryException` (exportada no topo do pacote). Falha
|
|
16
|
+
de rede ou TLS traz o erro original em `__cause__`; recusa respondida pelo
|
|
17
|
+
servidor sai `from None`.
|
|
18
|
+
- Confira `SMTP_PORT`, `SMTP_USE_TLS` e `SMTP_USE_SSL` antes de subir em
|
|
19
|
+
produção: `587` pede `SMTP_USE_TLS=true` e `SMTP_USE_SSL=false`; `465`
|
|
20
|
+
pede `SMTP_USE_SSL=true` e `SMTP_USE_TLS=false`. Os dois ligados também
|
|
21
|
+
derrubam o boot.
|
|
22
|
+
- Cliente do `make_auth_router`: `/signup`, `/email-change/*`,
|
|
23
|
+
`/email-verify/request` e `/email-recovery/request` podem responder
|
|
24
|
+
`503 EMAIL_UNAVAILABLE` (nada gravado; pode tentar de novo).
|
|
25
|
+
`/activation/request` e `/password-reset/request` seguem no `202` de
|
|
26
|
+
sempre.
|
|
27
|
+
|
|
5
28
|
## 0.321.0 — `SubjectStorageClient` ganha três métodos
|
|
6
29
|
|
|
7
30
|
O protocolo `SubjectStorageClient` (o tipo do `client` do
|
|
@@ -37,6 +37,7 @@ Since v0.31.0 the SDK ships the full local-account lifecycle — email + passwor
|
|
|
37
37
|
9. **[Email and page language (i18n)](#email-and-page-language-i18n)** — default language, per-user preference and your own translation.
|
|
38
38
|
10. **[Five operating modes](#five-operating-modes)** — production, dev with local SMTP (Mailhog / smtp4dev), dev without SMTP, CI without activation, and **backend-only** (links and pages served directly by the backend).
|
|
39
39
|
- **[Email disabled](#email-disabled)** — `EMAIL_ENABLED=false` in a phased deploy: the routes that would mail a link answer `503` before writing.
|
|
40
|
+
- **[SMTP server down](#smtp-server-down)** — e-mail configured and failing: `503 EMAIL_UNAVAILABLE` writing nothing, and `202` where the answer must not reveal the account.
|
|
40
41
|
11. **[Token delivery](#token-delivery)** — bearer, cookie or both.
|
|
41
42
|
12. **[Mailhog vs smtp4dev — which to pick for local dev](#mailhog-vs-smtp4dev)** — comparison + copy-paste docker-compose snippets.
|
|
42
43
|
13. **[Customizing email templates](#customizing-templates)** — override `activation.html` and `password_reset.html` + variables exposed to the Jinja2 context.
|
|
@@ -2295,6 +2296,140 @@ logout and MFA are unaffected.
|
|
|
2295
2296
|
address get the same answer — the switch never becomes an enumeration
|
|
2296
2297
|
oracle.
|
|
2297
2298
|
|
|
2299
|
+
## SMTP server down
|
|
2300
|
+
|
|
2301
|
+
`EMAIL_ENABLED=false` is choosing to run without e-mail. The opposite case
|
|
2302
|
+
is e-mail that is **configured and failing**: the host does not resolve,
|
|
2303
|
+
the connection is refused, the TLS handshake breaks (`SMTP_USE_SSL=true`
|
|
2304
|
+
on port `587` answers `[SSL: WRONG_VERSION_NUMBER]` on every send), the
|
|
2305
|
+
login is rejected. Before, that surfaced as an `aiosmtplib` error and the
|
|
2306
|
+
route answered a bare `500`, with the traceback logged as an unhandled
|
|
2307
|
+
exception.
|
|
2308
|
+
|
|
2309
|
+
Now `EmailUtils.send` turns every transport failure into
|
|
2310
|
+
`EmailDeliveryException` — `503`, `code="EMAIL_UNAVAILABLE"`, no
|
|
2311
|
+
`details` — and each auth flow decides what to do with it:
|
|
2312
|
+
|
|
2313
|
+
```python
|
|
2314
|
+
import asyncio
|
|
2315
|
+
|
|
2316
|
+
from fastapi import FastAPI
|
|
2317
|
+
from httpx import ASGITransport, AsyncClient
|
|
2318
|
+
|
|
2319
|
+
from tempest_fastapi_sdk import (
|
|
2320
|
+
AsyncDatabaseManager,
|
|
2321
|
+
AuthSettings,
|
|
2322
|
+
BaseUserModel,
|
|
2323
|
+
EmailSettings,
|
|
2324
|
+
EmailUtils,
|
|
2325
|
+
JWTSettings,
|
|
2326
|
+
UserAuthService,
|
|
2327
|
+
make_auth_router,
|
|
2328
|
+
make_user_token_model,
|
|
2329
|
+
register_exception_handlers,
|
|
2330
|
+
)
|
|
2331
|
+
|
|
2332
|
+
|
|
2333
|
+
class Settings(EmailSettings, JWTSettings, AuthSettings):
|
|
2334
|
+
"""Settings with an SMTP server that does not answer."""
|
|
2335
|
+
|
|
2336
|
+
|
|
2337
|
+
class UserModel(BaseUserModel):
|
|
2338
|
+
"""The accounts table."""
|
|
2339
|
+
|
|
2340
|
+
__tablename__ = "users"
|
|
2341
|
+
|
|
2342
|
+
|
|
2343
|
+
UserTokenModel = make_user_token_model(user_table="users")
|
|
2344
|
+
|
|
2345
|
+
settings: Settings = Settings(
|
|
2346
|
+
SMTP_HOST="127.0.0.1",
|
|
2347
|
+
SMTP_PORT=2525,
|
|
2348
|
+
SMTP_TIMEOUT_SECONDS=5.0,
|
|
2349
|
+
AUTH_AUTO_ACTIVATE=False,
|
|
2350
|
+
JWT_SECRET="replace-with-a-real-long-secret-0123456789",
|
|
2351
|
+
)
|
|
2352
|
+
db: AsyncDatabaseManager = AsyncDatabaseManager("sqlite+aiosqlite:///:memory:")
|
|
2353
|
+
auth_service: UserAuthService = UserAuthService(
|
|
2354
|
+
db=db,
|
|
2355
|
+
user_model=UserModel,
|
|
2356
|
+
token_model=UserTokenModel,
|
|
2357
|
+
auth_settings=settings,
|
|
2358
|
+
jwt_settings=settings,
|
|
2359
|
+
email=EmailUtils(**settings.email_kwargs()),
|
|
2360
|
+
)
|
|
2361
|
+
|
|
2362
|
+
app: FastAPI = FastAPI()
|
|
2363
|
+
register_exception_handlers(app)
|
|
2364
|
+
app.include_router(make_auth_router(auth_service, session_factory=db.session_dependency))
|
|
2365
|
+
|
|
2366
|
+
|
|
2367
|
+
async def main() -> None:
|
|
2368
|
+
"""Try a signup with the SMTP server down."""
|
|
2369
|
+
await db.connect()
|
|
2370
|
+
await db.create_tables()
|
|
2371
|
+
transport = ASGITransport(app=app)
|
|
2372
|
+
async with AsyncClient(transport=transport, base_url="http://test") as client:
|
|
2373
|
+
response = await client.post(
|
|
2374
|
+
"/auth/signup",
|
|
2375
|
+
json={"email": "ana@acme.com.br", "password": "strong-pass-123"},
|
|
2376
|
+
)
|
|
2377
|
+
print(response.status_code, response.json())
|
|
2378
|
+
await db.disconnect()
|
|
2379
|
+
|
|
2380
|
+
|
|
2381
|
+
asyncio.run(main())
|
|
2382
|
+
```
|
|
2383
|
+
|
|
2384
|
+
```text
|
|
2385
|
+
503 {'detail': 'The e-mail server could not be reached; try again later', 'code': 'EMAIL_UNAVAILABLE', 'details': {}}
|
|
2386
|
+
```
|
|
2387
|
+
|
|
2388
|
+
No row was written: the flush of the account and its token never reached
|
|
2389
|
+
the commit, and the request session discarded both. The same address can
|
|
2390
|
+
sign up again once the server is back.
|
|
2391
|
+
|
|
2392
|
+
### What each route answers
|
|
2393
|
+
|
|
2394
|
+
| Route | With SMTP failing | What is stored |
|
|
2395
|
+
| --- | --- | --- |
|
|
2396
|
+
| `/signup` | `503 EMAIL_UNAVAILABLE` | nothing: no account, no token |
|
|
2397
|
+
| `/email-change/request` | `503 EMAIL_UNAVAILABLE` | nothing; an earlier pending link keeps working |
|
|
2398
|
+
| `/email-change/confirm` (with `AUTH_EMAIL_CHANGE_NOTIFY_OLD=true`) | `503 EMAIL_UNAVAILABLE` | nothing: the address does not change and the same link confirms later |
|
|
2399
|
+
| `/email-verify/request` | `503 EMAIL_UNAVAILABLE` | nothing |
|
|
2400
|
+
| `/email-recovery/request` (password and MFA correct) | `503 EMAIL_UNAVAILABLE` | nothing |
|
|
2401
|
+
| `/activation/request` | `202`, the same answer as an unknown address | nothing; the earlier link keeps working |
|
|
2402
|
+
| `/password-reset/request` | `202`, the same answer as an unknown address | nothing; the earlier link keeps working |
|
|
2403
|
+
|
|
2404
|
+
The rule is what the response already reveals. Signup already answers
|
|
2405
|
+
`409` for an address in use; e-mail change and verification require a
|
|
2406
|
+
login; e-mail recovery reaches the send only after the password (and MFA)
|
|
2407
|
+
matched — the same point where a taken `new_email` answers `409`. On
|
|
2408
|
+
those routes the `503` tells the caller nothing new.
|
|
2409
|
+
|
|
2410
|
+
!!! warning "Reset and activation re-send keep answering `202`"
|
|
2411
|
+
These two routes answer the same for a registered and an unknown
|
|
2412
|
+
address, on purpose. If the send failure became a `503`, it would show
|
|
2413
|
+
up only for accounts that exist — and the route would become an
|
|
2414
|
+
enumeration oracle. So the failure is **logged at `ERROR`** (without
|
|
2415
|
+
the address) and the answer stays `202`. The token is stored only
|
|
2416
|
+
**after** the mail went out, so the failure writes nothing and the
|
|
2417
|
+
earlier pending link is not invalidated.
|
|
2418
|
+
|
|
2419
|
+
!!! info "What reaches the log"
|
|
2420
|
+
`EmailUtils` logs once, at `ERROR`, with `smtp_host` and `smtp_port`
|
|
2421
|
+
— never the recipient nor the credential. A network or TLS failure
|
|
2422
|
+
carries the traceback (that is where the diagnosis lives); a refusal
|
|
2423
|
+
the server answered (a `550` for one recipient, say) does not,
|
|
2424
|
+
because the reply text can quote the address. For the same reason,
|
|
2425
|
+
only a network or TLS failure is chained as `__cause__`; a refusal is
|
|
2426
|
+
raised `from None`, so the handler that logs every 5xx has nothing to
|
|
2427
|
+
print.
|
|
2428
|
+
|
|
2429
|
+
When you call `UserAuthService` outside `make_auth_router`, the rule is
|
|
2430
|
+
the one for any error after a flush: roll the session back before reusing
|
|
2431
|
+
it. The router does that on its own, because it never reaches the commit.
|
|
2432
|
+
|
|
2298
2433
|
## Token delivery
|
|
2299
2434
|
|
|
2300
2435
|
*(v0.87.0+)*
|
|
@@ -37,6 +37,7 @@ Desde v0.31.0 o SDK fornece o ciclo completo de conta local — signup com email
|
|
|
37
37
|
9. **[Idioma dos e-mails e páginas (i18n)](#idioma-dos-e-mails-e-paginas-i18n)** — idioma padrão, preferência por usuário e tradução própria.
|
|
38
38
|
10. **[Cinco modos de operação](#cinco-modos-de-operacao)** — produção, dev com SMTP local (Mailhog / smtp4dev), dev sem SMTP, CI sem ativação e **backend-only** (links e páginas servidas direto pelo backend).
|
|
39
39
|
- **[E-mail desligado](#e-mail-desligado)** — `EMAIL_ENABLED=false` num deploy por partes: as rotas que mandariam link respondem `503` antes de gravar.
|
|
40
|
+
- **[SMTP fora do ar](#smtp-fora-do-ar)** — e-mail configurado e falhando: `503 EMAIL_UNAVAILABLE` sem gravar nada, e `202` onde a resposta não pode revelar a conta.
|
|
40
41
|
11. **[Entrega de token](#entrega-de-token)** — bearer, cookie ou os dois.
|
|
41
42
|
12. **[Mailhog vs smtp4dev — qual escolher pra dev local](#mailhog-vs-smtp4dev)** — comparativo + receitas docker-compose copy-paste.
|
|
42
43
|
13. **[Customizando os templates de e-mail](#customizando-templates)** — override do `activation.html` e `password_reset.html` + variáveis disponíveis no contexto Jinja2.
|
|
@@ -2267,6 +2268,140 @@ refresh, logout e MFA seguem normais.
|
|
|
2267
2268
|
recebem a mesma resposta — o interruptor não vira oráculo de
|
|
2268
2269
|
enumeração.
|
|
2269
2270
|
|
|
2271
|
+
## SMTP fora do ar
|
|
2272
|
+
|
|
2273
|
+
`EMAIL_ENABLED=false` é a escolha de rodar sem e-mail. O caso oposto é o
|
|
2274
|
+
e-mail **configurado e falhando**: o host não resolve, a conexão é
|
|
2275
|
+
recusada, o handshake TLS quebra (`SMTP_USE_SSL=true` na porta `587`
|
|
2276
|
+
responde `[SSL: WRONG_VERSION_NUMBER]` em todo envio), o login é negado.
|
|
2277
|
+
Antes, isso subia como erro do `aiosmtplib` e a rota respondia um `500`
|
|
2278
|
+
pelado, com o traceback logado como exceção não tratada.
|
|
2279
|
+
|
|
2280
|
+
Agora o `EmailUtils.send` traduz toda falha de transporte em
|
|
2281
|
+
`EmailDeliveryException` — `503`, `code="EMAIL_UNAVAILABLE"`, sem
|
|
2282
|
+
`details` — e cada fluxo de auth decide o que fazer com ela:
|
|
2283
|
+
|
|
2284
|
+
```python
|
|
2285
|
+
import asyncio
|
|
2286
|
+
|
|
2287
|
+
from fastapi import FastAPI
|
|
2288
|
+
from httpx import ASGITransport, AsyncClient
|
|
2289
|
+
|
|
2290
|
+
from tempest_fastapi_sdk import (
|
|
2291
|
+
AsyncDatabaseManager,
|
|
2292
|
+
AuthSettings,
|
|
2293
|
+
BaseUserModel,
|
|
2294
|
+
EmailSettings,
|
|
2295
|
+
EmailUtils,
|
|
2296
|
+
JWTSettings,
|
|
2297
|
+
UserAuthService,
|
|
2298
|
+
make_auth_router,
|
|
2299
|
+
make_user_token_model,
|
|
2300
|
+
register_exception_handlers,
|
|
2301
|
+
)
|
|
2302
|
+
|
|
2303
|
+
|
|
2304
|
+
class Settings(EmailSettings, JWTSettings, AuthSettings):
|
|
2305
|
+
"""Settings com um SMTP que não atende."""
|
|
2306
|
+
|
|
2307
|
+
|
|
2308
|
+
class UserModel(BaseUserModel):
|
|
2309
|
+
"""A tabela de contas."""
|
|
2310
|
+
|
|
2311
|
+
__tablename__ = "users"
|
|
2312
|
+
|
|
2313
|
+
|
|
2314
|
+
UserTokenModel = make_user_token_model(user_table="users")
|
|
2315
|
+
|
|
2316
|
+
settings: Settings = Settings(
|
|
2317
|
+
SMTP_HOST="127.0.0.1",
|
|
2318
|
+
SMTP_PORT=2525,
|
|
2319
|
+
SMTP_TIMEOUT_SECONDS=5.0,
|
|
2320
|
+
AUTH_AUTO_ACTIVATE=False,
|
|
2321
|
+
JWT_SECRET="troque-por-um-segredo-longo-de-verdade-0123456789",
|
|
2322
|
+
)
|
|
2323
|
+
db: AsyncDatabaseManager = AsyncDatabaseManager("sqlite+aiosqlite:///:memory:")
|
|
2324
|
+
auth_service: UserAuthService = UserAuthService(
|
|
2325
|
+
db=db,
|
|
2326
|
+
user_model=UserModel,
|
|
2327
|
+
token_model=UserTokenModel,
|
|
2328
|
+
auth_settings=settings,
|
|
2329
|
+
jwt_settings=settings,
|
|
2330
|
+
email=EmailUtils(**settings.email_kwargs()),
|
|
2331
|
+
)
|
|
2332
|
+
|
|
2333
|
+
app: FastAPI = FastAPI()
|
|
2334
|
+
register_exception_handlers(app)
|
|
2335
|
+
app.include_router(make_auth_router(auth_service, session_factory=db.session_dependency))
|
|
2336
|
+
|
|
2337
|
+
|
|
2338
|
+
async def main() -> None:
|
|
2339
|
+
"""Tenta um cadastro com o SMTP fora do ar."""
|
|
2340
|
+
await db.connect()
|
|
2341
|
+
await db.create_tables()
|
|
2342
|
+
transport = ASGITransport(app=app)
|
|
2343
|
+
async with AsyncClient(transport=transport, base_url="http://test") as client:
|
|
2344
|
+
response = await client.post(
|
|
2345
|
+
"/auth/signup",
|
|
2346
|
+
json={"email": "ana@acme.com.br", "password": "senha-forte-123"},
|
|
2347
|
+
)
|
|
2348
|
+
print(response.status_code, response.json())
|
|
2349
|
+
await db.disconnect()
|
|
2350
|
+
|
|
2351
|
+
|
|
2352
|
+
asyncio.run(main())
|
|
2353
|
+
```
|
|
2354
|
+
|
|
2355
|
+
```text
|
|
2356
|
+
503 {'detail': 'The e-mail server could not be reached; try again later', 'code': 'EMAIL_UNAVAILABLE', 'details': {}}
|
|
2357
|
+
```
|
|
2358
|
+
|
|
2359
|
+
Nenhuma linha foi gravada: o `flush` da conta e do token não chegou ao
|
|
2360
|
+
`commit`, e a sessão da requisição desfez os dois. O mesmo endereço pode
|
|
2361
|
+
se cadastrar de novo quando o servidor voltar.
|
|
2362
|
+
|
|
2363
|
+
### O que cada rota responde
|
|
2364
|
+
|
|
2365
|
+
| Rota | Com o SMTP falhando | O que fica gravado |
|
|
2366
|
+
| --- | --- | --- |
|
|
2367
|
+
| `/signup` | `503 EMAIL_UNAVAILABLE` | nada: nem conta, nem token |
|
|
2368
|
+
| `/email-change/request` | `503 EMAIL_UNAVAILABLE` | nada; um link pendente anterior continua valendo |
|
|
2369
|
+
| `/email-change/confirm` (com `AUTH_EMAIL_CHANGE_NOTIFY_OLD=true`) | `503 EMAIL_UNAVAILABLE` | nada: o e-mail não muda e o mesmo link confirma depois |
|
|
2370
|
+
| `/email-verify/request` | `503 EMAIL_UNAVAILABLE` | nada |
|
|
2371
|
+
| `/email-recovery/request` (senha e MFA corretos) | `503 EMAIL_UNAVAILABLE` | nada |
|
|
2372
|
+
| `/activation/request` | `202`, a mesma resposta de um endereço desconhecido | nada; o link anterior continua valendo |
|
|
2373
|
+
| `/password-reset/request` | `202`, a mesma resposta de um endereço desconhecido | nada; o link anterior continua valendo |
|
|
2374
|
+
|
|
2375
|
+
O critério é o que a resposta já revela. O cadastro já responde `409`
|
|
2376
|
+
para endereço em uso; troca e verificação de e-mail exigem login; a
|
|
2377
|
+
recuperação de e-mail só chega ao envio depois que a senha (e o MFA)
|
|
2378
|
+
bateram — no mesmo ponto em que um `new_email` em uso responde `409`.
|
|
2379
|
+
Nessas rotas o `503` não conta nada que o chamador não soubesse.
|
|
2380
|
+
|
|
2381
|
+
!!! warning "Reset e reenvio de ativação continuam respondendo `202`"
|
|
2382
|
+
Essas duas rotas respondem igual para endereço cadastrado e
|
|
2383
|
+
desconhecido, de propósito. Se a falha de envio virasse `503`, ela só
|
|
2384
|
+
apareceria para contas que existem — e a rota viraria oráculo de
|
|
2385
|
+
enumeração. Por isso a falha é **logada em `ERROR`** (sem o endereço)
|
|
2386
|
+
e a resposta continua `202`. O token só é gravado **depois** que o
|
|
2387
|
+
e-mail saiu, então a falha não grava nada e o link pendente anterior
|
|
2388
|
+
não é invalidado.
|
|
2389
|
+
|
|
2390
|
+
!!! info "O que vai para o log"
|
|
2391
|
+
O `EmailUtils` loga uma vez, em `ERROR`, com `smtp_host` e
|
|
2392
|
+
`smtp_port` — nunca o destinatário nem a credencial. Falha de rede ou
|
|
2393
|
+
de TLS leva o traceback (é ali que mora o diagnóstico); recusa
|
|
2394
|
+
respondida pelo servidor (`550` para um destinatário, por exemplo)
|
|
2395
|
+
não leva, porque o texto da resposta pode citar o endereço. Pelo
|
|
2396
|
+
mesmo motivo, só a falha de rede ou de TLS fica encadeada em
|
|
2397
|
+
`__cause__`; a recusa sai `from None`, e o handler que loga todo 5xx
|
|
2398
|
+
não tem o que imprimir.
|
|
2399
|
+
|
|
2400
|
+
Ao chamar o `UserAuthService` fora do `make_auth_router`, a regra é a de
|
|
2401
|
+
qualquer erro depois de um `flush`: faça `rollback` da sessão antes de
|
|
2402
|
+
reutilizá-la. O roteador faz isso sozinho, porque nunca chega ao
|
|
2403
|
+
`commit`.
|
|
2404
|
+
|
|
2270
2405
|
## Entrega de token
|
|
2271
2406
|
|
|
2272
2407
|
*(v0.87.0+)*
|