tempest-fastapi-sdk 0.75.0__tar.gz → 0.76.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.75.0 → tempest_fastapi_sdk-0.76.0}/CHANGELOG.md +13 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/PKG-INFO +10 -10
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/README.md +9 -9
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/br-helpers.en.md +11 -8
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/br-helpers.md +11 -8
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/pyproject.toml +1 -1
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/__init__.py +11 -1
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/__init__.py +10 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/regex.py +24 -10
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_regex.py +26 -4
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/uv.lock +1 -1
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/.github/workflows/ci.yml +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/.github/workflows/docs.yml +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/.github/workflows/release-pypi.yml +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/.gitignore +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/.python-version +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/CLAUDE.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/Makefile +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/architecture.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/architecture.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/changelog.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/changelog.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/contributing.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/contributing.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/index.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/index.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/installation.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/installation.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/index.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/index.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/api.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/api.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/business-rules.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/business-rules.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/domain.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/domain.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/flows.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/flows.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/index.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/index.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/migration.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/migration.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/admin.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/admin.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/audit-trail.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/audit-trail.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/auth-flow.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/auth-flow.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/cache.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/cache.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/cli.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/cli.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/database.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/database.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/deploy-safety.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/deploy-safety.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/downloads.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/downloads.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/email.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/email.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/feature-flags.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/feature-flags.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/http-client.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/http-client.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/http.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/http.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/idempotency.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/idempotency.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/index.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/index.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/logging.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/logging.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/metrics.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/metrics.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/mfa.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/mfa.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/multi-tenant.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/multi-tenant.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/observability.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/observability.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/offline-sync.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/offline-sync.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/outbox.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/outbox.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/queue-tasks.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/queue-tasks.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/realtime.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/realtime.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/refresh-tokens.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/refresh-tokens.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/security.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/security.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/sessions.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/sessions.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/storage.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/storage.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/stored-files.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/stored-files.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/testing.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/testing.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/typing.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/typing.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/uploads.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/uploads.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/utilities.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/utilities.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/webpush.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/webpush.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/websocket.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/recipes/websocket.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/reference.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/reference.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/roadmap.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/roadmap.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/tutorial.en.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/tutorial.md +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/mkdocs.yml +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/mkdocs_hooks/llmstxt.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/scripts/extract_recipe.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/auth.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/config.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/discovery.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/forms.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/router.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/session.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/site.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/static/admin.css +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/base.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/dashboard.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/detail.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/form.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/list.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/login.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/logs.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/templates/mfa.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/admin/theme.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/cookies.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/dependencies/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/dependencies/auth.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/handlers.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/body_size.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/cors.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/csrf.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/graceful.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/idempotency.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/rate_limit.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/middlewares/request_id.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/oauth.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/routers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/routers/health.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/routers/logs.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/routers/metrics.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/routers/tool_spec.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/server.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/static.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/tracing.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/api/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/guards.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/locale.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/page_renderer.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/router.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/schemas.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/service.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/en-US/activation.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_error.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_success.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_error.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_form.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_success.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_error.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_success.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_error.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_form.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_success.html +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cache/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cache/decorator.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cache/invalidation.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cache/redis_manager.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/Dockerfile.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/README.md.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/dockerignore.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/env.example.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/gitignore.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/main.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/pyproject.toml.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/api/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/api/app.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/auth.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/resources.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/api/routers/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/controllers/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/core/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/core/exceptions.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/core/settings.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/db/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/user.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/db/repositories/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/schemas/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/server.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/services/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/src/utils/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/tests/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/_templates/tests/test_smoke.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/config.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/db.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/docker_compose.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/generate.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/lint.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/main.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/new.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/secrets.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/src_layers.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/cli/user.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/controllers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/controllers/base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/core/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/core/context.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/core/enums.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/core/logging.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/core/typed.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/_alembic_templates/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/_alembic_templates/env.py.template +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/alembic_hooks.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/audit.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/backup.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/connection.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/migrations.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/mixins.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/model.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/outbox.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/repository.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/slow_query.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/tenant.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/user_model.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/user_recovery_code_model.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/user_refresh_token_model.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/db/user_token_model.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/conflict.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/forbidden.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/i18n.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/jwt.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/not_found.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/too_many_requests.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/unauthorized.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/upload.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/exceptions/validation.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/flags/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/flags/backends.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/flags/dependencies.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/flags/service.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/py.typed +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/queue/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/queue/manager.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/schemas/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/schemas/base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/schemas/link_headers.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/schemas/logs.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/schemas/pagination.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/schemas/response.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/services/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/services/base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/services/file_mixin.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sessions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sessions/dependencies.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sessions/middleware.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sessions/router.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sessions/schemas.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sessions/service.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sessions/store.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/settings/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/settings/base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/settings/mixins.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sse/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/sse/event_stream.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/storage/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/storage/minio_client.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/tasks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/tasks/manager.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/tasks/scheduler.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/testing/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/testing/database.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/client_ip.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/data/br_locations.json +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/datetime.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/dict.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/download.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/email.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/http_client.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/jwt.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/locations.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/log.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/metrics.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/opaque_token.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/password.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/storage_backends.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/throttle.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/totp.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/upload.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/webpush/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/webpush/dispatcher.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/webpush/schemas.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/websockets/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/websockets/hub.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/websockets/router.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/websockets/schemas.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_auth.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_discovery.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_forms.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_logs_nav.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_mfa.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_router.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_site.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_theme.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/admin/test_user_model.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_body_size.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_cookies.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_cors.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_csrf.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_dependencies_auth.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_graceful.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_handlers.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_health_router.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_idempotency.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_jwt_dependency.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_logs_router.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_oauth.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_prometheus.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_rate_limit.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_rate_limit_extras.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_request_id_middleware.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_role_dependency.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_server.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_static.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_tool_spec.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_tracing.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_webhooks.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/api/test_webhooks_rsa.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/auth/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/auth/test_guards.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/auth/test_locale.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/auth/test_mfa.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/auth/test_refresh.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/auth/test_refresh_db.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/auth/test_service.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cache/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cache/test_decorator.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cache/test_invalidation.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cache/test_redis_manager.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_config.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_db.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_db_seed.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_docker_compose.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_generate.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_lint_strictness.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_main.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_secrets.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/cli/test_user.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/conftest.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/controllers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/controllers/test_base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/core/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/core/test_context.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/core/test_enums.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/core/test_logging.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/core/test_typed.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_alembic_hooks.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_audit.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_backup.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_bulk_ops.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_connection.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_migrations.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_mixins.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_model.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_outbox.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_repository.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_safe_upgrade.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_slow_query.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/db/test_tenant.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/exceptions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/exceptions/test_exceptions.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/exceptions/test_i18n.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/flags/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/flags/test_flags.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/queue/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/queue/test_manager.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/schemas/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/schemas/test_base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/schemas/test_cursor_pagination.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/schemas/test_link_headers.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/schemas/test_pagination.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/schemas/test_response.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/services/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/services/test_base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/services/test_file_mixin.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/sessions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/sessions/test_sessions.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/settings/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/settings/test_base.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/settings/test_mixins.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/sse/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/sse/test_event_stream.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/storage/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/storage/test_minio_client.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/tasks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/tasks/test_manager.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/tasks/test_scheduler.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/testing/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/testing/test_database.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_client_ip.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_datetime.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_dict.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_download.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_email.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_http_client.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_jwt.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_lazy_extras.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_locations.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_log.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_metrics.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_opaque_token.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_password.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_storage_backends.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_throttle.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/utils/test_upload.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/webpush/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/webpush/test_dispatcher.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/webpush/test_schemas.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/websockets/__init__.py +0 -0
- {tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tests/websockets/test_hub_and_router.py +0 -0
|
@@ -5,6 +5,19 @@ All notable changes to **tempest-fastapi-sdk** are listed below.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.76.0] — 2026-06-27
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **BR field types now carry a `Field` suffix.** The Pydantic
|
|
13
|
+
annotated-type aliases were renamed to make their role obvious at the
|
|
14
|
+
import site, matching `UFField` / `CityNameField`: `CPF` -> `CPFField`,
|
|
15
|
+
`CNPJ` -> `CNPJField`, `CPFOrCNPJ` -> `CPFOrCNPJField`,
|
|
16
|
+
`PhoneBR` -> `PhoneBRField`, `CEP` -> `CEPField`. The old names remain
|
|
17
|
+
exported as **deprecated aliases** (identical types), so existing
|
|
18
|
+
imports keep working; prefer the `*Field` names. Slated for removal in
|
|
19
|
+
a future major.
|
|
20
|
+
|
|
8
21
|
## [0.75.0] — 2026-06-27
|
|
9
22
|
|
|
10
23
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tempest-fastapi-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.76.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
|
|
@@ -259,7 +259,7 @@ Since `0.7.1` every optional dependency is imported lazily at first instantiatio
|
|
|
259
259
|
| `tempest_fastapi_sdk.utils.http_client` *(extra: `[http]`)* | `HTTPClient`, `RetryPolicy`, `CircuitOpenError`, `REQUEST_ID_HEADER` — typed httpx wrapper |
|
|
260
260
|
| `tempest_fastapi_sdk.utils.storage_backends` *(extra: `[upload]`)* | `UploadStorage` protocol, `LocalUploadStorage`, `MinIOUploadStorage`, `UploadResult`, `ContentValidator` |
|
|
261
261
|
| `tempest_fastapi_sdk.tasks` *(extra: `[tasks]`)* | `AsyncTaskBrokerManager` (TaskIQ lifecycle wrapper), `AsyncTaskScheduler` (periodic / cron tasks) |
|
|
262
|
-
| `tempest_fastapi_sdk.utils` | `to_utc`, `utcnow`, `modify_dict`, `LogUtils`, `AttemptThrottle`/`ThrottleBackend`/`ThrottleStatus`, `generate_opaque_token`/`hash_opaque_token`/`verify_opaque_token`, `get_client_ip`/`get_client_ip_from_scope`, `PasswordUtils` *(extra: `[auth]`)*, `JWTUtils` *(extra: `[auth]`)*, `TOTPHelper` *(extra: `[mfa]`)*, `EmailUtils` *(extra: `[email]`)*, `UploadUtils`/`sniff_mime` *(extra: `[upload]`)*, `DownloadUtils`/`build_content_disposition` *(no extra)*, `MetricsUtils`/`CPUMetrics`/`MemoryMetrics`/`DiskMetrics`/`GPUMetrics`/`SystemMetrics` *(extra: `[metrics]`)*, BR regex helpers (`
|
|
262
|
+
| `tempest_fastapi_sdk.utils` | `to_utc`, `utcnow`, `modify_dict`, `LogUtils`, `AttemptThrottle`/`ThrottleBackend`/`ThrottleStatus`, `generate_opaque_token`/`hash_opaque_token`/`verify_opaque_token`, `get_client_ip`/`get_client_ip_from_scope`, `PasswordUtils` *(extra: `[auth]`)*, `JWTUtils` *(extra: `[auth]`)*, `TOTPHelper` *(extra: `[mfa]`)*, `EmailUtils` *(extra: `[email]`)*, `UploadUtils`/`sniff_mime` *(extra: `[upload]`)*, `DownloadUtils`/`build_content_disposition` *(no extra)*, `MetricsUtils`/`CPUMetrics`/`MemoryMetrics`/`DiskMetrics`/`GPUMetrics`/`SystemMetrics` *(extra: `[metrics]`)*, BR regex helpers (`CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField` — old names without the suffix kept as deprecated aliases — `is_valid_*`, `normalize_*`, `only_digits`, `*_PATTERN`), BR states/cities (`UF`, `Region`, `StateBR`, `CityBR`, `ChoiceBR`, `UFField`, `CityNameField`, `list_states`, `get_state`, `cities_by_uf`, `states_by_region`, `uf_choices`/`region_choices`/`city_choices`, `is_valid_uf`/`normalize_uf`, `is_valid_city`/`normalize_city`) |
|
|
263
263
|
| `tempest_fastapi_sdk.cli` | `tempest` console script — `new <name>` (scaffold layered service), `lint` / `format` / `fmt-check` / `type` / `test` / `check` (run preferred quality gates), `version` / `--version` |
|
|
264
264
|
|
|
265
265
|
Core primitives are re-exported from `tempest_fastapi_sdk` at the top level — `from tempest_fastapi_sdk import BaseModel, BaseRepository, AppException` always works. The extras-gated managers in `tempest_fastapi_sdk.cache`, `tempest_fastapi_sdk.queue` and `tempest_fastapi_sdk.tasks` must be imported from their own submodule (`from tempest_fastapi_sdk.queue import AsyncBrokerManager`).
|
|
@@ -1609,7 +1609,7 @@ Every helper has its own recipe — this section is the quick map:
|
|
|
1609
1609
|
| `DownloadUtils`, `build_content_disposition` | [Serving private files through the API](#serving-private-files-through-the-api-downloadutils) |
|
|
1610
1610
|
| `LogUtils` + `configure_logging` | [Structured logging & request IDs recipe](#structured-logging--request-ids-recipe) |
|
|
1611
1611
|
| `MetricsUtils` (CPU/memory/disk/GPU) | [System metrics recipe](#system-metrics-recipe) |
|
|
1612
|
-
| `
|
|
1612
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField`, `is_valid_*`, `normalize_*`, `only_digits` | [BR document & phone validation recipe](#br-document--phone-validation-recipe) |
|
|
1613
1613
|
|
|
1614
1614
|
### BR document & phone validation recipe
|
|
1615
1615
|
|
|
@@ -1622,7 +1622,7 @@ Every helper has its own recipe — this section is the quick map:
|
|
|
1622
1622
|
| `is_valid_phone_br` | `(str) -> bool` | BR phone shape: optional `+55`, optional DDD, optional 9th digit. |
|
|
1623
1623
|
| `normalize_cpf`, `normalize_cnpj`, `normalize_cpf_cnpj`, `normalize_phone_br` | `(str) -> str` | Strip mask to digits-only; raise `ValueError` if invalid. |
|
|
1624
1624
|
| `only_digits` | `(str) -> str` | Strip every non-digit character. |
|
|
1625
|
-
| `
|
|
1625
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField` | `Annotated[str, AfterValidator(...)]` | Drop-in Pydantic field types — validate + normalize automatically. The old names without the `Field` suffix (`CPF`, `CNPJ`, …) remain as deprecated aliases since v0.76. |
|
|
1626
1626
|
|
|
1627
1627
|
#### Schema usage
|
|
1628
1628
|
|
|
@@ -1630,7 +1630,7 @@ Every helper has its own recipe — this section is the quick map:
|
|
|
1630
1630
|
from pydantic import EmailStr, Field
|
|
1631
1631
|
|
|
1632
1632
|
from tempest_fastapi_sdk import BaseSchema
|
|
1633
|
-
from tempest_fastapi_sdk.utils import
|
|
1633
|
+
from tempest_fastapi_sdk.utils import CPFOrCNPJField, PhoneBRField
|
|
1634
1634
|
|
|
1635
1635
|
|
|
1636
1636
|
class CustomerCreateSchema(BaseSchema):
|
|
@@ -1644,8 +1644,8 @@ class CustomerCreateSchema(BaseSchema):
|
|
|
1644
1644
|
|
|
1645
1645
|
name: str = Field(min_length=1, max_length=128)
|
|
1646
1646
|
email: EmailStr
|
|
1647
|
-
document:
|
|
1648
|
-
phone:
|
|
1647
|
+
document: CPFOrCNPJField
|
|
1648
|
+
phone: PhoneBRField
|
|
1649
1649
|
```
|
|
1650
1650
|
|
|
1651
1651
|
Valid input:
|
|
@@ -2830,15 +2830,15 @@ async def update_perms(user_id: UUID) -> None:
|
|
|
2830
2830
|
|
|
2831
2831
|
### CEP (Brazilian zipcode) recipe
|
|
2832
2832
|
|
|
2833
|
-
`
|
|
2833
|
+
`CEPField` is an `Annotated[str, AfterValidator(normalize_cep)]` type — drop it into a Pydantic schema and inbound values are accepted as `"01310-100"` or `"01310100"`, normalized to 8 digits, and rejected (`ValidationError` → HTTP 422 envelope) when they don't match the shape. CEPs have no check digits, so validation is format-only.
|
|
2834
2834
|
|
|
2835
2835
|
```python
|
|
2836
2836
|
from tempest_fastapi_sdk import BaseSchema
|
|
2837
|
-
from tempest_fastapi_sdk.utils import
|
|
2837
|
+
from tempest_fastapi_sdk.utils import CEPField
|
|
2838
2838
|
|
|
2839
2839
|
|
|
2840
2840
|
class AddressCreateSchema(BaseSchema):
|
|
2841
|
-
cep:
|
|
2841
|
+
cep: CEPField
|
|
2842
2842
|
street: str
|
|
2843
2843
|
number: str
|
|
2844
2844
|
```
|
|
@@ -156,7 +156,7 @@ Since `0.7.1` every optional dependency is imported lazily at first instantiatio
|
|
|
156
156
|
| `tempest_fastapi_sdk.utils.http_client` *(extra: `[http]`)* | `HTTPClient`, `RetryPolicy`, `CircuitOpenError`, `REQUEST_ID_HEADER` — typed httpx wrapper |
|
|
157
157
|
| `tempest_fastapi_sdk.utils.storage_backends` *(extra: `[upload]`)* | `UploadStorage` protocol, `LocalUploadStorage`, `MinIOUploadStorage`, `UploadResult`, `ContentValidator` |
|
|
158
158
|
| `tempest_fastapi_sdk.tasks` *(extra: `[tasks]`)* | `AsyncTaskBrokerManager` (TaskIQ lifecycle wrapper), `AsyncTaskScheduler` (periodic / cron tasks) |
|
|
159
|
-
| `tempest_fastapi_sdk.utils` | `to_utc`, `utcnow`, `modify_dict`, `LogUtils`, `AttemptThrottle`/`ThrottleBackend`/`ThrottleStatus`, `generate_opaque_token`/`hash_opaque_token`/`verify_opaque_token`, `get_client_ip`/`get_client_ip_from_scope`, `PasswordUtils` *(extra: `[auth]`)*, `JWTUtils` *(extra: `[auth]`)*, `TOTPHelper` *(extra: `[mfa]`)*, `EmailUtils` *(extra: `[email]`)*, `UploadUtils`/`sniff_mime` *(extra: `[upload]`)*, `DownloadUtils`/`build_content_disposition` *(no extra)*, `MetricsUtils`/`CPUMetrics`/`MemoryMetrics`/`DiskMetrics`/`GPUMetrics`/`SystemMetrics` *(extra: `[metrics]`)*, BR regex helpers (`
|
|
159
|
+
| `tempest_fastapi_sdk.utils` | `to_utc`, `utcnow`, `modify_dict`, `LogUtils`, `AttemptThrottle`/`ThrottleBackend`/`ThrottleStatus`, `generate_opaque_token`/`hash_opaque_token`/`verify_opaque_token`, `get_client_ip`/`get_client_ip_from_scope`, `PasswordUtils` *(extra: `[auth]`)*, `JWTUtils` *(extra: `[auth]`)*, `TOTPHelper` *(extra: `[mfa]`)*, `EmailUtils` *(extra: `[email]`)*, `UploadUtils`/`sniff_mime` *(extra: `[upload]`)*, `DownloadUtils`/`build_content_disposition` *(no extra)*, `MetricsUtils`/`CPUMetrics`/`MemoryMetrics`/`DiskMetrics`/`GPUMetrics`/`SystemMetrics` *(extra: `[metrics]`)*, BR regex helpers (`CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField` — old names without the suffix kept as deprecated aliases — `is_valid_*`, `normalize_*`, `only_digits`, `*_PATTERN`), BR states/cities (`UF`, `Region`, `StateBR`, `CityBR`, `ChoiceBR`, `UFField`, `CityNameField`, `list_states`, `get_state`, `cities_by_uf`, `states_by_region`, `uf_choices`/`region_choices`/`city_choices`, `is_valid_uf`/`normalize_uf`, `is_valid_city`/`normalize_city`) |
|
|
160
160
|
| `tempest_fastapi_sdk.cli` | `tempest` console script — `new <name>` (scaffold layered service), `lint` / `format` / `fmt-check` / `type` / `test` / `check` (run preferred quality gates), `version` / `--version` |
|
|
161
161
|
|
|
162
162
|
Core primitives are re-exported from `tempest_fastapi_sdk` at the top level — `from tempest_fastapi_sdk import BaseModel, BaseRepository, AppException` always works. The extras-gated managers in `tempest_fastapi_sdk.cache`, `tempest_fastapi_sdk.queue` and `tempest_fastapi_sdk.tasks` must be imported from their own submodule (`from tempest_fastapi_sdk.queue import AsyncBrokerManager`).
|
|
@@ -1506,7 +1506,7 @@ Every helper has its own recipe — this section is the quick map:
|
|
|
1506
1506
|
| `DownloadUtils`, `build_content_disposition` | [Serving private files through the API](#serving-private-files-through-the-api-downloadutils) |
|
|
1507
1507
|
| `LogUtils` + `configure_logging` | [Structured logging & request IDs recipe](#structured-logging--request-ids-recipe) |
|
|
1508
1508
|
| `MetricsUtils` (CPU/memory/disk/GPU) | [System metrics recipe](#system-metrics-recipe) |
|
|
1509
|
-
| `
|
|
1509
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField`, `is_valid_*`, `normalize_*`, `only_digits` | [BR document & phone validation recipe](#br-document--phone-validation-recipe) |
|
|
1510
1510
|
|
|
1511
1511
|
### BR document & phone validation recipe
|
|
1512
1512
|
|
|
@@ -1519,7 +1519,7 @@ Every helper has its own recipe — this section is the quick map:
|
|
|
1519
1519
|
| `is_valid_phone_br` | `(str) -> bool` | BR phone shape: optional `+55`, optional DDD, optional 9th digit. |
|
|
1520
1520
|
| `normalize_cpf`, `normalize_cnpj`, `normalize_cpf_cnpj`, `normalize_phone_br` | `(str) -> str` | Strip mask to digits-only; raise `ValueError` if invalid. |
|
|
1521
1521
|
| `only_digits` | `(str) -> str` | Strip every non-digit character. |
|
|
1522
|
-
| `
|
|
1522
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField` | `Annotated[str, AfterValidator(...)]` | Drop-in Pydantic field types — validate + normalize automatically. The old names without the `Field` suffix (`CPF`, `CNPJ`, …) remain as deprecated aliases since v0.76. |
|
|
1523
1523
|
|
|
1524
1524
|
#### Schema usage
|
|
1525
1525
|
|
|
@@ -1527,7 +1527,7 @@ Every helper has its own recipe — this section is the quick map:
|
|
|
1527
1527
|
from pydantic import EmailStr, Field
|
|
1528
1528
|
|
|
1529
1529
|
from tempest_fastapi_sdk import BaseSchema
|
|
1530
|
-
from tempest_fastapi_sdk.utils import
|
|
1530
|
+
from tempest_fastapi_sdk.utils import CPFOrCNPJField, PhoneBRField
|
|
1531
1531
|
|
|
1532
1532
|
|
|
1533
1533
|
class CustomerCreateSchema(BaseSchema):
|
|
@@ -1541,8 +1541,8 @@ class CustomerCreateSchema(BaseSchema):
|
|
|
1541
1541
|
|
|
1542
1542
|
name: str = Field(min_length=1, max_length=128)
|
|
1543
1543
|
email: EmailStr
|
|
1544
|
-
document:
|
|
1545
|
-
phone:
|
|
1544
|
+
document: CPFOrCNPJField
|
|
1545
|
+
phone: PhoneBRField
|
|
1546
1546
|
```
|
|
1547
1547
|
|
|
1548
1548
|
Valid input:
|
|
@@ -2727,15 +2727,15 @@ async def update_perms(user_id: UUID) -> None:
|
|
|
2727
2727
|
|
|
2728
2728
|
### CEP (Brazilian zipcode) recipe
|
|
2729
2729
|
|
|
2730
|
-
`
|
|
2730
|
+
`CEPField` is an `Annotated[str, AfterValidator(normalize_cep)]` type — drop it into a Pydantic schema and inbound values are accepted as `"01310-100"` or `"01310100"`, normalized to 8 digits, and rejected (`ValidationError` → HTTP 422 envelope) when they don't match the shape. CEPs have no check digits, so validation is format-only.
|
|
2731
2731
|
|
|
2732
2732
|
```python
|
|
2733
2733
|
from tempest_fastapi_sdk import BaseSchema
|
|
2734
|
-
from tempest_fastapi_sdk.utils import
|
|
2734
|
+
from tempest_fastapi_sdk.utils import CEPField
|
|
2735
2735
|
|
|
2736
2736
|
|
|
2737
2737
|
class AddressCreateSchema(BaseSchema):
|
|
2738
|
-
cep:
|
|
2738
|
+
cep: CEPField
|
|
2739
2739
|
street: str
|
|
2740
2740
|
number: str
|
|
2741
2741
|
```
|
|
@@ -14,7 +14,10 @@ Document validators (CPF, CNPJ, CEP) and phone number normalizer/validator for B
|
|
|
14
14
|
| `is_valid_phone_br` | `(str) -> bool` | BR phone shape: optional `+55`, optional DDD, optional 9th digit. |
|
|
15
15
|
| `normalize_cpf`, `normalize_cnpj`, `normalize_cpf_cnpj`, `normalize_phone_br` | `(str) -> str` | Strip mask to digits-only; raise `ValueError` if invalid. |
|
|
16
16
|
| `only_digits` | `(str) -> str` | Strip every non-digit character. |
|
|
17
|
-
| `
|
|
17
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField` | `Annotated[str, AfterValidator(...)]` | Drop-in Pydantic field types — validate + normalize automatically. |
|
|
18
|
+
|
|
19
|
+
!!! info "`Field` suffix (since v0.76)"
|
|
20
|
+
The field types now carry a `Field` suffix (`CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField`) to make it obvious they are schema field types — like `UFField` / `CityNameField`. The old names (`CPF`, `CNPJ`, `CPFOrCNPJ`, `PhoneBR`, `CEP`) still work as **deprecated aliases**; prefer the new ones.
|
|
18
21
|
|
|
19
22
|
#### Schema usage
|
|
20
23
|
|
|
@@ -22,7 +25,7 @@ Document validators (CPF, CNPJ, CEP) and phone number normalizer/validator for B
|
|
|
22
25
|
from pydantic import EmailStr, Field
|
|
23
26
|
|
|
24
27
|
from tempest_fastapi_sdk import BaseSchema
|
|
25
|
-
from tempest_fastapi_sdk.utils import
|
|
28
|
+
from tempest_fastapi_sdk.utils import CPFOrCNPJField, PhoneBRField
|
|
26
29
|
|
|
27
30
|
|
|
28
31
|
class CustomerCreateSchema(BaseSchema):
|
|
@@ -36,8 +39,8 @@ class CustomerCreateSchema(BaseSchema):
|
|
|
36
39
|
|
|
37
40
|
name: str = Field(min_length=1, max_length=128)
|
|
38
41
|
email: EmailStr
|
|
39
|
-
document:
|
|
40
|
-
phone:
|
|
42
|
+
document: CPFOrCNPJField
|
|
43
|
+
phone: PhoneBRField
|
|
41
44
|
```
|
|
42
45
|
|
|
43
46
|
Valid input:
|
|
@@ -87,15 +90,15 @@ await repo.get({"document": normalize_cpf_cnpj(query)})
|
|
|
87
90
|
## CEP (zipcode)
|
|
88
91
|
|
|
89
92
|
|
|
90
|
-
`
|
|
93
|
+
`CEPField` is an `Annotated[str, AfterValidator(normalize_cep)]` type — drop it into a Pydantic schema and inbound values are accepted as `"01310-100"` or `"01310100"`, normalized to 8 digits, and rejected (`ValidationError` → HTTP 422 envelope) when they don't match the shape. CEPs have no check digits, so validation is format-only.
|
|
91
94
|
|
|
92
95
|
```python
|
|
93
96
|
from tempest_fastapi_sdk import BaseSchema
|
|
94
|
-
from tempest_fastapi_sdk.utils import
|
|
97
|
+
from tempest_fastapi_sdk.utils import CEPField
|
|
95
98
|
|
|
96
99
|
|
|
97
100
|
class AddressCreateSchema(BaseSchema):
|
|
98
|
-
cep:
|
|
101
|
+
cep: CEPField
|
|
99
102
|
street: str
|
|
100
103
|
number: str
|
|
101
104
|
```
|
|
@@ -319,6 +322,6 @@ Every helper has its own recipe — this section is the quick map:
|
|
|
319
322
|
| `DownloadUtils`, `build_content_disposition` | [Serving private files through the API](http.md#serving-private-files-through-the-api-downloadutils) |
|
|
320
323
|
| `LogUtils` + `configure_logging` | [Structured logging & request IDs recipe](logging.md) |
|
|
321
324
|
| `MetricsUtils` (CPU/memory/disk/GPU) | [System metrics recipe](metrics.md) |
|
|
322
|
-
| `
|
|
325
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField`, `is_valid_*`, `normalize_*`, `only_digits` | [CPF / CNPJ / phone](#cpf-cnpj-phone) |
|
|
323
326
|
| `UF`, `Region`, `StateBR`, `CityBR`, `ChoiceBR`, `UFField`, `CityNameField`, `list_states`, `get_state`, `cities_by_uf`, `states_by_region`, `uf_choices`, `region_choices`, `city_choices`, `is_valid_uf`, `normalize_uf`, `is_valid_city`, `normalize_city` | [States and municipalities](#states-and-municipalities) |
|
|
324
327
|
|
|
@@ -14,7 +14,10 @@ Validadores de documentos (CPF, CNPJ, CEP) e normalizador/validador de telefone
|
|
|
14
14
|
| `is_valid_phone_br` | `(str) -> bool` | Formato de telefone BR: `+55` opcional, DDD opcional, nono dígito opcional. |
|
|
15
15
|
| `normalize_cpf`, `normalize_cnpj`, `normalize_cpf_cnpj`, `normalize_phone_br` | `(str) -> str` | Remove a máscara deixando só dígitos; levanta `ValueError` se inválido. |
|
|
16
16
|
| `only_digits` | `(str) -> str` | Remove todo caractere que não é dígito. |
|
|
17
|
-
| `
|
|
17
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField` | `Annotated[str, AfterValidator(...)]` | Tipos de campo Pydantic plug-and-play — validam + normalizam automaticamente. |
|
|
18
|
+
|
|
19
|
+
!!! info "Sufixo `Field` (a partir da v0.76)"
|
|
20
|
+
Os tipos de campo passaram a usar o sufixo `Field` (`CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField`) pra deixar claro que são campos de schema — igual `UFField` / `CityNameField`. Os nomes antigos (`CPF`, `CNPJ`, `CPFOrCNPJ`, `PhoneBR`, `CEP`) continuam funcionando como **alias deprecado**; prefira os novos.
|
|
18
21
|
|
|
19
22
|
#### Uso em schema
|
|
20
23
|
|
|
@@ -22,7 +25,7 @@ Validadores de documentos (CPF, CNPJ, CEP) e normalizador/validador de telefone
|
|
|
22
25
|
from pydantic import EmailStr, Field
|
|
23
26
|
|
|
24
27
|
from tempest_fastapi_sdk import BaseSchema
|
|
25
|
-
from tempest_fastapi_sdk.utils import
|
|
28
|
+
from tempest_fastapi_sdk.utils import CPFOrCNPJField, PhoneBRField
|
|
26
29
|
|
|
27
30
|
|
|
28
31
|
class CustomerCreateSchema(BaseSchema):
|
|
@@ -36,8 +39,8 @@ class CustomerCreateSchema(BaseSchema):
|
|
|
36
39
|
|
|
37
40
|
name: str = Field(min_length=1, max_length=128)
|
|
38
41
|
email: EmailStr
|
|
39
|
-
document:
|
|
40
|
-
phone:
|
|
42
|
+
document: CPFOrCNPJField
|
|
43
|
+
phone: PhoneBRField
|
|
41
44
|
```
|
|
42
45
|
|
|
43
46
|
Entrada válida:
|
|
@@ -87,15 +90,15 @@ await repo.get({"document": normalize_cpf_cnpj(query)})
|
|
|
87
90
|
## CEP
|
|
88
91
|
|
|
89
92
|
|
|
90
|
-
`
|
|
93
|
+
`CEPField` é um tipo `Annotated[str, AfterValidator(normalize_cep)]` — coloque-o em um schema Pydantic e os valores de entrada são aceitos como `"01310-100"` ou `"01310100"`, normalizados para 8 dígitos, e rejeitados (`ValidationError` → envelope HTTP 422) quando não casam com o formato. CEPs não têm dígitos verificadores, então a validação é só de formato.
|
|
91
94
|
|
|
92
95
|
```python
|
|
93
96
|
from tempest_fastapi_sdk import BaseSchema
|
|
94
|
-
from tempest_fastapi_sdk.utils import
|
|
97
|
+
from tempest_fastapi_sdk.utils import CEPField
|
|
95
98
|
|
|
96
99
|
|
|
97
100
|
class AddressCreateSchema(BaseSchema):
|
|
98
|
-
cep:
|
|
101
|
+
cep: CEPField
|
|
99
102
|
street: str
|
|
100
103
|
number: str
|
|
101
104
|
```
|
|
@@ -311,5 +314,5 @@ Todo helper tem sua própria receita — esta seção é o mapa rápido:
|
|
|
311
314
|
| `DownloadUtils`, `build_content_disposition` | [Servindo arquivos privados pela API](http.md#servindo-arquivos-privados-pela-api-downloadutils) |
|
|
312
315
|
| `LogUtils` + `configure_logging` | [Receita de logging estruturado & request IDs](logging.md) |
|
|
313
316
|
| `MetricsUtils` (CPU/memória/disco/GPU) | [Receita de métricas do sistema](metrics.md) |
|
|
314
|
-
| `
|
|
317
|
+
| `CPFField`, `CNPJField`, `CPFOrCNPJField`, `PhoneBRField`, `CEPField`, `is_valid_*`, `normalize_*`, `only_digits` | [CPF / CNPJ / telefone](#cpf-cnpj-telefone) |
|
|
315
318
|
| `UF`, `Region`, `StateBR`, `CityBR`, `ChoiceBR`, `UFField`, `CityNameField`, `list_states`, `get_state`, `cities_by_uf`, `states_by_region`, `uf_choices`, `region_choices`, `city_choices`, `is_valid_uf`, `normalize_uf`, `is_valid_city`, `normalize_city` | [Estados e municípios](#estados-e-municipios) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tempest-fastapi-sdk"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.76.0"
|
|
4
4
|
description = "Shared FastAPI building blocks: base schemas, ORM model, async repository, exceptions, pagination and settings — the conventions used across Tempest projects."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -245,11 +245,15 @@ from tempest_fastapi_sdk.utils import (
|
|
|
245
245
|
REQUEST_ID_HEADER,
|
|
246
246
|
UF,
|
|
247
247
|
AttemptThrottle,
|
|
248
|
+
CEPField,
|
|
248
249
|
ChoiceBR,
|
|
249
250
|
CircuitOpenError,
|
|
250
251
|
CityBR,
|
|
251
252
|
CityNameField,
|
|
253
|
+
CNPJField,
|
|
254
|
+
CPFField,
|
|
252
255
|
CPFOrCNPJ,
|
|
256
|
+
CPFOrCNPJField,
|
|
253
257
|
CPUMetrics,
|
|
254
258
|
DiskMetrics,
|
|
255
259
|
DownloadUtils,
|
|
@@ -264,6 +268,7 @@ from tempest_fastapi_sdk.utils import (
|
|
|
264
268
|
MinIOUploadStorage,
|
|
265
269
|
PasswordUtils,
|
|
266
270
|
PhoneBR,
|
|
271
|
+
PhoneBRField,
|
|
267
272
|
Region,
|
|
268
273
|
RetryPolicy,
|
|
269
274
|
StateBR,
|
|
@@ -323,7 +328,7 @@ from tempest_fastapi_sdk.websockets import (
|
|
|
323
328
|
make_websocket_router,
|
|
324
329
|
)
|
|
325
330
|
|
|
326
|
-
__version__: str = "0.
|
|
331
|
+
__version__: str = "0.76.0"
|
|
327
332
|
|
|
328
333
|
__all__: list[str] = [
|
|
329
334
|
"BASE_COLUMN_ORDER",
|
|
@@ -380,8 +385,12 @@ __all__: list[str] = [
|
|
|
380
385
|
"BaseUserRefreshTokenModel",
|
|
381
386
|
"BaseUserTokenModel",
|
|
382
387
|
"BodySizeLimitMiddleware",
|
|
388
|
+
"CEPField",
|
|
389
|
+
"CNPJField",
|
|
383
390
|
"CORSSettings",
|
|
391
|
+
"CPFField",
|
|
384
392
|
"CPFOrCNPJ",
|
|
393
|
+
"CPFOrCNPJField",
|
|
385
394
|
"CPUMetrics",
|
|
386
395
|
"CSRFMiddleware",
|
|
387
396
|
"CachedResponse",
|
|
@@ -460,6 +469,7 @@ __all__: list[str] = [
|
|
|
460
469
|
"PasswordResetToken",
|
|
461
470
|
"PasswordUtils",
|
|
462
471
|
"PhoneBR",
|
|
472
|
+
"PhoneBRField",
|
|
463
473
|
"PrometheusMiddleware",
|
|
464
474
|
"RSAWebhookSignatureVerifier",
|
|
465
475
|
"RabbitMQSettings",
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/__init__.py
RENAMED
|
@@ -72,8 +72,13 @@ from tempest_fastapi_sdk.utils.regex import (
|
|
|
72
72
|
CPF_CNPJ_PATTERN,
|
|
73
73
|
CPF_PATTERN,
|
|
74
74
|
PHONE_BR_PATTERN,
|
|
75
|
+
CEPField,
|
|
76
|
+
CNPJField,
|
|
77
|
+
CPFField,
|
|
75
78
|
CPFOrCNPJ,
|
|
79
|
+
CPFOrCNPJField,
|
|
76
80
|
PhoneBR,
|
|
81
|
+
PhoneBRField,
|
|
77
82
|
is_valid_cep,
|
|
78
83
|
is_valid_cnpj,
|
|
79
84
|
is_valid_cpf,
|
|
@@ -112,7 +117,11 @@ __all__: list[str] = [
|
|
|
112
117
|
"REQUEST_ID_HEADER",
|
|
113
118
|
"UF",
|
|
114
119
|
"AttemptThrottle",
|
|
120
|
+
"CEPField",
|
|
121
|
+
"CNPJField",
|
|
122
|
+
"CPFField",
|
|
115
123
|
"CPFOrCNPJ",
|
|
124
|
+
"CPFOrCNPJField",
|
|
116
125
|
"CPUMetrics",
|
|
117
126
|
"ChoiceBR",
|
|
118
127
|
"CircuitOpenError",
|
|
@@ -131,6 +140,7 @@ __all__: list[str] = [
|
|
|
131
140
|
"MinIOUploadStorage",
|
|
132
141
|
"PasswordUtils",
|
|
133
142
|
"PhoneBR",
|
|
143
|
+
"PhoneBRField",
|
|
134
144
|
"Region",
|
|
135
145
|
"RetryPolicy",
|
|
136
146
|
"StateBR",
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/tempest_fastapi_sdk/utils/regex.py
RENAMED
|
@@ -279,20 +279,29 @@ def normalize_phone_br(value: str) -> str:
|
|
|
279
279
|
return only_digits(value)
|
|
280
280
|
|
|
281
281
|
|
|
282
|
-
|
|
283
|
-
"""Pydantic type that validates and normalizes a CPF to 11 digits."""
|
|
282
|
+
CPFField = Annotated[str, AfterValidator(normalize_cpf)]
|
|
283
|
+
"""Pydantic field type that validates and normalizes a CPF to 11 digits."""
|
|
284
284
|
|
|
285
|
-
|
|
286
|
-
"""Pydantic type that validates and normalizes a CNPJ to 14 digits."""
|
|
285
|
+
CNPJField = Annotated[str, AfterValidator(normalize_cnpj)]
|
|
286
|
+
"""Pydantic field type that validates and normalizes a CNPJ to 14 digits."""
|
|
287
287
|
|
|
288
|
-
|
|
289
|
-
"""Pydantic type that accepts either a CPF or a CNPJ."""
|
|
288
|
+
CPFOrCNPJField = Annotated[str, AfterValidator(normalize_cpf_cnpj)]
|
|
289
|
+
"""Pydantic field type that accepts either a CPF or a CNPJ."""
|
|
290
290
|
|
|
291
|
-
|
|
292
|
-
"""Pydantic type that validates a BR phone and normalizes to digits."""
|
|
291
|
+
PhoneBRField = Annotated[str, AfterValidator(normalize_phone_br)]
|
|
292
|
+
"""Pydantic field type that validates a BR phone and normalizes to digits."""
|
|
293
293
|
|
|
294
|
-
|
|
295
|
-
"""Pydantic type that validates a Brazilian CEP
|
|
294
|
+
CEPField = Annotated[str, AfterValidator(normalize_cep)]
|
|
295
|
+
"""Pydantic field type that validates a Brazilian CEP, normalized to 8 digits."""
|
|
296
|
+
|
|
297
|
+
# Deprecated aliases (pre-0.76 names without the ``Field`` suffix). Kept
|
|
298
|
+
# so existing imports keep working; prefer the ``*Field`` names. Slated
|
|
299
|
+
# for removal in a future major.
|
|
300
|
+
CPF = CPFField
|
|
301
|
+
CNPJ = CNPJField
|
|
302
|
+
CPFOrCNPJ = CPFOrCNPJField
|
|
303
|
+
PhoneBR = PhoneBRField
|
|
304
|
+
CEP = CEPField
|
|
296
305
|
|
|
297
306
|
|
|
298
307
|
__all__: list[str] = [
|
|
@@ -304,8 +313,13 @@ __all__: list[str] = [
|
|
|
304
313
|
"CPF_CNPJ_PATTERN",
|
|
305
314
|
"CPF_PATTERN",
|
|
306
315
|
"PHONE_BR_PATTERN",
|
|
316
|
+
"CEPField",
|
|
317
|
+
"CNPJField",
|
|
318
|
+
"CPFField",
|
|
307
319
|
"CPFOrCNPJ",
|
|
320
|
+
"CPFOrCNPJField",
|
|
308
321
|
"PhoneBR",
|
|
322
|
+
"PhoneBRField",
|
|
309
323
|
"is_valid_cep",
|
|
310
324
|
"is_valid_cnpj",
|
|
311
325
|
"is_valid_cpf",
|
|
@@ -7,8 +7,13 @@ from tempest_fastapi_sdk.utils import (
|
|
|
7
7
|
CEP,
|
|
8
8
|
CNPJ,
|
|
9
9
|
CPF,
|
|
10
|
+
CEPField,
|
|
11
|
+
CNPJField,
|
|
12
|
+
CPFField,
|
|
10
13
|
CPFOrCNPJ,
|
|
14
|
+
CPFOrCNPJField,
|
|
11
15
|
PhoneBR,
|
|
16
|
+
PhoneBRField,
|
|
12
17
|
is_valid_cep,
|
|
13
18
|
is_valid_cnpj,
|
|
14
19
|
is_valid_cpf,
|
|
@@ -165,19 +170,23 @@ class TestNormalize:
|
|
|
165
170
|
|
|
166
171
|
|
|
167
172
|
class CPFSchema(BaseModel):
|
|
168
|
-
document:
|
|
173
|
+
document: CPFField
|
|
169
174
|
|
|
170
175
|
|
|
171
176
|
class CNPJSchema(BaseModel):
|
|
172
|
-
document:
|
|
177
|
+
document: CNPJField
|
|
173
178
|
|
|
174
179
|
|
|
175
180
|
class CPFOrCNPJSchema(BaseModel):
|
|
176
|
-
document:
|
|
181
|
+
document: CPFOrCNPJField
|
|
177
182
|
|
|
178
183
|
|
|
179
184
|
class PhoneSchema(BaseModel):
|
|
180
|
-
phone:
|
|
185
|
+
phone: PhoneBRField
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class CEPSchema(BaseModel):
|
|
189
|
+
cep: CEPField
|
|
181
190
|
|
|
182
191
|
|
|
183
192
|
class TestPydanticTypes:
|
|
@@ -201,6 +210,19 @@ class TestPydanticTypes:
|
|
|
201
210
|
assert CPFOrCNPJSchema(document=VALID_CPF_MASKED).document == VALID_CPF
|
|
202
211
|
assert CPFOrCNPJSchema(document=VALID_CNPJ_MASKED).document == VALID_CNPJ
|
|
203
212
|
|
|
213
|
+
def test_cep_type_normalizes(self) -> None:
|
|
214
|
+
assert CEPSchema(cep="01310-100").cep == "01310100"
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
class TestDeprecatedAliases:
|
|
218
|
+
def test_old_names_alias_the_field_types(self) -> None:
|
|
219
|
+
"""Pre-0.76 names still resolve to the same ``*Field`` types."""
|
|
220
|
+
assert CPF is CPFField
|
|
221
|
+
assert CNPJ is CNPJField
|
|
222
|
+
assert CPFOrCNPJ is CPFOrCNPJField
|
|
223
|
+
assert PhoneBR is PhoneBRField
|
|
224
|
+
assert CEP is CEPField
|
|
225
|
+
|
|
204
226
|
def test_phone_type_normalizes(self) -> None:
|
|
205
227
|
result = PhoneSchema(phone="(11) 98888-7777")
|
|
206
228
|
assert result.phone == "11988887777"
|
|
File without changes
|
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/.github/workflows/release-pypi.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/api.en.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/domain.en.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/domain.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/flows.en.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/flows.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/index.en.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.75.0 → tempest_fastapi_sdk-0.76.0}/docs/learning/marketplace/index.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|