tempest-fastapi-sdk 0.47.0__tar.gz → 0.48.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.
Files changed (392) hide show
  1. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/CHANGELOG.md +16 -0
  2. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/PKG-INFO +3 -3
  3. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/README.md +2 -2
  4. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/cli.en.md +16 -1
  5. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/cli.md +16 -1
  6. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/pyproject.toml +1 -1
  7. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/__init__.py +1 -1
  8. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/env.example.tmpl +5 -0
  9. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/api/app.py.tmpl +5 -4
  10. tempest_fastapi_sdk-0.48.0/tempest_fastapi_sdk/cli/_templates/src/core/settings.py.tmpl +61 -0
  11. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/uv.lock +1 -1
  12. tempest_fastapi_sdk-0.47.0/tempest_fastapi_sdk/cli/_templates/src/core/settings.py.tmpl +0 -39
  13. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/.github/workflows/ci.yml +0 -0
  14. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/.github/workflows/docs.yml +0 -0
  15. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/.github/workflows/release-pypi.yml +0 -0
  16. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/.gitignore +0 -0
  17. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/.python-version +0 -0
  18. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/CLAUDE.md +0 -0
  19. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/Makefile +0 -0
  20. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/architecture.en.md +0 -0
  21. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/architecture.md +0 -0
  22. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/changelog.en.md +0 -0
  23. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/changelog.md +0 -0
  24. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/contributing.en.md +0 -0
  25. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/contributing.md +0 -0
  26. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/index.en.md +0 -0
  27. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/index.md +0 -0
  28. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/installation.en.md +0 -0
  29. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/installation.md +0 -0
  30. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/index.en.md +0 -0
  31. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/index.md +0 -0
  32. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/api.en.md +0 -0
  33. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/api.md +0 -0
  34. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/business-rules.en.md +0 -0
  35. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/business-rules.md +0 -0
  36. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/domain.en.md +0 -0
  37. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/domain.md +0 -0
  38. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/flows.en.md +0 -0
  39. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/flows.md +0 -0
  40. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/index.en.md +0 -0
  41. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/learning/marketplace/index.md +0 -0
  42. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/migration.en.md +0 -0
  43. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/migration.md +0 -0
  44. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/admin.en.md +0 -0
  45. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/admin.md +0 -0
  46. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/auth-flow.en.md +0 -0
  47. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/auth-flow.md +0 -0
  48. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/br-helpers.en.md +0 -0
  49. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/br-helpers.md +0 -0
  50. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/cache.en.md +0 -0
  51. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/cache.md +0 -0
  52. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/database.en.md +0 -0
  53. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/database.md +0 -0
  54. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/deploy-safety.en.md +0 -0
  55. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/deploy-safety.md +0 -0
  56. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/downloads.en.md +0 -0
  57. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/downloads.md +0 -0
  58. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/email.en.md +0 -0
  59. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/email.md +0 -0
  60. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/http-client.en.md +0 -0
  61. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/http-client.md +0 -0
  62. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/http.en.md +0 -0
  63. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/http.md +0 -0
  64. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/idempotency.en.md +0 -0
  65. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/idempotency.md +0 -0
  66. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/index.en.md +0 -0
  67. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/index.md +0 -0
  68. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/logging.en.md +0 -0
  69. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/logging.md +0 -0
  70. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/metrics.en.md +0 -0
  71. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/metrics.md +0 -0
  72. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/mfa.en.md +0 -0
  73. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/mfa.md +0 -0
  74. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/multi-tenant.en.md +0 -0
  75. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/multi-tenant.md +0 -0
  76. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/observability.en.md +0 -0
  77. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/observability.md +0 -0
  78. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/outbox.en.md +0 -0
  79. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/outbox.md +0 -0
  80. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/queue-tasks.en.md +0 -0
  81. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/queue-tasks.md +0 -0
  82. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/realtime.en.md +0 -0
  83. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/realtime.md +0 -0
  84. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/security.en.md +0 -0
  85. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/security.md +0 -0
  86. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/sessions.en.md +0 -0
  87. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/sessions.md +0 -0
  88. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/storage.en.md +0 -0
  89. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/storage.md +0 -0
  90. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/testing.en.md +0 -0
  91. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/testing.md +0 -0
  92. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/uploads.en.md +0 -0
  93. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/uploads.md +0 -0
  94. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/utilities.en.md +0 -0
  95. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/utilities.md +0 -0
  96. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/webpush.en.md +0 -0
  97. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/webpush.md +0 -0
  98. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/websocket.en.md +0 -0
  99. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/recipes/websocket.md +0 -0
  100. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/reference.en.md +0 -0
  101. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/reference.md +0 -0
  102. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/roadmap.en.md +0 -0
  103. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/roadmap.md +0 -0
  104. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/tutorial.en.md +0 -0
  105. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/docs/tutorial.md +0 -0
  106. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/mkdocs.yml +0 -0
  107. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/scripts/extract_recipe.py +0 -0
  108. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/__init__.py +0 -0
  109. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/auth.py +0 -0
  110. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/config.py +0 -0
  111. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/forms.py +0 -0
  112. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/router.py +0 -0
  113. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/session.py +0 -0
  114. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/site.py +0 -0
  115. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/static/admin.css +0 -0
  116. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/base.html +0 -0
  117. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/dashboard.html +0 -0
  118. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/detail.html +0 -0
  119. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/form.html +0 -0
  120. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/list.html +0 -0
  121. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/login.html +0 -0
  122. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/logs.html +0 -0
  123. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/admin/templates/mfa.html +0 -0
  124. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/__init__.py +0 -0
  125. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/cookies.py +0 -0
  126. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/dependencies/__init__.py +0 -0
  127. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/dependencies/auth.py +0 -0
  128. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/handlers.py +0 -0
  129. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/__init__.py +0 -0
  130. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/body_size.py +0 -0
  131. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/cors.py +0 -0
  132. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/csrf.py +0 -0
  133. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/graceful.py +0 -0
  134. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/idempotency.py +0 -0
  135. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/rate_limit.py +0 -0
  136. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/middlewares/request_id.py +0 -0
  137. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/oauth.py +0 -0
  138. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/routers/__init__.py +0 -0
  139. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/routers/health.py +0 -0
  140. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/routers/logs.py +0 -0
  141. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/routers/metrics.py +0 -0
  142. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/routers/tool_spec.py +0 -0
  143. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/server.py +0 -0
  144. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/static.py +0 -0
  145. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/tracing.py +0 -0
  146. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/api/webhooks.py +0 -0
  147. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/__init__.py +0 -0
  148. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/page_renderer.py +0 -0
  149. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/router.py +0 -0
  150. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/schemas.py +0 -0
  151. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/service.py +0 -0
  152. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/templates/activation.html +0 -0
  153. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/templates/activation_error.html +0 -0
  154. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/templates/activation_success.html +0 -0
  155. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/templates/password_reset.html +0 -0
  156. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/templates/password_reset_error.html +0 -0
  157. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/templates/password_reset_form.html +0 -0
  158. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/auth/templates/password_reset_success.html +0 -0
  159. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cache/__init__.py +0 -0
  160. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cache/decorator.py +0 -0
  161. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cache/redis_manager.py +0 -0
  162. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/__init__.py +0 -0
  163. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/README.md.tmpl +0 -0
  164. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/gitignore.tmpl +0 -0
  165. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/main.py.tmpl +0 -0
  166. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/pyproject.toml.tmpl +0 -0
  167. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/__init__.py.tmpl +0 -0
  168. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/api/__init__.py.tmpl +0 -0
  169. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/__init__.py.tmpl +0 -0
  170. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/auth.py.tmpl +0 -0
  171. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/resources.py.tmpl +0 -0
  172. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/api/routers/__init__.py.tmpl +0 -0
  173. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/controllers/__init__.py.tmpl +0 -0
  174. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/core/__init__.py.tmpl +0 -0
  175. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/core/exceptions.py.tmpl +0 -0
  176. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/db/__init__.py.tmpl +0 -0
  177. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/__init__.py.tmpl +0 -0
  178. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/user.py.tmpl +0 -0
  179. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/db/repositories/__init__.py.tmpl +0 -0
  180. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/schemas/__init__.py.tmpl +0 -0
  181. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/server.py.tmpl +0 -0
  182. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/services/__init__.py.tmpl +0 -0
  183. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/src/utils/__init__.py.tmpl +0 -0
  184. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/tests/__init__.py.tmpl +0 -0
  185. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/_templates/tests/test_smoke.py.tmpl +0 -0
  186. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/db.py +0 -0
  187. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/docker_compose.py +0 -0
  188. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/generate.py +0 -0
  189. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/lint.py +0 -0
  190. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/main.py +0 -0
  191. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/new.py +0 -0
  192. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/secrets.py +0 -0
  193. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/src_layers.py +0 -0
  194. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/cli/user.py +0 -0
  195. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/controllers/__init__.py +0 -0
  196. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/controllers/base.py +0 -0
  197. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/core/__init__.py +0 -0
  198. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/core/context.py +0 -0
  199. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/core/enums.py +0 -0
  200. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/core/logging.py +0 -0
  201. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/__init__.py +0 -0
  202. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/_alembic_templates/__init__.py +0 -0
  203. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/_alembic_templates/env.py.template +0 -0
  204. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/alembic_hooks.py +0 -0
  205. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/connection.py +0 -0
  206. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/migrations.py +0 -0
  207. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/mixins.py +0 -0
  208. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/model.py +0 -0
  209. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/outbox.py +0 -0
  210. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/repository.py +0 -0
  211. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/slow_query.py +0 -0
  212. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/tenant.py +0 -0
  213. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/user_model.py +0 -0
  214. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/user_recovery_code_model.py +0 -0
  215. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/db/user_token_model.py +0 -0
  216. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/__init__.py +0 -0
  217. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/base.py +0 -0
  218. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/conflict.py +0 -0
  219. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/forbidden.py +0 -0
  220. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/jwt.py +0 -0
  221. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/not_found.py +0 -0
  222. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/too_many_requests.py +0 -0
  223. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/unauthorized.py +0 -0
  224. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/upload.py +0 -0
  225. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/exceptions/validation.py +0 -0
  226. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/py.typed +0 -0
  227. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/queue/__init__.py +0 -0
  228. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/queue/manager.py +0 -0
  229. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/schemas/__init__.py +0 -0
  230. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/schemas/base.py +0 -0
  231. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/schemas/link_headers.py +0 -0
  232. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/schemas/logs.py +0 -0
  233. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/schemas/pagination.py +0 -0
  234. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/schemas/response.py +0 -0
  235. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/services/__init__.py +0 -0
  236. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/services/base.py +0 -0
  237. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sessions/__init__.py +0 -0
  238. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sessions/dependencies.py +0 -0
  239. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sessions/middleware.py +0 -0
  240. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sessions/router.py +0 -0
  241. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sessions/schemas.py +0 -0
  242. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sessions/service.py +0 -0
  243. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sessions/store.py +0 -0
  244. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/settings/__init__.py +0 -0
  245. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/settings/base.py +0 -0
  246. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/settings/mixins.py +0 -0
  247. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sse/__init__.py +0 -0
  248. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/sse/event_stream.py +0 -0
  249. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/storage/__init__.py +0 -0
  250. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/storage/minio_client.py +0 -0
  251. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/tasks/__init__.py +0 -0
  252. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/tasks/manager.py +0 -0
  253. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/tasks/scheduler.py +0 -0
  254. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/testing/__init__.py +0 -0
  255. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/testing/database.py +0 -0
  256. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/__init__.py +0 -0
  257. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/client_ip.py +0 -0
  258. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/datetime.py +0 -0
  259. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/dict.py +0 -0
  260. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/download.py +0 -0
  261. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/email.py +0 -0
  262. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/http_client.py +0 -0
  263. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/jwt.py +0 -0
  264. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/log.py +0 -0
  265. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/metrics.py +0 -0
  266. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/opaque_token.py +0 -0
  267. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/password.py +0 -0
  268. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/regex.py +0 -0
  269. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/storage_backends.py +0 -0
  270. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/throttle.py +0 -0
  271. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/totp.py +0 -0
  272. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/utils/upload.py +0 -0
  273. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/webpush/__init__.py +0 -0
  274. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/webpush/dispatcher.py +0 -0
  275. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/webpush/schemas.py +0 -0
  276. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/websockets/__init__.py +0 -0
  277. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/websockets/hub.py +0 -0
  278. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/websockets/router.py +0 -0
  279. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tempest_fastapi_sdk/websockets/schemas.py +0 -0
  280. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/__init__.py +0 -0
  281. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/__init__.py +0 -0
  282. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/test_auth.py +0 -0
  283. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/test_forms.py +0 -0
  284. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/test_logs_nav.py +0 -0
  285. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/test_mfa.py +0 -0
  286. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/test_router.py +0 -0
  287. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/test_site.py +0 -0
  288. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/admin/test_user_model.py +0 -0
  289. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/__init__.py +0 -0
  290. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_body_size.py +0 -0
  291. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_cookies.py +0 -0
  292. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_cors.py +0 -0
  293. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_csrf.py +0 -0
  294. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_dependencies_auth.py +0 -0
  295. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_graceful.py +0 -0
  296. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_handlers.py +0 -0
  297. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_health_router.py +0 -0
  298. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_idempotency.py +0 -0
  299. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_jwt_dependency.py +0 -0
  300. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_logs_router.py +0 -0
  301. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_oauth.py +0 -0
  302. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_prometheus.py +0 -0
  303. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_rate_limit.py +0 -0
  304. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_request_id_middleware.py +0 -0
  305. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_role_dependency.py +0 -0
  306. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_server.py +0 -0
  307. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_static.py +0 -0
  308. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_tool_spec.py +0 -0
  309. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_tracing.py +0 -0
  310. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_webhooks.py +0 -0
  311. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/api/test_webhooks_rsa.py +0 -0
  312. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/auth/__init__.py +0 -0
  313. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/auth/test_mfa.py +0 -0
  314. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/auth/test_service.py +0 -0
  315. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cache/__init__.py +0 -0
  316. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cache/test_decorator.py +0 -0
  317. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cache/test_redis_manager.py +0 -0
  318. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/__init__.py +0 -0
  319. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/test_db.py +0 -0
  320. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/test_db_seed.py +0 -0
  321. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/test_docker_compose.py +0 -0
  322. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/test_generate.py +0 -0
  323. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/test_main.py +0 -0
  324. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/test_secrets.py +0 -0
  325. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/cli/test_user.py +0 -0
  326. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/conftest.py +0 -0
  327. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/controllers/__init__.py +0 -0
  328. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/controllers/test_base.py +0 -0
  329. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/core/__init__.py +0 -0
  330. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/core/test_context.py +0 -0
  331. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/core/test_enums.py +0 -0
  332. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/core/test_logging.py +0 -0
  333. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/__init__.py +0 -0
  334. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_alembic_hooks.py +0 -0
  335. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_bulk_ops.py +0 -0
  336. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_connection.py +0 -0
  337. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_migrations.py +0 -0
  338. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_mixins.py +0 -0
  339. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_model.py +0 -0
  340. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_outbox.py +0 -0
  341. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_repository.py +0 -0
  342. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_safe_upgrade.py +0 -0
  343. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_slow_query.py +0 -0
  344. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/db/test_tenant.py +0 -0
  345. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/exceptions/__init__.py +0 -0
  346. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/exceptions/test_exceptions.py +0 -0
  347. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/queue/__init__.py +0 -0
  348. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/queue/test_manager.py +0 -0
  349. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/schemas/__init__.py +0 -0
  350. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/schemas/test_base.py +0 -0
  351. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/schemas/test_cursor_pagination.py +0 -0
  352. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/schemas/test_link_headers.py +0 -0
  353. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/schemas/test_pagination.py +0 -0
  354. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/schemas/test_response.py +0 -0
  355. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/services/__init__.py +0 -0
  356. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/services/test_base.py +0 -0
  357. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/sessions/__init__.py +0 -0
  358. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/sessions/test_sessions.py +0 -0
  359. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/settings/__init__.py +0 -0
  360. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/settings/test_base.py +0 -0
  361. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/settings/test_mixins.py +0 -0
  362. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/sse/__init__.py +0 -0
  363. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/sse/test_event_stream.py +0 -0
  364. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/storage/__init__.py +0 -0
  365. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/storage/test_minio_client.py +0 -0
  366. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/tasks/__init__.py +0 -0
  367. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/tasks/test_manager.py +0 -0
  368. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/tasks/test_scheduler.py +0 -0
  369. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/testing/__init__.py +0 -0
  370. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/testing/test_database.py +0 -0
  371. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/__init__.py +0 -0
  372. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_client_ip.py +0 -0
  373. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_datetime.py +0 -0
  374. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_dict.py +0 -0
  375. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_download.py +0 -0
  376. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_email.py +0 -0
  377. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_http_client.py +0 -0
  378. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_jwt.py +0 -0
  379. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_lazy_extras.py +0 -0
  380. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_log.py +0 -0
  381. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_metrics.py +0 -0
  382. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_opaque_token.py +0 -0
  383. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_password.py +0 -0
  384. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_regex.py +0 -0
  385. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_storage_backends.py +0 -0
  386. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_throttle.py +0 -0
  387. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/utils/test_upload.py +0 -0
  388. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/webpush/__init__.py +0 -0
  389. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/webpush/test_dispatcher.py +0 -0
  390. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/webpush/test_schemas.py +0 -0
  391. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/websockets/__init__.py +0 -0
  392. {tempest_fastapi_sdk-0.47.0 → tempest_fastapi_sdk-0.48.0}/tests/websockets/test_hub_and_router.py +0 -0
@@ -5,6 +5,22 @@ 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.48.0] — 2026-06-11
9
+
10
+ ### Changed
11
+
12
+ - **Scaffolded services read their API `title` / `version` /
13
+ `description` from `.env`.** `tempest new` previously hardcoded
14
+ `FastAPI(title="<project>", version="0.1.0")` and the health-router
15
+ version in `src/api/app.py`. The scaffolded `Settings` now carries
16
+ `TITLE`, `DESCRIPTION` and `VERSION` fields (each with `title` /
17
+ `description` / `examples`), `app.py` reads them
18
+ (`FastAPI(title=settings.TITLE, version=settings.VERSION, ...)`,
19
+ `make_health_router(version=settings.VERSION)`,
20
+ `AdminSite(title=f"{settings.TITLE} admin")`), and `.env.example`
21
+ ships a documented `TITLE` / `VERSION` / `DESCRIPTION` block — so the
22
+ OpenAPI docs and admin header are configurable without editing code.
23
+
8
24
  ## [0.47.0] — 2026-06-11
9
25
 
10
26
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tempest-fastapi-sdk
3
- Version: 0.47.0
3
+ Version: 0.48.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
@@ -3345,7 +3345,7 @@ The skeleton matches the layered architecture documented in this README:
3345
3345
  my_service/
3346
3346
  ├── main.py # one-liner → src.server.run()
3347
3347
  ├── pyproject.toml # pins tempest-fastapi-sdk + ruff/mypy/pytest
3348
- ├── .env.example # HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
3348
+ ├── .env.example # TITLE/VERSION/HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
3349
3349
  ├── .gitignore
3350
3350
  ├── README.md
3351
3351
  ├── src/
@@ -3366,7 +3366,7 @@ my_service/
3366
3366
  └── test_smoke.py # asserts /api/ and /health/liveness boot
3367
3367
  ```
3368
3368
 
3369
- The generated `pyproject.toml` pins the current SDK version (`tempest-fastapi-sdk[auth]>=<version>` by default — change with `--extras`). The scaffolded `.env.example` uses the v0.8.0 settings naming (`SERVER_HOST`/`SERVER_PORT`/`SERVER_DEBUG`/`SERVER_RELOAD`/`LOG_LEVEL`/…), and `src/server.py` delegates to `tempest_fastapi_sdk.run_server` so uvicorn is imported lazily and tests can import the app without it. Validation rules: the project name must match `^[a-z][a-z0-9_]*$` and cannot collide with a Python keyword, so `tempest new Bad-Name` and `tempest new class` exit with code 2 before any file is written.
3369
+ The generated `pyproject.toml` pins the current SDK version (`tempest-fastapi-sdk[auth]>=<version>` by default — change with `--extras`). The scaffolded `.env.example` uses the v0.8.0 settings naming (`SERVER_HOST`/`SERVER_PORT`/`SERVER_DEBUG`/`SERVER_RELOAD`/`LOG_LEVEL`/…), and `src/server.py` delegates to `tempest_fastapi_sdk.run_server` so uvicorn is imported lazily and tests can import the app without it. The API `title`, `version` and `description` shown in the OpenAPI docs (and the `/admin` header) come from the `TITLE` / `VERSION` / `DESCRIPTION` settings — set them in `.env`, no code edits. Validation rules: the project name must match `^[a-z][a-z0-9_]*$` and cannot collide with a Python keyword, so `tempest new Bad-Name` and `tempest new class` exit with code 2 before any file is written.
3370
3370
 
3371
3371
  After scaffolding:
3372
3372
 
@@ -3243,7 +3243,7 @@ The skeleton matches the layered architecture documented in this README:
3243
3243
  my_service/
3244
3244
  ├── main.py # one-liner → src.server.run()
3245
3245
  ├── pyproject.toml # pins tempest-fastapi-sdk + ruff/mypy/pytest
3246
- ├── .env.example # HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
3246
+ ├── .env.example # TITLE/VERSION/HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
3247
3247
  ├── .gitignore
3248
3248
  ├── README.md
3249
3249
  ├── src/
@@ -3264,7 +3264,7 @@ my_service/
3264
3264
  └── test_smoke.py # asserts /api/ and /health/liveness boot
3265
3265
  ```
3266
3266
 
3267
- The generated `pyproject.toml` pins the current SDK version (`tempest-fastapi-sdk[auth]>=<version>` by default — change with `--extras`). The scaffolded `.env.example` uses the v0.8.0 settings naming (`SERVER_HOST`/`SERVER_PORT`/`SERVER_DEBUG`/`SERVER_RELOAD`/`LOG_LEVEL`/…), and `src/server.py` delegates to `tempest_fastapi_sdk.run_server` so uvicorn is imported lazily and tests can import the app without it. Validation rules: the project name must match `^[a-z][a-z0-9_]*$` and cannot collide with a Python keyword, so `tempest new Bad-Name` and `tempest new class` exit with code 2 before any file is written.
3267
+ The generated `pyproject.toml` pins the current SDK version (`tempest-fastapi-sdk[auth]>=<version>` by default — change with `--extras`). The scaffolded `.env.example` uses the v0.8.0 settings naming (`SERVER_HOST`/`SERVER_PORT`/`SERVER_DEBUG`/`SERVER_RELOAD`/`LOG_LEVEL`/…), and `src/server.py` delegates to `tempest_fastapi_sdk.run_server` so uvicorn is imported lazily and tests can import the app without it. The API `title`, `version` and `description` shown in the OpenAPI docs (and the `/admin` header) come from the `TITLE` / `VERSION` / `DESCRIPTION` settings — set them in `.env`, no code edits. Validation rules: the project name must match `^[a-z][a-z0-9_]*$` and cannot collide with a Python keyword, so `tempest new Bad-Name` and `tempest new class` exit with code 2 before any file is written.
3268
3268
 
3269
3269
  After scaffolding:
3270
3270
 
@@ -39,7 +39,7 @@ The skeleton matches the layered architecture documented in this README:
39
39
  my_service/
40
40
  ├── main.py # one-liner → src.server.run()
41
41
  ├── pyproject.toml # pins tempest-fastapi-sdk + ruff/mypy/pytest
42
- ├── .env.example # HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
42
+ ├── .env.example # TITLE/VERSION/HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
43
43
  ├── docker-compose.yaml # services keyed to the chosen extras
44
44
  ├── .gitignore
45
45
  ├── README.md
@@ -63,6 +63,21 @@ my_service/
63
63
 
64
64
  The generated `pyproject.toml` pins the current SDK version (`tempest-fastapi-sdk[auth,admin]>=<version>` by default — change with `--extras`). The scaffolded `.env.example` uses the v0.8.0 settings naming (`SERVER_HOST`/`SERVER_PORT`/`SERVER_DEBUG`/`SERVER_RELOAD`/`LOG_LEVEL`/…), and `src/server.py` delegates to `tempest_fastapi_sdk.run_server` so uvicorn is imported lazily and tests can import the app without it. Validation rules: the project name must match `^[a-z][a-z0-9_]*$` and cannot collide with a Python keyword, so `tempest new Bad-Name` and `tempest new class` exit with code 2 before any file is written.
65
65
 
66
+ !!! tip "API title / version come from `.env`"
67
+ Since v0.48.0 the scaffolded `Settings` carries `TITLE`, `VERSION`
68
+ and `DESCRIPTION`, and `src/api/app.py` consumes them
69
+ (`FastAPI(title=settings.TITLE, version=settings.VERSION,
70
+ description=settings.DESCRIPTION)`, `make_health_router(version=
71
+ settings.VERSION)` and `AdminSite(title=f"{settings.TITLE} admin")`).
72
+ Tune the title shown in Swagger/ReDoc and the `/admin` header from
73
+ `.env`, no code edits:
74
+
75
+ ```bash
76
+ TITLE=My API
77
+ VERSION=1.2.0
78
+ DESCRIPTION=Payments API for product X.
79
+ ```
80
+
66
81
  ### Extras-driven `docker-compose.yaml`
67
82
 
68
83
  Since v0.25.0 the scaffold generates a `docker-compose.yaml` carrying **only** the supporting services the chosen extras actually need — no ZooKeeper, no Kafka, nothing you won't use.
@@ -39,7 +39,7 @@ O esqueleto casa com a arquitetura em camadas documentada neste README:
39
39
  my_service/
40
40
  ├── main.py # one-liner → src.server.run()
41
41
  ├── pyproject.toml # fixa tempest-fastapi-sdk + ruff/mypy/pytest
42
- ├── .env.example # HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
42
+ ├── .env.example # TITLE/VERSION/HOST/PORT/DATABASE_URL/JWT_SECRET/CORS_ORIGINS
43
43
  ├── docker-compose.yaml # serviços baseados nos extras escolhidos
44
44
  ├── .gitignore
45
45
  ├── README.md
@@ -63,6 +63,21 @@ my_service/
63
63
 
64
64
  O `pyproject.toml` gerado fixa a versão atual do SDK (`tempest-fastapi-sdk[auth,admin]>=<versão>` por padrão — mude com `--extras`). O `.env.example` criado usa a nomenclatura de settings da v0.8.0 (`SERVER_HOST`/`SERVER_PORT`/`SERVER_DEBUG`/`SERVER_RELOAD`/`LOG_LEVEL`/…), e `src/server.py` delega a `tempest_fastapi_sdk.run_server` para que o uvicorn seja importado de forma preguiçosa e os testes possam importar o app sem ele. Regras de validação: o nome do projeto deve casar com `^[a-z][a-z0-9_]*$` e não pode colidir com uma palavra-chave do Python, então `tempest new Bad-Name` e `tempest new class` saem com código 2 antes de qualquer arquivo ser escrito.
65
65
 
66
+ !!! tip "Título / versão da API vêm do `.env`"
67
+ A partir da v0.48.0 o `Settings` scaffoldado carrega `TITLE`,
68
+ `VERSION` e `DESCRIPTION`, e `src/api/app.py` os consome
69
+ (`FastAPI(title=settings.TITLE, version=settings.VERSION,
70
+ description=settings.DESCRIPTION)`, `make_health_router(version=
71
+ settings.VERSION)` e `AdminSite(title=f"{settings.TITLE} admin")`).
72
+ Ajuste o título mostrado no Swagger/ReDoc e no header do `/admin`
73
+ direto no `.env`, sem editar código:
74
+
75
+ ```bash
76
+ TITLE=Minha API
77
+ VERSION=1.2.0
78
+ DESCRIPTION=API de pagamentos do produto X.
79
+ ```
80
+
66
81
  ### `docker-compose.yaml` baseado nos extras
67
82
 
68
83
  Desde a v0.25.0 o scaffold gera um `docker-compose.yaml` com **apenas** os serviços que os extras escolhidos precisam — sem ZooKeeper, Kafka ou qualquer outra coisa que você não vai usar.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tempest-fastapi-sdk"
3
- version = "0.47.0"
3
+ version = "0.48.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"
@@ -250,7 +250,7 @@ from tempest_fastapi_sdk.websockets import (
250
250
  make_websocket_router,
251
251
  )
252
252
 
253
- __version__: str = "0.47.0"
253
+ __version__: str = "0.48.0"
254
254
 
255
255
  __all__: list[str] = [
256
256
  "BASE_COLUMN_ORDER",
@@ -1,3 +1,8 @@
1
+ # API metadata (shown in the OpenAPI docs + admin panel header)
2
+ TITLE=__PROJECT_NAME__
3
+ VERSION=0.1.0
4
+ # DESCRIPTION=Backend API for __PROJECT_NAME__.
5
+
1
6
  # Server
2
7
  SERVER_HOST=__HOST__
3
8
  SERVER_PORT=__PORT__
@@ -48,8 +48,9 @@ def create_app() -> FastAPI:
48
48
  FastAPI: A fully wired application ready for uvicorn.
49
49
  """
50
50
  app = FastAPI(
51
- title="__PROJECT_NAME__",
52
- version="0.1.0",
51
+ title=settings.TITLE,
52
+ description=settings.DESCRIPTION,
53
+ version=settings.VERSION,
53
54
  lifespan=lifespan,
54
55
  )
55
56
 
@@ -58,7 +59,7 @@ def create_app() -> FastAPI:
58
59
  register_exception_handlers(app)
59
60
 
60
61
  app.include_router(
61
- make_health_router(db=db, version="0.1.0"),
62
+ make_health_router(db=db, version=settings.VERSION),
62
63
  )
63
64
  app.include_router(
64
65
  make_logs_router(
@@ -72,7 +73,7 @@ def create_app() -> FastAPI:
72
73
  # Alembic migration:
73
74
  # uv run alembic upgrade head
74
75
  # uv run python -c "..." # set hashed_password + is_admin=True
75
- admin_site = AdminSite(title="__PROJECT_NAME__ admin")
76
+ admin_site = AdminSite(title=f"{settings.TITLE} admin")
76
77
  admin_site.register(AdminModel(model=UserModel))
77
78
  app.include_router(
78
79
  make_admin_router(
@@ -0,0 +1,61 @@
1
+ """Application settings — composed from SDK mixins + service overrides."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pydantic import Field
6
+
7
+ from tempest_fastapi_sdk import (
8
+ BaseAppSettings,
9
+ CORSSettings,
10
+ DatabaseSettings,
11
+ JWTSettings,
12
+ LogSettings,
13
+ ServerSettings,
14
+ TokenSettings,
15
+ )
16
+
17
+
18
+ class Settings(
19
+ ServerSettings,
20
+ LogSettings,
21
+ DatabaseSettings,
22
+ JWTSettings,
23
+ TokenSettings,
24
+ CORSSettings,
25
+ BaseAppSettings,
26
+ ):
27
+ """Service-wide settings backed by the ``.env`` file.
28
+
29
+ Attributes:
30
+ TITLE (str): API title shown in the OpenAPI docs and the admin
31
+ panel header. Override via the ``TITLE`` env var.
32
+ DESCRIPTION (str): Optional API description shown in the OpenAPI
33
+ docs. Override via the ``DESCRIPTION`` env var.
34
+ VERSION (str): Version surfaced in the OpenAPI docs and on the
35
+ health router. Override via the ``VERSION`` env var.
36
+ """
37
+
38
+ TITLE: str = Field(
39
+ default="__PROJECT_NAME__",
40
+ title="API title",
41
+ description="Shown in the OpenAPI docs and the admin panel header.",
42
+ examples=["__PROJECT_NAME__"],
43
+ )
44
+ DESCRIPTION: str = Field(
45
+ default="",
46
+ title="API description",
47
+ description="Optional summary shown in the OpenAPI docs.",
48
+ examples=["Backend API for __PROJECT_NAME__."],
49
+ )
50
+ VERSION: str = Field(
51
+ default="0.1.0",
52
+ title="API version",
53
+ description="Surfaced in the OpenAPI docs and the health router.",
54
+ examples=["0.1.0"],
55
+ )
56
+
57
+
58
+ settings = Settings()
59
+
60
+
61
+ __all__: list[str] = ["Settings", "settings"]
@@ -2792,7 +2792,7 @@ wheels = [
2792
2792
 
2793
2793
  [[package]]
2794
2794
  name = "tempest-fastapi-sdk"
2795
- version = "0.47.0"
2795
+ version = "0.48.0"
2796
2796
  source = { editable = "." }
2797
2797
  dependencies = [
2798
2798
  { name = "alembic" },
@@ -1,39 +0,0 @@
1
- """Application settings — composed from SDK mixins + service overrides."""
2
-
3
- from __future__ import annotations
4
-
5
- from pydantic import Field
6
-
7
- from tempest_fastapi_sdk import (
8
- BaseAppSettings,
9
- CORSSettings,
10
- DatabaseSettings,
11
- JWTSettings,
12
- LogSettings,
13
- ServerSettings,
14
- TokenSettings,
15
- )
16
-
17
-
18
- class Settings(
19
- ServerSettings,
20
- LogSettings,
21
- DatabaseSettings,
22
- JWTSettings,
23
- TokenSettings,
24
- CORSSettings,
25
- BaseAppSettings,
26
- ):
27
- """Service-wide settings backed by the ``.env`` file.
28
-
29
- Attributes:
30
- VERSION (str): Version surfaced on the health router.
31
- """
32
-
33
- VERSION: str = Field(default="0.1.0")
34
-
35
-
36
- settings = Settings()
37
-
38
-
39
- __all__: list[str] = ["Settings", "settings"]