svc-infra 0.1.513__tar.gz → 0.1.672__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.

Potentially problematic release.


This version of svc-infra might be problematic. Click here for more details.

Files changed (378) hide show
  1. svc_infra-0.1.672/PKG-INFO +160 -0
  2. svc_infra-0.1.672/README.md +80 -0
  3. {svc_infra-0.1.513 → svc_infra-0.1.672}/pyproject.toml +31 -2
  4. svc_infra-0.1.672/src/svc_infra/apf_payments/README.md +732 -0
  5. svc_infra-0.1.672/src/svc_infra/apf_payments/alembic.py +11 -0
  6. svc_infra-0.1.672/src/svc_infra/apf_payments/models.py +339 -0
  7. svc_infra-0.1.672/src/svc_infra/apf_payments/provider/__init__.py +4 -0
  8. svc_infra-0.1.672/src/svc_infra/apf_payments/provider/aiydan.py +797 -0
  9. svc_infra-0.1.672/src/svc_infra/apf_payments/provider/base.py +270 -0
  10. svc_infra-0.1.672/src/svc_infra/apf_payments/provider/registry.py +31 -0
  11. svc_infra-0.1.672/src/svc_infra/apf_payments/provider/stripe.py +873 -0
  12. svc_infra-0.1.672/src/svc_infra/apf_payments/schemas.py +333 -0
  13. svc_infra-0.1.672/src/svc_infra/apf_payments/service.py +892 -0
  14. svc_infra-0.1.672/src/svc_infra/apf_payments/settings.py +67 -0
  15. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/__init__.py +6 -0
  16. svc_infra-0.1.672/src/svc_infra/api/fastapi/admin/__init__.py +3 -0
  17. svc_infra-0.1.672/src/svc_infra/api/fastapi/admin/add.py +231 -0
  18. svc_infra-0.1.672/src/svc_infra/api/fastapi/apf_payments/router.py +1082 -0
  19. svc_infra-0.1.672/src/svc_infra/api/fastapi/apf_payments/setup.py +73 -0
  20. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/add.py +15 -6
  21. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/gaurd.py +67 -5
  22. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/routers/oauth_router.py +92 -37
  23. svc_infra-0.1.672/src/svc_infra/api/fastapi/auth/routers/session_router.py +63 -0
  24. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/settings.py +2 -0
  25. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/state.py +1 -1
  26. svc_infra-0.1.672/src/svc_infra/api/fastapi/billing/router.py +64 -0
  27. svc_infra-0.1.672/src/svc_infra/api/fastapi/billing/setup.py +19 -0
  28. svc_infra-0.1.672/src/svc_infra/api/fastapi/cache/add.py +18 -0
  29. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/nosql/mongo/add.py +33 -27
  30. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/sql/add.py +40 -18
  31. svc_infra-0.1.672/src/svc_infra/api/fastapi/db/sql/crud_router.py +310 -0
  32. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/sql/session.py +16 -0
  33. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/sql/users.py +13 -1
  34. svc_infra-0.1.672/src/svc_infra/api/fastapi/dependencies/ratelimit.py +116 -0
  35. svc_infra-0.1.672/src/svc_infra/api/fastapi/docs/add.py +160 -0
  36. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/docs/landing.py +1 -1
  37. svc_infra-0.1.672/src/svc_infra/api/fastapi/docs/scoped.py +254 -0
  38. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/dual/router.py +48 -1
  39. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/dx.py +3 -3
  40. svc_infra-0.1.672/src/svc_infra/api/fastapi/http/concurrency.py +14 -0
  41. svc_infra-0.1.672/src/svc_infra/api/fastapi/http/conditional.py +33 -0
  42. svc_infra-0.1.672/src/svc_infra/api/fastapi/http/deprecation.py +21 -0
  43. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/middleware/errors/handlers.py +45 -7
  44. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/graceful_shutdown.py +87 -0
  45. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/idempotency.py +123 -0
  46. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/idempotency_store.py +187 -0
  47. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/optimistic_lock.py +37 -0
  48. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/ratelimit.py +126 -0
  49. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/ratelimit_store.py +84 -0
  50. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/request_id.py +37 -0
  51. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/request_size_limit.py +36 -0
  52. svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/timeout.py +180 -0
  53. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/openapi/mutators.py +687 -15
  54. svc_infra-0.1.672/src/svc_infra/api/fastapi/ops/add.py +73 -0
  55. svc_infra-0.1.672/src/svc_infra/api/fastapi/pagination.py +363 -0
  56. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/paths/prefix.py +0 -1
  57. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/routers/ping.py +1 -0
  58. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/setup.py +60 -15
  59. svc_infra-0.1.672/src/svc_infra/api/fastapi/tenancy/add.py +19 -0
  60. svc_infra-0.1.672/src/svc_infra/api/fastapi/tenancy/context.py +112 -0
  61. svc_infra-0.1.672/src/svc_infra/api/fastapi/versioned.py +101 -0
  62. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/README.md +5 -5
  63. svc_infra-0.1.672/src/svc_infra/billing/__init__.py +23 -0
  64. svc_infra-0.1.672/src/svc_infra/billing/async_service.py +147 -0
  65. svc_infra-0.1.672/src/svc_infra/billing/jobs.py +230 -0
  66. svc_infra-0.1.672/src/svc_infra/billing/models.py +131 -0
  67. svc_infra-0.1.672/src/svc_infra/billing/quotas.py +101 -0
  68. svc_infra-0.1.672/src/svc_infra/billing/schemas.py +33 -0
  69. svc_infra-0.1.672/src/svc_infra/billing/service.py +115 -0
  70. svc_infra-0.1.672/src/svc_infra/bundled_docs/README.md +5 -0
  71. svc_infra-0.1.672/src/svc_infra/bundled_docs/__init__.py +1 -0
  72. svc_infra-0.1.672/src/svc_infra/bundled_docs/getting-started.md +6 -0
  73. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/__init__.py +4 -0
  74. svc_infra-0.1.672/src/svc_infra/cache/add.py +158 -0
  75. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/backend.py +5 -2
  76. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/decorators.py +19 -1
  77. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/keys.py +24 -4
  78. svc_infra-0.1.672/src/svc_infra/cli/__init__.py +59 -0
  79. svc_infra-0.1.672/src/svc_infra/cli/__main__.py +4 -0
  80. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/__init__.py +10 -0
  81. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/db/nosql/mongo/mongo_cmds.py +4 -3
  82. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/db/nosql/mongo/mongo_scaffold_cmds.py +4 -4
  83. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/db/sql/alembic_cmds.py +120 -14
  84. svc_infra-0.1.672/src/svc_infra/cli/cmds/db/sql/sql_export_cmds.py +80 -0
  85. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/db/sql/sql_scaffold_cmds.py +5 -4
  86. svc_infra-0.1.672/src/svc_infra/cli/cmds/docs/docs_cmds.py +140 -0
  87. svc_infra-0.1.672/src/svc_infra/cli/cmds/dx/__init__.py +12 -0
  88. svc_infra-0.1.672/src/svc_infra/cli/cmds/dx/dx_cmds.py +99 -0
  89. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/help.py +4 -0
  90. svc_infra-0.1.672/src/svc_infra/cli/cmds/jobs/__init__.py +1 -0
  91. svc_infra-0.1.672/src/svc_infra/cli/cmds/jobs/jobs_cmds.py +43 -0
  92. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/obs/obs_cmds.py +4 -3
  93. svc_infra-0.1.672/src/svc_infra/cli/cmds/sdk/sdk_cmds.py +102 -0
  94. svc_infra-0.1.672/src/svc_infra/data/add.py +61 -0
  95. svc_infra-0.1.672/src/svc_infra/data/backup.py +53 -0
  96. svc_infra-0.1.672/src/svc_infra/data/erasure.py +45 -0
  97. svc_infra-0.1.672/src/svc_infra/data/fixtures.py +40 -0
  98. svc_infra-0.1.672/src/svc_infra/data/retention.py +55 -0
  99. svc_infra-0.1.672/src/svc_infra/db/inbox.py +67 -0
  100. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/mongo/README.md +13 -13
  101. svc_infra-0.1.672/src/svc_infra/db/outbox.py +104 -0
  102. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/apikey.py +1 -1
  103. svc_infra-0.1.672/src/svc_infra/db/sql/authref.py +61 -0
  104. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/core.py +2 -2
  105. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/repository.py +52 -12
  106. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/resource.py +5 -0
  107. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/scaffold.py +16 -4
  108. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/templates/models_schemas/auth/models.py.tmpl +7 -56
  109. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/templates/models_schemas/auth/schemas.py.tmpl +1 -1
  110. svc_infra-0.1.672/src/svc_infra/db/sql/templates/setup/env_async.py.tmpl +386 -0
  111. svc_infra-0.1.672/src/svc_infra/db/sql/templates/setup/env_sync.py.tmpl +431 -0
  112. svc_infra-0.1.672/src/svc_infra/db/sql/tenant.py +79 -0
  113. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/utils.py +18 -4
  114. svc_infra-0.1.672/src/svc_infra/db/sql/versioning.py +14 -0
  115. svc_infra-0.1.672/src/svc_infra/docs/acceptance-matrix.md +88 -0
  116. svc_infra-0.1.672/src/svc_infra/docs/acceptance.md +44 -0
  117. svc_infra-0.1.672/src/svc_infra/docs/admin.md +425 -0
  118. svc_infra-0.1.672/src/svc_infra/docs/adr/0002-background-jobs-and-scheduling.md +40 -0
  119. svc_infra-0.1.672/src/svc_infra/docs/adr/0003-webhooks-framework.md +24 -0
  120. svc_infra-0.1.672/src/svc_infra/docs/adr/0004-tenancy-model.md +42 -0
  121. svc_infra-0.1.672/src/svc_infra/docs/adr/0005-data-lifecycle.md +86 -0
  122. svc_infra-0.1.672/src/svc_infra/docs/adr/0006-ops-slos-and-metrics.md +47 -0
  123. svc_infra-0.1.672/src/svc_infra/docs/adr/0007-docs-and-sdks.md +83 -0
  124. svc_infra-0.1.672/src/svc_infra/docs/adr/0008-billing-primitives.md +143 -0
  125. svc_infra-0.1.672/src/svc_infra/docs/adr/0009-acceptance-harness.md +40 -0
  126. svc_infra-0.1.672/src/svc_infra/docs/adr/0010-timeouts-and-resource-limits.md +54 -0
  127. svc_infra-0.1.672/src/svc_infra/docs/adr/0011-admin-scope-and-impersonation.md +73 -0
  128. svc_infra-0.1.672/src/svc_infra/docs/adr/0012-generic-file-storage.md +498 -0
  129. svc_infra-0.1.672/src/svc_infra/docs/api.md +215 -0
  130. svc_infra-0.1.672/src/svc_infra/docs/auth.md +11 -0
  131. svc_infra-0.1.672/src/svc_infra/docs/billing.md +190 -0
  132. svc_infra-0.1.672/src/svc_infra/docs/cache.md +76 -0
  133. svc_infra-0.1.672/src/svc_infra/docs/cli.md +74 -0
  134. svc_infra-0.1.672/src/svc_infra/docs/contributing.md +34 -0
  135. svc_infra-0.1.672/src/svc_infra/docs/data-lifecycle.md +52 -0
  136. svc_infra-0.1.672/src/svc_infra/docs/database.md +14 -0
  137. svc_infra-0.1.672/src/svc_infra/docs/docs-and-sdks.md +62 -0
  138. svc_infra-0.1.672/src/svc_infra/docs/documents.md +697 -0
  139. svc_infra-0.1.672/src/svc_infra/docs/environment.md +114 -0
  140. svc_infra-0.1.672/src/svc_infra/docs/getting-started.md +63 -0
  141. svc_infra-0.1.672/src/svc_infra/docs/idempotency.md +111 -0
  142. svc_infra-0.1.672/src/svc_infra/docs/jobs.md +67 -0
  143. svc_infra-0.1.672/src/svc_infra/docs/observability.md +16 -0
  144. svc_infra-0.1.672/src/svc_infra/docs/ops.md +37 -0
  145. svc_infra-0.1.672/src/svc_infra/docs/rate-limiting.md +125 -0
  146. svc_infra-0.1.672/src/svc_infra/docs/repo-review.md +48 -0
  147. svc_infra-0.1.672/src/svc_infra/docs/security.md +176 -0
  148. svc_infra-0.1.672/src/svc_infra/docs/storage.md +982 -0
  149. svc_infra-0.1.672/src/svc_infra/docs/tenancy.md +35 -0
  150. svc_infra-0.1.672/src/svc_infra/docs/timeouts-and-resource-limits.md +147 -0
  151. svc_infra-0.1.672/src/svc_infra/docs/versioned-integrations.md +146 -0
  152. svc_infra-0.1.672/src/svc_infra/docs/webhooks.md +112 -0
  153. svc_infra-0.1.672/src/svc_infra/documents/__init__.py +100 -0
  154. svc_infra-0.1.672/src/svc_infra/documents/add.py +258 -0
  155. svc_infra-0.1.672/src/svc_infra/documents/ease.py +233 -0
  156. svc_infra-0.1.672/src/svc_infra/documents/models.py +114 -0
  157. svc_infra-0.1.672/src/svc_infra/documents/storage.py +262 -0
  158. svc_infra-0.1.672/src/svc_infra/dx/add.py +63 -0
  159. svc_infra-0.1.672/src/svc_infra/dx/changelog.py +74 -0
  160. svc_infra-0.1.672/src/svc_infra/dx/checks.py +67 -0
  161. svc_infra-0.1.672/src/svc_infra/http/__init__.py +13 -0
  162. svc_infra-0.1.672/src/svc_infra/http/client.py +72 -0
  163. svc_infra-0.1.672/src/svc_infra/jobs/builtins/outbox_processor.py +38 -0
  164. svc_infra-0.1.672/src/svc_infra/jobs/builtins/webhook_delivery.py +90 -0
  165. svc_infra-0.1.672/src/svc_infra/jobs/easy.py +32 -0
  166. svc_infra-0.1.672/src/svc_infra/jobs/loader.py +45 -0
  167. svc_infra-0.1.672/src/svc_infra/jobs/queue.py +81 -0
  168. svc_infra-0.1.672/src/svc_infra/jobs/redis_queue.py +191 -0
  169. svc_infra-0.1.672/src/svc_infra/jobs/runner.py +75 -0
  170. svc_infra-0.1.672/src/svc_infra/jobs/scheduler.py +41 -0
  171. svc_infra-0.1.672/src/svc_infra/jobs/worker.py +40 -0
  172. svc_infra-0.1.672/src/svc_infra/mcp/svc_infra_mcp.py +124 -0
  173. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/README.md +2 -0
  174. svc_infra-0.1.672/src/svc_infra/obs/add.py +115 -0
  175. svc_infra-0.1.672/src/svc_infra/obs/grafana/dashboards/http-overview.json +45 -0
  176. svc_infra-0.1.672/src/svc_infra/obs/metrics/__init__.py +53 -0
  177. svc_infra-0.1.672/src/svc_infra/obs/metrics.py +52 -0
  178. svc_infra-0.1.672/src/svc_infra/obs/templates/sidecars/k8s/__init__.py +0 -0
  179. svc_infra-0.1.672/src/svc_infra/obs/templates/sidecars/railway/__init__.py +0 -0
  180. svc_infra-0.1.672/src/svc_infra/py.typed +0 -0
  181. svc_infra-0.1.672/src/svc_infra/security/add.py +201 -0
  182. svc_infra-0.1.672/src/svc_infra/security/audit.py +130 -0
  183. svc_infra-0.1.672/src/svc_infra/security/audit_service.py +73 -0
  184. svc_infra-0.1.672/src/svc_infra/security/headers.py +52 -0
  185. svc_infra-0.1.672/src/svc_infra/security/hibp.py +95 -0
  186. svc_infra-0.1.672/src/svc_infra/security/jwt_rotation.py +53 -0
  187. svc_infra-0.1.672/src/svc_infra/security/lockout.py +96 -0
  188. svc_infra-0.1.672/src/svc_infra/security/models.py +265 -0
  189. svc_infra-0.1.672/src/svc_infra/security/oauth_models.py +59 -0
  190. svc_infra-0.1.672/src/svc_infra/security/org_invites.py +128 -0
  191. svc_infra-0.1.672/src/svc_infra/security/passwords.py +77 -0
  192. svc_infra-0.1.672/src/svc_infra/security/permissions.py +149 -0
  193. svc_infra-0.1.672/src/svc_infra/security/session.py +98 -0
  194. svc_infra-0.1.672/src/svc_infra/security/signed_cookies.py +80 -0
  195. svc_infra-0.1.672/src/svc_infra/storage/__init__.py +93 -0
  196. svc_infra-0.1.672/src/svc_infra/storage/add.py +250 -0
  197. svc_infra-0.1.672/src/svc_infra/storage/backends/__init__.py +11 -0
  198. svc_infra-0.1.672/src/svc_infra/storage/backends/local.py +331 -0
  199. svc_infra-0.1.672/src/svc_infra/storage/backends/memory.py +214 -0
  200. svc_infra-0.1.672/src/svc_infra/storage/backends/s3.py +329 -0
  201. svc_infra-0.1.672/src/svc_infra/storage/base.py +239 -0
  202. svc_infra-0.1.672/src/svc_infra/storage/easy.py +182 -0
  203. svc_infra-0.1.672/src/svc_infra/storage/settings.py +193 -0
  204. svc_infra-0.1.672/src/svc_infra/webhooks/__init__.py +16 -0
  205. svc_infra-0.1.672/src/svc_infra/webhooks/add.py +322 -0
  206. svc_infra-0.1.672/src/svc_infra/webhooks/fastapi.py +37 -0
  207. svc_infra-0.1.672/src/svc_infra/webhooks/router.py +55 -0
  208. svc_infra-0.1.672/src/svc_infra/webhooks/service.py +67 -0
  209. svc_infra-0.1.672/src/svc_infra/webhooks/signing.py +30 -0
  210. svc_infra-0.1.513/PKG-INFO +0 -78
  211. svc_infra-0.1.513/README.md +0 -3
  212. svc_infra-0.1.513/src/svc_infra/api/fastapi/cache/add.py +0 -14
  213. svc_infra-0.1.513/src/svc_infra/api/fastapi/db/sql/crud_router.py +0 -148
  214. svc_infra-0.1.513/src/svc_infra/cli/__init__.py +0 -35
  215. svc_infra-0.1.513/src/svc_infra/db/sql/templates/setup/env_async.py.tmpl +0 -246
  216. svc_infra-0.1.513/src/svc_infra/db/sql/templates/setup/env_sync.py.tmpl +0 -261
  217. svc_infra-0.1.513/src/svc_infra/mcp/svc_infra_mcp.py +0 -67
  218. svc_infra-0.1.513/src/svc_infra/obs/add.py +0 -68
  219. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/__init__.py +0 -0
  220. {svc_infra-0.1.513/src/svc_infra/api → svc_infra-0.1.672/src/svc_infra/apf_payments}/__init__.py +0 -0
  221. {svc_infra-0.1.513/src/svc_infra/api/fastapi/auth → svc_infra-0.1.672/src/svc_infra/api}/__init__.py +0 -0
  222. {svc_infra-0.1.513/src/svc_infra/api/fastapi/auth/mfa → svc_infra-0.1.672/src/svc_infra/api/fastapi/apf_payments}/__init__.py +0 -0
  223. {svc_infra-0.1.513/src/svc_infra/api/fastapi/auth/routers → svc_infra-0.1.672/src/svc_infra/api/fastapi/auth}/__init__.py +0 -0
  224. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/_cookies.py +0 -0
  225. {svc_infra-0.1.513/src/svc_infra/api/fastapi/cache → svc_infra-0.1.672/src/svc_infra/api/fastapi/auth/mfa}/__init__.py +0 -0
  226. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/mfa/models.py +0 -0
  227. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/mfa/pre_auth.py +0 -0
  228. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/mfa/router.py +0 -0
  229. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/mfa/security.py +0 -0
  230. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/mfa/utils.py +0 -0
  231. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/mfa/verify.py +0 -0
  232. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/policy.py +0 -0
  233. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/providers.py +0 -0
  234. {svc_infra-0.1.513/src/svc_infra/api/fastapi/db/nosql/mongo → svc_infra-0.1.672/src/svc_infra/api/fastapi/auth/routers}/__init__.py +0 -0
  235. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/routers/account.py +0 -0
  236. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/routers/apikey_router.py +0 -0
  237. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/security.py +0 -0
  238. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/auth/sender.py +0 -0
  239. {svc_infra-0.1.513/src/svc_infra/api/fastapi/docs → svc_infra-0.1.672/src/svc_infra/api/fastapi/cache}/__init__.py +0 -0
  240. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/__init__.py +0 -0
  241. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/http.py +0 -0
  242. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/nosql/__init__.py +0 -0
  243. {svc_infra-0.1.513/src/svc_infra/api/fastapi/middleware → svc_infra-0.1.672/src/svc_infra/api/fastapi/db/nosql/mongo}/__init__.py +0 -0
  244. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/nosql/mongo/crud_router.py +0 -0
  245. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/nosql/mongo/health.py +0 -0
  246. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/sql/README.md +0 -0
  247. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/sql/__init__.py +0 -0
  248. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/db/sql/health.py +0 -0
  249. {svc_infra-0.1.513/src/svc_infra/api/fastapi/middleware/errors → svc_infra-0.1.672/src/svc_infra/api/fastapi/docs}/__init__.py +0 -0
  250. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/dual/__init__.py +0 -0
  251. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/dual/dualize.py +0 -0
  252. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/dual/protected.py +0 -0
  253. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/dual/public.py +0 -0
  254. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/dual/utils.py +0 -0
  255. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/ease.py +0 -0
  256. {svc_infra-0.1.513/src/svc_infra/api/fastapi/openapi → svc_infra-0.1.672/src/svc_infra/api/fastapi/http}/__init__.py +0 -0
  257. {svc_infra-0.1.513/src/svc_infra/api/fastapi/paths → svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware}/__init__.py +0 -0
  258. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/middleware/debug.py +0 -0
  259. {svc_infra-0.1.513/src/svc_infra/cli/cmds/db → svc_infra-0.1.672/src/svc_infra/api/fastapi/middleware/errors}/__init__.py +0 -0
  260. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/middleware/errors/catchall.py +0 -0
  261. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/middleware/errors/exceptions.py +0 -0
  262. {svc_infra-0.1.513/src/svc_infra/cli/cmds/db/nosql → svc_infra-0.1.672/src/svc_infra/api/fastapi/openapi}/__init__.py +0 -0
  263. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/openapi/apply.py +0 -0
  264. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/openapi/conventions.py +0 -0
  265. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/openapi/models.py +0 -0
  266. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/openapi/pipeline.py +0 -0
  267. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/openapi/responses.py +0 -0
  268. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/openapi/security.py +0 -0
  269. {svc_infra-0.1.513/src/svc_infra/cli/cmds/db/nosql/mongo → svc_infra-0.1.672/src/svc_infra/api/fastapi/paths}/__init__.py +0 -0
  270. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/paths/auth.py +0 -0
  271. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/paths/generic.py +0 -0
  272. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/paths/user.py +0 -0
  273. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/api/fastapi/routers/__init__.py +0 -0
  274. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/__init__.py +0 -0
  275. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/env.py +0 -0
  276. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/logging/__init__.py +0 -0
  277. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/logging/add.py +0 -0
  278. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/logging/filter.py +0 -0
  279. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/logging/formats.py +0 -0
  280. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/app/root.py +0 -0
  281. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/README.md +0 -0
  282. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/demo.py +0 -0
  283. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/recache.py +0 -0
  284. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/resources.py +0 -0
  285. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/tags.py +0 -0
  286. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/ttl.py +0 -0
  287. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cache/utils.py +0 -0
  288. {svc_infra-0.1.513/src/svc_infra/cli/cmds/db/sql → svc_infra-0.1.672/src/svc_infra/cli/cmds/db}/__init__.py +0 -0
  289. {svc_infra-0.1.513/src/svc_infra/cli/cmds/obs → svc_infra-0.1.672/src/svc_infra/cli/cmds/db/nosql}/__init__.py +0 -0
  290. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/cmds/db/nosql/mongo/README.md +0 -0
  291. {svc_infra-0.1.513/src/svc_infra/cli/foundation → svc_infra-0.1.672/src/svc_infra/cli/cmds/db/nosql/mongo}/__init__.py +0 -0
  292. {svc_infra-0.1.513/src/svc_infra/db → svc_infra-0.1.672/src/svc_infra/cli/cmds/db/sql}/__init__.py +0 -0
  293. {svc_infra-0.1.513/src/svc_infra/db/nosql/mongo → svc_infra-0.1.672/src/svc_infra/cli/cmds/obs}/__init__.py +0 -0
  294. {svc_infra-0.1.513/src/svc_infra/db/nosql/mongo/templates → svc_infra-0.1.672/src/svc_infra/cli/cmds/sdk}/__init__.py +0 -0
  295. {svc_infra-0.1.513/src/svc_infra/db/sql/templates/models_schemas → svc_infra-0.1.672/src/svc_infra/cli/foundation}/__init__.py +0 -0
  296. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/foundation/runner.py +0 -0
  297. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/cli/foundation/typer_bootstrap.py +0 -0
  298. {svc_infra-0.1.513/src/svc_infra/db/sql/templates/setup → svc_infra-0.1.672/src/svc_infra/db}/__init__.py +0 -0
  299. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/crud_schema.py +0 -0
  300. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/__init__.py +0 -0
  301. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/base.py +0 -0
  302. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/constants.py +0 -0
  303. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/core.py +0 -0
  304. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/indexes.py +0 -0
  305. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/management.py +0 -0
  306. {svc_infra-0.1.513/src/svc_infra/mcp → svc_infra-0.1.672/src/svc_infra/db/nosql/mongo}/__init__.py +0 -0
  307. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/mongo/client.py +0 -0
  308. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/mongo/settings.py +0 -0
  309. {svc_infra-0.1.513/src/svc_infra/obs/metrics → svc_infra-0.1.672/src/svc_infra/db/nosql/mongo/templates}/__init__.py +0 -0
  310. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/mongo/templates/documents.py.tmpl +0 -0
  311. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/mongo/templates/resources.py.tmpl +0 -0
  312. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/mongo/templates/schemas.py.tmpl +0 -0
  313. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/repository.py +0 -0
  314. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/resource.py +0 -0
  315. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/scaffold.py +0 -0
  316. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/service.py +0 -0
  317. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/service_with_hooks.py +0 -0
  318. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/types.py +0 -0
  319. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/nosql/utils.py +0 -0
  320. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/README.md +0 -0
  321. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/__init__.py +0 -0
  322. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/base.py +0 -0
  323. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/constants.py +0 -0
  324. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/management.py +0 -0
  325. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/service.py +0 -0
  326. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/service_with_hooks.py +0 -0
  327. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/templates/__init__.py +0 -0
  328. {svc_infra-0.1.513/src/svc_infra/obs/providers → svc_infra-0.1.672/src/svc_infra/db/sql/templates/models_schemas}/__init__.py +0 -0
  329. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/templates/models_schemas/entity/models.py.tmpl +0 -0
  330. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/templates/models_schemas/entity/schemas.py.tmpl +0 -0
  331. {svc_infra-0.1.513/src/svc_infra/obs/providers/compose_cloud → svc_infra-0.1.672/src/svc_infra/db/sql/templates/setup}/__init__.py +0 -0
  332. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/templates/setup/alembic.ini.tmpl +0 -0
  333. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/templates/setup/script.py.mako.tmpl +0 -0
  334. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/types.py +0 -0
  335. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/uniq.py +0 -0
  336. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/sql/uniq_hooks.py +0 -0
  337. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/db/utils.py +0 -0
  338. {svc_infra-0.1.513/src/svc_infra/obs/providers/compose_cloud/templates → svc_infra-0.1.672/src/svc_infra/mcp}/__init__.py +0 -0
  339. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/__init__.py +0 -0
  340. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/cloud_dash.py +0 -0
  341. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/metrics/asgi.py +0 -0
  342. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/metrics/base.py +0 -0
  343. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/metrics/http.py +0 -0
  344. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/metrics/sqlalchemy.py +0 -0
  345. {svc_infra-0.1.513/src/svc_infra/obs/providers/grafana → svc_infra-0.1.672/src/svc_infra/obs/providers}/__init__.py +0 -0
  346. {svc_infra-0.1.513/src/svc_infra/obs/providers/grafana/dashboards → svc_infra-0.1.672/src/svc_infra/obs/providers/compose_cloud}/__init__.py +0 -0
  347. {svc_infra-0.1.513/src/svc_infra/obs/providers/grafana → svc_infra-0.1.672/src/svc_infra/obs/providers/compose_cloud}/templates/__init__.py +0 -0
  348. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/compose_cloud/templates/agent.yaml.tmpl +0 -0
  349. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/compose_cloud/templates/docker-compose.cloud.yml.tmpl +0 -0
  350. {svc_infra-0.1.513/src/svc_infra/obs/providers/grafana/templates/provisioning → svc_infra-0.1.672/src/svc_infra/obs/providers/grafana}/__init__.py +0 -0
  351. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/dashboards/00_overview.json +0 -0
  352. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/dashboards/10_http.json +0 -0
  353. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/dashboards/20_db.json +0 -0
  354. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/dashboards/30_runtime.json +0 -0
  355. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/dashboards/40_clients.json +0 -0
  356. {svc_infra-0.1.513/src/svc_infra/obs/templates/sidecars → svc_infra-0.1.672/src/svc_infra/obs/providers/grafana/dashboards}/__init__.py +0 -0
  357. {svc_infra-0.1.513/src/svc_infra/obs/templates/sidecars/compose → svc_infra-0.1.672/src/svc_infra/obs/providers/grafana/templates}/__init__.py +0 -0
  358. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/templates/docker-compose.yml.tmpl +0 -0
  359. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/templates/prometheus.yml.tmpl +0 -0
  360. {svc_infra-0.1.513/src/svc_infra/obs/templates/sidecars/fly → svc_infra-0.1.672/src/svc_infra/obs/providers/grafana/templates/provisioning}/__init__.py +0 -0
  361. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/templates/provisioning/dashboards.yml +0 -0
  362. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/providers/grafana/templates/provisioning/datasource.yml +0 -0
  363. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/settings.py +0 -0
  364. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/grafana_dashboard.json +0 -0
  365. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/prometheus_rules.yml +0 -0
  366. {svc_infra-0.1.513/src/svc_infra/obs/templates/sidecars/k8s → svc_infra-0.1.672/src/svc_infra/obs/templates/sidecars}/__init__.py +0 -0
  367. {svc_infra-0.1.513/src/svc_infra/obs/templates/sidecars/railway → svc_infra-0.1.672/src/svc_infra/obs/templates/sidecars/compose}/__init__.py +0 -0
  368. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/compose/agent.yaml +0 -0
  369. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/compose/docker-compose.yml +0 -0
  370. /svc_infra-0.1.513/src/svc_infra/py.typed → /svc_infra-0.1.672/src/svc_infra/obs/templates/sidecars/fly/__init__.py +0 -0
  371. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/fly/agent.yaml +0 -0
  372. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/fly/fly.toml.fragment +0 -0
  373. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/k8s/configmap.yaml +0 -0
  374. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/k8s/deployment.yaml +0 -0
  375. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/railway/Dockerfile +0 -0
  376. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/railway/README.md +0 -0
  377. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/obs/templates/sidecars/railway/agent.yaml +0 -0
  378. {svc_infra-0.1.513 → svc_infra-0.1.672}/src/svc_infra/utils.py +0 -0
@@ -0,0 +1,160 @@
1
+ Metadata-Version: 2.3
2
+ Name: svc-infra
3
+ Version: 0.1.672
4
+ Summary: Infrastructure for building and deploying prod-ready services
5
+ License: MIT
6
+ Keywords: fastapi,sqlalchemy,alembic,auth,infra,async,pydantic
7
+ Author: Ali Khatami
8
+ Author-email: aliikhatami94@gmail.com
9
+ Requires-Python: >=3.11,<4.0
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Framework :: FastAPI
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Typing :: Typed
20
+ Provides-Extra: duckdb
21
+ Provides-Extra: metrics
22
+ Provides-Extra: mssql
23
+ Provides-Extra: mysql
24
+ Provides-Extra: pg
25
+ Provides-Extra: pg2
26
+ Provides-Extra: redshift
27
+ Provides-Extra: s3
28
+ Provides-Extra: snowflake
29
+ Provides-Extra: sqlite
30
+ Requires-Dist: adyen (>=13.4.0,<14.0.0)
31
+ Requires-Dist: ai-infra (>=0.1.63,<0.2.0)
32
+ Requires-Dist: aioboto3 (>=13.0.0,<14.0.0) ; extra == "s3"
33
+ Requires-Dist: aiofiles (>=24.1.0,<25.0.0)
34
+ Requires-Dist: aiosqlite (>=0.20.0,<0.21.0) ; extra == "sqlite"
35
+ Requires-Dist: alembic (>=1.13.2,<2.0.0)
36
+ Requires-Dist: asyncpg (>=0.30.0,<0.31.0) ; extra == "pg"
37
+ Requires-Dist: authlib (>=1.6.2,<2.0.0)
38
+ Requires-Dist: cashews[redis] (>=7.4.1,<8.0.0)
39
+ Requires-Dist: duckdb (>=1.1.3,<2.0.0) ; extra == "duckdb"
40
+ Requires-Dist: email-validator (>=2.2.0,<3.0.0)
41
+ Requires-Dist: fastapi (>=0.116.1,<0.117.0)
42
+ Requires-Dist: fastapi-users-db-sqlalchemy (>=7.0.0,<8.0.0)
43
+ Requires-Dist: fastapi-users[oauth] (>=14.0.1,<15.0.0)
44
+ Requires-Dist: greenlet (>=3,<4)
45
+ Requires-Dist: httpx (>=0.28.1,<0.29.0)
46
+ Requires-Dist: httpx-oauth (>=0.16.1,<0.17.0)
47
+ Requires-Dist: itsdangerous (>=2.2.0,<3.0.0)
48
+ Requires-Dist: mcp (>=1.13.0,<2.0.0)
49
+ Requires-Dist: motor (>=3.7.1,<4.0.0)
50
+ Requires-Dist: mysqlclient (>=2.2.4,<3.0.0) ; extra == "mysql"
51
+ Requires-Dist: opentelemetry-exporter-otlp (>=1.36.0,<2.0.0)
52
+ Requires-Dist: opentelemetry-instrumentation-fastapi (>=0.57b0,<0.58)
53
+ Requires-Dist: opentelemetry-instrumentation-httpx (>=0.57b0,<0.58)
54
+ Requires-Dist: opentelemetry-instrumentation-requests (>=0.57b0,<0.58)
55
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy (>=0.57b0,<0.58)
56
+ Requires-Dist: opentelemetry-propagator-b3 (>=1.36.0,<2.0.0)
57
+ Requires-Dist: opentelemetry-sdk (>=1.36.0,<2.0.0)
58
+ Requires-Dist: passlib[bcrypt] (>=1.7.4,<2.0.0)
59
+ Requires-Dist: pre-commit (>=4.3.0,<5.0.0)
60
+ Requires-Dist: prometheus-client (>=0.22.1,<0.23.0) ; extra == "metrics"
61
+ Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0) ; extra == "pg2"
62
+ Requires-Dist: psycopg[binary] (>=3.2.10,<4.0.0) ; extra == "pg"
63
+ Requires-Dist: pydantic-settings (>=2.10.1,<3.0.0)
64
+ Requires-Dist: pymysql (>=1.1.1,<2.0.0) ; extra == "mysql"
65
+ Requires-Dist: pyodbc (>=5.1.0,<6.0.0) ; extra == "mssql"
66
+ Requires-Dist: pyotp (>=2.9.0,<3.0.0)
67
+ Requires-Dist: python-dotenv (>=1.1.1,<2.0.0)
68
+ Requires-Dist: redis (>=6.4.0,<7.0.0)
69
+ Requires-Dist: redshift-connector (>=2.0.918,<3.0.0) ; extra == "redshift"
70
+ Requires-Dist: snowflake-connector-python (>=3.12.0,<4.0.0) ; extra == "snowflake"
71
+ Requires-Dist: sqlalchemy[asyncio] (>=2.0.43,<3.0.0)
72
+ Requires-Dist: stripe (>=13.0.1,<14.0.0)
73
+ Requires-Dist: typer (>=0.16.1,<0.17.0)
74
+ Project-URL: Documentation, https://github.com/your-org/svc-infra#readme
75
+ Project-URL: Homepage, https://github.com/your-org/svc-infra
76
+ Project-URL: Issues, https://github.com/your-org/svc-infra/issues
77
+ Project-URL: Repository, https://github.com/your-org/svc-infra
78
+ Description-Content-Type: text/markdown
79
+
80
+ # svc-infra
81
+
82
+ [![PyPI](https://img.shields.io/pypi/v/svc-infra.svg)](https://pypi.org/project/svc-infra/)
83
+ [![Docs](https://img.shields.io/badge/docs-reference-blue)](.)
84
+
85
+ svc-infra packages the shared building blocks we use to ship production FastAPI services fast—HTTP APIs with secure auth, durable persistence, background execution, cache, observability, and webhook plumbing that all share the same batteries-included defaults.
86
+
87
+ ## Helper index
88
+
89
+ | Area | What it covers | Guide |
90
+ | --- | --- | --- |
91
+ | Getting Started | Overview and entry points | [This page](src/svc_infra/docs/getting-started.md) |
92
+ | Environment | Feature switches and env vars | [Environment](src/svc_infra/docs/environment.md) |
93
+ | API | FastAPI bootstrap, middleware, docs wiring | [API guide](src/svc_infra/docs/api.md) |
94
+ | Auth | Sessions, OAuth/OIDC, MFA, SMTP delivery | [Auth](src/svc_infra/docs/auth.md) |
95
+ | Security | Password policy, lockout, signed cookies, headers | [Security](src/svc_infra/docs/security.md) |
96
+ | Database | SQL + Mongo wiring, Alembic helpers, inbox/outbox patterns | [Database](src/svc_infra/docs/database.md) |
97
+ | Storage | File storage with S3, local, memory backends | [Storage](src/svc_infra/docs/storage.md) |
98
+ | Documents | Generic document management with metadata | [Documents](src/svc_infra/docs/documents.md) |
99
+ | Tenancy | Multi-tenant boundaries and helpers | [Tenancy](src/svc_infra/docs/tenancy.md) |
100
+ | Idempotency | Idempotent endpoints and middleware | [Idempotency](src/svc_infra/docs/idempotency.md) |
101
+ | Rate Limiting | Middleware, dependency limiter, headers | [Rate limiting](src/svc_infra/docs/rate-limiting.md) |
102
+ | Cache | cashews decorators, namespace management, TTL helpers | [Cache](src/svc_infra/docs/cache.md) |
103
+ | Jobs | JobQueue, scheduler, CLI worker | [Jobs](src/svc_infra/docs/jobs.md) |
104
+ | Observability | Prometheus, Grafana, OpenTelemetry | [Observability](src/svc_infra/docs/observability.md) |
105
+ | Ops | Probes, breakers, SLOs & dashboards | [Ops](src/svc_infra/docs/ops.md) |
106
+ | Webhooks | Subscription store, signing, retry worker | [Webhooks](src/svc_infra/docs/webhooks.md) |
107
+ | CLI | Command groups for sql/mongo/obs/docs/dx/sdk/jobs | [CLI](src/svc_infra/docs/cli.md) |
108
+ | Docs & SDKs | Publishing docs, generating SDKs | [Docs & SDKs](src/svc_infra/docs/docs-and-sdks.md) |
109
+ | Acceptance | Acceptance harness and flows | [Acceptance](src/svc_infra/docs/acceptance.md), [Matrix](src/svc_infra/docs/acceptance-matrix.md) |
110
+ | Contributing | Dev setup and quality gates | [Contributing](src/svc_infra/docs/contributing.md) |
111
+ | Repo Review | Checklist for releasing/PRs | [Repo review](src/svc_infra/docs/repo-review.md) |
112
+ | Data Lifecycle | Fixtures, retention, erasure, backups | [Data lifecycle](src/svc_infra/docs/data-lifecycle.md) |
113
+
114
+ ## Quick Start with Template Example
115
+
116
+ See **ALL** svc-infra features working together in a complete example:
117
+
118
+ ```bash
119
+ # One-time setup (from repo root)
120
+ make setup-template # Scaffolds models, runs migrations
121
+
122
+ # Run the example server
123
+ make run-template # Starts at http://localhost:8001
124
+ ```
125
+
126
+ See [`examples/README.md`](examples/README.md) for full documentation and manual setup options.
127
+
128
+ ## Minimal FastAPI bootstrap
129
+
130
+ ```python
131
+ from fastapi import Depends
132
+ from svc_infra.api.fastapi.ease import easy_service_app
133
+ from svc_infra.api.fastapi.db.sql.add import add_sql_db
134
+ from svc_infra.cache import init_cache
135
+ from svc_infra.jobs.easy import easy_jobs
136
+ from svc_infra.webhooks.fastapi import require_signature
137
+
138
+ app = easy_service_app(name="Billing", release="1.2.3")
139
+ add_sql_db(app) # reads SQL_URL / DB_* envs
140
+ init_cache() # honors CACHE_PREFIX / CACHE_VERSION
141
+ queue, scheduler = easy_jobs() # switches via JOBS_DRIVER / REDIS_URL
142
+
143
+ @app.post("/webhooks/billing")
144
+ async def handle_webhook(payload = Depends(require_signature(lambda: ["current", "next"]))):
145
+ queue.enqueue("process-billing-webhook", payload)
146
+ return {"status": "queued"}
147
+ ```
148
+
149
+ ## Environment switches
150
+
151
+ - **API** – toggle logging/observability and docs exposure with `ENABLE_LOGGING`, `LOG_LEVEL`, `LOG_FORMAT`, `ENABLE_OBS`, `METRICS_PATH`, `OBS_SKIP_PATHS`, and `CORS_ALLOW_ORIGINS`. 【F:src/svc_infra/api/fastapi/ease.py†L67-L111】【F:src/svc_infra/api/fastapi/setup.py†L47-L88】
152
+ - **Auth** – configure JWT secrets, SMTP, cookies, and policy using the `AUTH_…` settings family (e.g., `AUTH_JWT__SECRET`, `AUTH_SMTP_HOST`, `AUTH_SESSION_COOKIE_SECURE`). 【F:src/svc_infra/api/fastapi/auth/settings.py†L23-L91】
153
+ - **Database** – set connection URLs or components via `SQL_URL`/`SQL_URL_FILE`, `DB_DIALECT`, `DB_HOST`, `DB_USER`, `DB_PASSWORD`, plus Mongo knobs like `MONGO_URL`, `MONGO_DB`, and `MONGO_URL_FILE`. 【F:src/svc_infra/api/fastapi/db/sql/add.py†L55-L114】【F:src/svc_infra/db/sql/utils.py†L85-L206】【F:src/svc_infra/db/nosql/mongo/settings.py†L9-L13】【F:src/svc_infra/db/nosql/utils.py†L56-L113】
154
+ - **Storage** – choose backend with `STORAGE_BACKEND` (local, s3, memory) and configure with `STORAGE_S3_BUCKET`, `STORAGE_S3_REGION`, `STORAGE_BASE_PATH`, or auto-detect from `RAILWAY_VOLUME_MOUNT_PATH` / AWS credentials. 【F:src/svc_infra/storage/settings.py】【F:src/svc_infra/docs/storage.md】
155
+ - **Jobs** – choose the queue backend with `JOBS_DRIVER` and provide Redis via `REDIS_URL`; interval schedules can be declared with `JOBS_SCHEDULE_JSON`. 【F:src/svc_infra/jobs/easy.py†L11-L27】【F:src/svc_infra/docs/jobs.md†L11-L48】
156
+ - **Cache** – namespace keys and lifetimes through `CACHE_PREFIX`, `CACHE_VERSION`, and TTL overrides `CACHE_TTL_DEFAULT`, `CACHE_TTL_SHORT`, `CACHE_TTL_LONG`. 【F:src/svc_infra/cache/README.md†L20-L173】【F:src/svc_infra/cache/ttl.py†L26-L55】
157
+ - **Observability** – turn metrics on/off or adjust scrape paths with `ENABLE_OBS`, `METRICS_PATH`, `OBS_SKIP_PATHS`, and Prometheus/Grafana flags like `SVC_INFRA_DISABLE_PROMETHEUS`, `SVC_INFRA_RATE_WINDOW`, `SVC_INFRA_DASHBOARD_REFRESH`, `SVC_INFRA_DASHBOARD_RANGE`. 【F:src/svc_infra/api/fastapi/ease.py†L67-L111】【F:src/svc_infra/obs/metrics/asgi.py†L49-L206】【F:src/svc_infra/obs/cloud_dash.py†L85-L108】
158
+ - **Webhooks** – reuse the jobs envs (`JOBS_DRIVER`, `REDIS_URL`) for the delivery worker and queue configuration. 【F:src/svc_infra/docs/webhooks.md†L32-L53】
159
+ - **Security** – enforce password policy, MFA, and rotation with auth prefixes such as `AUTH_PASSWORD_MIN_LENGTH`, `AUTH_PASSWORD_REQUIRE_SYMBOL`, `AUTH_JWT__SECRET`, and `AUTH_JWT__OLD_SECRETS`. 【F:src/svc_infra/docs/security.md†L24-L70】
160
+
@@ -0,0 +1,80 @@
1
+ # svc-infra
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/svc-infra.svg)](https://pypi.org/project/svc-infra/)
4
+ [![Docs](https://img.shields.io/badge/docs-reference-blue)](.)
5
+
6
+ svc-infra packages the shared building blocks we use to ship production FastAPI services fast—HTTP APIs with secure auth, durable persistence, background execution, cache, observability, and webhook plumbing that all share the same batteries-included defaults.
7
+
8
+ ## Helper index
9
+
10
+ | Area | What it covers | Guide |
11
+ | --- | --- | --- |
12
+ | Getting Started | Overview and entry points | [This page](src/svc_infra/docs/getting-started.md) |
13
+ | Environment | Feature switches and env vars | [Environment](src/svc_infra/docs/environment.md) |
14
+ | API | FastAPI bootstrap, middleware, docs wiring | [API guide](src/svc_infra/docs/api.md) |
15
+ | Auth | Sessions, OAuth/OIDC, MFA, SMTP delivery | [Auth](src/svc_infra/docs/auth.md) |
16
+ | Security | Password policy, lockout, signed cookies, headers | [Security](src/svc_infra/docs/security.md) |
17
+ | Database | SQL + Mongo wiring, Alembic helpers, inbox/outbox patterns | [Database](src/svc_infra/docs/database.md) |
18
+ | Storage | File storage with S3, local, memory backends | [Storage](src/svc_infra/docs/storage.md) |
19
+ | Documents | Generic document management with metadata | [Documents](src/svc_infra/docs/documents.md) |
20
+ | Tenancy | Multi-tenant boundaries and helpers | [Tenancy](src/svc_infra/docs/tenancy.md) |
21
+ | Idempotency | Idempotent endpoints and middleware | [Idempotency](src/svc_infra/docs/idempotency.md) |
22
+ | Rate Limiting | Middleware, dependency limiter, headers | [Rate limiting](src/svc_infra/docs/rate-limiting.md) |
23
+ | Cache | cashews decorators, namespace management, TTL helpers | [Cache](src/svc_infra/docs/cache.md) |
24
+ | Jobs | JobQueue, scheduler, CLI worker | [Jobs](src/svc_infra/docs/jobs.md) |
25
+ | Observability | Prometheus, Grafana, OpenTelemetry | [Observability](src/svc_infra/docs/observability.md) |
26
+ | Ops | Probes, breakers, SLOs & dashboards | [Ops](src/svc_infra/docs/ops.md) |
27
+ | Webhooks | Subscription store, signing, retry worker | [Webhooks](src/svc_infra/docs/webhooks.md) |
28
+ | CLI | Command groups for sql/mongo/obs/docs/dx/sdk/jobs | [CLI](src/svc_infra/docs/cli.md) |
29
+ | Docs & SDKs | Publishing docs, generating SDKs | [Docs & SDKs](src/svc_infra/docs/docs-and-sdks.md) |
30
+ | Acceptance | Acceptance harness and flows | [Acceptance](src/svc_infra/docs/acceptance.md), [Matrix](src/svc_infra/docs/acceptance-matrix.md) |
31
+ | Contributing | Dev setup and quality gates | [Contributing](src/svc_infra/docs/contributing.md) |
32
+ | Repo Review | Checklist for releasing/PRs | [Repo review](src/svc_infra/docs/repo-review.md) |
33
+ | Data Lifecycle | Fixtures, retention, erasure, backups | [Data lifecycle](src/svc_infra/docs/data-lifecycle.md) |
34
+
35
+ ## Quick Start with Template Example
36
+
37
+ See **ALL** svc-infra features working together in a complete example:
38
+
39
+ ```bash
40
+ # One-time setup (from repo root)
41
+ make setup-template # Scaffolds models, runs migrations
42
+
43
+ # Run the example server
44
+ make run-template # Starts at http://localhost:8001
45
+ ```
46
+
47
+ See [`examples/README.md`](examples/README.md) for full documentation and manual setup options.
48
+
49
+ ## Minimal FastAPI bootstrap
50
+
51
+ ```python
52
+ from fastapi import Depends
53
+ from svc_infra.api.fastapi.ease import easy_service_app
54
+ from svc_infra.api.fastapi.db.sql.add import add_sql_db
55
+ from svc_infra.cache import init_cache
56
+ from svc_infra.jobs.easy import easy_jobs
57
+ from svc_infra.webhooks.fastapi import require_signature
58
+
59
+ app = easy_service_app(name="Billing", release="1.2.3")
60
+ add_sql_db(app) # reads SQL_URL / DB_* envs
61
+ init_cache() # honors CACHE_PREFIX / CACHE_VERSION
62
+ queue, scheduler = easy_jobs() # switches via JOBS_DRIVER / REDIS_URL
63
+
64
+ @app.post("/webhooks/billing")
65
+ async def handle_webhook(payload = Depends(require_signature(lambda: ["current", "next"]))):
66
+ queue.enqueue("process-billing-webhook", payload)
67
+ return {"status": "queued"}
68
+ ```
69
+
70
+ ## Environment switches
71
+
72
+ - **API** – toggle logging/observability and docs exposure with `ENABLE_LOGGING`, `LOG_LEVEL`, `LOG_FORMAT`, `ENABLE_OBS`, `METRICS_PATH`, `OBS_SKIP_PATHS`, and `CORS_ALLOW_ORIGINS`. 【F:src/svc_infra/api/fastapi/ease.py†L67-L111】【F:src/svc_infra/api/fastapi/setup.py†L47-L88】
73
+ - **Auth** – configure JWT secrets, SMTP, cookies, and policy using the `AUTH_…` settings family (e.g., `AUTH_JWT__SECRET`, `AUTH_SMTP_HOST`, `AUTH_SESSION_COOKIE_SECURE`). 【F:src/svc_infra/api/fastapi/auth/settings.py†L23-L91】
74
+ - **Database** – set connection URLs or components via `SQL_URL`/`SQL_URL_FILE`, `DB_DIALECT`, `DB_HOST`, `DB_USER`, `DB_PASSWORD`, plus Mongo knobs like `MONGO_URL`, `MONGO_DB`, and `MONGO_URL_FILE`. 【F:src/svc_infra/api/fastapi/db/sql/add.py†L55-L114】【F:src/svc_infra/db/sql/utils.py†L85-L206】【F:src/svc_infra/db/nosql/mongo/settings.py†L9-L13】【F:src/svc_infra/db/nosql/utils.py†L56-L113】
75
+ - **Storage** – choose backend with `STORAGE_BACKEND` (local, s3, memory) and configure with `STORAGE_S3_BUCKET`, `STORAGE_S3_REGION`, `STORAGE_BASE_PATH`, or auto-detect from `RAILWAY_VOLUME_MOUNT_PATH` / AWS credentials. 【F:src/svc_infra/storage/settings.py】【F:src/svc_infra/docs/storage.md】
76
+ - **Jobs** – choose the queue backend with `JOBS_DRIVER` and provide Redis via `REDIS_URL`; interval schedules can be declared with `JOBS_SCHEDULE_JSON`. 【F:src/svc_infra/jobs/easy.py†L11-L27】【F:src/svc_infra/docs/jobs.md†L11-L48】
77
+ - **Cache** – namespace keys and lifetimes through `CACHE_PREFIX`, `CACHE_VERSION`, and TTL overrides `CACHE_TTL_DEFAULT`, `CACHE_TTL_SHORT`, `CACHE_TTL_LONG`. 【F:src/svc_infra/cache/README.md†L20-L173】【F:src/svc_infra/cache/ttl.py†L26-L55】
78
+ - **Observability** – turn metrics on/off or adjust scrape paths with `ENABLE_OBS`, `METRICS_PATH`, `OBS_SKIP_PATHS`, and Prometheus/Grafana flags like `SVC_INFRA_DISABLE_PROMETHEUS`, `SVC_INFRA_RATE_WINDOW`, `SVC_INFRA_DASHBOARD_REFRESH`, `SVC_INFRA_DASHBOARD_RANGE`. 【F:src/svc_infra/api/fastapi/ease.py†L67-L111】【F:src/svc_infra/obs/metrics/asgi.py†L49-L206】【F:src/svc_infra/obs/cloud_dash.py†L85-L108】
79
+ - **Webhooks** – reuse the jobs envs (`JOBS_DRIVER`, `REDIS_URL`) for the delivery worker and queue configuration. 【F:src/svc_infra/docs/webhooks.md†L32-L53】
80
+ - **Security** – enforce password policy, MFA, and rotation with auth prefixes such as `AUTH_PASSWORD_MIN_LENGTH`, `AUTH_PASSWORD_REQUIRE_SYMBOL`, `AUTH_JWT__SECRET`, and `AUTH_JWT__OLD_SECRETS`. 【F:src/svc_infra/docs/security.md†L24-L70】
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "svc-infra"
3
- version = "0.1.513"
3
+ version = "0.1.672"
4
4
  description = "Infrastructure for building and deploying prod-ready services"
5
5
  authors = ["Ali Khatami <aliikhatami94@gmail.com>"]
6
6
  license = "MIT"
@@ -12,7 +12,8 @@ include = [
12
12
  "src/svc_infra/db/templates/**/*",
13
13
  "src/svc_infra/obs/templates/**/*",
14
14
  "src/svc_infra/obs/grafana/templates/**/*",
15
- "src/svc_infra/obs/grafana/dashboards/**/*"
15
+ "src/svc_infra/obs/grafana/dashboards/**/*",
16
+ "src/svc_infra/docs/**/*"
16
17
  ]
17
18
 
18
19
  classifiers = [
@@ -67,6 +68,10 @@ redshift-connector = { version = "^2.0.918", optional = true }
67
68
  duckdb = { version = "^1.1.3", optional = true }
68
69
  # (Removed hard psycopg2)
69
70
 
71
+ # Storage
72
+ aiofiles = "^24.1.0"
73
+ aioboto3 = { version = "^13.0.0", optional = true }
74
+
70
75
  # Other infra deps
71
76
  mcp = "^1.13.0"
72
77
  ai-infra = "^0.1.63"
@@ -86,6 +91,8 @@ redis = "^6.4.0"
86
91
  cashews = {extras = ["redis"], version = "^7.4.1"}
87
92
  itsdangerous = "^2.2.0"
88
93
  pyotp = "^2.9.0"
94
+ stripe = "^13.0.1"
95
+ adyen = "^13.4.0"
89
96
 
90
97
  [tool.poetry.extras]
91
98
  # Postgres v3
@@ -99,6 +106,7 @@ snowflake = ["snowflake-connector-python"]
99
106
  redshift = ["redshift-connector"]
100
107
  duckdb = ["duckdb"]
101
108
  metrics = ["prometheus-client"]
109
+ s3 = ["aioboto3"]
102
110
 
103
111
  [tool.poetry.group.dev.dependencies]
104
112
  pytest = "^8.3.2"
@@ -106,6 +114,11 @@ pytest-asyncio = "^0.23.8"
106
114
  ruff = "^0.6.9"
107
115
  mypy = "^1.11.2"
108
116
  types-requests = "^2.32.0.20241016"
117
+ pytest-mock = "^3.15.1"
118
+ httpx = "^0.28.1"
119
+ fakeredis = "^2.27.0"
120
+ moto = {extras = ["s3"], version = "^5.0.0"}
121
+ aiosqlite = "^0.20.0" # Required for acceptance tests using SQLite
109
122
 
110
123
  [tool.poetry.scripts]
111
124
  svc-infra = "svc_infra.cli:main"
@@ -115,6 +128,22 @@ testpaths = ["tests"]
115
128
  python_files = ["test_*.py", "*_test.py"]
116
129
  python_classes = ["Test*",]
117
130
  python_functions = ["test_*"]
131
+ markers = [
132
+ "acceptance: End-to-end acceptance tests running against the acceptance app or BASE_URL",
133
+ "unit: Unit tests",
134
+ "security: Security and auth hardening tests",
135
+ "ratelimit: Rate limiting and abuse protection tests",
136
+ "concurrency: Idempotency and concurrency control tests",
137
+ "jobs: Background jobs and scheduling tests",
138
+ "webhooks: Webhooks framework tests",
139
+ "billing: Billing primitives tests",
140
+ "tenancy: Tenancy isolation and enforcement tests",
141
+ "data_lifecycle: Data lifecycle (fixtures, retention, erasure, backups)",
142
+ "ops: SLOs & Ops tests (probes, breaker, instrumentation)",
143
+ "dx: Developer experience and quality gates tests",
144
+ "admin: Admin scope and impersonation tests",
145
+ "storage: File storage system tests",
146
+ ]
118
147
  filterwarnings = [
119
148
  "ignore:The `route` decorator is deprecated:DeprecationWarning:starlette.*",
120
149
  ]