tempest-fastapi-sdk 0.7.2__tar.gz → 0.8.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 (150) hide show
  1. tempest_fastapi_sdk-0.8.0/CHANGELOG.md +159 -0
  2. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/PKG-INFO +1256 -240
  3. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/README.md +1255 -239
  4. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/pyproject.toml +2 -1
  5. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/__init__.py +39 -1
  6. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/api/__init__.py +45 -0
  7. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/api/dependencies/__init__.py +19 -0
  8. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/api/dependencies/auth.py +323 -0
  9. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/api/middlewares/__init__.py +2 -0
  10. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/api/middlewares/rate_limit.py +133 -0
  11. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/api/middlewares/request_id.py +17 -1
  12. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/api/routers/__init__.py +2 -0
  13. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/api/routers/health.py +10 -3
  14. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/api/routers/tool_spec.py +75 -0
  15. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/api/server.py +75 -0
  16. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/api/webhooks.py +135 -0
  17. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/cache/__init__.py +2 -0
  18. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/cache/decorator.py +145 -0
  19. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/connection.py +20 -3
  20. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/schemas/__init__.py +2 -0
  21. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/schemas/link_headers.py +86 -0
  22. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/settings/__init__.py +12 -0
  23. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/settings/mixins.py +318 -0
  24. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/sse/event_stream.py +4 -3
  25. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/tasks/__init__.py +2 -0
  26. tempest_fastapi_sdk-0.8.0/tempest_fastapi_sdk/tasks/scheduler.py +345 -0
  27. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/__init__.py +8 -0
  28. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/regex.py +45 -0
  29. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/webpush/dispatcher.py +33 -3
  30. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/webpush/schemas.py +29 -1
  31. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/api/test_health_router.py +19 -0
  32. tempest_fastapi_sdk-0.8.0/tests/api/test_jwt_dependency.py +189 -0
  33. tempest_fastapi_sdk-0.8.0/tests/api/test_rate_limit.py +107 -0
  34. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/api/test_request_id_middleware.py +23 -0
  35. tempest_fastapi_sdk-0.8.0/tests/api/test_role_dependency.py +111 -0
  36. tempest_fastapi_sdk-0.8.0/tests/api/test_server.py +77 -0
  37. tempest_fastapi_sdk-0.8.0/tests/api/test_tool_spec.py +68 -0
  38. tempest_fastapi_sdk-0.8.0/tests/api/test_webhooks.py +110 -0
  39. tempest_fastapi_sdk-0.8.0/tests/cache/test_decorator.py +131 -0
  40. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/db/test_connection.py +24 -0
  41. tempest_fastapi_sdk-0.8.0/tests/schemas/test_link_headers.py +114 -0
  42. tempest_fastapi_sdk-0.8.0/tests/settings/test_mixins.py +144 -0
  43. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/sse/test_event_stream.py +30 -0
  44. tempest_fastapi_sdk-0.8.0/tests/tasks/test_scheduler.py +158 -0
  45. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_regex.py +55 -0
  46. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/webpush/test_schemas.py +18 -0
  47. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/uv.lock +29 -2
  48. tempest_fastapi_sdk-0.7.2/tempest_fastapi_sdk/api/__init__.py +0 -26
  49. tempest_fastapi_sdk-0.7.2/tempest_fastapi_sdk/api/dependencies/__init__.py +0 -11
  50. tempest_fastapi_sdk-0.7.2/tempest_fastapi_sdk/api/dependencies/auth.py +0 -84
  51. tempest_fastapi_sdk-0.7.2/tempest_fastapi_sdk/settings/mixins.py +0 -155
  52. tempest_fastapi_sdk-0.7.2/tests/settings/test_mixins.py +0 -82
  53. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/.github/workflows/ci.yml +0 -0
  54. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/.github/workflows/release-pypi.yml +0 -0
  55. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/.gitignore +0 -0
  56. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/.python-version +0 -0
  57. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/Makefile +0 -0
  58. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/api/handlers.py +0 -0
  59. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/api/middlewares/cors.py +0 -0
  60. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/cache/redis_manager.py +0 -0
  61. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/controllers/__init__.py +0 -0
  62. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/controllers/base.py +0 -0
  63. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/core/__init__.py +0 -0
  64. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/core/context.py +0 -0
  65. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/core/logging.py +0 -0
  66. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/__init__.py +0 -0
  67. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/_alembic_templates/__init__.py +0 -0
  68. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/_alembic_templates/env.py.template +0 -0
  69. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/migrations.py +0 -0
  70. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/mixins.py +0 -0
  71. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/model.py +0 -0
  72. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/db/repository.py +0 -0
  73. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/__init__.py +0 -0
  74. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/base.py +0 -0
  75. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/conflict.py +0 -0
  76. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/forbidden.py +0 -0
  77. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/jwt.py +0 -0
  78. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/not_found.py +0 -0
  79. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/unauthorized.py +0 -0
  80. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/upload.py +0 -0
  81. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/exceptions/validation.py +0 -0
  82. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/queue/__init__.py +0 -0
  83. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/queue/manager.py +0 -0
  84. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/schemas/base.py +0 -0
  85. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/schemas/pagination.py +0 -0
  86. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/schemas/response.py +0 -0
  87. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/services/__init__.py +0 -0
  88. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/services/base.py +0 -0
  89. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/settings/base.py +0 -0
  90. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/sse/__init__.py +0 -0
  91. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/tasks/manager.py +0 -0
  92. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/testing/__init__.py +0 -0
  93. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/testing/database.py +0 -0
  94. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/datetime.py +0 -0
  95. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/dict.py +0 -0
  96. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/email.py +0 -0
  97. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/jwt.py +0 -0
  98. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/log.py +0 -0
  99. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/metrics.py +0 -0
  100. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/password.py +0 -0
  101. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/utils/upload.py +0 -0
  102. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tempest_fastapi_sdk/webpush/__init__.py +0 -0
  103. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/__init__.py +0 -0
  104. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/api/__init__.py +0 -0
  105. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/api/test_cors.py +0 -0
  106. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/api/test_dependencies_auth.py +0 -0
  107. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/api/test_handlers.py +0 -0
  108. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/cache/__init__.py +0 -0
  109. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/cache/test_redis_manager.py +0 -0
  110. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/conftest.py +0 -0
  111. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/controllers/__init__.py +0 -0
  112. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/controllers/test_base.py +0 -0
  113. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/core/__init__.py +0 -0
  114. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/core/test_context.py +0 -0
  115. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/core/test_logging.py +0 -0
  116. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/db/__init__.py +0 -0
  117. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/db/test_migrations.py +0 -0
  118. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/db/test_mixins.py +0 -0
  119. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/db/test_model.py +0 -0
  120. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/db/test_repository.py +0 -0
  121. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/exceptions/__init__.py +0 -0
  122. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/exceptions/test_exceptions.py +0 -0
  123. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/queue/__init__.py +0 -0
  124. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/queue/test_manager.py +0 -0
  125. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/schemas/__init__.py +0 -0
  126. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/schemas/test_base.py +0 -0
  127. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/schemas/test_cursor_pagination.py +0 -0
  128. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/schemas/test_pagination.py +0 -0
  129. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/schemas/test_response.py +0 -0
  130. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/services/__init__.py +0 -0
  131. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/services/test_base.py +0 -0
  132. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/settings/__init__.py +0 -0
  133. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/settings/test_base.py +0 -0
  134. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/sse/__init__.py +0 -0
  135. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/tasks/__init__.py +0 -0
  136. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/tasks/test_manager.py +0 -0
  137. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/testing/__init__.py +0 -0
  138. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/testing/test_database.py +0 -0
  139. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/__init__.py +0 -0
  140. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_datetime.py +0 -0
  141. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_dict.py +0 -0
  142. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_email.py +0 -0
  143. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_jwt.py +0 -0
  144. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_lazy_extras.py +0 -0
  145. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_log.py +0 -0
  146. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_metrics.py +0 -0
  147. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_password.py +0 -0
  148. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/utils/test_upload.py +0 -0
  149. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/webpush/__init__.py +0 -0
  150. {tempest_fastapi_sdk-0.7.2 → tempest_fastapi_sdk-0.8.0}/tests/webpush/test_dispatcher.py +0 -0
@@ -0,0 +1,159 @@
1
+ # Changelog
2
+
3
+ All notable changes to **tempest-fastapi-sdk** are listed below.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.8.0] — 2026-05-17
9
+
10
+ ### Breaking changes
11
+
12
+ - **`ServerSettings` field rename.** `HOST`, `PORT` and `DEBUG` were renamed to
13
+ `SERVER_HOST`, `SERVER_PORT` and `SERVER_DEBUG`, and a new `SERVER_RELOAD`
14
+ field was added. `LOG_LEVEL` and `LOG_JSON` moved out to a new
15
+ `LogSettings` mixin.
16
+ - **Migration:** rename the matching env vars in every `.env` /
17
+ deployment manifest and replace `settings.HOST` / `settings.PORT` /
18
+ `settings.DEBUG` / `settings.LOG_LEVEL` / `settings.LOG_JSON`
19
+ accordingly. Mix `LogSettings` into `Settings` if the service was
20
+ relying on `ServerSettings` for the log fields.
21
+ - See the [Migration guide 0.7 → 0.8](README.md#migration-guide-07--08)
22
+ in the README for the full checklist.
23
+
24
+ ### Added — Settings mixins (Tier 1)
25
+
26
+ - `LogSettings` (`LOG_LEVEL`, `LOG_JSON`) — extracted from `ServerSettings`.
27
+ - `EmailSettings` (`SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD`,
28
+ `SMTP_FROM_ADDR`, `SMTP_USE_TLS`, `SMTP_USE_SSL`, `SMTP_TIMEOUT_SECONDS`).
29
+ - `UploadSettings` (`UPLOAD_DIR`, `UPLOAD_MAX_SIZE_BYTES`,
30
+ `UPLOAD_ALLOWED_EXTENSIONS`, `UPLOAD_ALLOWED_MIMETYPES`).
31
+ - `TokenSettings` (`TOKEN_SECRET`).
32
+ - `WebPushSettings` (`VAPID_PUBLIC_KEY`, `VAPID_PRIVATE_KEY`,
33
+ `VAPID_SUBJECT`, `WEBPUSH_DEFAULT_TTL_SECONDS`).
34
+ - `TaskIQSettings` (`TASKIQ_BROKER_URL`, `TASKIQ_RESULT_BACKEND_URL`).
35
+
36
+ ### Added — API helpers (Tier 2)
37
+
38
+ - `tempest_fastapi_sdk.run_server(app, *, settings=None, host=None,
39
+ port=None, reload=None, **uvicorn_kwargs)` — canonical
40
+ `src/server.py` entry point.
41
+ - `make_bearer_token_dependency(tokens, soft=False, ...)` —
42
+ `Authorization: Bearer <jwt>` decoder returning the claims dict.
43
+ - `make_jwt_user_dependency(tokens, user_loader, *, soft=False,
44
+ subject_claim="sub", ...)` — bearer + user loader in one factory.
45
+ - `is_valid_cep`, `normalize_cep`, `CEP`, `CEP_PATTERN` — Brazilian
46
+ zipcode validators in `tempest_fastapi_sdk.utils.regex`.
47
+
48
+ ### Added — Opt-in primitives (Tier 3)
49
+
50
+ - `tempest_fastapi_sdk.cache.cached(redis, ttl=300, key_prefix="",
51
+ serializer=..., deserializer=..., skip_cache=...)` — Redis-backed
52
+ function cache decorator.
53
+ - `make_tool_spec_router(spec, *, path="/tool-spec", tag="meta")` —
54
+ `/tool-spec` manifest router; accepts dict / sync / async providers.
55
+ - `make_role_dependency(tokens, roles, *, require_all=False, ...)` and
56
+ `make_permission_dependency(tokens, permissions, *, require_all=True,
57
+ ...)` — JWT-claim-based authorization.
58
+
59
+ ### Added — Advanced primitives (Tier 4)
60
+
61
+ - `tempest_fastapi_sdk.WebhookSignatureVerifier(secret, *, algorithm,
62
+ header_name, encoding, prefix)` — HMAC webhook signature
63
+ verification with FastAPI dependency factory.
64
+ - `tempest_fastapi_sdk.RateLimitMiddleware(max_requests, window_seconds,
65
+ key_func, exempt_paths)` — in-process sliding-window rate limiter.
66
+ - `build_pagination_link_header(base_url, *, page, size, pages,
67
+ extra_params, page_param, size_param)` — RFC 8288 `Link` header
68
+ builder for offset paginated responses.
69
+
70
+ ### Docs
71
+
72
+ - README — full reorganization, every new primitive has a recipe with
73
+ full code samples. New sections: Periodic tasks scheduler,
74
+ Programmatic server entry point, JWT bearer / current-user / role
75
+ dependencies, CEP, Cache decorator, Tool-spec router, Webhook
76
+ signature verification, Pagination Link headers, Rate limit
77
+ middleware, Utility helpers, Outbox dispatcher pattern, Migration
78
+ guide 0.7 → 0.8.
79
+ - Tutorial sections 1–11 realigned to the canonical layout mandated by
80
+ the SDK consumers' shared `CLAUDE.md` (single `main.py` one-liner,
81
+ `src/server.py` exposing `run()`, `src/api/app.py` with `create_app()`,
82
+ `src/db/repositories/` location, mandatory `src/controllers/`
83
+ pass-through, `src/api/dependencies/` package).
84
+ - Reference section — method tables for `AsyncDatabaseManager`,
85
+ `AsyncRedisManager`, `AsyncBrokerManager`, `AsyncTaskBrokerManager`
86
+ and `AsyncTaskScheduler`.
87
+
88
+ ### Dev
89
+
90
+ - Added `uvicorn>=0.30.0` to the dev dependency group so `run_server`
91
+ tests can monkey-patch `uvicorn.run`.
92
+
93
+ ## [0.7.3] — 2026-05-17
94
+
95
+ - Hardened request-ID middleware, SSE writer, web-push dispatcher and
96
+ database manager lifecycle.
97
+
98
+ ## [0.7.2] — 2026-05-16
99
+
100
+ - Release packaging fix only.
101
+
102
+ ## [0.7.1] — 2026-05-16
103
+
104
+ ### Changed
105
+
106
+ - Optional extras (`[auth]`, `[email]`, `[upload]`, `[cache]`,
107
+ `[webpush]`, `[metrics]`, `[queue]`, `[tasks]`) are now lazy-loaded
108
+ at first instantiation, so `import tempest_fastapi_sdk` works when
109
+ only a subset of extras is installed.
110
+
111
+ ## [0.7.0] — 2026-05-15
112
+
113
+ ### Added
114
+
115
+ - `LogUtils`, `configure_logging`, `JSONFormatter`,
116
+ `RequestIDMiddleware` and the `request_id_ctx` contextvar.
117
+ - `MetricsUtils` (CPU / memory / disk / GPU snapshots).
118
+ - `AsyncBrokerManager` (FastStream wrapper, `[queue]` extra) and
119
+ `AsyncTaskBrokerManager` (TaskIQ wrapper, `[tasks]` extra).
120
+
121
+ ## [0.6.0] — 2026-05-13
122
+
123
+ ### Added
124
+
125
+ - SSE primitives (`EventStream`, `ServerSentEvent`, `sse_response`).
126
+ - Web Push dispatch (`WebPushDispatcher`, `WebPushSubscriptionSchema`,
127
+ `WebPushPayloadSchema`, `WebPushGoneError`, `[webpush]` extra).
128
+
129
+ ## [0.5.0] — 2026-05-10
130
+
131
+ ### Added
132
+
133
+ - `AsyncRedisManager` (`[cache]` extra).
134
+ - CORS helpers (`apply_cors`, `CORSSettings`).
135
+ - Composable settings mixins (`ServerSettings`, `DatabaseSettings`,
136
+ `RedisSettings`, `RabbitMQSettings`, `JWTSettings`, `CORSSettings`).
137
+
138
+ ## [0.4.0] — 2026-05-07
139
+
140
+ ### Added
141
+
142
+ - `make_health_router`, audit / soft-delete mixins, cursor pagination.
143
+
144
+ ## [0.3.0] — 2026-05-04
145
+
146
+ ### Added
147
+
148
+ - `BaseController` + `BaseService` generics, DI scaffolding, logging,
149
+ `tempest_fastapi_sdk.testing` helpers.
150
+
151
+ ## [0.2.0]
152
+
153
+ ### Changed
154
+
155
+ - Drop Python 3.10 support; SDK now targets Python ≥ 3.11.
156
+
157
+ ## [0.1.0]
158
+
159
+ - Initial public release.