tempest-fastapi-sdk 0.77.0__tar.gz → 0.78.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.77.0 → tempest_fastapi_sdk-0.78.0}/CHANGELOG.md +14 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/PKG-INFO +5 -3
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/README.md +4 -2
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/architecture.en.md +2 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/architecture.md +2 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/pyproject.toml +1 -1
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/__init__.py +1 -1
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/controllers/base.py +13 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/services/base.py +34 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/controllers/test_base.py +10 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/services/test_base.py +35 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/uv.lock +1 -1
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/.github/workflows/ci.yml +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/.github/workflows/docs.yml +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/.github/workflows/release-pypi.yml +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/.gitignore +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/.python-version +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/CLAUDE.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/Makefile +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/changelog.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/changelog.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/contributing.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/contributing.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/index.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/index.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/installation.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/installation.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/index.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/index.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/api.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/api.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/business-rules.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/business-rules.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/domain.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/domain.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/flows.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/flows.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/index.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/index.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/migration.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/migration.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/admin.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/admin.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/audit-trail.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/audit-trail.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/auth-flow.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/auth-flow.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/br-helpers.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/br-helpers.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/cache.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/cache.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/cli.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/cli.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/database.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/database.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/deploy-safety.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/deploy-safety.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/downloads.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/downloads.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/email.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/email.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/feature-flags.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/feature-flags.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/fields.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/fields.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/http-client.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/http-client.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/http.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/http.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/idempotency.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/idempotency.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/index.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/index.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/logging.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/logging.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/metrics.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/metrics.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/mfa.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/mfa.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/multi-tenant.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/multi-tenant.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/observability.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/observability.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/offline-sync.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/offline-sync.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/outbox.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/outbox.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/queue-tasks.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/queue-tasks.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/realtime.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/realtime.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/refresh-tokens.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/refresh-tokens.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/security.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/security.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/sessions.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/sessions.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/storage.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/storage.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/stored-files.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/stored-files.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/testing.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/testing.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/typing.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/typing.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/uploads.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/uploads.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/utilities.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/utilities.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/webpush.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/webpush.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/websocket.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/recipes/websocket.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/reference.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/reference.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/roadmap.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/roadmap.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/tutorial.en.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/tutorial.md +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/mkdocs.yml +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/mkdocs_hooks/llmstxt.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/scripts/extract_recipe.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/auth.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/config.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/discovery.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/forms.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/router.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/session.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/site.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/static/admin.css +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/base.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/dashboard.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/detail.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/form.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/list.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/login.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/logs.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/templates/mfa.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/admin/theme.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/cookies.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/dependencies/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/dependencies/auth.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/handlers.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/body_size.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/cors.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/csrf.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/graceful.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/idempotency.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/rate_limit.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/middlewares/request_id.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/oauth.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/routers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/routers/health.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/routers/logs.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/routers/metrics.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/routers/tool_spec.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/server.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/static.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/tracing.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/api/webhooks.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/guards.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/locale.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/page_renderer.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/router.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/schemas.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/service.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/en-US/activation.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_error.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_success.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_error.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_form.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_success.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_error.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_success.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_error.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_form.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_success.html +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cache/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cache/decorator.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cache/invalidation.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cache/redis_manager.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/Dockerfile.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/README.md.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/dockerignore.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/env.example.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/gitignore.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/main.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/pyproject.toml.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/api/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/api/app.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/auth.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/resources.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/api/routers/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/controllers/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/core/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/core/exceptions.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/core/settings.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/db/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/user.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/db/repositories/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/schemas/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/server.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/services/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/src/utils/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/tests/__init__.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/_templates/tests/test_smoke.py.tmpl +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/config.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/db.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/docker_compose.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/generate.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/lint.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/main.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/new.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/secrets.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/src_layers.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/cli/user.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/controllers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/core/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/core/context.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/core/enums.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/core/logging.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/core/typed.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/_alembic_templates/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/_alembic_templates/env.py.template +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/alembic_hooks.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/audit.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/backup.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/connection.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/migrations.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/mixins.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/model.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/outbox.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/repository.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/slow_query.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/tenant.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/user_model.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/user_recovery_code_model.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/user_refresh_token_model.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/db/user_token_model.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/base.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/conflict.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/forbidden.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/i18n.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/jwt.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/not_found.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/too_many_requests.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/unauthorized.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/upload.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/exceptions/validation.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/flags/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/flags/backends.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/flags/dependencies.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/flags/service.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/py.typed +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/queue/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/queue/manager.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/schemas/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/schemas/base.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/schemas/link_headers.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/schemas/logs.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/schemas/pagination.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/schemas/response.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/services/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/services/file_mixin.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sessions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sessions/dependencies.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sessions/middleware.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sessions/router.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sessions/schemas.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sessions/service.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sessions/store.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/settings/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/settings/base.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/settings/mixins.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sse/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/sse/event_stream.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/storage/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/storage/minio_client.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/tasks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/tasks/manager.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/tasks/scheduler.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/testing/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/testing/database.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/client_ip.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/data/br_locations.json +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/datetime.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/dict.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/download.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/email.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/fields.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/http_client.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/jwt.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/locations.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/log.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/metrics.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/opaque_token.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/password.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/regex.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/storage_backends.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/throttle.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/totp.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/utils/upload.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/webpush/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/webpush/dispatcher.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/webpush/schemas.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/websockets/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/websockets/hub.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/websockets/router.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/websockets/schemas.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_auth.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_discovery.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_forms.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_logs_nav.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_mfa.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_router.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_site.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_theme.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/admin/test_user_model.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_body_size.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_cookies.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_cors.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_csrf.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_dependencies_auth.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_graceful.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_handlers.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_health_router.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_idempotency.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_jwt_dependency.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_logs_router.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_oauth.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_prometheus.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_rate_limit.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_rate_limit_extras.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_request_id_middleware.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_role_dependency.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_server.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_static.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_tool_spec.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_tracing.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_webhooks.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/api/test_webhooks_rsa.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/auth/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/auth/test_guards.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/auth/test_locale.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/auth/test_mfa.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/auth/test_refresh.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/auth/test_refresh_db.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/auth/test_service.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cache/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cache/test_decorator.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cache/test_invalidation.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cache/test_redis_manager.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_config.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_db.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_db_seed.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_docker_compose.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_generate.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_lint_strictness.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_main.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_secrets.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/cli/test_user.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/conftest.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/controllers/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/core/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/core/test_context.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/core/test_enums.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/core/test_logging.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/core/test_typed.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_alembic_hooks.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_audit.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_backup.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_bulk_ops.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_connection.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_migrations.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_mixins.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_model.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_outbox.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_repository.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_safe_upgrade.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_slow_query.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/db/test_tenant.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/exceptions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/exceptions/test_exceptions.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/exceptions/test_i18n.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/flags/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/flags/test_flags.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/queue/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/queue/test_manager.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/schemas/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/schemas/test_base.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/schemas/test_cursor_pagination.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/schemas/test_link_headers.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/schemas/test_pagination.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/schemas/test_response.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/services/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/services/test_file_mixin.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/sessions/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/sessions/test_sessions.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/settings/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/settings/test_base.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/settings/test_mixins.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/sse/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/sse/test_event_stream.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/storage/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/storage/test_minio_client.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/tasks/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/tasks/test_manager.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/tasks/test_scheduler.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/testing/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/testing/test_database.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_client_ip.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_datetime.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_dict.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_download.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_email.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_fields.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_http_client.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_jwt.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_lazy_extras.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_locations.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_log.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_metrics.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_opaque_token.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_password.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_regex.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_storage_backends.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_throttle.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/utils/test_upload.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/webpush/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/webpush/test_dispatcher.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/webpush/test_schemas.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/websockets/__init__.py +0 -0
- {tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tests/websockets/test_hub_and_router.py +0 -0
|
@@ -5,6 +5,20 @@ 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.78.0] — 2026-06-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`BaseService.update` (and `BaseController.update`).** The service
|
|
13
|
+
skeleton now ships a generic update method: fetch by primary key, copy
|
|
14
|
+
the fields present in the payload (`data.to_dict()`, which drops unset
|
|
15
|
+
and ``None`` values) onto the instance, persist via
|
|
16
|
+
``repository.update`` and return the mapped response. Because unset
|
|
17
|
+
fields are skipped, the same method serves full (PUT) and partial
|
|
18
|
+
(PATCH) updates. ``BaseController.update`` forwards to it, matching the
|
|
19
|
+
existing pass-through layer. Override either when an update needs
|
|
20
|
+
orchestration.
|
|
21
|
+
|
|
8
22
|
## [0.77.0] — 2026-06-27
|
|
9
23
|
|
|
10
24
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tempest-fastapi-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.78.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
|
|
@@ -714,7 +714,7 @@ The highlighted block (under the divider comment) is what you typically add per
|
|
|
714
714
|
|
|
715
715
|
The service is where business rules live. It calls one or more repositories and never touches HTTP or SQLAlchemy types directly.
|
|
716
716
|
|
|
717
|
-
Inherit from `BaseService[RepositoryT, ResponseT]`. Doing so gives you `get_by_id`, `get_or_none`, `list`, `paginate`, `count`, `exists` and `delete` for free — every one is already wired to `repository.map_to_response` (sync or async). Override only the methods that need domain logic; add new ones for use cases the base doesn't cover (signup, password reset, etc.):
|
|
717
|
+
Inherit from `BaseService[RepositoryT, ResponseT]`. Doing so gives you `get_by_id`, `get_or_none`, `list`, `paginate`, `count`, `exists`, `update` and `delete` for free — every one is already wired to `repository.map_to_response` (sync or async). Override only the methods that need domain logic; add new ones for use cases the base doesn't cover (signup, password reset, etc.):
|
|
718
718
|
|
|
719
719
|
```python
|
|
720
720
|
# src/services/user.py
|
|
@@ -811,7 +811,7 @@ class UserService(BaseService[UserRepository, UserResponseSchema]):
|
|
|
811
811
|
|
|
812
812
|
Even when there's no orchestration to do, `controllers/` exists as a **thin pass-through** so the import graph stays uniform across services. The day a use case needs to coordinate two services (or fan out to a queue), the controller is already there.
|
|
813
813
|
|
|
814
|
-
Inherit from `BaseController[ServiceT, ResponseT]`. The base forwards `get_by_id`, `list`, `paginate`, `count` and `delete` to the service for you — you only declare methods that add cross-service coordination or that don't exist on the service (custom use cases like `signup`):
|
|
814
|
+
Inherit from `BaseController[ServiceT, ResponseT]`. The base forwards `get_by_id`, `list`, `paginate`, `count`, `update` and `delete` to the service for you — you only declare methods that add cross-service coordination or that don't exist on the service (custom use cases like `signup`):
|
|
815
815
|
|
|
816
816
|
```python
|
|
817
817
|
# src/controllers/user.py
|
|
@@ -2136,6 +2136,7 @@ What you inherit by subclassing `BaseService[RepositoryT, ResponseT]`:
|
|
|
2136
2136
|
| `paginate(filters=None, order_by=None, page=1, page_size=20, ascending=True)` | `dict` with mapped `items` + `total`/`page`/`size`/`pages`. | Offset pagination via `repository.paginate`. |
|
|
2137
2137
|
| `count(filters=None)` | `int` | Pass-through to `repository.count`. |
|
|
2138
2138
|
| `exists(filters)` | `bool` | Pass-through to `repository.exists`. |
|
|
2139
|
+
| `update(id, data)` | `ResponseT` | Fetch by id, copy the fields present in `data` (a `BaseSchema`) onto the row, persist, map. `to_dict()` drops unset/`None`, so it serves PUT and PATCH alike. |
|
|
2139
2140
|
| `delete(id)` | `None` | Hard delete via `repository.delete`. |
|
|
2140
2141
|
|
|
2141
2142
|
`map_to_response` is `await`-ed when it returns a coroutine, so async mappers work transparently — no method override needed.
|
|
@@ -2148,6 +2149,7 @@ What you inherit by subclassing `BaseController[ServiceT, ResponseT]`:
|
|
|
2148
2149
|
| `list(filters, order_by, ascending)` | `service.list` | Same. |
|
|
2149
2150
|
| `paginate(filters, order_by, page, page_size, ascending)` | `service.paginate` | Same. |
|
|
2150
2151
|
| `count(filters)` | `service.count` | Same. |
|
|
2152
|
+
| `update(id, data)` | `service.update` | Same. |
|
|
2151
2153
|
| `delete(id)` | `service.delete` | Same. |
|
|
2152
2154
|
|
|
2153
2155
|
When a use case needs domain rules, override the inherited method in the service. When a use case needs to coordinate more than one service, override the inherited method (or add a new one) in the controller. The router never grows — it only depends on the controller.
|
|
@@ -611,7 +611,7 @@ The highlighted block (under the divider comment) is what you typically add per
|
|
|
611
611
|
|
|
612
612
|
The service is where business rules live. It calls one or more repositories and never touches HTTP or SQLAlchemy types directly.
|
|
613
613
|
|
|
614
|
-
Inherit from `BaseService[RepositoryT, ResponseT]`. Doing so gives you `get_by_id`, `get_or_none`, `list`, `paginate`, `count`, `exists` and `delete` for free — every one is already wired to `repository.map_to_response` (sync or async). Override only the methods that need domain logic; add new ones for use cases the base doesn't cover (signup, password reset, etc.):
|
|
614
|
+
Inherit from `BaseService[RepositoryT, ResponseT]`. Doing so gives you `get_by_id`, `get_or_none`, `list`, `paginate`, `count`, `exists`, `update` and `delete` for free — every one is already wired to `repository.map_to_response` (sync or async). Override only the methods that need domain logic; add new ones for use cases the base doesn't cover (signup, password reset, etc.):
|
|
615
615
|
|
|
616
616
|
```python
|
|
617
617
|
# src/services/user.py
|
|
@@ -708,7 +708,7 @@ class UserService(BaseService[UserRepository, UserResponseSchema]):
|
|
|
708
708
|
|
|
709
709
|
Even when there's no orchestration to do, `controllers/` exists as a **thin pass-through** so the import graph stays uniform across services. The day a use case needs to coordinate two services (or fan out to a queue), the controller is already there.
|
|
710
710
|
|
|
711
|
-
Inherit from `BaseController[ServiceT, ResponseT]`. The base forwards `get_by_id`, `list`, `paginate`, `count` and `delete` to the service for you — you only declare methods that add cross-service coordination or that don't exist on the service (custom use cases like `signup`):
|
|
711
|
+
Inherit from `BaseController[ServiceT, ResponseT]`. The base forwards `get_by_id`, `list`, `paginate`, `count`, `update` and `delete` to the service for you — you only declare methods that add cross-service coordination or that don't exist on the service (custom use cases like `signup`):
|
|
712
712
|
|
|
713
713
|
```python
|
|
714
714
|
# src/controllers/user.py
|
|
@@ -2033,6 +2033,7 @@ What you inherit by subclassing `BaseService[RepositoryT, ResponseT]`:
|
|
|
2033
2033
|
| `paginate(filters=None, order_by=None, page=1, page_size=20, ascending=True)` | `dict` with mapped `items` + `total`/`page`/`size`/`pages`. | Offset pagination via `repository.paginate`. |
|
|
2034
2034
|
| `count(filters=None)` | `int` | Pass-through to `repository.count`. |
|
|
2035
2035
|
| `exists(filters)` | `bool` | Pass-through to `repository.exists`. |
|
|
2036
|
+
| `update(id, data)` | `ResponseT` | Fetch by id, copy the fields present in `data` (a `BaseSchema`) onto the row, persist, map. `to_dict()` drops unset/`None`, so it serves PUT and PATCH alike. |
|
|
2036
2037
|
| `delete(id)` | `None` | Hard delete via `repository.delete`. |
|
|
2037
2038
|
|
|
2038
2039
|
`map_to_response` is `await`-ed when it returns a coroutine, so async mappers work transparently — no method override needed.
|
|
@@ -2045,6 +2046,7 @@ What you inherit by subclassing `BaseController[ServiceT, ResponseT]`:
|
|
|
2045
2046
|
| `list(filters, order_by, ascending)` | `service.list` | Same. |
|
|
2046
2047
|
| `paginate(filters, order_by, page, page_size, ascending)` | `service.paginate` | Same. |
|
|
2047
2048
|
| `count(filters)` | `service.count` | Same. |
|
|
2049
|
+
| `update(id, data)` | `service.update` | Same. |
|
|
2048
2050
|
| `delete(id)` | `service.delete` | Same. |
|
|
2049
2051
|
|
|
2050
2052
|
When a use case needs domain rules, override the inherited method in the service. When a use case needs to coordinate more than one service, override the inherited method (or add a new one) in the controller. The router never grows — it only depends on the controller.
|
|
@@ -147,6 +147,7 @@ What you inherit by subclassing `BaseService[RepositoryT, ResponseT]`:
|
|
|
147
147
|
| `paginate(filters=None, order_by=None, page=1, page_size=20, ascending=True)` | `dict` with mapped `items` + `total`/`page`/`page_size`/`pages`. | Offset pagination via `repository.paginate`. |
|
|
148
148
|
| `count(filters=None)` | `int` | Pass-through to `repository.count`. |
|
|
149
149
|
| `exists(filters)` | `bool` | Pass-through to `repository.exists`. |
|
|
150
|
+
| `update(id, data)` | `ResponseT` | Fetch by id, copy the fields present in `data` (a `BaseSchema`) onto the row, persist, map. `to_dict()` drops unset/`None`, so it serves PUT and PATCH. |
|
|
150
151
|
| `delete(id)` | `None` | Hard delete via `repository.delete`. |
|
|
151
152
|
|
|
152
153
|
`map_to_response` is `await`-ed when it returns a coroutine, so async mappers work transparently — no method override needed.
|
|
@@ -159,6 +160,7 @@ What you inherit by subclassing `BaseController[ServiceT, ResponseT]`:
|
|
|
159
160
|
| `list(filters, order_by, ascending)` | `service.list` | Same. |
|
|
160
161
|
| `paginate(filters, order_by, page, page_size, ascending)` | `service.paginate` | Same. |
|
|
161
162
|
| `count(filters)` | `service.count` | Same. |
|
|
163
|
+
| `update(id, data)` | `service.update` | Same. |
|
|
162
164
|
| `delete(id)` | `service.delete` | Same. |
|
|
163
165
|
|
|
164
166
|
When a use case needs domain rules, override the inherited method in the service. When a use case needs to coordinate more than one service, override the inherited method (or add a new one) in the controller. The router never grows — it only depends on the controller.
|
|
@@ -147,6 +147,7 @@ O que você herda ao subclassear `BaseService[RepositoryT, ResponseT]`:
|
|
|
147
147
|
| `paginate(filters=None, order_by=None, page=1, page_size=20, ascending=True)` | `dict` com `items` mapeados + `total`/`page`/`page_size`/`pages`. | Paginação por offset via `repository.paginate`. |
|
|
148
148
|
| `count(filters=None)` | `int` | Pass-through para `repository.count`. |
|
|
149
149
|
| `exists(filters)` | `bool` | Pass-through para `repository.exists`. |
|
|
150
|
+
| `update(id, data)` | `ResponseT` | Busca por id, copia os campos presentes em `data` (um `BaseSchema`) na instância, persiste e mapeia. `to_dict()` descarta unset/`None`, então serve PUT e PATCH. |
|
|
150
151
|
| `delete(id)` | `None` | Hard delete via `repository.delete`. |
|
|
151
152
|
|
|
152
153
|
`map_to_response` é aguardado com `await` quando retorna uma coroutine, então mappers async funcionam de forma transparente — sem precisar sobrescrever o método.
|
|
@@ -159,6 +160,7 @@ O que você herda ao subclassear `BaseController[ServiceT, ResponseT]`:
|
|
|
159
160
|
| `list(filters, order_by, ascending)` | `service.list` | Igual. |
|
|
160
161
|
| `paginate(filters, order_by, page, page_size, ascending)` | `service.paginate` | Igual. |
|
|
161
162
|
| `count(filters)` | `service.count` | Igual. |
|
|
163
|
+
| `update(id, data)` | `service.update` | Igual. |
|
|
162
164
|
| `delete(id)` | `service.delete` | Igual. |
|
|
163
165
|
|
|
164
166
|
Quando um caso de uso precisa de regras de domínio, sobrescreva o método herdado no service. Quando um caso de uso precisa coordenar mais de um service, sobrescreva o método herdado (ou adicione um novo) no controller. O router nunca cresce — ele só depende do controller.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tempest-fastapi-sdk"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.78.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"
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/controllers/base.py
RENAMED
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import Any, Generic, TypeVar, cast
|
|
6
6
|
from uuid import UUID
|
|
7
7
|
|
|
8
|
+
from tempest_fastapi_sdk.schemas.base import BaseSchema
|
|
8
9
|
from tempest_fastapi_sdk.services.base import BaseService
|
|
9
10
|
|
|
10
11
|
ServiceT = TypeVar("ServiceT", bound=BaseService[Any, Any])
|
|
@@ -112,6 +113,18 @@ class BaseController(Generic[ServiceT, ResponseT]):
|
|
|
112
113
|
"""
|
|
113
114
|
return await self.service.count(filters)
|
|
114
115
|
|
|
116
|
+
async def update(self, id: UUID, data: BaseSchema) -> ResponseT:
|
|
117
|
+
"""Pass-through to :meth:`BaseService.update`.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
id (UUID): The primary key of the record to update.
|
|
121
|
+
data (BaseSchema): The update payload (unset fields skipped).
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
ResponseT: The mapped, updated response.
|
|
125
|
+
"""
|
|
126
|
+
return cast("ResponseT", await self.service.update(id, data))
|
|
127
|
+
|
|
115
128
|
async def delete(self, id: UUID) -> None:
|
|
116
129
|
"""Pass-through to :meth:`BaseService.delete`.
|
|
117
130
|
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/tempest_fastapi_sdk/services/base.py
RENAMED
|
@@ -7,6 +7,7 @@ from typing import Any, Generic, TypeVar
|
|
|
7
7
|
from uuid import UUID
|
|
8
8
|
|
|
9
9
|
from tempest_fastapi_sdk.db.repository import BaseRepository
|
|
10
|
+
from tempest_fastapi_sdk.schemas.base import BaseSchema
|
|
10
11
|
|
|
11
12
|
RepositoryT = TypeVar("RepositoryT", bound=BaseRepository[Any])
|
|
12
13
|
ResponseT = TypeVar("ResponseT")
|
|
@@ -168,6 +169,39 @@ class BaseService(Generic[RepositoryT, ResponseT]):
|
|
|
168
169
|
"""
|
|
169
170
|
return await self.repository.exists(filters)
|
|
170
171
|
|
|
172
|
+
async def update(self, id: UUID, data: BaseSchema) -> ResponseT:
|
|
173
|
+
"""Apply a partial update to a record and map it to a response.
|
|
174
|
+
|
|
175
|
+
Fetches the row by primary key, copies the fields present in
|
|
176
|
+
``data`` onto the instance, persists, and returns the mapped
|
|
177
|
+
response. Because :meth:`BaseSchema.to_dict` drops unset and
|
|
178
|
+
``None`` fields, only the values the caller actually supplied are
|
|
179
|
+
applied — so the same method serves both full (PUT) and partial
|
|
180
|
+
(PATCH) updates.
|
|
181
|
+
|
|
182
|
+
Override this in a concrete service when an update needs
|
|
183
|
+
orchestration (cross-repository writes, domain rules, side
|
|
184
|
+
effects); leave it untouched for plain field copies.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
id (UUID): The primary key of the record to update.
|
|
188
|
+
data (BaseSchema): The update payload. Fields left unset (or
|
|
189
|
+
``None``) are not applied.
|
|
190
|
+
|
|
191
|
+
Returns:
|
|
192
|
+
ResponseT: The mapped, updated response.
|
|
193
|
+
|
|
194
|
+
Raises:
|
|
195
|
+
AppException: ``repository.not_found_exception`` when no
|
|
196
|
+
record with ``id`` exists.
|
|
197
|
+
ConflictException: On integrity violations while persisting.
|
|
198
|
+
"""
|
|
199
|
+
instance = await self.repository.get_by_id(id)
|
|
200
|
+
for field, value in data.to_dict().items():
|
|
201
|
+
setattr(instance, field, value)
|
|
202
|
+
updated = await self.repository.update(instance)
|
|
203
|
+
return await self._map_to_response(updated)
|
|
204
|
+
|
|
171
205
|
async def delete(self, id: UUID) -> None:
|
|
172
206
|
"""Delete a row by primary key.
|
|
173
207
|
|
|
@@ -12,6 +12,7 @@ from tempest_fastapi_sdk import (
|
|
|
12
12
|
BaseModel,
|
|
13
13
|
BaseRepository,
|
|
14
14
|
BaseResponseSchema,
|
|
15
|
+
BaseSchema,
|
|
15
16
|
BaseService,
|
|
16
17
|
NotFoundException,
|
|
17
18
|
)
|
|
@@ -27,6 +28,10 @@ class GadgetResponse(BaseResponseSchema):
|
|
|
27
28
|
name: str
|
|
28
29
|
|
|
29
30
|
|
|
31
|
+
class GadgetUpdate(BaseSchema):
|
|
32
|
+
name: str | None = None
|
|
33
|
+
|
|
34
|
+
|
|
30
35
|
class GadgetRepository(BaseRepository[Gadget]):
|
|
31
36
|
def __init__(self, session: AsyncSession) -> None:
|
|
32
37
|
super().__init__(session, model=Gadget)
|
|
@@ -81,6 +86,11 @@ class TestBaseController:
|
|
|
81
86
|
await controller.service.repository.add(Gadget(name="single"))
|
|
82
87
|
assert await controller.count() == 1
|
|
83
88
|
|
|
89
|
+
async def test_update_passes_through(self, controller: GadgetController) -> None:
|
|
90
|
+
created = await controller.service.repository.add(Gadget(name="before"))
|
|
91
|
+
result = await controller.update(created.id, GadgetUpdate(name="after"))
|
|
92
|
+
assert result.name == "after"
|
|
93
|
+
|
|
84
94
|
async def test_delete_passes_through(self, controller: GadgetController) -> None:
|
|
85
95
|
created = await controller.service.repository.add(Gadget(name="gone"))
|
|
86
96
|
await controller.delete(created.id)
|
|
@@ -12,6 +12,7 @@ from tempest_fastapi_sdk import (
|
|
|
12
12
|
BaseModel,
|
|
13
13
|
BaseRepository,
|
|
14
14
|
BaseResponseSchema,
|
|
15
|
+
BaseSchema,
|
|
15
16
|
BaseService,
|
|
16
17
|
NotFoundException,
|
|
17
18
|
)
|
|
@@ -21,10 +22,17 @@ class Widget(BaseModel):
|
|
|
21
22
|
__tablename__ = "widget_for_service_test"
|
|
22
23
|
|
|
23
24
|
name: Mapped[str] = mapped_column(String(64), nullable=False, unique=True)
|
|
25
|
+
description: Mapped[str | None] = mapped_column(String(128), nullable=True)
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
class WidgetResponse(BaseResponseSchema):
|
|
27
29
|
name: str
|
|
30
|
+
description: str | None = None
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class WidgetUpdate(BaseSchema):
|
|
34
|
+
name: str | None = None
|
|
35
|
+
description: str | None = None
|
|
28
36
|
|
|
29
37
|
|
|
30
38
|
class WidgetRepository(BaseRepository[Widget]):
|
|
@@ -38,6 +46,7 @@ class WidgetRepository(BaseRepository[Widget]):
|
|
|
38
46
|
created_at=instance.created_at,
|
|
39
47
|
updated_at=instance.updated_at,
|
|
40
48
|
name=instance.name,
|
|
49
|
+
description=instance.description,
|
|
41
50
|
)
|
|
42
51
|
|
|
43
52
|
|
|
@@ -98,6 +107,31 @@ class TestBaseService:
|
|
|
98
107
|
assert await service.exists({"name": "here"})
|
|
99
108
|
assert not await service.exists({"name": "absent"})
|
|
100
109
|
|
|
110
|
+
async def test_update_applies_fields(self, service: WidgetService) -> None:
|
|
111
|
+
created = await service.repository.add(
|
|
112
|
+
Widget(name="old", description="d0"),
|
|
113
|
+
)
|
|
114
|
+
result = await service.update(
|
|
115
|
+
created.id, WidgetUpdate(name="new", description="d1")
|
|
116
|
+
)
|
|
117
|
+
assert isinstance(result, WidgetResponse)
|
|
118
|
+
assert (result.name, result.description) == ("new", "d1")
|
|
119
|
+
|
|
120
|
+
async def test_update_is_partial(self, service: WidgetService) -> None:
|
|
121
|
+
"""Unset fields are left untouched (PATCH semantics)."""
|
|
122
|
+
created = await service.repository.add(
|
|
123
|
+
Widget(name="keep", description="keep-me"),
|
|
124
|
+
)
|
|
125
|
+
result = await service.update(created.id, WidgetUpdate(name="renamed"))
|
|
126
|
+
assert result.name == "renamed"
|
|
127
|
+
assert result.description == "keep-me"
|
|
128
|
+
|
|
129
|
+
async def test_update_missing_raises_not_found(
|
|
130
|
+
self, service: WidgetService
|
|
131
|
+
) -> None:
|
|
132
|
+
with pytest.raises(NotFoundException):
|
|
133
|
+
await service.update(uuid4(), WidgetUpdate(name="x"))
|
|
134
|
+
|
|
101
135
|
async def test_delete(self, service: WidgetService) -> None:
|
|
102
136
|
created = await service.repository.add(Widget(name="bye"))
|
|
103
137
|
await service.delete(created.id)
|
|
@@ -116,6 +150,7 @@ class AsyncWidgetRepository(BaseRepository[Widget]):
|
|
|
116
150
|
created_at=instance.created_at,
|
|
117
151
|
updated_at=instance.updated_at,
|
|
118
152
|
name=instance.name,
|
|
153
|
+
description=instance.description,
|
|
119
154
|
)
|
|
120
155
|
|
|
121
156
|
|
|
File without changes
|
|
File without changes
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.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
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/api.en.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/domain.en.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/domain.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/flows.en.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/flows.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.0}/docs/learning/marketplace/index.en.md
RENAMED
|
File without changes
|
{tempest_fastapi_sdk-0.77.0 → tempest_fastapi_sdk-0.78.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
|
|
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
|
|
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
|
|
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
|