tempest-fastapi-sdk 0.167.2__tar.gz → 0.168.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 (766) hide show
  1. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/CHANGELOG.md +48 -0
  2. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/CLAUDE.md +9 -1
  3. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/PKG-INFO +23 -2
  4. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/README.md +22 -1
  5. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/index.en.md +1 -1
  6. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/index.md +1 -1
  7. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/permission-guards.en.md +118 -3
  8. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/permission-guards.md +116 -2
  9. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/reference.md +1 -0
  10. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/roadmap.en.md +11 -0
  11. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/roadmap.md +11 -0
  12. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/pyproject.toml +1 -1
  13. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/__init__.py +3 -1
  14. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/authz/__init__.py +2 -0
  15. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/authz/requires.py +187 -22
  16. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/permissions.py +187 -11
  17. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/authz/test_requires.py +262 -4
  18. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_permissions.py +112 -1
  19. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/uv.lock +1 -1
  20. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  21. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  22. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/ISSUE_TEMPLATE/docs.yml +0 -0
  23. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  24. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  25. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  26. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/workflows/ci.yml +0 -0
  27. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/workflows/docs.yml +0 -0
  28. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/workflows/nightly-model.yml +0 -0
  29. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.github/workflows/release-pypi.yml +0 -0
  30. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.gitignore +0 -0
  31. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/.python-version +0 -0
  32. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/Makefile +0 -0
  33. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/admin-showcase.en.md +0 -0
  34. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/admin-showcase.md +0 -0
  35. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/architecture.en.md +0 -0
  36. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/architecture.md +0 -0
  37. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/changelog.en.md +0 -0
  38. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/changelog.md +0 -0
  39. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/contributing.en.md +0 -0
  40. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/contributing.md +0 -0
  41. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/fullstack-web.en.md +0 -0
  42. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/fullstack-web.md +0 -0
  43. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/genai-examples.en.md +0 -0
  44. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/genai-examples.md +0 -0
  45. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/index.en.md +0 -0
  46. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/index.md +0 -0
  47. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/installation.en.md +0 -0
  48. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/installation.md +0 -0
  49. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/integrated.en.md +0 -0
  50. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/integrated.md +0 -0
  51. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/index.en.md +0 -0
  52. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/index.md +0 -0
  53. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/api.en.md +0 -0
  54. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/api.md +0 -0
  55. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/business-rules.en.md +0 -0
  56. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/business-rules.md +0 -0
  57. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/domain.en.md +0 -0
  58. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/domain.md +0 -0
  59. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/flows.en.md +0 -0
  60. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/flows.md +0 -0
  61. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/index.en.md +0 -0
  62. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/learning/marketplace/index.md +0 -0
  63. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/marketplace-local.en.md +0 -0
  64. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/marketplace-local.md +0 -0
  65. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/migration.en.md +0 -0
  66. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/migration.md +0 -0
  67. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/admin.en.md +0 -0
  68. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/admin.md +0 -0
  69. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/artifact-registry.en.md +0 -0
  70. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/artifact-registry.md +0 -0
  71. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/audit-trail.en.md +0 -0
  72. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/audit-trail.md +0 -0
  73. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/auth-flow.en.md +0 -0
  74. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/auth-flow.md +0 -0
  75. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/authz.en.md +0 -0
  76. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/authz.md +0 -0
  77. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/br-helpers.en.md +0 -0
  78. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/br-helpers.md +0 -0
  79. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/cache.en.md +0 -0
  80. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/cache.md +0 -0
  81. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/chat.en.md +0 -0
  82. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/chat.md +0 -0
  83. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/cli.en.md +0 -0
  84. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/cli.md +0 -0
  85. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/database.en.md +0 -0
  86. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/database.md +0 -0
  87. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/deploy-safety.en.md +0 -0
  88. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/deploy-safety.md +0 -0
  89. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/downloads.en.md +0 -0
  90. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/downloads.md +0 -0
  91. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/email.en.md +0 -0
  92. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/email.md +0 -0
  93. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/feature-flags.en.md +0 -0
  94. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/feature-flags.md +0 -0
  95. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/fields.en.md +0 -0
  96. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/fields.md +0 -0
  97. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/file-store.en.md +0 -0
  98. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/file-store.md +0 -0
  99. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/genai.en.md +0 -0
  100. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/genai.md +0 -0
  101. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/geo.en.md +0 -0
  102. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/geo.md +0 -0
  103. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/http-client.en.md +0 -0
  104. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/http-client.md +0 -0
  105. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/http.en.md +0 -0
  106. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/http.md +0 -0
  107. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/idempotency.en.md +0 -0
  108. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/idempotency.md +0 -0
  109. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/introspection-auth.en.md +0 -0
  110. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/introspection-auth.md +0 -0
  111. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/logging.en.md +0 -0
  112. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/logging.md +0 -0
  113. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/management-commands.en.md +0 -0
  114. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/management-commands.md +0 -0
  115. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/metrics.en.md +0 -0
  116. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/metrics.md +0 -0
  117. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/mfa.en.md +0 -0
  118. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/mfa.md +0 -0
  119. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/multi-tenant.en.md +0 -0
  120. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/multi-tenant.md +0 -0
  121. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/observability.en.md +0 -0
  122. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/observability.md +0 -0
  123. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/offline-sync.en.md +0 -0
  124. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/offline-sync.md +0 -0
  125. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/openapi-client.en.md +0 -0
  126. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/openapi-client.md +0 -0
  127. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/openapi-errors.en.md +0 -0
  128. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/openapi-errors.md +0 -0
  129. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/outbox.en.md +0 -0
  130. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/outbox.md +0 -0
  131. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/queue-tasks.en.md +0 -0
  132. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/queue-tasks.md +0 -0
  133. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/react-spa.en.md +0 -0
  134. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/react-spa.md +0 -0
  135. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/realtime.en.md +0 -0
  136. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/realtime.md +0 -0
  137. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/refresh-tokens.en.md +0 -0
  138. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/refresh-tokens.md +0 -0
  139. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/reviews.en.md +0 -0
  140. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/reviews.md +0 -0
  141. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/security.en.md +0 -0
  142. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/security.md +0 -0
  143. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/sessions.en.md +0 -0
  144. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/sessions.md +0 -0
  145. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/sse.en.md +0 -0
  146. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/sse.md +0 -0
  147. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/storage.en.md +0 -0
  148. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/storage.md +0 -0
  149. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/stored-files.en.md +0 -0
  150. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/stored-files.md +0 -0
  151. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/system-checks.en.md +0 -0
  152. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/system-checks.md +0 -0
  153. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/tempestweb-frontend.en.md +0 -0
  154. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/tempestweb-frontend.md +0 -0
  155. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/testing.en.md +0 -0
  156. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/testing.md +0 -0
  157. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/typing.en.md +0 -0
  158. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/typing.md +0 -0
  159. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/uploads.en.md +0 -0
  160. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/uploads.md +0 -0
  161. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/utilities.en.md +0 -0
  162. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/utilities.md +0 -0
  163. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/vision.en.md +0 -0
  164. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/vision.md +0 -0
  165. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/webpush.en.md +0 -0
  166. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/webpush.md +0 -0
  167. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/websocket.en.md +0 -0
  168. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/recipes/websocket.md +0 -0
  169. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/reference.en.md +0 -0
  170. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/ssr.en.md +0 -0
  171. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/ssr.md +0 -0
  172. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/tutorial.en.md +0 -0
  173. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/docs/tutorial.md +0 -0
  174. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/mkdocs.yml +0 -0
  175. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/mkdocs_hooks/llmstxt.py +0 -0
  176. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/planning/genai/README.md +0 -0
  177. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/planning/genai/manual-validation.md +0 -0
  178. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/planning/genai/phase-0.md +0 -0
  179. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/planning/genai/phase-1.md +0 -0
  180. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/planning/genai/phase-2.md +0 -0
  181. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/planning/genai/phase-3.md +0 -0
  182. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/planning/genai/validation-strategy.md +0 -0
  183. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/scripts/extract_recipe.py +0 -0
  184. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/__init__.py +0 -0
  185. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/actions.py +0 -0
  186. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/auth.py +0 -0
  187. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/config.py +0 -0
  188. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/dashboard.py +0 -0
  189. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/discovery.py +0 -0
  190. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/forms.py +0 -0
  191. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/permissions.py +0 -0
  192. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/router.py +0 -0
  193. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/session.py +0 -0
  194. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/site.py +0 -0
  195. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/static/admin.css +0 -0
  196. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/autocomplete.html +0 -0
  197. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/base.html +0 -0
  198. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/dashboard.html +0 -0
  199. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/detail.html +0 -0
  200. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/form.html +0 -0
  201. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/import.html +0 -0
  202. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/list.html +0 -0
  203. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/login.html +0 -0
  204. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/logs.html +0 -0
  205. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/templates/mfa.html +0 -0
  206. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/admin/theme.py +0 -0
  207. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/__init__.py +0 -0
  208. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/cookies.py +0 -0
  209. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/dependencies/__init__.py +0 -0
  210. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/dependencies/auth.py +0 -0
  211. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/error_docs.py +0 -0
  212. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/handlers.py +0 -0
  213. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/__init__.py +0 -0
  214. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/body_size.py +0 -0
  215. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/cors.py +0 -0
  216. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/csrf.py +0 -0
  217. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/graceful.py +0 -0
  218. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/idempotency.py +0 -0
  219. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/rate_limit.py +0 -0
  220. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/request_id.py +0 -0
  221. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/middlewares/response_cache.py +0 -0
  222. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/oauth.py +0 -0
  223. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/routers/__init__.py +0 -0
  224. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/routers/health.py +0 -0
  225. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/routers/logs.py +0 -0
  226. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/routers/metrics.py +0 -0
  227. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/routers/tool_spec.py +0 -0
  228. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/server.py +0 -0
  229. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/spa.py +0 -0
  230. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/static.py +0 -0
  231. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/tracing.py +0 -0
  232. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/api/webhooks.py +0 -0
  233. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/artifacts/__init__.py +0 -0
  234. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/artifacts/actions.py +0 -0
  235. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/artifacts/digest.py +0 -0
  236. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/artifacts/model.py +0 -0
  237. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/artifacts/registry.py +0 -0
  238. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/__init__.py +0 -0
  239. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/guards.py +0 -0
  240. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/introspection.py +0 -0
  241. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/locale.py +0 -0
  242. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/page_renderer.py +0 -0
  243. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/router.py +0 -0
  244. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/schemas.py +0 -0
  245. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/service.py +0 -0
  246. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/activation.html +0 -0
  247. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_error.html +0 -0
  248. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_success.html +0 -0
  249. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change.html +0 -0
  250. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change_error.html +0 -0
  251. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change_success.html +0 -0
  252. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/email_changed_notice.html +0 -0
  253. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification.html +0 -0
  254. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification_error.html +0 -0
  255. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification_success.html +0 -0
  256. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset.html +0 -0
  257. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_error.html +0 -0
  258. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_form.html +0 -0
  259. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_success.html +0 -0
  260. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation.html +0 -0
  261. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_error.html +0 -0
  262. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_success.html +0 -0
  263. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change.html +0 -0
  264. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change_error.html +0 -0
  265. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change_success.html +0 -0
  266. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_changed_notice.html +0 -0
  267. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification.html +0 -0
  268. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification_error.html +0 -0
  269. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification_success.html +0 -0
  270. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset.html +0 -0
  271. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_error.html +0 -0
  272. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_form.html +0 -0
  273. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_success.html +0 -0
  274. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/auth/token_delivery.py +0 -0
  275. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/authz/dependencies.py +0 -0
  276. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/authz/permissions.py +0 -0
  277. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cache/__init__.py +0 -0
  278. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cache/decorator.py +0 -0
  279. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cache/invalidation.py +0 -0
  280. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cache/redis_manager.py +0 -0
  281. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/chat/__init__.py +0 -0
  282. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/chat/models.py +0 -0
  283. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/chat/router.py +0 -0
  284. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/chat/schemas.py +0 -0
  285. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/chat/service.py +0 -0
  286. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/checks/__init__.py +0 -0
  287. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/checks/builtins.py +0 -0
  288. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/checks/messages.py +0 -0
  289. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/checks/registry.py +0 -0
  290. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/__init__.py +0 -0
  291. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/Dockerfile.tmpl +0 -0
  292. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/README.md.tmpl +0 -0
  293. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/dockerignore.tmpl +0 -0
  294. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/env.example.tmpl +0 -0
  295. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/gitignore.tmpl +0 -0
  296. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/main.py.tmpl +0 -0
  297. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/pyproject.toml.tmpl +0 -0
  298. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/__init__.py.tmpl +0 -0
  299. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/api/__init__.py.tmpl +0 -0
  300. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/api/app.py.tmpl +0 -0
  301. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/__init__.py.tmpl +0 -0
  302. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/auth.py.tmpl +0 -0
  303. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/resources.py.tmpl +0 -0
  304. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/api/routers/__init__.py.tmpl +0 -0
  305. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/controllers/__init__.py.tmpl +0 -0
  306. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/core/__init__.py.tmpl +0 -0
  307. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/core/exceptions.py.tmpl +0 -0
  308. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/core/settings.py.tmpl +0 -0
  309. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/db/__init__.py.tmpl +0 -0
  310. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/__init__.py.tmpl +0 -0
  311. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/user.py.tmpl +0 -0
  312. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/db/repositories/__init__.py.tmpl +0 -0
  313. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/schemas/__init__.py.tmpl +0 -0
  314. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/server.py.tmpl +0 -0
  315. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/services/__init__.py.tmpl +0 -0
  316. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/src/utils/__init__.py.tmpl +0 -0
  317. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/tests/__init__.py.tmpl +0 -0
  318. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/_templates/tests/test_smoke.py.tmpl +0 -0
  319. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/commands.py +0 -0
  320. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/config.py +0 -0
  321. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/db.py +0 -0
  322. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/docker_compose.py +0 -0
  323. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/generate.py +0 -0
  324. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/lint.py +0 -0
  325. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/main.py +0 -0
  326. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/new.py +0 -0
  327. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/openapi_errors.py +0 -0
  328. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/openapi_fix.py +0 -0
  329. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/secrets.py +0 -0
  330. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/src_layers.py +0 -0
  331. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/cli/user.py +0 -0
  332. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/controllers/__init__.py +0 -0
  333. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/controllers/base.py +0 -0
  334. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/core/__init__.py +0 -0
  335. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/core/context.py +0 -0
  336. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/core/enums.py +0 -0
  337. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/core/logging.py +0 -0
  338. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/core/typed.py +0 -0
  339. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/__init__.py +0 -0
  340. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/_alembic_templates/__init__.py +0 -0
  341. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/_alembic_templates/env.py.template +0 -0
  342. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/alembic_hooks.py +0 -0
  343. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/audit.py +0 -0
  344. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/backup.py +0 -0
  345. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/connection.py +0 -0
  346. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/expressions.py +0 -0
  347. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/migrations.py +0 -0
  348. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/mixins.py +0 -0
  349. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/model.py +0 -0
  350. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/outbox.py +0 -0
  351. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/repository.py +0 -0
  352. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/signals.py +0 -0
  353. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/slow_query.py +0 -0
  354. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/tenant.py +0 -0
  355. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/user_model.py +0 -0
  356. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/user_recovery_code_model.py +0 -0
  357. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/user_refresh_token_model.py +0 -0
  358. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/user_token_model.py +0 -0
  359. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/db/webpush_subscription_model.py +0 -0
  360. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/__init__.py +0 -0
  361. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/base.py +0 -0
  362. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/conflict.py +0 -0
  363. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/forbidden.py +0 -0
  364. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/i18n.py +0 -0
  365. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/jwt.py +0 -0
  366. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/not_found.py +0 -0
  367. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/too_many_requests.py +0 -0
  368. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/unauthorized.py +0 -0
  369. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/upload.py +0 -0
  370. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/exceptions/validation.py +0 -0
  371. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/flags/__init__.py +0 -0
  372. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/flags/backends.py +0 -0
  373. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/flags/dependencies.py +0 -0
  374. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/flags/service.py +0 -0
  375. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/__init__.py +0 -0
  376. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/audio/__init__.py +0 -0
  377. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/audio/language.py +0 -0
  378. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/audio/schemas.py +0 -0
  379. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/audio/stt.py +0 -0
  380. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/audio/tts.py +0 -0
  381. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/batching.py +0 -0
  382. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/embeddings.py +0 -0
  383. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/generation_cache.py +0 -0
  384. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/hardware.py +0 -0
  385. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/metrics.py +0 -0
  386. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/moderation.py +0 -0
  387. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/ollama.py +0 -0
  388. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/onnx_embed.py +0 -0
  389. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/pipeline.py +0 -0
  390. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/__init__.py +0 -0
  391. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/chroma.py +0 -0
  392. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/chunking.py +0 -0
  393. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/context.py +0 -0
  394. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/extract.py +0 -0
  395. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/fusion.py +0 -0
  396. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/hybrid.py +0 -0
  397. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/pdf.py +0 -0
  398. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/rerank.py +0 -0
  399. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/retriever.py +0 -0
  400. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/schemas.py +0 -0
  401. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/search.py +0 -0
  402. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/rag/vectorstore.py +0 -0
  403. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/registry.py +0 -0
  404. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/router.py +0 -0
  405. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/schemas.py +0 -0
  406. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/structured.py +0 -0
  407. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/text.py +0 -0
  408. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/tokens.py +0 -0
  409. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/tracing.py +0 -0
  410. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/genai/vision_text.py +0 -0
  411. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/__init__.py +0 -0
  412. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/br.py +0 -0
  413. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/db.py +0 -0
  414. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/distance.py +0 -0
  415. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/enums.py +0 -0
  416. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/estimate.py +0 -0
  417. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/geocoding.py +0 -0
  418. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/geometry.py +0 -0
  419. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/polyline.py +0 -0
  420. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/routing.py +0 -0
  421. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/geo/schemas.py +0 -0
  422. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/__init__.py +0 -0
  423. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/emit_client.py +0 -0
  424. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/emit_schemas.py +0 -0
  425. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/generate.py +0 -0
  426. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/ir.py +0 -0
  427. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/loader.py +0 -0
  428. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/naming.py +0 -0
  429. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/openapi/parse.py +0 -0
  430. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/py.typed +0 -0
  431. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/queue/__init__.py +0 -0
  432. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/queue/broker.py +0 -0
  433. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/queue/consumer.py +0 -0
  434. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/queue/manager.py +0 -0
  435. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/reviews/__init__.py +0 -0
  436. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/reviews/models.py +0 -0
  437. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/reviews/router.py +0 -0
  438. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/reviews/schemas.py +0 -0
  439. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/reviews/service.py +0 -0
  440. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/schemas/__init__.py +0 -0
  441. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/schemas/base.py +0 -0
  442. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/schemas/errors.py +0 -0
  443. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/schemas/link_headers.py +0 -0
  444. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/schemas/logs.py +0 -0
  445. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/schemas/pagination.py +0 -0
  446. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/schemas/response.py +0 -0
  447. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/services/__init__.py +0 -0
  448. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/services/base.py +0 -0
  449. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/services/file_mixin.py +0 -0
  450. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sessions/__init__.py +0 -0
  451. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sessions/dependencies.py +0 -0
  452. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sessions/middleware.py +0 -0
  453. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sessions/router.py +0 -0
  454. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sessions/schemas.py +0 -0
  455. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sessions/service.py +0 -0
  456. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sessions/store.py +0 -0
  457. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/settings/__init__.py +0 -0
  458. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/settings/base.py +0 -0
  459. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/settings/mixins.py +0 -0
  460. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sse/__init__.py +0 -0
  461. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sse/broker.py +0 -0
  462. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/sse/event_stream.py +0 -0
  463. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/ssr/__init__.py +0 -0
  464. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/ssr/_static/htmx.min.js +0 -0
  465. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/ssr/assets.py +0 -0
  466. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/ssr/attributes.py +0 -0
  467. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/ssr/page.py +0 -0
  468. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/ssr/response.py +0 -0
  469. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/ssr/webapp.py +0 -0
  470. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/storage/__init__.py +0 -0
  471. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/storage/minio_client.py +0 -0
  472. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/__init__.py +0 -0
  473. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/cron.py +0 -0
  474. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/dead_letter.py +0 -0
  475. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/manager.py +0 -0
  476. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/observability.py +0 -0
  477. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/oop.py +0 -0
  478. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/queue.py +0 -0
  479. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/tasks/scheduler.py +0 -0
  480. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/testing/__init__.py +0 -0
  481. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/testing/database.py +0 -0
  482. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/testing/factories.py +0 -0
  483. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/__init__.py +0 -0
  484. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/client_ip.py +0 -0
  485. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/data/br_locations.json +0 -0
  486. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/datetime.py +0 -0
  487. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/dict.py +0 -0
  488. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/download.py +0 -0
  489. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/email.py +0 -0
  490. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/fields.py +0 -0
  491. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/file_store.py +0 -0
  492. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/http_client.py +0 -0
  493. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/jwt.py +0 -0
  494. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/locations.py +0 -0
  495. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/log.py +0 -0
  496. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/metrics.py +0 -0
  497. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/opaque_token.py +0 -0
  498. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/password.py +0 -0
  499. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/regex.py +0 -0
  500. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/storage_backends.py +0 -0
  501. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/throttle.py +0 -0
  502. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/totp.py +0 -0
  503. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/utils/upload.py +0 -0
  504. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/vision/__init__.py +0 -0
  505. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/vision/mapping.py +0 -0
  506. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/vision/router.py +0 -0
  507. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/vision/schemas.py +0 -0
  508. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/webpush/__init__.py +0 -0
  509. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/webpush/dispatcher.py +0 -0
  510. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/webpush/router.py +0 -0
  511. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/webpush/schemas.py +0 -0
  512. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/webpush/service.py +0 -0
  513. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/websockets/__init__.py +0 -0
  514. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/websockets/hub.py +0 -0
  515. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/websockets/router.py +0 -0
  516. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tempest_fastapi_sdk/websockets/schemas.py +0 -0
  517. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/__init__.py +0 -0
  518. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/__init__.py +0 -0
  519. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_actions.py +0 -0
  520. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_audit_viewer.py +0 -0
  521. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_auth.py +0 -0
  522. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_autocomplete_fk.py +0 -0
  523. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_csv_import.py +0 -0
  524. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_dashboard_cards.py +0 -0
  525. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_discovery.py +0 -0
  526. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_forms.py +0 -0
  527. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_inlines.py +0 -0
  528. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_lenses.py +0 -0
  529. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_logs_nav.py +0 -0
  530. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_mfa.py +0 -0
  531. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_rbac.py +0 -0
  532. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_rich_filters.py +0 -0
  533. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_router.py +0 -0
  534. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_site.py +0 -0
  535. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_theme.py +0 -0
  536. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_upload_field.py +0 -0
  537. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_user_model.py +0 -0
  538. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/admin/test_widgets_json_time.py +0 -0
  539. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/__init__.py +0 -0
  540. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_body_size.py +0 -0
  541. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_business_metrics.py +0 -0
  542. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_cookies.py +0 -0
  543. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_cors.py +0 -0
  544. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_csrf.py +0 -0
  545. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_dependencies_auth.py +0 -0
  546. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_error_docs.py +0 -0
  547. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_graceful.py +0 -0
  548. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_handlers.py +0 -0
  549. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_health_router.py +0 -0
  550. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_idempotency.py +0 -0
  551. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_jwt_dependency.py +0 -0
  552. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_logs_router.py +0 -0
  553. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_oauth.py +0 -0
  554. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_outbound_webhooks.py +0 -0
  555. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_prometheus.py +0 -0
  556. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_rate_limit.py +0 -0
  557. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_rate_limit_extras.py +0 -0
  558. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_request_id_middleware.py +0 -0
  559. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_response_cache.py +0 -0
  560. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_role_dependency.py +0 -0
  561. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_server.py +0 -0
  562. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_spa.py +0 -0
  563. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_static.py +0 -0
  564. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_tool_spec.py +0 -0
  565. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_tracing.py +0 -0
  566. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_webhooks.py +0 -0
  567. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/api/test_webhooks_rsa.py +0 -0
  568. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/artifacts/__init__.py +0 -0
  569. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/artifacts/support.py +0 -0
  570. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/artifacts/test_actions.py +0 -0
  571. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/artifacts/test_digest.py +0 -0
  572. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/artifacts/test_registry.py +0 -0
  573. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/__init__.py +0 -0
  574. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_cookie_delivery.py +0 -0
  575. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_email_change.py +0 -0
  576. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_guards.py +0 -0
  577. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_introspection.py +0 -0
  578. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_locale.py +0 -0
  579. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_mfa.py +0 -0
  580. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_refresh.py +0 -0
  581. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_refresh_db.py +0 -0
  582. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/auth/test_service.py +0 -0
  583. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/authz/__init__.py +0 -0
  584. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/authz/test_dependencies.py +0 -0
  585. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/authz/test_permissions.py +0 -0
  586. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cache/__init__.py +0 -0
  587. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cache/test_decorator.py +0 -0
  588. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cache/test_invalidation.py +0 -0
  589. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cache/test_redis_manager.py +0 -0
  590. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/chat/__init__.py +0 -0
  591. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/chat/test_chat.py +0 -0
  592. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/checks/__init__.py +0 -0
  593. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/checks/test_check_config_cli.py +0 -0
  594. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/checks/test_checks.py +0 -0
  595. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/__init__.py +0 -0
  596. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_config.py +0 -0
  597. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_db.py +0 -0
  598. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_db_seed.py +0 -0
  599. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_docker_compose.py +0 -0
  600. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_dockerfile_spa.py +0 -0
  601. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_generate.py +0 -0
  602. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_lint_strictness.py +0 -0
  603. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_main.py +0 -0
  604. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_management_commands.py +0 -0
  605. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_openapi_errors.py +0 -0
  606. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_openapi_fix.py +0 -0
  607. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_secrets.py +0 -0
  608. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/cli/test_user.py +0 -0
  609. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/conftest.py +0 -0
  610. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/controllers/__init__.py +0 -0
  611. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/controllers/test_base.py +0 -0
  612. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/controllers/test_generic_bounds.py +0 -0
  613. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/core/__init__.py +0 -0
  614. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/core/test_context.py +0 -0
  615. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/core/test_enums.py +0 -0
  616. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/core/test_logging.py +0 -0
  617. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/core/test_typed.py +0 -0
  618. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/__init__.py +0 -0
  619. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_alembic_hooks.py +0 -0
  620. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_audit.py +0 -0
  621. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_backup.py +0 -0
  622. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_bulk_ops.py +0 -0
  623. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_connection.py +0 -0
  624. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_eager_load.py +0 -0
  625. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_expressions.py +0 -0
  626. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_migrations.py +0 -0
  627. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_mixins.py +0 -0
  628. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_model.py +0 -0
  629. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_outbox.py +0 -0
  630. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_repository.py +0 -0
  631. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_safe_upgrade.py +0 -0
  632. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_signals.py +0 -0
  633. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_slow_query.py +0 -0
  634. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/db/test_tenant.py +0 -0
  635. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/exceptions/__init__.py +0 -0
  636. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/exceptions/test_exceptions.py +0 -0
  637. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/exceptions/test_i18n.py +0 -0
  638. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/exceptions/test_inherited_code_warning.py +0 -0
  639. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/flags/__init__.py +0 -0
  640. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/flags/test_flags.py +0 -0
  641. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/__init__.py +0 -0
  642. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/_eval/__init__.py +0 -0
  643. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/_eval/corpus.py +0 -0
  644. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/audio/__init__.py +0 -0
  645. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/audio/test_audio.py +0 -0
  646. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/audio/test_language.py +0 -0
  647. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/conftest.py +0 -0
  648. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_batching.py +0 -0
  649. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_chat_memory.py +0 -0
  650. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_embedding_cache_redis.py +0 -0
  651. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_embeddings.py +0 -0
  652. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_eval_harness.py +0 -0
  653. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_genai_metrics.py +0 -0
  654. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_generation_cache.py +0 -0
  655. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_generation_config.py +0 -0
  656. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_gpu_validation.py +0 -0
  657. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_hardware.py +0 -0
  658. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_hybrid.py +0 -0
  659. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_moderation.py +0 -0
  660. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_ollama.py +0 -0
  661. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_onnx_embed.py +0 -0
  662. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_pipeline.py +0 -0
  663. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_pipeline_integration.py +0 -0
  664. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_rag.py +0 -0
  665. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_refinements.py +0 -0
  666. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_rerank.py +0 -0
  667. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_router.py +0 -0
  668. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_structured.py +0 -0
  669. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_text.py +0 -0
  670. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_textgen_embed_metrics.py +0 -0
  671. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_tokens.py +0 -0
  672. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_tracing.py +0 -0
  673. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_vectorstore.py +0 -0
  674. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/genai/test_vision_text.py +0 -0
  675. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/__init__.py +0 -0
  676. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_br.py +0 -0
  677. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_db.py +0 -0
  678. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_distance.py +0 -0
  679. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_estimate.py +0 -0
  680. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_geocoding.py +0 -0
  681. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_geometry.py +0 -0
  682. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_polyline.py +0 -0
  683. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_routing.py +0 -0
  684. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/geo/test_routing_extra.py +0 -0
  685. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/openapi/__init__.py +0 -0
  686. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/openapi/conftest.py +0 -0
  687. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/openapi/test_generate.py +0 -0
  688. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/openapi/test_loader.py +0 -0
  689. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/openapi/test_naming.py +0 -0
  690. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/openapi/test_parse.py +0 -0
  691. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/queue/__init__.py +0 -0
  692. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/queue/test_broker.py +0 -0
  693. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/queue/test_consumer.py +0 -0
  694. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/queue/test_manager.py +0 -0
  695. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/reviews/__init__.py +0 -0
  696. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/reviews/test_reviews.py +0 -0
  697. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/schemas/__init__.py +0 -0
  698. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/schemas/test_base.py +0 -0
  699. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/schemas/test_cursor_pagination.py +0 -0
  700. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/schemas/test_errors.py +0 -0
  701. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/schemas/test_link_headers.py +0 -0
  702. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/schemas/test_pagination.py +0 -0
  703. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/schemas/test_response.py +0 -0
  704. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/services/__init__.py +0 -0
  705. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/services/test_base.py +0 -0
  706. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/services/test_file_mixin.py +0 -0
  707. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/sessions/__init__.py +0 -0
  708. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/sessions/test_sessions.py +0 -0
  709. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/settings/__init__.py +0 -0
  710. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/settings/test_base.py +0 -0
  711. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/settings/test_mixins.py +0 -0
  712. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/sse/__init__.py +0 -0
  713. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/sse/test_broker.py +0 -0
  714. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/sse/test_event_stream.py +0 -0
  715. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/ssr/__init__.py +0 -0
  716. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/ssr/test_attributes.py +0 -0
  717. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/ssr/test_integration.py +0 -0
  718. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/ssr/test_page.py +0 -0
  719. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/ssr/test_response.py +0 -0
  720. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/ssr/test_webapp.py +0 -0
  721. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/storage/__init__.py +0 -0
  722. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/storage/test_minio_client.py +0 -0
  723. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/__init__.py +0 -0
  724. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/test_cron.py +0 -0
  725. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/test_dead_letter.py +0 -0
  726. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/test_manager.py +0 -0
  727. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/test_observability.py +0 -0
  728. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/test_oop.py +0 -0
  729. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/test_queue.py +0 -0
  730. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/tasks/test_scheduler.py +0 -0
  731. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/test_docs_api_guard.py +0 -0
  732. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/test_llmstxt.py +0 -0
  733. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/test_reference_coverage.py +0 -0
  734. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/testing/__init__.py +0 -0
  735. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/testing/test_database.py +0 -0
  736. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/testing/test_factories.py +0 -0
  737. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/__init__.py +0 -0
  738. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_client_ip.py +0 -0
  739. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_datetime.py +0 -0
  740. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_dict.py +0 -0
  741. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_download.py +0 -0
  742. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_email.py +0 -0
  743. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_fields.py +0 -0
  744. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_file_store.py +0 -0
  745. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_http_client.py +0 -0
  746. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_jwt.py +0 -0
  747. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_lazy_extras.py +0 -0
  748. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_locations.py +0 -0
  749. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_log.py +0 -0
  750. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_metrics.py +0 -0
  751. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_opaque_token.py +0 -0
  752. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_password.py +0 -0
  753. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_regex.py +0 -0
  754. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_storage_backends.py +0 -0
  755. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_throttle.py +0 -0
  756. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/utils/test_upload.py +0 -0
  757. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/vision/__init__.py +0 -0
  758. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/vision/test_router.py +0 -0
  759. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/vision/test_vision.py +0 -0
  760. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/webpush/__init__.py +0 -0
  761. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/webpush/test_dispatcher.py +0 -0
  762. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/webpush/test_router.py +0 -0
  763. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/webpush/test_schemas.py +0 -0
  764. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/webpush/test_service.py +0 -0
  765. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/websockets/__init__.py +0 -0
  766. {tempest_fastapi_sdk-0.167.2 → tempest_fastapi_sdk-0.168.0}/tests/websockets/test_hub_and_router.py +0 -0
@@ -5,6 +5,54 @@ 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.168.0] — 2026-07-26
9
+
10
+ Permission guards gain injected metadata: one generic guard, a specific check
11
+ per call site.
12
+
13
+ ### Added
14
+
15
+ - **A guard may declare a second parameter `meta: dict[str, Any]`.** That is
16
+ what turns `manager_only` / `auditor_only` / `admin_only` into one
17
+ `has_role(user, meta)` whose call sites declare
18
+ `@requires(has_role, meta={"role": "manager"})`. One-parameter guards are
19
+ untouched — the second argument is passed only to guards that declare it, so
20
+ both shapes mix freely in the same decoration.
21
+ - **`requires(..., meta=...)`** — literal metadata, copied at decoration time,
22
+ so a later mutation of the passed mapping cannot change what the route
23
+ enforces. Must be a `Mapping[str, Any]`; anything else is a
24
+ `TempestPermissionError` at import.
25
+ - **`requires(..., include_args=True)`** — merges the arguments the decorated
26
+ function was called with into the same mapping, so an ownership guard reads
27
+ `meta["order_id"]` without the route handing it over. The user parameter is
28
+ excluded (the guard already receives it), a parameter the caller omitted
29
+ contributes its default so the guard sees the values the body will run with,
30
+ a default that is a framework injection marker (`Depends(...)`) is dropped
31
+ rather than passed as a value, and a `meta=` literal wins a name clash with
32
+ an argument — the decoration is the explicit declaration. The mapping is
33
+ fresh per call and shared by that call's guards, so one guard may write a key
34
+ the next one reads without anything leaking into the next request.
35
+ - **`guard_metadata(fn)`** — reads the `meta=` literals off a decorated
36
+ function, next to `declared_guards` / `guarded_user_param`. Exported from
37
+ `tempest_fastapi_sdk` and `tempest_fastapi_sdk.authz`.
38
+ - **Four static checks in `tempest permissions`:** `meta-unused` (error — the
39
+ decoration passes `meta=` / `include_args=True` but no guard declares a
40
+ second parameter; held back when a guard in that decoration could not be
41
+ resolved, since it may be the consumer), `guard-meta-missing` (warning — a
42
+ two-parameter guard whose decoration supplies no metadata reads an empty
43
+ dict), `guard-meta-annotation` (warning — the metadata parameter is annotated
44
+ as something that cannot hold a `dict[str, Any]`) and `meta-key-collision`
45
+ (warning — a `meta=` key shadows a parameter name under `include_args=True`,
46
+ so that argument never reaches the guard).
47
+
48
+ ### Changed
49
+
50
+ - **`guard-arity` accepts one or two required parameters.** A guard taking
51
+ `(user, meta)` used to be rejected at import (`expected 1 (user)`); the
52
+ contract is now one *or* two, and the message reads
53
+ `expected 1 (user) or 2 (user, meta)`. Three or more is still an error. No
54
+ existing single-parameter guard changes behavior.
55
+
8
56
  ## [0.167.2] — 2026-07-26
9
57
 
10
58
  Documentation layout only — no code change, no API change.
@@ -92,7 +92,15 @@ The SDK currently covers (Sep 2025+, post-v0.31.x):
92
92
  `guard-unresolved` (ambiguous or out-of-scope guard reported, never guessed).
93
93
  `openapi-errors` follows the guards, so their exceptions land in
94
94
  `error_responses(...)`. `declared_guards`/`guarded_user_param` introspect a
95
- route. Recipe: `docs/recipes/permission-guards.md`.
95
+ route. **Metadata (v0.168.0):** a guard may declare a 2nd param
96
+ `meta: dict[str, Any]` — `meta={...}` literals fixed at decoration plus
97
+ `include_args=True` merging the call's args (user excluded, omitted params
98
+ contribute defaults, `Depends(...)` markers dropped, `meta=` wins a name
99
+ clash); one-param guards untouched; `TempestPermissionError` when `meta=`
100
+ isn't a mapping or nothing consumes it; `guard_metadata(fn)` reads the
101
+ literals; new static codes `meta-unused` (error), `guard-meta-missing`/
102
+ `guard-meta-annotation`/`meta-key-collision` (warnings). Recipe:
103
+ `docs/recipes/permission-guards.md`.
96
104
  - **DB** — `AsyncDatabaseManager`, `BaseRepository[T]` with
97
105
  bulk ops (`bulk_create_values`, `bulk_upsert`, `bulk_update`,
98
106
  `add_all`, etc.), `AlembicHelper`, `BaseModel`, audit /
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tempest-fastapi-sdk
3
- Version: 0.167.2
3
+ Version: 0.168.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
@@ -302,7 +302,7 @@ Since `0.7.1` every optional dependency is imported lazily at first instantiatio
302
302
  | `tempest_fastapi_sdk.settings` | `BaseAppSettings` (+ `AppSettingsMeta`), `ServerSettings`, `LogSettings`, `DatabaseSettings`, `RedisSettings`, `RabbitMQSettings`, `JWTSettings`, `CORSSettings`, `EmailSettings`, `UploadSettings`, `TokenSettings`, `WebPushSettings`, `TaskIQSettings`, `MinIOSettings`, `AuthSettings` |
303
303
  | `tempest_fastapi_sdk.api` | `register_exception_handlers`, `app_exception_handler`, OpenAPI error docs (`error_responses`, `raises`, `TempestAPIRouter`, `RaisesSpec`, `declared_raises`), `apply_cors`, `make_health_router`, `make_logs_router`, `make_prometheus_router`, `make_prometheus_registry`, `PrometheusMiddleware`, `BusinessMetrics`, `LogSource`, `make_tool_spec_router`, `make_token_dependency`, `make_bearer_token_dependency`, `make_jwt_user_dependency`, `make_role_dependency`, `make_permission_dependency`, `require_x_token`, `run_server`, `RequestIDMiddleware`, `RateLimitMiddleware` (+ `RateLimitStore`/`MemoryRateLimitStore`/`RedisRateLimitStore`/`RateLimitResult` and `key_by_ip`/`key_by_jwt_subject`/`key_by_jwt_claim`/`key_by_header`), `IdempotencyMiddleware`, `MemoryIdempotencyStore`, `RedisIdempotencyStore`, `BodySizeLimitMiddleware`, `CSRFMiddleware`, `make_csrf_token_dependency`, `GracefulShutdownMiddleware`, `WebhookSignatureVerifier`, `RSAWebhookSignatureVerifier`, outbound `WebhookSender` (+ `WebhookDelivery`), OAuth2 (`GoogleOAuthClient`, `GitHubOAuthClient`, `OIDCProvider`), `HardenedStaticFiles`, `DEFAULT_STATIC_SECURITY_HEADERS`, `make_spa_router` (serve a compiled React/Vite SPA with a client-side fallback), `set_cookie`, `clear_cookie`, `SameSite`, `HealthCheck`, `setup_tracing` *(extra: `[otel]`)* |
304
304
  | `tempest_fastapi_sdk.auth` *(extra: `[auth]`, opcional `[email]`, `[mfa]`)* | `UserAuthService`, `make_auth_router`, `SignupSchema` / `LoginSchema` / `RefreshSchema` / `PasswordResetRequestSchema` / `PasswordResetConfirmSchema` + responses, `ActivationToken`, `PasswordResetToken`, email change/verify/recovery (`EmailChangeRequestSchema` / `EmailChangeConfirmSchema` / `EmailRecoveryRequestSchema` / `EmailChangeToken` / `EmailVerificationToken`, old-email security notice, opt-in `AUTH_EMAIL_RECOVERY_ENABLED`), MFA schemas (`MFAEnrollResponseSchema` / `MFAConfirmSchema` / `MFAVerifySchema` / `MFADisableSchema`), opt-in DB-backed refresh tokens (`BaseUserRefreshTokenModel` / `make_user_refresh_token_model` / `LogoutSchema`) with rotation + reuse detection + `POST /auth/logout`, bilingual emails + backend pages (`AUTH_DEFAULT_LOCALE`, `normalize_locale` / `negotiate_locale`) — signup/activate/login/refresh/logout/reset + email change/recovery + TOTP 2FA out of the box |
305
- | `tempest_fastapi_sdk.authz` | Object-level permissions: `permission` (rule decorator), `has_perm` / `check_permission`, `PermissionRegistry` (injectable superuser bypass + static-permission fallback, `order.*`/`*` wildcards), `make_permission_checker` (FastAPI route guard), `PermissionMixin` (`await user.has_perm(perm, obj=...)`), `default_registry`, `requires` (guard decorator `(user) -> user | None`, checked at import time + by `tempest permissions`), `declared_guards` / `guarded_user_param`, `TempestPermissionError`, `GuardContractWarning` |
305
+ | `tempest_fastapi_sdk.authz` | Object-level permissions: `permission` (rule decorator), `has_perm` / `check_permission`, `PermissionRegistry` (injectable superuser bypass + static-permission fallback, `order.*`/`*` wildcards), `make_permission_checker` (FastAPI route guard), `PermissionMixin` (`await user.has_perm(perm, obj=...)`), `default_registry`, `requires` (guard decorator `(user) -> user | None`, optional `meta: dict[str, Any]` second parameter via `meta=` / `include_args=`, checked at import time + by `tempest permissions`), `declared_guards` / `guarded_user_param` / `guard_metadata`, `TempestPermissionError`, `GuardContractWarning` |
306
306
  | `tempest_fastapi_sdk.checks` | System checks (Django-style config validation): `check` (register decorator), `run_checks` / `run_system_checks` (raises `SystemCheckError` on ERROR+), `CheckMessage` / `CheckLevel` + `debug`/`info`/`warning`/`error`/`critical`, `CheckRegistry` / `default_registry`; built-in settings checks + the `tempest check-config` CLI (auto-detects settings, `--tag` / `--fail-level`) |
307
307
  | `tempest_fastapi_sdk.controllers` | `BaseController` |
308
308
  | `tempest_fastapi_sdk.services` | `BaseService` |
@@ -4169,6 +4169,27 @@ async def delete_order(
4169
4169
 
4170
4170
  The user parameter is found by annotation (`user_param=` breaks a tie), and a guard's non-`None` return replaces the user the body sees — which is how `require_active` narrows `UserT | None` to `UserT`.
4171
4171
 
4172
+ A guard may declare a second parameter to receive a `dict[str, Any]` of metadata, which is what turns one generic guard into a specific check per call site — `meta=` carries literals fixed at decoration, `include_args=True` merges the call's own arguments:
4173
+
4174
+ ```python
4175
+ def has_role(user: UserModel, meta: dict[str, Any]) -> UserModel:
4176
+ """Deny unless the user holds the role the route declared."""
4177
+ if meta["role"] not in user.roles:
4178
+ raise MissingRoleException(role=meta["role"])
4179
+ return user
4180
+
4181
+
4182
+ @requires(has_role, meta={"role": "manager"})
4183
+ async def close_month(user: UserModel = Depends(get_current_user)) -> None: ...
4184
+
4185
+
4186
+ @requires(order_owner, include_args=True) # guard reads meta["order_id"]
4187
+ async def delete_order(
4188
+ order_id: UUID,
4189
+ user: UserModel = Depends(get_current_user),
4190
+ ) -> None: ...
4191
+ ```
4192
+
4172
4193
  Misuse is caught in three places: `TempestPermissionError` at import time (no guard, wrong arity, `async` guard on a sync function, no user parameter), `GuardContractWarning` at call time (a guard raising outside the `AppException` hierarchy, or returning `False` instead of denying), and `tempest permissions --check` in CI, which reads the same contract statically.
4173
4194
 
4174
4195
  ```bash
@@ -156,7 +156,7 @@ Since `0.7.1` every optional dependency is imported lazily at first instantiatio
156
156
  | `tempest_fastapi_sdk.settings` | `BaseAppSettings` (+ `AppSettingsMeta`), `ServerSettings`, `LogSettings`, `DatabaseSettings`, `RedisSettings`, `RabbitMQSettings`, `JWTSettings`, `CORSSettings`, `EmailSettings`, `UploadSettings`, `TokenSettings`, `WebPushSettings`, `TaskIQSettings`, `MinIOSettings`, `AuthSettings` |
157
157
  | `tempest_fastapi_sdk.api` | `register_exception_handlers`, `app_exception_handler`, OpenAPI error docs (`error_responses`, `raises`, `TempestAPIRouter`, `RaisesSpec`, `declared_raises`), `apply_cors`, `make_health_router`, `make_logs_router`, `make_prometheus_router`, `make_prometheus_registry`, `PrometheusMiddleware`, `BusinessMetrics`, `LogSource`, `make_tool_spec_router`, `make_token_dependency`, `make_bearer_token_dependency`, `make_jwt_user_dependency`, `make_role_dependency`, `make_permission_dependency`, `require_x_token`, `run_server`, `RequestIDMiddleware`, `RateLimitMiddleware` (+ `RateLimitStore`/`MemoryRateLimitStore`/`RedisRateLimitStore`/`RateLimitResult` and `key_by_ip`/`key_by_jwt_subject`/`key_by_jwt_claim`/`key_by_header`), `IdempotencyMiddleware`, `MemoryIdempotencyStore`, `RedisIdempotencyStore`, `BodySizeLimitMiddleware`, `CSRFMiddleware`, `make_csrf_token_dependency`, `GracefulShutdownMiddleware`, `WebhookSignatureVerifier`, `RSAWebhookSignatureVerifier`, outbound `WebhookSender` (+ `WebhookDelivery`), OAuth2 (`GoogleOAuthClient`, `GitHubOAuthClient`, `OIDCProvider`), `HardenedStaticFiles`, `DEFAULT_STATIC_SECURITY_HEADERS`, `make_spa_router` (serve a compiled React/Vite SPA with a client-side fallback), `set_cookie`, `clear_cookie`, `SameSite`, `HealthCheck`, `setup_tracing` *(extra: `[otel]`)* |
158
158
  | `tempest_fastapi_sdk.auth` *(extra: `[auth]`, opcional `[email]`, `[mfa]`)* | `UserAuthService`, `make_auth_router`, `SignupSchema` / `LoginSchema` / `RefreshSchema` / `PasswordResetRequestSchema` / `PasswordResetConfirmSchema` + responses, `ActivationToken`, `PasswordResetToken`, email change/verify/recovery (`EmailChangeRequestSchema` / `EmailChangeConfirmSchema` / `EmailRecoveryRequestSchema` / `EmailChangeToken` / `EmailVerificationToken`, old-email security notice, opt-in `AUTH_EMAIL_RECOVERY_ENABLED`), MFA schemas (`MFAEnrollResponseSchema` / `MFAConfirmSchema` / `MFAVerifySchema` / `MFADisableSchema`), opt-in DB-backed refresh tokens (`BaseUserRefreshTokenModel` / `make_user_refresh_token_model` / `LogoutSchema`) with rotation + reuse detection + `POST /auth/logout`, bilingual emails + backend pages (`AUTH_DEFAULT_LOCALE`, `normalize_locale` / `negotiate_locale`) — signup/activate/login/refresh/logout/reset + email change/recovery + TOTP 2FA out of the box |
159
- | `tempest_fastapi_sdk.authz` | Object-level permissions: `permission` (rule decorator), `has_perm` / `check_permission`, `PermissionRegistry` (injectable superuser bypass + static-permission fallback, `order.*`/`*` wildcards), `make_permission_checker` (FastAPI route guard), `PermissionMixin` (`await user.has_perm(perm, obj=...)`), `default_registry`, `requires` (guard decorator `(user) -> user | None`, checked at import time + by `tempest permissions`), `declared_guards` / `guarded_user_param`, `TempestPermissionError`, `GuardContractWarning` |
159
+ | `tempest_fastapi_sdk.authz` | Object-level permissions: `permission` (rule decorator), `has_perm` / `check_permission`, `PermissionRegistry` (injectable superuser bypass + static-permission fallback, `order.*`/`*` wildcards), `make_permission_checker` (FastAPI route guard), `PermissionMixin` (`await user.has_perm(perm, obj=...)`), `default_registry`, `requires` (guard decorator `(user) -> user | None`, optional `meta: dict[str, Any]` second parameter via `meta=` / `include_args=`, checked at import time + by `tempest permissions`), `declared_guards` / `guarded_user_param` / `guard_metadata`, `TempestPermissionError`, `GuardContractWarning` |
160
160
  | `tempest_fastapi_sdk.checks` | System checks (Django-style config validation): `check` (register decorator), `run_checks` / `run_system_checks` (raises `SystemCheckError` on ERROR+), `CheckMessage` / `CheckLevel` + `debug`/`info`/`warning`/`error`/`critical`, `CheckRegistry` / `default_registry`; built-in settings checks + the `tempest check-config` CLI (auto-detects settings, `--tag` / `--fail-level`) |
161
161
  | `tempest_fastapi_sdk.controllers` | `BaseController` |
162
162
  | `tempest_fastapi_sdk.services` | `BaseService` |
@@ -4023,6 +4023,27 @@ async def delete_order(
4023
4023
 
4024
4024
  The user parameter is found by annotation (`user_param=` breaks a tie), and a guard's non-`None` return replaces the user the body sees — which is how `require_active` narrows `UserT | None` to `UserT`.
4025
4025
 
4026
+ A guard may declare a second parameter to receive a `dict[str, Any]` of metadata, which is what turns one generic guard into a specific check per call site — `meta=` carries literals fixed at decoration, `include_args=True` merges the call's own arguments:
4027
+
4028
+ ```python
4029
+ def has_role(user: UserModel, meta: dict[str, Any]) -> UserModel:
4030
+ """Deny unless the user holds the role the route declared."""
4031
+ if meta["role"] not in user.roles:
4032
+ raise MissingRoleException(role=meta["role"])
4033
+ return user
4034
+
4035
+
4036
+ @requires(has_role, meta={"role": "manager"})
4037
+ async def close_month(user: UserModel = Depends(get_current_user)) -> None: ...
4038
+
4039
+
4040
+ @requires(order_owner, include_args=True) # guard reads meta["order_id"]
4041
+ async def delete_order(
4042
+ order_id: UUID,
4043
+ user: UserModel = Depends(get_current_user),
4044
+ ) -> None: ...
4045
+ ```
4046
+
4026
4047
  Misuse is caught in three places: `TempestPermissionError` at import time (no guard, wrong arity, `async` guard on a sync function, no user parameter), `GuardContractWarning` at call time (a guard raising outside the `AppException` hierarchy, or returning `False` instead of denying), and `tempest permissions --check` in CI, which reads the same contract statically.
4027
4048
 
4028
4049
  ```bash
@@ -320,7 +320,7 @@ come back here to plug in each capability as you need it.
320
320
  | **[Security »](security.md)** | `AttemptThrottle`, opaque-token helpers, `HardenedStaticFiles`, security headers |
321
321
  | **[Brazilian helpers »](br-helpers.md)** | CPF / CNPJ / CEP / phone validation + normalization |
322
322
  | **[Object-level permissions »](authz.md)** | `permission` (rule decorator), `has_perm` / `check_permission`, `PermissionRegistry`, `make_permission_checker`, `PermissionMixin` |
323
- | **[Permission guards (@requires) »](permission-guards.md)** | `@requires` plus `(user) -> user` guards, `TempestPermissionError`, `GuardContractWarning`, `tempest permissions --check` |
323
+ | **[Permission guards (@requires) »](permission-guards.md)** | `@requires` plus `(user) -> user` guards (with an optional `meta: dict[str, Any]` via `meta=` / `include_args=`), `TempestPermissionError`, `GuardContractWarning`, `tempest permissions --check` |
324
324
  | **[Introspection auth (resource server) »](introspection-auth.md)** | `IntrospectionAuth` — validate an opaque bearer by asking the upstream identity provider |
325
325
  | **[Geolocation (distance + travel time) »](geo.md)** | `haversine_km`, `estimate_travel`, `OSRMBackend`, `NominatimBackend`, `GeoPointMixin` / `GeoRepositoryMixin` |
326
326
  | **[Self-hosted generative AI »](genai.md)** | `probe_hardware` / `can_run`, `TextGenerator`, `Embedder`, RAG (web + PDF), audio (STT/TTS), `make_genai_router` |
@@ -319,7 +319,7 @@ aqui pra plugar cada capacidade conforme precisar.
319
319
  | **[Segurança »](security.md)** | `AttemptThrottle`, helpers de token opaco, `HardenedStaticFiles`, headers de segurança |
320
320
  | **[Helpers brasileiros »](br-helpers.md)** | validação + normalização de CPF / CNPJ / CEP / telefone |
321
321
  | **[Permissões object-level »](authz.md)** | `permission` (decorator de regra), `has_perm` / `check_permission`, `PermissionRegistry`, `make_permission_checker`, `PermissionMixin` |
322
- | **[Guards de permissão (@requires) »](permission-guards.md)** | `@requires` + guards `(user) -> user`, `TempestPermissionError`, `GuardContractWarning`, `tempest permissions --check` |
322
+ | **[Guards de permissão (@requires) »](permission-guards.md)** | `@requires` + guards `(user) -> user` (com `meta: dict[str, Any]` opcional via `meta=` / `include_args=`), `TempestPermissionError`, `GuardContractWarning`, `tempest permissions --check` |
323
323
  | **[Auth por introspecção (resource server) »](introspection-auth.md)** | `IntrospectionAuth` — validar bearer opaco perguntando ao provedor de identidade upstream |
324
324
  | **[Geolocalização (distância + tempo) »](geo.md)** | `haversine_km`, `estimate_travel`, `OSRMBackend`, `NominatimBackend`, `GeoPointMixin` / `GeoRepositoryMixin` |
325
325
  | **[IA generativa self-hosted »](genai.md)** | `probe_hardware` / `can_run`, `TextGenerator`, `Embedder`, RAG (web + PDF), áudio (STT/TTS), `make_genai_router` |
@@ -162,6 +162,114 @@ async def me(user: UserModel | None = Depends(get_current_user_soft)) -> UserMod
162
162
 
163
163
  Returning `None` is allowed and means "I did not touch the user".
164
164
 
165
+ ## Metadata: one generic guard, many call sites
166
+
167
+ A guard may declare a **second parameter** `meta: dict[str, Any]`. That is what turns a generic guard into a specific check per route — instead of writing `manager_only`, `auditor_only`, `admin_only`, you write `has_role` once and each call site says which role it requires.
168
+
169
+ ```python
170
+ from typing import Any
171
+
172
+ from tempest_fastapi_sdk import ForbiddenException, requires
173
+
174
+ from src.db.models import UserModel
175
+
176
+
177
+ def has_role(user: UserModel, meta: dict[str, Any]) -> UserModel:
178
+ """Assert the user holds the role the route declared.
179
+
180
+ Args:
181
+ user (UserModel): The authenticated user.
182
+ meta (dict[str, Any]): Metadata injected by ``@requires``.
183
+
184
+ Returns:
185
+ UserModel: The same user.
186
+
187
+ Raises:
188
+ MissingRoleException: When the declared role is missing.
189
+ """
190
+ if meta["role"] not in user.roles:
191
+ raise MissingRoleException(role=meta["role"])
192
+ return user
193
+
194
+
195
+ @router.post("/reports/close-month")
196
+ @requires(has_role, meta={"role": "manager"})
197
+ async def close_month(user: UserModel = Depends(get_current_user)) -> None:
198
+ """Close the accounting month.
199
+
200
+ Args:
201
+ user (UserModel): The authenticated manager.
202
+ """
203
+ ...
204
+ ```
205
+
206
+ One-parameter guards behave exactly as before — the second argument only goes to guards that declare it. You can mix both in the same decoration.
207
+
208
+ ### `include_args=True`: the guard sees the call's arguments
209
+
210
+ `meta=` carries literals fixed at decoration. When the check depends on the **resource** of the request, turn on `include_args=True` and the call's arguments (path params, body, other dependencies) join the same dict:
211
+
212
+ ```python
213
+ def order_owner(user: UserModel, meta: dict[str, Any]) -> UserModel:
214
+ """Assert the user owns the order named by the metadata.
215
+
216
+ Args:
217
+ user (UserModel): The authenticated user.
218
+ meta (dict[str, Any]): Metadata injected by ``@requires``.
219
+
220
+ Returns:
221
+ UserModel: The same user.
222
+
223
+ Raises:
224
+ NotOrderOwnerException: When the user does not own the order.
225
+ """
226
+ if meta["order_id"] not in user.order_ids:
227
+ raise NotOrderOwnerException()
228
+ return user
229
+
230
+
231
+ @router.delete("/orders/{order_id}")
232
+ @requires(require_active, order_owner, include_args=True)
233
+ async def delete_order(
234
+ order_id: UUID,
235
+ user: UserModel = Depends(get_current_user),
236
+ ) -> None:
237
+ """Delete an order the caller owns.
238
+
239
+ Args:
240
+ order_id (UUID): The order to delete.
241
+ user (UserModel): The authenticated, active, owning user.
242
+ """
243
+ ...
244
+ ```
245
+
246
+ The guard receives `{"order_id": UUID(...)}` without the route handing anything over.
247
+
248
+ !!! info "Merge rules"
249
+ - The **user is excluded** — the guard already receives it as the first parameter.
250
+ - A parameter the caller left out contributes its **default**, so the guard sees the values the body will run with. A default that is an injection marker (`Depends(...)`) is **dropped**, never handed over as a value.
251
+ - A key declared in `meta=` **wins** over an argument of the same name: the decoration is the explicit declaration, the argument is ambient data. `tempest permissions` reports it (`meta-key-collision`), because that argument never reaches the guard.
252
+ - The dict is **fresh per call** and shared by that call's guards — one guard may write a key the next one reads, and nothing leaks into the next request.
253
+
254
+ ### Configuration errors
255
+
256
+ | Situation | What happens |
257
+ | --- | --- |
258
+ | `meta=` is not a mapping | `TempestPermissionError` at import |
259
+ | `meta=` / `include_args=True` with no two-parameter guard | `TempestPermissionError` at import — the configuration would do nothing |
260
+ | a two-parameter guard and a decoration with no `meta=`/`include_args=` | runs with `{}`; `tempest permissions` reports `guard-meta-missing` |
261
+ | a guard with 3+ required parameters | `TempestPermissionError` at import (`expected 1 (user) or 2 (user, meta)`) |
262
+
263
+ To audit what a route declared:
264
+
265
+ ```python
266
+ from tempest_fastapi_sdk import guard_metadata
267
+
268
+ assert guard_metadata(close_month) == {"role": "manager"}
269
+ ```
270
+
271
+ `guard_metadata` returns only the `meta=` literals — whatever `include_args=True` merges exists per call and cannot be read off the function object.
272
+
165
273
  ## Works at any layer
166
274
 
167
275
  Nothing here depends on FastAPI. The same decorator works on a controller or a
@@ -208,6 +316,7 @@ start** with:
208
316
  | `async` guard on a sync function | `is async but ... is not` |
209
317
  | no user parameter | `no parameter annotated with a user model` |
210
318
  | two user parameters | `several parameters are user models` |
319
+ | `meta=`/`include_args=` with no consumer | `no guard declares a second parameter` |
211
320
 
212
321
  ### At call time — `GuardContractWarning`
213
322
 
@@ -251,13 +360,17 @@ The codes it reports:
251
360
  | `no-guards` | error | `@requires()` with no guard: everything passes |
252
361
  | `user-param-missing` | error | no parameter is a user model |
253
362
  | `user-param-ambiguous` | error | several candidates, no `user_param=` |
254
- | `guard-arity` | error | the guard does not take exactly one parameter |
363
+ | `guard-arity` | error | the guard takes neither 1 parameter (user) nor 2 (user, meta) |
364
+ | `meta-unused` | error | `meta=`/`include_args=` with no guard to receive it |
255
365
  | `guard-async-in-sync` | error | `async` guard on a sync function |
256
366
  | `guard-returns-bool` | error | predicate-style guard: its `False` is ignored |
257
367
  | `guard-foreign-exception` | error | raises outside the `AppException` hierarchy |
258
368
  | `guard-never-denies` | warning | nothing in the call graph raises |
259
369
  | `guard-missing-annotation` | warning | parameter or return unannotated |
260
370
  | `guard-return-type` | warning | return is neither the user, `None`, nor their union |
371
+ | `guard-meta-missing` | warning | the guard asks for metadata and the decoration supplies none |
372
+ | `guard-meta-annotation` | warning | the 2nd parameter is annotated as something that cannot hold `dict[str, Any]` |
373
+ | `meta-key-collision` | warning | a `meta=` key shadows a parameter under `include_args=True` |
261
374
  | `guard-unresolved` | warning | the guard is a lambda, lives outside the scanned paths, or its name maps to several definitions |
262
375
 
263
376
  !!! note "Reports instead of guessing"
@@ -308,10 +421,12 @@ obj=order)` and pull the whole registry inside `@requires`.
308
421
 
309
422
  ## Recap
310
423
 
311
- - A **guard** is `(user) -> user | None` that denies by raising an
312
- `AppException`.
424
+ - A **guard** is `(user) -> user | None` — or `(user, meta) -> user | None` —
425
+ that denies by raising an `AppException`.
313
426
  - `@requires(g1, g2)` runs the guards in order, below the route decorator.
314
427
  - The user parameter comes from the annotation; `user_param=` breaks ties.
428
+ - `meta={...}` parameterizes a generic guard; `include_args=True` hands the
429
+ call's arguments to it.
315
430
  - A non-`None` return replaces the user — that is how the type narrows.
316
431
  - Works on routers, controllers and services, sync or `async`.
317
432
  - Misuse: `TempestPermissionError` at import, `GuardContractWarning` at call
@@ -163,6 +163,114 @@ async def me(user: UserModel | None = Depends(get_current_user_soft)) -> UserMod
163
163
 
164
164
  Devolver `None` é permitido e significa "não mexi no usuário".
165
165
 
166
+ ## Metadata: um guard genérico, vários call sites
167
+
168
+ Um guard pode declarar um **segundo parâmetro** `meta: dict[str, Any]`. É isso que transforma um guard genérico numa checagem específica por rota — em vez de escrever `manager_only`, `auditor_only`, `admin_only`, você escreve `has_role` uma vez e cada call site diz qual papel exige.
169
+
170
+ ```python
171
+ from typing import Any
172
+
173
+ from tempest_fastapi_sdk import ForbiddenException, requires
174
+
175
+ from src.db.models import UserModel
176
+
177
+
178
+ def has_role(user: UserModel, meta: dict[str, Any]) -> UserModel:
179
+ """Assert the user holds the role the route declared.
180
+
181
+ Args:
182
+ user (UserModel): The authenticated user.
183
+ meta (dict[str, Any]): Metadata injected by ``@requires``.
184
+
185
+ Returns:
186
+ UserModel: The same user.
187
+
188
+ Raises:
189
+ MissingRoleException: When the declared role is missing.
190
+ """
191
+ if meta["role"] not in user.roles:
192
+ raise MissingRoleException(role=meta["role"])
193
+ return user
194
+
195
+
196
+ @router.post("/reports/close-month")
197
+ @requires(has_role, meta={"role": "manager"})
198
+ async def close_month(user: UserModel = Depends(get_current_user)) -> None:
199
+ """Close the accounting month.
200
+
201
+ Args:
202
+ user (UserModel): The authenticated manager.
203
+ """
204
+ ...
205
+ ```
206
+
207
+ Guards de **um** parâmetro continuam exatamente como antes — o segundo argumento só vai para quem o declara. Você pode misturar os dois numa mesma decoração.
208
+
209
+ ### `include_args=True`: o guard vê os argumentos da chamada
210
+
211
+ `meta=` carrega literais fixados na decoração. Quando a checagem depende do **recurso** da requisição, ligue `include_args=True` e os argumentos da chamada (path params, body, outras dependências) entram no mesmo dicionário:
212
+
213
+ ```python
214
+ def order_owner(user: UserModel, meta: dict[str, Any]) -> UserModel:
215
+ """Assert the user owns the order named by the metadata.
216
+
217
+ Args:
218
+ user (UserModel): The authenticated user.
219
+ meta (dict[str, Any]): Metadata injected by ``@requires``.
220
+
221
+ Returns:
222
+ UserModel: The same user.
223
+
224
+ Raises:
225
+ NotOrderOwnerException: When the user does not own the order.
226
+ """
227
+ if meta["order_id"] not in user.order_ids:
228
+ raise NotOrderOwnerException()
229
+ return user
230
+
231
+
232
+ @router.delete("/orders/{order_id}")
233
+ @requires(require_active, order_owner, include_args=True)
234
+ async def delete_order(
235
+ order_id: UUID,
236
+ user: UserModel = Depends(get_current_user),
237
+ ) -> None:
238
+ """Delete an order the caller owns.
239
+
240
+ Args:
241
+ order_id (UUID): The order to delete.
242
+ user (UserModel): The authenticated, active, owning user.
243
+ """
244
+ ...
245
+ ```
246
+
247
+ O guard recebe `{"order_id": UUID(...)}` sem a rota precisar repassar nada.
248
+
249
+ !!! info "Regras da mesclagem"
250
+ - O **usuário sai** do dicionário — o guard já o recebe no primeiro parâmetro.
251
+ - Parâmetro que o chamador omitiu contribui com o **default**, então o guard vê os valores com que o corpo vai rodar. Default que é marcador de injeção (`Depends(...)`) é **descartado**, nunca entregue como valor.
252
+ - Chave declarada em `meta=` **ganha** de um argumento com o mesmo nome: a decoração é a declaração explícita, o argumento é dado ambiente. O `tempest permissions` avisa (`meta-key-collision`) quando isso acontece, porque o argumento nunca chega ao guard.
253
+ - O dicionário é **novo em cada chamada** e compartilhado pelos guards daquela chamada — um guard pode gravar uma chave que o próximo lê, e nada vaza para a próxima requisição.
254
+
255
+ ### Erros de configuração
256
+
257
+ | Situação | O que acontece |
258
+ | --- | --- |
259
+ | `meta=` não é um mapping | `TempestPermissionError` no import |
260
+ | `meta=` / `include_args=True` sem nenhum guard de 2 parâmetros | `TempestPermissionError` no import — a configuração não faria nada |
261
+ | guard de 2 parâmetros e decoração sem `meta=`/`include_args=` | roda com `{}`; `tempest permissions` avisa `guard-meta-missing` |
262
+ | guard com 3+ parâmetros obrigatórios | `TempestPermissionError` no import (`expected 1 (user) or 2 (user, meta)`) |
263
+
264
+ Para auditar o que uma rota declarou:
265
+
266
+ ```python
267
+ from tempest_fastapi_sdk import guard_metadata
268
+
269
+ assert guard_metadata(close_month) == {"role": "manager"}
270
+ ```
271
+
272
+ `guard_metadata` devolve só os literais de `meta=` — o que `include_args=True` mescla existe por chamada e não dá para ler do objeto função.
273
+
166
274
  ## Funciona em qualquer camada
167
275
 
168
276
  Nada aqui depende do FastAPI. O mesmo decorator vale para controller e service,
@@ -209,6 +317,7 @@ com:
209
317
  | guard `async` em função sync | `is async but ... is not` |
210
318
  | nenhum parâmetro de usuário | `no parameter annotated with a user model` |
211
319
  | dois parâmetros de usuário | `several parameters are user models` |
320
+ | `meta=`/`include_args=` sem consumidor | `no guard declares a second parameter` |
212
321
 
213
322
  ### Em tempo de chamada — `GuardContractWarning`
214
323
 
@@ -251,13 +360,17 @@ Códigos reportados:
251
360
  | `no-guards` | erro | `@requires()` sem guard: tudo passa |
252
361
  | `user-param-missing` | erro | nenhum parâmetro é modelo de usuário |
253
362
  | `user-param-ambiguous` | erro | vários candidatos, sem `user_param=` |
254
- | `guard-arity` | erro | guard não recebe exatamente um parâmetro |
363
+ | `guard-arity` | erro | guard não recebe 1 parâmetro (user) nem 2 (user, meta) |
364
+ | `meta-unused` | erro | `meta=`/`include_args=` sem nenhum guard que receba |
255
365
  | `guard-async-in-sync` | erro | guard `async` em função sync |
256
366
  | `guard-returns-bool` | erro | guard-predicado: o `False` é ignorado |
257
367
  | `guard-foreign-exception` | erro | levanta fora da hierarquia `AppException` |
258
368
  | `guard-never-denies` | warning | nada no grafo de chamadas levanta |
259
369
  | `guard-missing-annotation` | warning | parâmetro ou retorno sem anotação |
260
370
  | `guard-return-type` | warning | retorno não é o usuário, `None` ou a união |
371
+ | `guard-meta-missing` | warning | guard pede metadata e a decoração não passa nenhuma |
372
+ | `guard-meta-annotation` | warning | 2º parâmetro anotado como algo que não recebe `dict[str, Any]` |
373
+ | `meta-key-collision` | warning | chave de `meta=` encobre um parâmetro sob `include_args=True` |
261
374
  | `guard-unresolved` | warning | guard é lambda, está fora do escopo ou o nome bate com várias definições |
262
375
 
263
376
  !!! note "Reporta em vez de adivinhar"
@@ -308,9 +421,10 @@ obj=order)` e ganhar o registry inteiro dentro do `@requires`.
308
421
 
309
422
  ## Recap
310
423
 
311
- - **Guard** = `(user) -> user | None` que nega levantando `AppException`.
424
+ - **Guard** = `(user) -> user | None` — ou `(user, meta) -> user | None` — que nega levantando `AppException`.
312
425
  - `@requires(g1, g2)` roda os guards na ordem, abaixo do decorator de rota.
313
426
  - O parâmetro do usuário sai da anotação; `user_param=` desempata.
427
+ - `meta={...}` parametriza um guard genérico; `include_args=True` entrega os argumentos da chamada ao guard.
314
428
  - Retorno não-`None` substitui o usuário — é assim que o tipo estreita.
315
429
  - Funciona em router, controller e service, sync ou `async`.
316
430
  - Erro de uso: `TempestPermissionError` no import, `GuardContractWarning` na
@@ -235,6 +235,7 @@ Gerada automaticamente a partir das docstrings do SDK via [`mkdocstrings`](https
235
235
  ::: tempest_fastapi_sdk.authz.requires.requires
236
236
  ::: tempest_fastapi_sdk.authz.requires.Guard
237
237
  ::: tempest_fastapi_sdk.authz.requires.declared_guards
238
+ ::: tempest_fastapi_sdk.authz.requires.guard_metadata
238
239
  ::: tempest_fastapi_sdk.authz.requires.guarded_user_param
239
240
  ::: tempest_fastapi_sdk.authz.requires.TempestPermissionError
240
241
  ::: tempest_fastapi_sdk.authz.requires.GuardContractWarning
@@ -131,6 +131,17 @@ GraphQL/gRPC (REST by decision).
131
131
  !!! note "This roadmap is honest, not aspirational"
132
132
  Items past the next cuts only land on the changelog when business pressure pulls them. This page is refreshed on every release — if something belongs here and isn't, open an issue.
133
133
 
134
+ ## Shipped in v0.168.0
135
+
136
+ Permission guards with metadata:
137
+
138
+ | Feature | Status | Where |
139
+ |---------|--------|-------|
140
+ | **Second parameter `meta: dict[str, Any]`** | ✅ v0.168 | A guard may declare a second parameter and receive metadata, which turns a generic guard into a route-specific check: write `has_role` once and let each call site declare `meta={"role": "manager"}`. One-parameter guards are untouched — the second argument only goes to guards that declare it. [Reference »](recipes/permission-guards.md) |
141
+ | **`include_args=True`** | ✅ v0.168 | Merges the call's arguments (path params, body, other dependencies) into the same dict, so an ownership guard reads `meta["order_id"]` without the route handing anything over. User excluded, omitted parameters contribute their default, `Depends(...)` markers dropped, `meta=` literals winning over same-named arguments. |
142
+ | **Misuse still caught at import** | ✅ v0.168 | `TempestPermissionError` when `meta=` is not a mapping, when `meta=`/`include_args=` have no guard to receive them, and when a guard asks for 3+ parameters. `guard_metadata(fn)` exposes the declared literals. |
143
+ | **New static checks** | ✅ v0.168 | `tempest permissions` gained `meta-unused` (error), `guard-meta-missing`, `guard-meta-annotation` and `meta-key-collision` (warnings); `guard-arity` now accepts 1 or 2 parameters. The `meta-unused` verdict is held back when a guard in the decoration could not be resolved. |
144
+
134
145
  ## Shipped in v0.167.0
135
146
 
136
147
  Permission guards — decorator plus a two-layer linter:
@@ -131,6 +131,17 @@ GraphQL/gRPC (REST por decisão).
131
131
  !!! note "O roadmap é honesto, não aspiracional"
132
132
  Itens fora dos próximos cuts só vão pro changelog quando a pressão de negócio puxar. Esta página é atualizada a cada release — se algo deveria estar aqui e não está, abra uma issue.
133
133
 
134
+ ## Entregue na v0.168.0
135
+
136
+ Guards de permissão com metadata:
137
+
138
+ | Feature | Status | Onde |
139
+ |---------|--------|------|
140
+ | **Segundo parâmetro `meta: dict[str, Any]`** | ✅ v0.168 | Um guard pode declarar um segundo parâmetro e receber metadata, o que transforma um guard genérico em checagem específica por rota: escreve-se `has_role` uma vez e cada call site declara `meta={"role": "manager"}`. Guards de um parâmetro seguem intactos — o segundo argumento só vai para quem o declara. [Referência »](recipes/permission-guards.md) |
141
+ | **`include_args=True`** | ✅ v0.168 | Mescla os argumentos da chamada (path params, body, outras dependências) no mesmo dicionário, então um guard de posse lê `meta["order_id"]` sem a rota repassar nada. Usuário fora, default de parâmetro omitido incluído, marcador `Depends(...)` descartado, literal de `meta=` ganhando de argumento homônimo. |
142
+ | **Erro de uso ainda no import** | ✅ v0.168 | `TempestPermissionError` quando `meta=` não é mapping, quando `meta=`/`include_args=` não têm nenhum guard que receba, e quando o guard pede 3+ parâmetros. `guard_metadata(fn)` expõe os literais declarados. |
143
+ | **Checagem estática nova** | ✅ v0.168 | `tempest permissions` ganhou `meta-unused` (erro), `guard-meta-missing`, `guard-meta-annotation` e `meta-key-collision` (warnings); `guard-arity` passou a aceitar 1 ou 2 parâmetros. O veredito `meta-unused` é retido quando algum guard da decoração não pôde ser resolvido. |
144
+
134
145
  ## Entregue na v0.167.0
135
146
 
136
147
  Guards de permissão — decorator + linter em duas camadas:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tempest-fastapi-sdk"
3
- version = "0.167.2"
3
+ version = "0.168.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"
@@ -161,6 +161,7 @@ from tempest_fastapi_sdk.authz import (
161
161
  check_permission,
162
162
  declared_guards,
163
163
  default_registry,
164
+ guard_metadata,
164
165
  guarded_user_param,
165
166
  has_perm,
166
167
  make_permission_checker,
@@ -444,7 +445,7 @@ from tempest_fastapi_sdk.websockets import (
444
445
  make_websocket_router,
445
446
  )
446
447
 
447
- __version__: str = "0.167.2"
448
+ __version__: str = "0.168.0"
448
449
 
449
450
  __all__: list[str] = [
450
451
  "BASE_COLUMN_ORDER",
@@ -768,6 +769,7 @@ __all__: list[str] = [
768
769
  "get_client_ip_from_scope",
769
770
  "get_request_id",
770
771
  "get_state",
772
+ "guard_metadata",
771
773
  "guarded_user_param",
772
774
  "has_perm",
773
775
  "hash_opaque_token",
@@ -32,6 +32,7 @@ from tempest_fastapi_sdk.authz.requires import (
32
32
  TempestPermissionError as TempestPermissionError,
33
33
  )
34
34
  from tempest_fastapi_sdk.authz.requires import declared_guards as declared_guards
35
+ from tempest_fastapi_sdk.authz.requires import guard_metadata as guard_metadata
35
36
  from tempest_fastapi_sdk.authz.requires import guarded_user_param as guarded_user_param
36
37
  from tempest_fastapi_sdk.authz.requires import requires as requires
37
38
 
@@ -48,6 +49,7 @@ __all__: list[str] = [
48
49
  "check_permission",
49
50
  "declared_guards",
50
51
  "default_registry",
52
+ "guard_metadata",
51
53
  "guarded_user_param",
52
54
  "has_perm",
53
55
  "make_permission_checker",