tempest-fastapi-sdk 0.166.0__tar.gz → 0.167.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 (762) hide show
  1. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/CHANGELOG.md +91 -0
  2. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/CLAUDE.md +19 -1
  3. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/PKG-INFO +36 -3
  4. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/README.md +35 -2
  5. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/authz.en.md +7 -0
  6. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/authz.md +7 -0
  7. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/cli.en.md +31 -0
  8. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/cli.md +30 -0
  9. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/openapi-errors.en.md +22 -0
  10. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/openapi-errors.md +22 -0
  11. tempest_fastapi_sdk-0.167.0/docs/recipes/permission-guards.en.md +320 -0
  12. tempest_fastapi_sdk-0.167.0/docs/recipes/permission-guards.md +319 -0
  13. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/reference.md +6 -0
  14. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/roadmap.en.md +13 -0
  15. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/roadmap.md +13 -0
  16. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/mkdocs.yml +2 -0
  17. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/pyproject.toml +1 -1
  18. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/__init__.py +13 -1
  19. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/authz/__init__.py +18 -0
  20. tempest_fastapi_sdk-0.167.0/tempest_fastapi_sdk/authz/requires.py +739 -0
  21. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/main.py +101 -1
  22. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/openapi_errors.py +12 -0
  23. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/openapi_fix.py +61 -8
  24. tempest_fastapi_sdk-0.167.0/tempest_fastapi_sdk/cli/permissions.py +724 -0
  25. tempest_fastapi_sdk-0.167.0/tests/authz/test_requires.py +554 -0
  26. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_openapi_fix.py +94 -0
  27. tempest_fastapi_sdk-0.167.0/tests/cli/test_permissions.py +389 -0
  28. tempest_fastapi_sdk-0.167.0/tests/conftest.py +82 -0
  29. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/test_llmstxt.py +9 -22
  30. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/test_reference_coverage.py +9 -20
  31. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/uv.lock +1 -1
  32. tempest_fastapi_sdk-0.166.0/tests/conftest.py +0 -30
  33. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/.github/workflows/ci.yml +0 -0
  34. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/.github/workflows/docs.yml +0 -0
  35. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/.github/workflows/nightly-model.yml +0 -0
  36. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/.github/workflows/release-pypi.yml +0 -0
  37. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/.gitignore +0 -0
  38. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/.python-version +0 -0
  39. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/Makefile +0 -0
  40. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/admin-showcase.en.md +0 -0
  41. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/admin-showcase.md +0 -0
  42. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/architecture.en.md +0 -0
  43. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/architecture.md +0 -0
  44. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/changelog.en.md +0 -0
  45. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/changelog.md +0 -0
  46. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/contributing.en.md +0 -0
  47. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/contributing.md +0 -0
  48. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/fullstack-web.en.md +0 -0
  49. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/fullstack-web.md +0 -0
  50. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/genai-examples.en.md +0 -0
  51. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/genai-examples.md +0 -0
  52. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/index.en.md +0 -0
  53. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/index.md +0 -0
  54. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/installation.en.md +0 -0
  55. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/installation.md +0 -0
  56. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/integrated.en.md +0 -0
  57. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/integrated.md +0 -0
  58. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/index.en.md +0 -0
  59. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/index.md +0 -0
  60. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/api.en.md +0 -0
  61. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/api.md +0 -0
  62. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/business-rules.en.md +0 -0
  63. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/business-rules.md +0 -0
  64. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/domain.en.md +0 -0
  65. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/domain.md +0 -0
  66. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/flows.en.md +0 -0
  67. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/flows.md +0 -0
  68. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/index.en.md +0 -0
  69. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/learning/marketplace/index.md +0 -0
  70. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/marketplace-local.en.md +0 -0
  71. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/marketplace-local.md +0 -0
  72. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/migration.en.md +0 -0
  73. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/migration.md +0 -0
  74. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/admin.en.md +0 -0
  75. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/admin.md +0 -0
  76. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/artifact-registry.en.md +0 -0
  77. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/artifact-registry.md +0 -0
  78. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/audit-trail.en.md +0 -0
  79. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/audit-trail.md +0 -0
  80. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/auth-flow.en.md +0 -0
  81. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/auth-flow.md +0 -0
  82. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/br-helpers.en.md +0 -0
  83. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/br-helpers.md +0 -0
  84. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/cache.en.md +0 -0
  85. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/cache.md +0 -0
  86. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/chat.en.md +0 -0
  87. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/chat.md +0 -0
  88. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/database.en.md +0 -0
  89. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/database.md +0 -0
  90. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/deploy-safety.en.md +0 -0
  91. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/deploy-safety.md +0 -0
  92. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/downloads.en.md +0 -0
  93. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/downloads.md +0 -0
  94. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/email.en.md +0 -0
  95. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/email.md +0 -0
  96. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/feature-flags.en.md +0 -0
  97. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/feature-flags.md +0 -0
  98. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/fields.en.md +0 -0
  99. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/fields.md +0 -0
  100. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/file-store.en.md +0 -0
  101. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/file-store.md +0 -0
  102. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/genai.en.md +0 -0
  103. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/genai.md +0 -0
  104. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/geo.en.md +0 -0
  105. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/geo.md +0 -0
  106. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/http-client.en.md +0 -0
  107. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/http-client.md +0 -0
  108. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/http.en.md +0 -0
  109. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/http.md +0 -0
  110. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/idempotency.en.md +0 -0
  111. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/idempotency.md +0 -0
  112. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/index.en.md +0 -0
  113. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/index.md +0 -0
  114. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/introspection-auth.en.md +0 -0
  115. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/introspection-auth.md +0 -0
  116. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/logging.en.md +0 -0
  117. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/logging.md +0 -0
  118. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/management-commands.en.md +0 -0
  119. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/management-commands.md +0 -0
  120. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/metrics.en.md +0 -0
  121. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/metrics.md +0 -0
  122. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/mfa.en.md +0 -0
  123. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/mfa.md +0 -0
  124. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/multi-tenant.en.md +0 -0
  125. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/multi-tenant.md +0 -0
  126. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/observability.en.md +0 -0
  127. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/observability.md +0 -0
  128. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/offline-sync.en.md +0 -0
  129. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/offline-sync.md +0 -0
  130. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/openapi-client.en.md +0 -0
  131. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/openapi-client.md +0 -0
  132. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/outbox.en.md +0 -0
  133. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/outbox.md +0 -0
  134. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/queue-tasks.en.md +0 -0
  135. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/queue-tasks.md +0 -0
  136. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/react-spa.en.md +0 -0
  137. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/react-spa.md +0 -0
  138. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/realtime.en.md +0 -0
  139. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/realtime.md +0 -0
  140. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/refresh-tokens.en.md +0 -0
  141. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/refresh-tokens.md +0 -0
  142. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/reviews.en.md +0 -0
  143. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/reviews.md +0 -0
  144. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/security.en.md +0 -0
  145. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/security.md +0 -0
  146. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/sessions.en.md +0 -0
  147. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/sessions.md +0 -0
  148. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/sse.en.md +0 -0
  149. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/sse.md +0 -0
  150. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/storage.en.md +0 -0
  151. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/storage.md +0 -0
  152. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/stored-files.en.md +0 -0
  153. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/stored-files.md +0 -0
  154. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/system-checks.en.md +0 -0
  155. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/system-checks.md +0 -0
  156. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/tempestweb-frontend.en.md +0 -0
  157. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/tempestweb-frontend.md +0 -0
  158. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/testing.en.md +0 -0
  159. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/testing.md +0 -0
  160. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/typing.en.md +0 -0
  161. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/typing.md +0 -0
  162. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/uploads.en.md +0 -0
  163. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/uploads.md +0 -0
  164. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/utilities.en.md +0 -0
  165. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/utilities.md +0 -0
  166. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/vision.en.md +0 -0
  167. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/vision.md +0 -0
  168. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/webpush.en.md +0 -0
  169. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/webpush.md +0 -0
  170. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/websocket.en.md +0 -0
  171. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/recipes/websocket.md +0 -0
  172. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/reference.en.md +0 -0
  173. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/ssr.en.md +0 -0
  174. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/ssr.md +0 -0
  175. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/tour.en.md +0 -0
  176. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/tour.md +0 -0
  177. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/tutorial.en.md +0 -0
  178. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/docs/tutorial.md +0 -0
  179. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/mkdocs_hooks/llmstxt.py +0 -0
  180. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/planning/genai/README.md +0 -0
  181. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/planning/genai/manual-validation.md +0 -0
  182. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/planning/genai/phase-0.md +0 -0
  183. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/planning/genai/phase-1.md +0 -0
  184. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/planning/genai/phase-2.md +0 -0
  185. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/planning/genai/phase-3.md +0 -0
  186. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/planning/genai/validation-strategy.md +0 -0
  187. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/scripts/extract_recipe.py +0 -0
  188. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/__init__.py +0 -0
  189. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/actions.py +0 -0
  190. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/auth.py +0 -0
  191. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/config.py +0 -0
  192. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/dashboard.py +0 -0
  193. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/discovery.py +0 -0
  194. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/forms.py +0 -0
  195. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/permissions.py +0 -0
  196. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/router.py +0 -0
  197. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/session.py +0 -0
  198. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/site.py +0 -0
  199. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/static/admin.css +0 -0
  200. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/autocomplete.html +0 -0
  201. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/base.html +0 -0
  202. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/dashboard.html +0 -0
  203. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/detail.html +0 -0
  204. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/form.html +0 -0
  205. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/import.html +0 -0
  206. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/list.html +0 -0
  207. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/login.html +0 -0
  208. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/logs.html +0 -0
  209. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/templates/mfa.html +0 -0
  210. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/admin/theme.py +0 -0
  211. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/__init__.py +0 -0
  212. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/cookies.py +0 -0
  213. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/dependencies/__init__.py +0 -0
  214. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/dependencies/auth.py +0 -0
  215. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/error_docs.py +0 -0
  216. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/handlers.py +0 -0
  217. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/__init__.py +0 -0
  218. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/body_size.py +0 -0
  219. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/cors.py +0 -0
  220. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/csrf.py +0 -0
  221. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/graceful.py +0 -0
  222. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/idempotency.py +0 -0
  223. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/rate_limit.py +0 -0
  224. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/request_id.py +0 -0
  225. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/middlewares/response_cache.py +0 -0
  226. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/oauth.py +0 -0
  227. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/routers/__init__.py +0 -0
  228. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/routers/health.py +0 -0
  229. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/routers/logs.py +0 -0
  230. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/routers/metrics.py +0 -0
  231. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/routers/tool_spec.py +0 -0
  232. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/server.py +0 -0
  233. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/spa.py +0 -0
  234. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/static.py +0 -0
  235. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/tracing.py +0 -0
  236. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/api/webhooks.py +0 -0
  237. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/artifacts/__init__.py +0 -0
  238. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/artifacts/actions.py +0 -0
  239. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/artifacts/digest.py +0 -0
  240. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/artifacts/model.py +0 -0
  241. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/artifacts/registry.py +0 -0
  242. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/__init__.py +0 -0
  243. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/guards.py +0 -0
  244. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/introspection.py +0 -0
  245. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/locale.py +0 -0
  246. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/page_renderer.py +0 -0
  247. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/router.py +0 -0
  248. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/schemas.py +0 -0
  249. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/service.py +0 -0
  250. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/activation.html +0 -0
  251. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_error.html +0 -0
  252. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/activation_success.html +0 -0
  253. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change.html +0 -0
  254. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change_error.html +0 -0
  255. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/email_change_success.html +0 -0
  256. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/email_changed_notice.html +0 -0
  257. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification.html +0 -0
  258. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification_error.html +0 -0
  259. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/email_verification_success.html +0 -0
  260. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset.html +0 -0
  261. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_error.html +0 -0
  262. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_form.html +0 -0
  263. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/en-US/password_reset_success.html +0 -0
  264. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation.html +0 -0
  265. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_error.html +0 -0
  266. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/activation_success.html +0 -0
  267. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change.html +0 -0
  268. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change_error.html +0 -0
  269. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_change_success.html +0 -0
  270. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_changed_notice.html +0 -0
  271. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification.html +0 -0
  272. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification_error.html +0 -0
  273. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/email_verification_success.html +0 -0
  274. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset.html +0 -0
  275. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_error.html +0 -0
  276. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_form.html +0 -0
  277. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/templates/pt-BR/password_reset_success.html +0 -0
  278. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/auth/token_delivery.py +0 -0
  279. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/authz/dependencies.py +0 -0
  280. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/authz/permissions.py +0 -0
  281. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cache/__init__.py +0 -0
  282. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cache/decorator.py +0 -0
  283. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cache/invalidation.py +0 -0
  284. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cache/redis_manager.py +0 -0
  285. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/chat/__init__.py +0 -0
  286. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/chat/models.py +0 -0
  287. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/chat/router.py +0 -0
  288. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/chat/schemas.py +0 -0
  289. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/chat/service.py +0 -0
  290. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/checks/__init__.py +0 -0
  291. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/checks/builtins.py +0 -0
  292. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/checks/messages.py +0 -0
  293. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/checks/registry.py +0 -0
  294. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/__init__.py +0 -0
  295. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/Dockerfile.tmpl +0 -0
  296. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/README.md.tmpl +0 -0
  297. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/dockerignore.tmpl +0 -0
  298. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/env.example.tmpl +0 -0
  299. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/gitignore.tmpl +0 -0
  300. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/main.py.tmpl +0 -0
  301. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/pyproject.toml.tmpl +0 -0
  302. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/__init__.py.tmpl +0 -0
  303. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/api/__init__.py.tmpl +0 -0
  304. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/api/app.py.tmpl +0 -0
  305. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/__init__.py.tmpl +0 -0
  306. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/auth.py.tmpl +0 -0
  307. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/api/dependencies/resources.py.tmpl +0 -0
  308. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/api/routers/__init__.py.tmpl +0 -0
  309. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/controllers/__init__.py.tmpl +0 -0
  310. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/core/__init__.py.tmpl +0 -0
  311. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/core/exceptions.py.tmpl +0 -0
  312. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/core/settings.py.tmpl +0 -0
  313. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/db/__init__.py.tmpl +0 -0
  314. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/__init__.py.tmpl +0 -0
  315. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/db/models/user.py.tmpl +0 -0
  316. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/db/repositories/__init__.py.tmpl +0 -0
  317. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/schemas/__init__.py.tmpl +0 -0
  318. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/server.py.tmpl +0 -0
  319. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/services/__init__.py.tmpl +0 -0
  320. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/src/utils/__init__.py.tmpl +0 -0
  321. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/tests/__init__.py.tmpl +0 -0
  322. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/_templates/tests/test_smoke.py.tmpl +0 -0
  323. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/commands.py +0 -0
  324. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/config.py +0 -0
  325. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/db.py +0 -0
  326. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/docker_compose.py +0 -0
  327. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/generate.py +0 -0
  328. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/lint.py +0 -0
  329. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/new.py +0 -0
  330. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/secrets.py +0 -0
  331. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/src_layers.py +0 -0
  332. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/cli/user.py +0 -0
  333. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/controllers/__init__.py +0 -0
  334. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/controllers/base.py +0 -0
  335. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/core/__init__.py +0 -0
  336. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/core/context.py +0 -0
  337. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/core/enums.py +0 -0
  338. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/core/logging.py +0 -0
  339. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/core/typed.py +0 -0
  340. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/__init__.py +0 -0
  341. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/_alembic_templates/__init__.py +0 -0
  342. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/_alembic_templates/env.py.template +0 -0
  343. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/alembic_hooks.py +0 -0
  344. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/audit.py +0 -0
  345. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/backup.py +0 -0
  346. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/connection.py +0 -0
  347. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/expressions.py +0 -0
  348. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/migrations.py +0 -0
  349. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/mixins.py +0 -0
  350. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/model.py +0 -0
  351. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/outbox.py +0 -0
  352. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/repository.py +0 -0
  353. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/signals.py +0 -0
  354. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/slow_query.py +0 -0
  355. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/tenant.py +0 -0
  356. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/user_model.py +0 -0
  357. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/user_recovery_code_model.py +0 -0
  358. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/user_refresh_token_model.py +0 -0
  359. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/user_token_model.py +0 -0
  360. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/db/webpush_subscription_model.py +0 -0
  361. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/__init__.py +0 -0
  362. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/base.py +0 -0
  363. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/conflict.py +0 -0
  364. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/forbidden.py +0 -0
  365. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/i18n.py +0 -0
  366. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/jwt.py +0 -0
  367. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/not_found.py +0 -0
  368. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/too_many_requests.py +0 -0
  369. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/unauthorized.py +0 -0
  370. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/upload.py +0 -0
  371. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/exceptions/validation.py +0 -0
  372. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/flags/__init__.py +0 -0
  373. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/flags/backends.py +0 -0
  374. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/flags/dependencies.py +0 -0
  375. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/flags/service.py +0 -0
  376. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/__init__.py +0 -0
  377. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/audio/__init__.py +0 -0
  378. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/audio/language.py +0 -0
  379. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/audio/schemas.py +0 -0
  380. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/audio/stt.py +0 -0
  381. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/audio/tts.py +0 -0
  382. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/batching.py +0 -0
  383. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/embeddings.py +0 -0
  384. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/generation_cache.py +0 -0
  385. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/hardware.py +0 -0
  386. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/metrics.py +0 -0
  387. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/moderation.py +0 -0
  388. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/ollama.py +0 -0
  389. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/onnx_embed.py +0 -0
  390. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/pipeline.py +0 -0
  391. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/__init__.py +0 -0
  392. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/chroma.py +0 -0
  393. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/chunking.py +0 -0
  394. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/context.py +0 -0
  395. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/extract.py +0 -0
  396. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/fusion.py +0 -0
  397. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/hybrid.py +0 -0
  398. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/pdf.py +0 -0
  399. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/rerank.py +0 -0
  400. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/retriever.py +0 -0
  401. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/schemas.py +0 -0
  402. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/search.py +0 -0
  403. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/rag/vectorstore.py +0 -0
  404. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/registry.py +0 -0
  405. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/router.py +0 -0
  406. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/schemas.py +0 -0
  407. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/structured.py +0 -0
  408. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/text.py +0 -0
  409. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/tokens.py +0 -0
  410. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/tracing.py +0 -0
  411. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/genai/vision_text.py +0 -0
  412. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/__init__.py +0 -0
  413. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/br.py +0 -0
  414. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/db.py +0 -0
  415. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/distance.py +0 -0
  416. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/enums.py +0 -0
  417. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/estimate.py +0 -0
  418. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/geocoding.py +0 -0
  419. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/geometry.py +0 -0
  420. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/polyline.py +0 -0
  421. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/routing.py +0 -0
  422. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/geo/schemas.py +0 -0
  423. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/__init__.py +0 -0
  424. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/emit_client.py +0 -0
  425. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/emit_schemas.py +0 -0
  426. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/generate.py +0 -0
  427. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/ir.py +0 -0
  428. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/loader.py +0 -0
  429. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/naming.py +0 -0
  430. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/openapi/parse.py +0 -0
  431. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/py.typed +0 -0
  432. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/queue/__init__.py +0 -0
  433. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/queue/broker.py +0 -0
  434. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/queue/consumer.py +0 -0
  435. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/queue/manager.py +0 -0
  436. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/reviews/__init__.py +0 -0
  437. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/reviews/models.py +0 -0
  438. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/reviews/router.py +0 -0
  439. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/reviews/schemas.py +0 -0
  440. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/reviews/service.py +0 -0
  441. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/schemas/__init__.py +0 -0
  442. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/schemas/base.py +0 -0
  443. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/schemas/errors.py +0 -0
  444. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/schemas/link_headers.py +0 -0
  445. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/schemas/logs.py +0 -0
  446. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/schemas/pagination.py +0 -0
  447. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/schemas/response.py +0 -0
  448. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/services/__init__.py +0 -0
  449. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/services/base.py +0 -0
  450. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/services/file_mixin.py +0 -0
  451. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sessions/__init__.py +0 -0
  452. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sessions/dependencies.py +0 -0
  453. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sessions/middleware.py +0 -0
  454. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sessions/router.py +0 -0
  455. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sessions/schemas.py +0 -0
  456. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sessions/service.py +0 -0
  457. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sessions/store.py +0 -0
  458. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/settings/__init__.py +0 -0
  459. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/settings/base.py +0 -0
  460. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/settings/mixins.py +0 -0
  461. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sse/__init__.py +0 -0
  462. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sse/broker.py +0 -0
  463. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/sse/event_stream.py +0 -0
  464. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/ssr/__init__.py +0 -0
  465. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/ssr/_static/htmx.min.js +0 -0
  466. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/ssr/assets.py +0 -0
  467. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/ssr/attributes.py +0 -0
  468. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/ssr/page.py +0 -0
  469. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/ssr/response.py +0 -0
  470. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/ssr/webapp.py +0 -0
  471. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/storage/__init__.py +0 -0
  472. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/storage/minio_client.py +0 -0
  473. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/__init__.py +0 -0
  474. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/cron.py +0 -0
  475. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/dead_letter.py +0 -0
  476. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/manager.py +0 -0
  477. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/observability.py +0 -0
  478. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/oop.py +0 -0
  479. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/queue.py +0 -0
  480. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/tasks/scheduler.py +0 -0
  481. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/testing/__init__.py +0 -0
  482. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/testing/database.py +0 -0
  483. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/testing/factories.py +0 -0
  484. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/__init__.py +0 -0
  485. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/client_ip.py +0 -0
  486. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/data/br_locations.json +0 -0
  487. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/datetime.py +0 -0
  488. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/dict.py +0 -0
  489. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/download.py +0 -0
  490. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/email.py +0 -0
  491. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/fields.py +0 -0
  492. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/file_store.py +0 -0
  493. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/http_client.py +0 -0
  494. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/jwt.py +0 -0
  495. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/locations.py +0 -0
  496. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/log.py +0 -0
  497. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/metrics.py +0 -0
  498. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/opaque_token.py +0 -0
  499. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/password.py +0 -0
  500. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/regex.py +0 -0
  501. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/storage_backends.py +0 -0
  502. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/throttle.py +0 -0
  503. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/totp.py +0 -0
  504. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/utils/upload.py +0 -0
  505. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/vision/__init__.py +0 -0
  506. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/vision/mapping.py +0 -0
  507. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/vision/router.py +0 -0
  508. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/vision/schemas.py +0 -0
  509. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/webpush/__init__.py +0 -0
  510. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/webpush/dispatcher.py +0 -0
  511. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/webpush/router.py +0 -0
  512. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/webpush/schemas.py +0 -0
  513. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/webpush/service.py +0 -0
  514. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/websockets/__init__.py +0 -0
  515. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/websockets/hub.py +0 -0
  516. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/websockets/router.py +0 -0
  517. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tempest_fastapi_sdk/websockets/schemas.py +0 -0
  518. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/__init__.py +0 -0
  519. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/__init__.py +0 -0
  520. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_actions.py +0 -0
  521. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_audit_viewer.py +0 -0
  522. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_auth.py +0 -0
  523. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_autocomplete_fk.py +0 -0
  524. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_csv_import.py +0 -0
  525. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_dashboard_cards.py +0 -0
  526. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_discovery.py +0 -0
  527. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_forms.py +0 -0
  528. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_inlines.py +0 -0
  529. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_lenses.py +0 -0
  530. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_logs_nav.py +0 -0
  531. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_mfa.py +0 -0
  532. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_rbac.py +0 -0
  533. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_rich_filters.py +0 -0
  534. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_router.py +0 -0
  535. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_site.py +0 -0
  536. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_theme.py +0 -0
  537. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_upload_field.py +0 -0
  538. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_user_model.py +0 -0
  539. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/admin/test_widgets_json_time.py +0 -0
  540. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/__init__.py +0 -0
  541. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_body_size.py +0 -0
  542. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_business_metrics.py +0 -0
  543. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_cookies.py +0 -0
  544. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_cors.py +0 -0
  545. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_csrf.py +0 -0
  546. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_dependencies_auth.py +0 -0
  547. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_error_docs.py +0 -0
  548. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_graceful.py +0 -0
  549. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_handlers.py +0 -0
  550. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_health_router.py +0 -0
  551. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_idempotency.py +0 -0
  552. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_jwt_dependency.py +0 -0
  553. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_logs_router.py +0 -0
  554. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_oauth.py +0 -0
  555. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_outbound_webhooks.py +0 -0
  556. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_prometheus.py +0 -0
  557. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_rate_limit.py +0 -0
  558. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_rate_limit_extras.py +0 -0
  559. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_request_id_middleware.py +0 -0
  560. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_response_cache.py +0 -0
  561. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_role_dependency.py +0 -0
  562. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_server.py +0 -0
  563. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_spa.py +0 -0
  564. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_static.py +0 -0
  565. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_tool_spec.py +0 -0
  566. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_tracing.py +0 -0
  567. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_webhooks.py +0 -0
  568. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/api/test_webhooks_rsa.py +0 -0
  569. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/artifacts/__init__.py +0 -0
  570. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/artifacts/support.py +0 -0
  571. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/artifacts/test_actions.py +0 -0
  572. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/artifacts/test_digest.py +0 -0
  573. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/artifacts/test_registry.py +0 -0
  574. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/__init__.py +0 -0
  575. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_cookie_delivery.py +0 -0
  576. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_email_change.py +0 -0
  577. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_guards.py +0 -0
  578. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_introspection.py +0 -0
  579. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_locale.py +0 -0
  580. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_mfa.py +0 -0
  581. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_refresh.py +0 -0
  582. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_refresh_db.py +0 -0
  583. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/auth/test_service.py +0 -0
  584. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/authz/__init__.py +0 -0
  585. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/authz/test_dependencies.py +0 -0
  586. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/authz/test_permissions.py +0 -0
  587. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cache/__init__.py +0 -0
  588. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cache/test_decorator.py +0 -0
  589. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cache/test_invalidation.py +0 -0
  590. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cache/test_redis_manager.py +0 -0
  591. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/chat/__init__.py +0 -0
  592. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/chat/test_chat.py +0 -0
  593. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/checks/__init__.py +0 -0
  594. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/checks/test_check_config_cli.py +0 -0
  595. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/checks/test_checks.py +0 -0
  596. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/__init__.py +0 -0
  597. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_config.py +0 -0
  598. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_db.py +0 -0
  599. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_db_seed.py +0 -0
  600. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_docker_compose.py +0 -0
  601. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_dockerfile_spa.py +0 -0
  602. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_generate.py +0 -0
  603. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_lint_strictness.py +0 -0
  604. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_main.py +0 -0
  605. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_management_commands.py +0 -0
  606. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_openapi_errors.py +0 -0
  607. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_secrets.py +0 -0
  608. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/cli/test_user.py +0 -0
  609. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/controllers/__init__.py +0 -0
  610. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/controllers/test_base.py +0 -0
  611. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/core/__init__.py +0 -0
  612. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/core/test_context.py +0 -0
  613. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/core/test_enums.py +0 -0
  614. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/core/test_logging.py +0 -0
  615. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/core/test_typed.py +0 -0
  616. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/__init__.py +0 -0
  617. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_alembic_hooks.py +0 -0
  618. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_audit.py +0 -0
  619. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_backup.py +0 -0
  620. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_bulk_ops.py +0 -0
  621. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_connection.py +0 -0
  622. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_eager_load.py +0 -0
  623. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_expressions.py +0 -0
  624. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_migrations.py +0 -0
  625. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_mixins.py +0 -0
  626. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_model.py +0 -0
  627. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_outbox.py +0 -0
  628. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_repository.py +0 -0
  629. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_safe_upgrade.py +0 -0
  630. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_signals.py +0 -0
  631. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_slow_query.py +0 -0
  632. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/db/test_tenant.py +0 -0
  633. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/exceptions/__init__.py +0 -0
  634. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/exceptions/test_exceptions.py +0 -0
  635. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/exceptions/test_i18n.py +0 -0
  636. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/exceptions/test_inherited_code_warning.py +0 -0
  637. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/flags/__init__.py +0 -0
  638. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/flags/test_flags.py +0 -0
  639. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/__init__.py +0 -0
  640. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/_eval/__init__.py +0 -0
  641. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/_eval/corpus.py +0 -0
  642. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/audio/__init__.py +0 -0
  643. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/audio/test_audio.py +0 -0
  644. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/audio/test_language.py +0 -0
  645. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/conftest.py +0 -0
  646. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_batching.py +0 -0
  647. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_chat_memory.py +0 -0
  648. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_embedding_cache_redis.py +0 -0
  649. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_embeddings.py +0 -0
  650. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_eval_harness.py +0 -0
  651. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_genai_metrics.py +0 -0
  652. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_generation_cache.py +0 -0
  653. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_generation_config.py +0 -0
  654. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_gpu_validation.py +0 -0
  655. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_hardware.py +0 -0
  656. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_hybrid.py +0 -0
  657. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_moderation.py +0 -0
  658. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_ollama.py +0 -0
  659. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_onnx_embed.py +0 -0
  660. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_pipeline.py +0 -0
  661. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_pipeline_integration.py +0 -0
  662. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_rag.py +0 -0
  663. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_refinements.py +0 -0
  664. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_rerank.py +0 -0
  665. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_router.py +0 -0
  666. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_structured.py +0 -0
  667. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_text.py +0 -0
  668. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_textgen_embed_metrics.py +0 -0
  669. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_tokens.py +0 -0
  670. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_tracing.py +0 -0
  671. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_vectorstore.py +0 -0
  672. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/genai/test_vision_text.py +0 -0
  673. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/__init__.py +0 -0
  674. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_br.py +0 -0
  675. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_db.py +0 -0
  676. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_distance.py +0 -0
  677. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_estimate.py +0 -0
  678. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_geocoding.py +0 -0
  679. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_geometry.py +0 -0
  680. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_polyline.py +0 -0
  681. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_routing.py +0 -0
  682. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/geo/test_routing_extra.py +0 -0
  683. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/openapi/__init__.py +0 -0
  684. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/openapi/conftest.py +0 -0
  685. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/openapi/test_generate.py +0 -0
  686. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/openapi/test_loader.py +0 -0
  687. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/openapi/test_naming.py +0 -0
  688. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/openapi/test_parse.py +0 -0
  689. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/queue/__init__.py +0 -0
  690. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/queue/test_broker.py +0 -0
  691. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/queue/test_consumer.py +0 -0
  692. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/queue/test_manager.py +0 -0
  693. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/reviews/__init__.py +0 -0
  694. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/reviews/test_reviews.py +0 -0
  695. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/schemas/__init__.py +0 -0
  696. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/schemas/test_base.py +0 -0
  697. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/schemas/test_cursor_pagination.py +0 -0
  698. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/schemas/test_errors.py +0 -0
  699. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/schemas/test_link_headers.py +0 -0
  700. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/schemas/test_pagination.py +0 -0
  701. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/schemas/test_response.py +0 -0
  702. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/services/__init__.py +0 -0
  703. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/services/test_base.py +0 -0
  704. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/services/test_file_mixin.py +0 -0
  705. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/sessions/__init__.py +0 -0
  706. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/sessions/test_sessions.py +0 -0
  707. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/settings/__init__.py +0 -0
  708. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/settings/test_base.py +0 -0
  709. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/settings/test_mixins.py +0 -0
  710. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/sse/__init__.py +0 -0
  711. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/sse/test_broker.py +0 -0
  712. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/sse/test_event_stream.py +0 -0
  713. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/ssr/__init__.py +0 -0
  714. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/ssr/test_attributes.py +0 -0
  715. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/ssr/test_integration.py +0 -0
  716. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/ssr/test_page.py +0 -0
  717. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/ssr/test_response.py +0 -0
  718. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/ssr/test_webapp.py +0 -0
  719. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/storage/__init__.py +0 -0
  720. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/storage/test_minio_client.py +0 -0
  721. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/__init__.py +0 -0
  722. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/test_cron.py +0 -0
  723. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/test_dead_letter.py +0 -0
  724. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/test_manager.py +0 -0
  725. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/test_observability.py +0 -0
  726. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/test_oop.py +0 -0
  727. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/test_queue.py +0 -0
  728. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/tasks/test_scheduler.py +0 -0
  729. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/test_docs_api_guard.py +0 -0
  730. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/testing/__init__.py +0 -0
  731. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/testing/test_database.py +0 -0
  732. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/testing/test_factories.py +0 -0
  733. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/__init__.py +0 -0
  734. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_client_ip.py +0 -0
  735. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_datetime.py +0 -0
  736. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_dict.py +0 -0
  737. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_download.py +0 -0
  738. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_email.py +0 -0
  739. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_fields.py +0 -0
  740. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_file_store.py +0 -0
  741. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_http_client.py +0 -0
  742. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_jwt.py +0 -0
  743. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_lazy_extras.py +0 -0
  744. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_locations.py +0 -0
  745. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_log.py +0 -0
  746. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_metrics.py +0 -0
  747. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_opaque_token.py +0 -0
  748. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_password.py +0 -0
  749. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_regex.py +0 -0
  750. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_storage_backends.py +0 -0
  751. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_throttle.py +0 -0
  752. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/utils/test_upload.py +0 -0
  753. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/vision/__init__.py +0 -0
  754. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/vision/test_router.py +0 -0
  755. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/vision/test_vision.py +0 -0
  756. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/webpush/__init__.py +0 -0
  757. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/webpush/test_dispatcher.py +0 -0
  758. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/webpush/test_router.py +0 -0
  759. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/webpush/test_schemas.py +0 -0
  760. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/webpush/test_service.py +0 -0
  761. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/websockets/__init__.py +0 -0
  762. {tempest_fastapi_sdk-0.166.0 → tempest_fastapi_sdk-0.167.0}/tests/websockets/test_hub_and_router.py +0 -0
@@ -5,6 +5,97 @@ 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.167.0] — 2026-07-26
9
+
10
+ Permission guards: a decorator that runs plain `(user) -> user | None`
11
+ functions before a function body, plus the two-layer misuse check the user
12
+ asked for — fail-fast at import time, static gate in CI.
13
+
14
+ ### Added
15
+
16
+ - **`@requires(*guards, user_param=None)`** (`tempest_fastapi_sdk.authz`,
17
+ re-exported at the package root). Runs each guard on the user before the
18
+ decorated body, left to right, on a route handler, a controller or a service
19
+ method, sync or `async`. A guard receives the user, denies by raising an
20
+ `AppException` subclass (so the status, the error `code` and the
21
+ `{detail, code, details}` envelope come from `register_exception_handlers`),
22
+ and returns the user or `None`; a non-`None` return replaces the user the next
23
+ guard and the body see, which is how `require_authenticated` /
24
+ `require_active` / `require_admin` narrow `UserT | None` to `UserT`.
25
+ The user parameter is resolved from the annotations — the single parameter
26
+ typed as a `BaseModel` / `BaseUserModel` subclass — with `user_param=` to
27
+ name it explicitly or disambiguate two user models. The wrapper keeps the
28
+ decorated signature (with annotations already evaluated, so FastAPI resolves
29
+ them against the right module), leaving dependency injection and the OpenAPI
30
+ schema untouched.
31
+ - **`TempestPermissionError`** — raised at decoration time (import time) for
32
+ `@requires()` with no guard, a non-callable guard, a guard that does not take
33
+ exactly one fillable parameter, an `async` guard under a synchronous function,
34
+ or a decorated function whose user parameter cannot be resolved. The
35
+ application refuses to start instead of running a check that never fires.
36
+ - **`GuardContractWarning`** — warned at call time when a guard raises outside
37
+ the `AppException` hierarchy (the API layer would answer HTTP 500 with no
38
+ error code) or returns a non-user value such as `False` (a predicate-style
39
+ check whose denial cannot be honored). The original exception still
40
+ propagates; the warning names the guard.
41
+ - **`declared_guards(fn)` / `guarded_user_param(fn)`** — read a function's
42
+ guards and its user parameter without calling it, for a router audit or a
43
+ test asserting every write route carries a guard.
44
+ - **`tempest permissions [--check] [--strict] [--path]`** — static contract
45
+ check over the project source (`ast`, without importing the application), for
46
+ what runtime validation cannot see: a guard whose `raise` no test exercises, a
47
+ guard never wired. Errors: `no-guards`, `user-param-missing`,
48
+ `user-param-ambiguous`, `guard-arity`, `guard-async-in-sync`,
49
+ `guard-returns-bool`, `guard-foreign-exception`. Warnings:
50
+ `guard-never-denies`, `guard-missing-annotation`, `guard-return-type`,
51
+ `guard-unresolved`. `--check` exits non-zero on errors, `--strict` on warnings
52
+ too. Guards resolve by name; an ambiguous or out-of-scope name is reported as
53
+ `guard-unresolved` rather than checked against the wrong definition.
54
+
55
+ ### Changed
56
+
57
+ - **`tempest openapi-errors` now follows `@requires` guards.** A guard denies by
58
+ raising, so its exceptions are as reachable from the route as those of any
59
+ function the body calls; they now show up as `undocumented` until the route
60
+ declares them, and `--fix` writes them like any other.
61
+
62
+ ## [0.166.1] — 2026-07-25
63
+
64
+ Post-release validation of `--fix` against the published wheel, in a project
65
+ that is not this repository. Three things only that setting can show.
66
+
67
+ ### Fixed
68
+
69
+ - **`--fix` now formats with the target project's ruff config.** The scratch
70
+ file it hands to ruff was created in the system temp directory, where ruff
71
+ finds no `pyproject.toml` and falls back to its own defaults. A project on
72
+ `line-length = 120`, or with custom `isort` sections, got output formatted to
73
+ ruff's defaults — which its own `ruff format --check` then rejected, on a file
74
+ the command had just written. The scratch file is now created next to the file
75
+ being rewritten, so settings resolve the same way they do for the project.
76
+ `normalize()` takes a `near=` directory for this.
77
+ - **Silent skip of that formatting is now reported.** `ruff` was resolved as
78
+ "on `PATH`, else `uv run ruff`", and neither branch was verified. Invoked by
79
+ absolute path from a venv (`/…/.venv/bin/tempest`), that venv's `bin/` is not
80
+ on `PATH`, so resolution fell through to `uv run ruff` — which exists but
81
+ cannot run outside a uv project, failing silently under `check=False`. The
82
+ write then emitted an unsorted import and an over-long decorator with no hint
83
+ why. New `ruff_runner()` adds `python -m ruff` for the importable-but-not-on-
84
+ `PATH` case, probes every candidate with `--version`, and the command prints a
85
+ `note:` line pointing at `tempest fix` when none works.
86
+ - **The `docs`-marked tests no longer trust a stale `site/`.** Both fixtures
87
+ rebuilt only when the built file was *absent*, so an out-of-date local build
88
+ was read as current: 14 tests failed on a clean `main` naming pages and
89
+ symbols that were in fact present. CI never saw it, having no `site/` at all.
90
+ A single `built_site` fixture now lives in `tests/conftest.py` and rebuilds
91
+ whenever `mkdocs.yml`, `docs/` or `mkdocs_hooks/` is newer than the output.
92
+
93
+ ### Added
94
+
95
+ - **`ruff_runner()`** in `tempest_fastapi_sdk.cli.openapi_fix` — returns a
96
+ probed argv prefix that runs ruff, or `None`. Exported for callers that want
97
+ to make the same "can I format this?" decision.
98
+
8
99
  ## [0.166.0] — 2026-07-25
9
100
 
10
101
  ### Added
@@ -75,6 +75,24 @@ The SDK currently covers (Sep 2025+, post-v0.31.x):
75
75
  `refresh_token_model=` on `UserAuthService`) with rotation,
76
76
  family-wide reuse detection and `POST /auth/logout`
77
77
  (`LogoutSchema`).
78
+ - **Permission guards (v0.167.0)** — `@requires(*guards, user_param=None)`
79
+ (`tempest_fastapi_sdk.authz`, re-exported at the root) runs plain
80
+ `(user) -> user | None` guards before a function body, at any layer, sync or
81
+ async; guards deny by raising an `AppException`, and a non-`None` return
82
+ replaces the user the body sees (how `require_active` narrows `UserT | None`).
83
+ The user param resolves from the annotations (`BaseModel`/`BaseUserModel`
84
+ subclass), `user_param=` disambiguates. Misuse caught in three places:
85
+ `TempestPermissionError` at import (no guard, wrong arity, async guard on a
86
+ sync fn, unresolvable user param), `GuardContractWarning` at call time
87
+ (foreign exception, `return False`), and
88
+ `tempest permissions [--check|--strict|--path]` statically (`ast`) — errors
89
+ `no-guards`/`user-param-missing`/`user-param-ambiguous`/`guard-arity`/
90
+ `guard-async-in-sync`/`guard-returns-bool`/`guard-foreign-exception`,
91
+ warnings `guard-never-denies`/`guard-missing-annotation`/`guard-return-type`/
92
+ `guard-unresolved` (ambiguous or out-of-scope guard reported, never guessed).
93
+ `openapi-errors` follows the guards, so their exceptions land in
94
+ `error_responses(...)`. `declared_guards`/`guarded_user_param` introspect a
95
+ route. Recipe: `docs/recipes/permission-guards.md`.
78
96
  - **DB** — `AsyncDatabaseManager`, `BaseRepository[T]` with
79
97
  bulk ops (`bulk_create_values`, `bulk_upsert`, `bulk_update`,
80
98
  `add_all`, etc.), `AlembicHelper`, `BaseModel`, audit /
@@ -377,7 +395,7 @@ The SDK currently covers (Sep 2025+, post-v0.31.x):
377
395
  `tempest db init/revision/upgrade/downgrade/current/history/seed`,
378
396
  `tempest user create [--admin] / list`, `tempest secrets rotate`,
379
397
  plus quality gates (`lint`, `fix`, `format`, `fmt-check`, `type`,
380
- `test`, `check`), `openapi-errors`, `openapi-client`.
398
+ `test`, `check`), `openapi-errors`, `openapi-client`, `permissions`.
381
399
 
382
400
  The whole Tier S / Tier A / Tier B backlog that used to live here is
383
401
  **shipped**, and so is the five-item next-version plan that followed it
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tempest-fastapi-sdk
3
- Version: 0.166.0
3
+ Version: 0.167.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
@@ -237,7 +237,7 @@ Via `pyproject.toml`:
237
237
 
238
238
  ```toml
239
239
  dependencies = [
240
- "tempest-fastapi-sdk>=0.161.0",
240
+ "tempest-fastapi-sdk>=0.167.0",
241
241
  ]
242
242
  ```
243
243
 
@@ -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` |
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` |
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` |
@@ -4147,6 +4147,39 @@ tempest openapi-errors --fix # write them (needs a clean git tree)
4147
4147
 
4148
4148
  ---
4149
4149
 
4150
+ ### Permission guards
4151
+
4152
+ `@requires` runs plain `(user) -> user | None` guards before a function body — on a route, a controller or a service, sync or `async`. A guard denies by raising an `AppException`, so the HTTP status, the error `code` and the `{detail, code, details}` envelope come from the SDK handlers.
4153
+
4154
+ ```python
4155
+ from fastapi import Depends
4156
+ from tempest_fastapi_sdk import error_responses, requires
4157
+ from tempest_fastapi_sdk.auth import require_active
4158
+
4159
+
4160
+ @router.delete("/orders/{order_id}", responses=error_responses(NotOrderOwnerException))
4161
+ @requires(require_active, order_owner)
4162
+ async def delete_order(
4163
+ order_id: UUID,
4164
+ user: UserModel = Depends(get_current_user),
4165
+ ) -> None:
4166
+ """The body runs only for an active user who owns the order."""
4167
+ await controller.delete(order_id)
4168
+ ```
4169
+
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
+
4172
+ 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
+
4174
+ ```bash
4175
+ tempest permissions --check # exit 1 on any error
4176
+ tempest permissions --check --strict # fail on warnings too
4177
+ ```
4178
+
4179
+ `tempest openapi-errors` reads the `@requires` guards too, so a guard's exception shows up as `undocumented` on the route until it is declared. Full walkthrough: [Permission guards](https://mauriciobenjamin700.github.io/tempest-fastapi-sdk/en/recipes/permission-guards/).
4180
+
4181
+ ---
4182
+
4150
4183
  ## Conventions
4151
4184
 
4152
4185
  - **Layered architecture**: routers → controllers → services → repositories. Never skip layers.
@@ -91,7 +91,7 @@ Via `pyproject.toml`:
91
91
 
92
92
  ```toml
93
93
  dependencies = [
94
- "tempest-fastapi-sdk>=0.161.0",
94
+ "tempest-fastapi-sdk>=0.167.0",
95
95
  ]
96
96
  ```
97
97
 
@@ -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` |
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` |
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` |
@@ -4001,6 +4001,39 @@ tempest openapi-errors --fix # write them (needs a clean git tree)
4001
4001
 
4002
4002
  ---
4003
4003
 
4004
+ ### Permission guards
4005
+
4006
+ `@requires` runs plain `(user) -> user | None` guards before a function body — on a route, a controller or a service, sync or `async`. A guard denies by raising an `AppException`, so the HTTP status, the error `code` and the `{detail, code, details}` envelope come from the SDK handlers.
4007
+
4008
+ ```python
4009
+ from fastapi import Depends
4010
+ from tempest_fastapi_sdk import error_responses, requires
4011
+ from tempest_fastapi_sdk.auth import require_active
4012
+
4013
+
4014
+ @router.delete("/orders/{order_id}", responses=error_responses(NotOrderOwnerException))
4015
+ @requires(require_active, order_owner)
4016
+ async def delete_order(
4017
+ order_id: UUID,
4018
+ user: UserModel = Depends(get_current_user),
4019
+ ) -> None:
4020
+ """The body runs only for an active user who owns the order."""
4021
+ await controller.delete(order_id)
4022
+ ```
4023
+
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
+
4026
+ 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
+
4028
+ ```bash
4029
+ tempest permissions --check # exit 1 on any error
4030
+ tempest permissions --check --strict # fail on warnings too
4031
+ ```
4032
+
4033
+ `tempest openapi-errors` reads the `@requires` guards too, so a guard's exception shows up as `undocumented` on the route until it is declared. Full walkthrough: [Permission guards](https://mauriciobenjamin700.github.io/tempest-fastapi-sdk/en/recipes/permission-guards/).
4034
+
4035
+ ---
4036
+
4004
4037
  ## Conventions
4005
4038
 
4006
4039
  - **Layered architecture**: routers → controllers → services → repositories. Never skip layers.
@@ -183,3 +183,10 @@ The mixin delegates to the global registry (`default_registry`).
183
183
  - Superuser and static set are injectable via `PermissionRegistry`.
184
184
  - Rules match by exact string or wildcard (`order.*`, `*`).
185
185
  - `PermissionMixin` gives you `await user.has_perm(...)`.
186
+
187
+ !!! tip "Already holding the user?"
188
+ When the check is an invariant on the user itself (active, admin, owner of
189
+ the resource) rather than a question for the registry,
190
+ [`@requires`](permission-guards.md) runs `(user) -> user | None` guards at
191
+ any layer — and a guard may call `check_permission(...)` to combine both
192
+ approaches.
@@ -182,3 +182,10 @@ O mixin delega ao registry global (`default_registry`).
182
182
  - Superusuário e conjunto estático são injetáveis via `PermissionRegistry`.
183
183
  - Regras batem por string exata ou wildcard (`order.*`, `*`).
184
184
  - `PermissionMixin` dá o `await user.has_perm(...)`.
185
+
186
+ !!! tip "Já tem o usuário na mão?"
187
+ Quando a checagem é uma invariante sobre o próprio usuário (ativo, admin,
188
+ dono do recurso) e não uma pergunta ao registry, o
189
+ [`@requires`](permission-guards.md) roda guards `(user) -> user | None` em
190
+ qualquer camada — e um guard pode chamar `check_permission(...)` para
191
+ combinar as duas abordagens.
@@ -504,6 +504,37 @@ Details and limitations in the [Errors in OpenAPI »](openapi-errors.md) recipe.
504
504
 
505
505
  ---
506
506
 
507
+ ### Permission guards — `tempest permissions`
508
+
509
+ Reads the `@requires` guard contract straight off the source (`ast`, without
510
+ importing the application) and reports what the decorator cannot see at import
511
+ time:
512
+
513
+ ```bash
514
+ tempest permissions # informative report (exit 0)
515
+ tempest permissions --check # exit 1 on any error (CI gate)
516
+ tempest permissions --check --strict # fail on warnings too
517
+ tempest permissions --path src --path libs
518
+ ```
519
+
520
+ ```text
521
+ src/api/routers/orders.py:41 delete_order
522
+ error: guard-foreign-exception: guard 'order_owner' raises ValueError, which is
523
+ not an AppException subclass; the API layer answers it as HTTP 500 without an
524
+ error code
525
+ 2 finding(s), 1 error(s).
526
+ ```
527
+
528
+ Errors: a guard raising outside the `AppException` hierarchy, a predicate-style
529
+ guard (`-> bool`), wrong arity, an `async` guard on a sync function, a route with
530
+ no user parameter. Warnings: a guard that never denies, a missing annotation, a
531
+ guard the checker could not resolve (lambda, duplicated name, definition outside
532
+ the scanned paths).
533
+
534
+ Details in the [Permission guards (`@requires`) »](permission-guards.md) recipe.
535
+
536
+ ---
537
+
507
538
  ### Integration client — `tempest openapi-client`
508
539
 
509
540
  Generates Pydantic schemas + a typed HTTP client from a third party's OpenAPI
@@ -502,6 +502,36 @@ Detalhes e limitações na receita [Erros no OpenAPI »](openapi-errors.md).
502
502
 
503
503
  ---
504
504
 
505
+ ### Guards de permissão — `tempest permissions`
506
+
507
+ Lê o contrato dos guards do `@requires` direto do código-fonte (`ast`, sem
508
+ importar a aplicação) e reporta o que o decorator não consegue ver em tempo de
509
+ import:
510
+
511
+ ```bash
512
+ tempest permissions # relatório informativo (exit 0)
513
+ tempest permissions --check # exit 1 se houver erro (gate de CI)
514
+ tempest permissions --check --strict # falha também nos warnings
515
+ tempest permissions --path src --path libs
516
+ ```
517
+
518
+ ```text
519
+ src/api/routers/orders.py:41 delete_order
520
+ error: guard-foreign-exception: guard 'order_owner' raises ValueError, which is
521
+ not an AppException subclass; the API layer answers it as HTTP 500 without an
522
+ error code
523
+ 2 finding(s), 1 error(s).
524
+ ```
525
+
526
+ Erros: guard que levanta fora da hierarquia `AppException`, guard-predicado
527
+ (`-> bool`), aridade errada, guard `async` em função sync, rota sem parâmetro de
528
+ usuário. Warnings: guard que nunca nega, anotação faltando, guard que o checker
529
+ não conseguiu resolver (lambda, nome duplicado, definição fora do escopo).
530
+
531
+ Detalhes na receita [Guards de permissão (`@requires`) »](permission-guards.md).
532
+
533
+ ---
534
+
505
535
  ### Cliente de integração — `tempest openapi-client`
506
536
 
507
537
  Gera schemas Pydantic + um cliente HTTP tipado a partir da especificação OpenAPI
@@ -534,6 +534,28 @@ honored.
534
534
  through `ruff check --select I --fix` and `ruff format`, so a new import
535
535
  lands in sorted position and a wrapped decorator comes out formatted.
536
536
 
537
+ That formatting uses **your project's config**, not ruff's defaults: the
538
+ temporary file is created next to the file being rewritten, and ruff
539
+ resolves its settings by walking up the directory tree. Your `line-length`
540
+ and your `isort` sections apply, so what the command writes passes your own
541
+ CI's `ruff format --check`.
542
+
543
+ !!! note "With no ruff, it says so instead of pretending"
544
+ Normalization needs a ruff that actually runs — on `PATH`, importable in the
545
+ current interpreter (`python -m ruff`), or through `uv run ruff`. Every
546
+ candidate is probed with `--version` before being used. When none works the
547
+ write still happens (the splice is already valid Python) and the command
548
+ tells you what it skipped:
549
+
550
+ ```text
551
+ note: no working ruff found, so the new import stays where it was spliced
552
+ and a long decorator is not wrapped. Run `tempest fix` afterwards to sort
553
+ and format.
554
+ ```
555
+
556
+ Without that line you would find out from your CI's `ruff check` failing on
557
+ a file this very command just wrote.
558
+
537
559
  !!! check "A clean git tree is required"
538
560
  With a clean tree, `git diff` is the review and `git checkout` is the undo —
539
561
  the real safety net for a tool that edits code you wrote. With pending
@@ -529,6 +529,28 @@ presente prova que o projeto optou por esse estilo; aí ele é respeitado.
529
529
  `ruff check --select I --fix` e `ruff format`, então o import novo cai na
530
530
  posição ordenada e o decorator quebrado em linhas sai formatado.
531
531
 
532
+ A formatação usa **a config do seu projeto**, não os defaults do ruff: o
533
+ arquivo temporário é criado ao lado do arquivo reescrito, e o ruff resolve
534
+ settings subindo a árvore de diretórios. Seu `line-length` e suas seções de
535
+ `isort` valem, então o que o comando escreve passa no `ruff format --check`
536
+ do seu próprio CI.
537
+
538
+ !!! note "Sem ruff, ele avisa em vez de fingir"
539
+ A normalização depende de um ruff que realmente rode — no `PATH`, importável
540
+ no interpretador atual (`python -m ruff`), ou via `uv run ruff`. Cada
541
+ candidato é testado com `--version` antes de ser usado. Não achando nenhum, a
542
+ gravação acontece de todo jeito (o splice já é Python válido) e o comando diz
543
+ o que ficou de fora:
544
+
545
+ ```text
546
+ note: no working ruff found, so the new import stays where it was spliced
547
+ and a long decorator is not wrapped. Run `tempest fix` afterwards to sort
548
+ and format.
549
+ ```
550
+
551
+ Sem esse aviso você descobriria pelo `ruff check` do CI reclamando de um
552
+ arquivo que o próprio comando acabou de escrever.
553
+
532
554
  !!! check "Árvore git limpa obrigatória"
533
555
  Com a árvore limpa, `git diff` é a revisão e `git checkout` é o desfazer —
534
556
  a rede de segurança real de uma ferramenta que edita código que você