tigrbl 0.3.17.dev11__tar.gz → 0.3.17.dev12__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 (385) hide show
  1. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/PKG-INFO +5 -2
  2. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/pyproject.toml +12 -10
  3. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/__init__.py +4 -0
  4. tigrbl-0.3.17.dev11/tigrbl/_base/__init__.py +0 -24
  5. tigrbl-0.3.17.dev11/tigrbl/_base/_hook_base.py +0 -25
  6. tigrbl-0.3.17.dev11/tigrbl/_base/_middleware_base.py +0 -141
  7. tigrbl-0.3.17.dev11/tigrbl/_base/_op_base.py +0 -12
  8. tigrbl-0.3.17.dev11/tigrbl/_base/_request_base.py +0 -32
  9. tigrbl-0.3.17.dev11/tigrbl/_base/_response_base.py +0 -231
  10. tigrbl-0.3.17.dev11/tigrbl/_base/_schema_base.py +0 -14
  11. tigrbl-0.3.17.dev11/tigrbl/_base/_security_base.py +0 -69
  12. tigrbl-0.3.17.dev11/tigrbl/_base/_session_abc.py +0 -47
  13. tigrbl-0.3.17.dev11/tigrbl/_base/_session_base.py +0 -132
  14. tigrbl-0.3.17.dev11/tigrbl/_base/_storage.py +0 -13
  15. tigrbl-0.3.17.dev11/tigrbl/_base/_table_base.py +0 -443
  16. tigrbl-0.3.17.dev11/tigrbl/_base/_table_registry_base.py +0 -55
  17. tigrbl-0.3.17.dev11/tigrbl/_concrete/__init__.py +0 -44
  18. tigrbl-0.3.17.dev11/tigrbl/_concrete/_alias.py +0 -42
  19. tigrbl-0.3.17.dev11/tigrbl/_concrete/_app.py +0 -180
  20. tigrbl-0.3.17.dev11/tigrbl/_concrete/_background.py +0 -29
  21. tigrbl-0.3.17.dev11/tigrbl/_concrete/_body.py +0 -27
  22. tigrbl-0.3.17.dev11/tigrbl/_concrete/_column.py +0 -96
  23. tigrbl-0.3.17.dev11/tigrbl/_concrete/_cors_middleware.py +0 -103
  24. tigrbl-0.3.17.dev11/tigrbl/_concrete/_engine.py +0 -187
  25. tigrbl-0.3.17.dev11/tigrbl/_concrete/_file_response.py +0 -26
  26. tigrbl-0.3.17.dev11/tigrbl/_concrete/_headers.py +0 -142
  27. tigrbl-0.3.17.dev11/tigrbl/_concrete/_hook.py +0 -12
  28. tigrbl-0.3.17.dev11/tigrbl/_concrete/_html_response.py +0 -18
  29. tigrbl-0.3.17.dev11/tigrbl/_concrete/_httpx.py +0 -25
  30. tigrbl-0.3.17.dev11/tigrbl/_concrete/_json_response.py +0 -24
  31. tigrbl-0.3.17.dev11/tigrbl/_concrete/_middleware.py +0 -45
  32. tigrbl-0.3.17.dev11/tigrbl/_concrete/_op.py +0 -31
  33. tigrbl-0.3.17.dev11/tigrbl/_concrete/_op_registry.py +0 -301
  34. tigrbl-0.3.17.dev11/tigrbl/_concrete/_plain_text_response.py +0 -18
  35. tigrbl-0.3.17.dev11/tigrbl/_concrete/_redirect_response.py +0 -19
  36. tigrbl-0.3.17.dev11/tigrbl/_concrete/_request.py +0 -270
  37. tigrbl-0.3.17.dev11/tigrbl/_concrete/_request_adapters.py +0 -68
  38. tigrbl-0.3.17.dev11/tigrbl/_concrete/_response.py +0 -35
  39. tigrbl-0.3.17.dev11/tigrbl/_concrete/_route.py +0 -122
  40. tigrbl-0.3.17.dev11/tigrbl/_concrete/_router.py +0 -207
  41. tigrbl-0.3.17.dev11/tigrbl/_concrete/_routing.py +0 -139
  42. tigrbl-0.3.17.dev11/tigrbl/_concrete/_schema.py +0 -28
  43. tigrbl-0.3.17.dev11/tigrbl/_concrete/_security/api_key.py +0 -57
  44. tigrbl-0.3.17.dev11/tigrbl/_concrete/_security/http_bearer.py +0 -74
  45. tigrbl-0.3.17.dev11/tigrbl/_concrete/_security/mutual_tls.py +0 -27
  46. tigrbl-0.3.17.dev11/tigrbl/_concrete/_security/oauth2.py +0 -28
  47. tigrbl-0.3.17.dev11/tigrbl/_concrete/_security/openid_connect.py +0 -31
  48. tigrbl-0.3.17.dev11/tigrbl/_concrete/_session.py +0 -112
  49. tigrbl-0.3.17.dev11/tigrbl/_concrete/_storage.py +0 -13
  50. tigrbl-0.3.17.dev11/tigrbl/_concrete/_streaming_response.py +0 -35
  51. tigrbl-0.3.17.dev11/tigrbl/_concrete/_table.py +0 -103
  52. tigrbl-0.3.17.dev11/tigrbl/_concrete/_table_registry.py +0 -10
  53. tigrbl-0.3.17.dev11/tigrbl/_concrete/dependencies.py +0 -21
  54. tigrbl-0.3.17.dev11/tigrbl/_concrete/tigrbl_app.py +0 -895
  55. tigrbl-0.3.17.dev11/tigrbl/_concrete/tigrbl_router.py +0 -418
  56. tigrbl-0.3.17.dev11/tigrbl/_spec/__init__.py +0 -67
  57. tigrbl-0.3.17.dev11/tigrbl/_spec/alias_spec.py +0 -35
  58. tigrbl-0.3.17.dev11/tigrbl/_spec/app_spec.py +0 -137
  59. tigrbl-0.3.17.dev11/tigrbl/_spec/binding_spec.py +0 -78
  60. tigrbl-0.3.17.dev11/tigrbl/_spec/column_spec.py +0 -40
  61. tigrbl-0.3.17.dev11/tigrbl/_spec/engine_spec.py +0 -359
  62. tigrbl-0.3.17.dev11/tigrbl/_spec/field_spec.py +0 -32
  63. tigrbl-0.3.17.dev11/tigrbl/_spec/hook_spec.py +0 -24
  64. tigrbl-0.3.17.dev11/tigrbl/_spec/io_spec.py +0 -136
  65. tigrbl-0.3.17.dev11/tigrbl/_spec/middleware_spec.py +0 -28
  66. tigrbl-0.3.17.dev11/tigrbl/_spec/op_spec.py +0 -110
  67. tigrbl-0.3.17.dev11/tigrbl/_spec/request_spec.py +0 -19
  68. tigrbl-0.3.17.dev11/tigrbl/_spec/response_spec.py +0 -34
  69. tigrbl-0.3.17.dev11/tigrbl/_spec/response_types.py +0 -12
  70. tigrbl-0.3.17.dev11/tigrbl/_spec/router_spec.py +0 -25
  71. tigrbl-0.3.17.dev11/tigrbl/_spec/schema_spec.py +0 -20
  72. tigrbl-0.3.17.dev11/tigrbl/_spec/session_spec.py +0 -160
  73. tigrbl-0.3.17.dev11/tigrbl/_spec/shortcuts_spec.py +0 -8
  74. tigrbl-0.3.17.dev11/tigrbl/_spec/storage_spec.py +0 -72
  75. tigrbl-0.3.17.dev11/tigrbl/_spec/table_registry_spec.py +0 -14
  76. tigrbl-0.3.17.dev11/tigrbl/_spec/table_spec.py +0 -73
  77. tigrbl-0.3.17.dev11/tigrbl/core/__init__.py +0 -47
  78. tigrbl-0.3.17.dev11/tigrbl/core/crud/__init__.py +0 -43
  79. tigrbl-0.3.17.dev11/tigrbl/core/crud/bulk.py +0 -167
  80. tigrbl-0.3.17.dev11/tigrbl/core/crud/helpers/__init__.py +0 -76
  81. tigrbl-0.3.17.dev11/tigrbl/core/crud/helpers/db.py +0 -91
  82. tigrbl-0.3.17.dev11/tigrbl/core/crud/helpers/enum.py +0 -85
  83. tigrbl-0.3.17.dev11/tigrbl/core/crud/helpers/filters.py +0 -161
  84. tigrbl-0.3.17.dev11/tigrbl/core/crud/helpers/model.py +0 -136
  85. tigrbl-0.3.17.dev11/tigrbl/core/crud/helpers/normalize.py +0 -98
  86. tigrbl-0.3.17.dev11/tigrbl/core/crud/ops.py +0 -298
  87. tigrbl-0.3.17.dev11/tigrbl/core/crud/params.py +0 -50
  88. tigrbl-0.3.17.dev11/tigrbl/mapping/__init__.py +0 -60
  89. tigrbl-0.3.17.dev11/tigrbl/mapping/app_mro_collect.py +0 -14
  90. tigrbl-0.3.17.dev11/tigrbl/mapping/apply.py +0 -98
  91. tigrbl-0.3.17.dev11/tigrbl/mapping/collect.py +0 -60
  92. tigrbl-0.3.17.dev11/tigrbl/mapping/collect_decorated_schemas.py +0 -78
  93. tigrbl-0.3.17.dev11/tigrbl/mapping/column_mro_collect.py +0 -124
  94. tigrbl-0.3.17.dev11/tigrbl/mapping/columns.py +0 -49
  95. tigrbl-0.3.17.dev11/tigrbl/mapping/config_resolver.py +0 -299
  96. tigrbl-0.3.17.dev11/tigrbl/mapping/context.py +0 -48
  97. tigrbl-0.3.17.dev11/tigrbl/mapping/core_resolver.py +0 -102
  98. tigrbl-0.3.17.dev11/tigrbl/mapping/diagnostics.py +0 -20
  99. tigrbl-0.3.17.dev11/tigrbl/mapping/engine_resolver.py +0 -379
  100. tigrbl-0.3.17.dev11/tigrbl/mapping/handlers/__init__.py +0 -10
  101. tigrbl-0.3.17.dev11/tigrbl/mapping/handlers/builder.py +0 -118
  102. tigrbl-0.3.17.dev11/tigrbl/mapping/handlers/ctx.py +0 -85
  103. tigrbl-0.3.17.dev11/tigrbl/mapping/handlers/identifiers.py +0 -227
  104. tigrbl-0.3.17.dev11/tigrbl/mapping/handlers/namespaces.py +0 -50
  105. tigrbl-0.3.17.dev11/tigrbl/mapping/handlers/steps.py +0 -276
  106. tigrbl-0.3.17.dev11/tigrbl/mapping/hook_mro_collect.py +0 -121
  107. tigrbl-0.3.17.dev11/tigrbl/mapping/hooks.py +0 -325
  108. tigrbl-0.3.17.dev11/tigrbl/mapping/mapping_resolver.py +0 -5
  109. tigrbl-0.3.17.dev11/tigrbl/mapping/model.py +0 -33
  110. tigrbl-0.3.17.dev11/tigrbl/mapping/model_helpers.py +0 -151
  111. tigrbl-0.3.17.dev11/tigrbl/mapping/model_registry.py +0 -85
  112. tigrbl-0.3.17.dev11/tigrbl/mapping/op_mro_collect.py +0 -136
  113. tigrbl-0.3.17.dev11/tigrbl/mapping/op_resolver.py +0 -216
  114. tigrbl-0.3.17.dev11/tigrbl/mapping/passes.py +0 -74
  115. tigrbl-0.3.17.dev11/tigrbl/mapping/plan.py +0 -54
  116. tigrbl-0.3.17.dev11/tigrbl/mapping/precedence.py +0 -45
  117. tigrbl-0.3.17.dev11/tigrbl/mapping/responses_resolver.py +0 -83
  118. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/__init__.py +0 -7
  119. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/attach.py +0 -25
  120. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/collection.py +0 -290
  121. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/common.py +0 -121
  122. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/helpers.py +0 -108
  123. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/io.py +0 -335
  124. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/io_headers.py +0 -49
  125. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/member.py +0 -200
  126. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/router.py +0 -319
  127. tigrbl-0.3.17.dev11/tigrbl/mapping/rest/routing.py +0 -135
  128. tigrbl-0.3.17.dev11/tigrbl/mapping/router/common.py +0 -100
  129. tigrbl-0.3.17.dev11/tigrbl/mapping/router/include.py +0 -466
  130. tigrbl-0.3.17.dev11/tigrbl/mapping/router/resource_proxy.py +0 -104
  131. tigrbl-0.3.17.dev11/tigrbl/mapping/router/rpc.py +0 -153
  132. tigrbl-0.3.17.dev11/tigrbl/mapping/router_mro_collect.py +0 -45
  133. tigrbl-0.3.17.dev11/tigrbl/mapping/rpc.py +0 -493
  134. tigrbl-0.3.17.dev11/tigrbl/mapping/runtime_routes.py +0 -293
  135. tigrbl-0.3.17.dev11/tigrbl/mapping/schemas/__init__.py +0 -10
  136. tigrbl-0.3.17.dev11/tigrbl/mapping/schemas/builder.py +0 -347
  137. tigrbl-0.3.17.dev11/tigrbl/mapping/schemas/defaults.py +0 -259
  138. tigrbl-0.3.17.dev11/tigrbl/mapping/schemas/utils.py +0 -192
  139. tigrbl-0.3.17.dev11/tigrbl/mapping/spec_normalization.py +0 -110
  140. tigrbl-0.3.17.dev11/tigrbl/mapping/table.py +0 -5
  141. tigrbl-0.3.17.dev11/tigrbl/mapping/table_mro_collect.py +0 -14
  142. tigrbl-0.3.17.dev11/tigrbl/mapping/traversal.py +0 -196
  143. tigrbl-0.3.17.dev11/tigrbl/orm/__init__.py +0 -1
  144. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/_RowBound.py +0 -83
  145. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/__init__.py +0 -95
  146. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/bootstrappable.py +0 -113
  147. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/bound.py +0 -47
  148. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/edges.py +0 -40
  149. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/fields.py +0 -165
  150. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/hierarchy.py +0 -54
  151. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/key_digest.py +0 -44
  152. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/lifecycle.py +0 -115
  153. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/locks.py +0 -51
  154. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/markers.py +0 -16
  155. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/operations.py +0 -57
  156. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/ownable.py +0 -337
  157. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/principals.py +0 -98
  158. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/tenant_bound.py +0 -301
  159. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/upsertable.py +0 -118
  160. tigrbl-0.3.17.dev11/tigrbl/orm/mixins/utils.py +0 -49
  161. tigrbl-0.3.17.dev11/tigrbl/orm/tables/__init__.py +0 -73
  162. tigrbl-0.3.17.dev11/tigrbl/orm/tables/_base.py +0 -7
  163. tigrbl-0.3.17.dev11/tigrbl/orm/tables/audit.py +0 -56
  164. tigrbl-0.3.17.dev11/tigrbl/orm/tables/client.py +0 -25
  165. tigrbl-0.3.17.dev11/tigrbl/orm/tables/group.py +0 -29
  166. tigrbl-0.3.17.dev11/tigrbl/orm/tables/org.py +0 -30
  167. tigrbl-0.3.17.dev11/tigrbl/orm/tables/rbac.py +0 -76
  168. tigrbl-0.3.17.dev11/tigrbl/orm/tables/status.py +0 -106
  169. tigrbl-0.3.17.dev11/tigrbl/orm/tables/tenant.py +0 -22
  170. tigrbl-0.3.17.dev11/tigrbl/orm/tables/user.py +0 -39
  171. tigrbl-0.3.17.dev11/tigrbl/runtime/README.md +0 -180
  172. tigrbl-0.3.17.dev11/tigrbl/runtime/__init__.py +0 -20
  173. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/__init__.py +0 -111
  174. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/dep/__init__.py +0 -15
  175. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/dep/extra.py +0 -104
  176. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/dep/security.py +0 -114
  177. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/__init__.py +0 -43
  178. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/asgi_send.py +0 -228
  179. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/envelope_apply.py +0 -101
  180. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/headers_apply.py +0 -58
  181. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/http_finalize.py +0 -43
  182. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/out_dump.py +0 -33
  183. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/result_normalize.py +0 -35
  184. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/egress/to_transport_response.py +0 -125
  185. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/emit/__init__.py +0 -42
  186. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/emit/paired_post.py +0 -158
  187. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/emit/paired_pre.py +0 -106
  188. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -120
  189. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/__init__.py +0 -58
  190. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/attach_compiled.py +0 -32
  191. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/body_peek.py +0 -29
  192. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/body_read.py +0 -66
  193. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/ctx_init.py +0 -27
  194. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/headers_parse.py +0 -67
  195. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/method_extract.py +0 -45
  196. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/metrics_start.py +0 -27
  197. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/path_extract.py +0 -46
  198. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/query_parse.py +0 -101
  199. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/raw_from_scope.py +0 -124
  200. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/request_body_apply.py +0 -26
  201. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/ingress/request_from_scope.py +0 -33
  202. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/out/__init__.py +0 -38
  203. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/out/masking.py +0 -135
  204. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/refresh/__init__.py +0 -38
  205. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/refresh/demand.py +0 -130
  206. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/resolve/__init__.py +0 -40
  207. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/resolve/assemble.py +0 -167
  208. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/resolve/paired_gen.py +0 -152
  209. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/__init__.py +0 -19
  210. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/headers_from_payload.py +0 -57
  211. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/negotiate.py +0 -30
  212. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/negotiation.py +0 -43
  213. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/render.py +0 -82
  214. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/renderer.py +0 -117
  215. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/template.py +0 -44
  216. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/response/templates.py +0 -88
  217. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/__init__.py +0 -42
  218. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/binding_match.py +0 -155
  219. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/binding_policy_apply.py +0 -82
  220. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/ctx_finalize.py +0 -142
  221. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/op_resolve.py +0 -67
  222. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/params_normalize.py +0 -22
  223. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/path_params_extract.py +0 -21
  224. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/payload_select.py +0 -222
  225. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/plan_select.py +0 -31
  226. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/protocol_detect.py +0 -51
  227. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/rpc_envelope_parse.py +0 -135
  228. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/route/rpc_method_match.py +0 -39
  229. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/schema/__init__.py +0 -40
  230. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/schema/collect_in.py +0 -21
  231. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/schema/collect_out.py +0 -21
  232. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/storage/__init__.py +0 -38
  233. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/storage/to_stored.py +0 -167
  234. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/sys/__init__.py +0 -26
  235. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/sys/commit_tx.py +0 -16
  236. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/sys/handler_persistence.py +0 -38
  237. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/sys/start_tx.py +0 -16
  238. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/wire/__init__.py +0 -45
  239. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/wire/build_in.py +0 -287
  240. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/wire/build_out.py +0 -99
  241. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/wire/dump.py +0 -270
  242. tigrbl-0.3.17.dev11/tigrbl/runtime/atoms/wire/validate_in.py +0 -259
  243. tigrbl-0.3.17.dev11/tigrbl/runtime/context.py +0 -206
  244. tigrbl-0.3.17.dev11/tigrbl/runtime/events.py +0 -435
  245. tigrbl-0.3.17.dev11/tigrbl/runtime/exceptions.py +0 -18
  246. tigrbl-0.3.17.dev11/tigrbl/runtime/executor/__init__.py +0 -6
  247. tigrbl-0.3.17.dev11/tigrbl/runtime/executor/guards.py +0 -132
  248. tigrbl-0.3.17.dev11/tigrbl/runtime/executor/helpers.py +0 -194
  249. tigrbl-0.3.17.dev11/tigrbl/runtime/executor/invoke.py +0 -242
  250. tigrbl-0.3.17.dev11/tigrbl/runtime/executor/types.py +0 -128
  251. tigrbl-0.3.17.dev11/tigrbl/runtime/gw/__init__.py +0 -4
  252. tigrbl-0.3.17.dev11/tigrbl/runtime/gw/invoke.py +0 -345
  253. tigrbl-0.3.17.dev11/tigrbl/runtime/gw/raw.py +0 -26
  254. tigrbl-0.3.17.dev11/tigrbl/runtime/hook_types.py +0 -60
  255. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel/__init__.py +0 -49
  256. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel/atoms.py +0 -234
  257. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel/cache.py +0 -85
  258. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel/core.py +0 -483
  259. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel/models.py +0 -124
  260. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel/opview_compiler.py +0 -99
  261. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel/payload.py +0 -64
  262. tigrbl-0.3.17.dev11/tigrbl/runtime/kernel.py +0 -667
  263. tigrbl-0.3.17.dev11/tigrbl/runtime/labels.py +0 -369
  264. tigrbl-0.3.17.dev11/tigrbl/runtime/opview.py +0 -89
  265. tigrbl-0.3.17.dev11/tigrbl/runtime/ordering.py +0 -331
  266. tigrbl-0.3.17.dev11/tigrbl/runtime/status/__init__.py +0 -63
  267. tigrbl-0.3.17.dev11/tigrbl/runtime/status/converters.py +0 -222
  268. tigrbl-0.3.17.dev11/tigrbl/runtime/status/exceptions.py +0 -149
  269. tigrbl-0.3.17.dev11/tigrbl/runtime/status/mappings.py +0 -94
  270. tigrbl-0.3.17.dev11/tigrbl/runtime/status/utils.py +0 -114
  271. tigrbl-0.3.17.dev11/tigrbl/runtime/system.py +0 -338
  272. tigrbl-0.3.17.dev11/tigrbl/runtime/trace.py +0 -330
  273. tigrbl-0.3.17.dev11/tigrbl/types/__init__.py +0 -187
  274. tigrbl-0.3.17.dev11/tigrbl/types/allow_anon_provider.py +0 -19
  275. tigrbl-0.3.17.dev11/tigrbl/types/authn_abc.py +0 -31
  276. tigrbl-0.3.17.dev11/tigrbl/types/nested_path_provider.py +0 -22
  277. tigrbl-0.3.17.dev11/tigrbl/types/op.py +0 -35
  278. tigrbl-0.3.17.dev11/tigrbl/types/op_config_provider.py +0 -17
  279. tigrbl-0.3.17.dev11/tigrbl/types/op_verb_alias_provider.py +0 -33
  280. tigrbl-0.3.17.dev11/tigrbl/types/request_extras_provider.py +0 -22
  281. tigrbl-0.3.17.dev11/tigrbl/types/response_extras_provider.py +0 -22
  282. tigrbl-0.3.17.dev11/tigrbl/types/table_config_provider.py +0 -13
  283. tigrbl-0.3.17.dev11/tigrbl/types/uuid.py +0 -55
  284. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/LICENSE +0 -0
  285. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/README.md +0 -0
  286. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/README.md +0 -0
  287. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/README.md +0 -0
  288. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/__init__.py +0 -0
  289. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/infer/__init__.py +0 -0
  290. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/infer/core.py +0 -0
  291. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/infer/jsonhints.py +0 -0
  292. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/infer/planning.py +0 -0
  293. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/infer/types.py +0 -0
  294. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/column/infer/utils.py +0 -0
  295. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/config/__init__.py +0 -0
  296. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/config/constants.py +0 -0
  297. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/config/defaults.py +0 -0
  298. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/ddl/__init__.py +0 -0
  299. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/__init__.py +0 -0
  300. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/engine.py +0 -0
  301. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/hook.py +0 -0
  302. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/middlewares.py +0 -0
  303. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/op.py +0 -0
  304. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/response.py +0 -0
  305. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/rest.py +0 -0
  306. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/router.py +0 -0
  307. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/schema.py +0 -0
  308. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/decorators/session.py +0 -0
  309. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/docs/column_specs.md +0 -0
  310. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/docs/session.md +0 -0
  311. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/docs/verbosity.md +0 -0
  312. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/__init__.py +0 -0
  313. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/bind.py +0 -0
  314. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/builders.py +0 -0
  315. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/capabilities.py +0 -0
  316. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/collect.py +0 -0
  317. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/docs/PLUGINS.md +0 -0
  318. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/plugins.py +0 -0
  319. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/registry.py +0 -0
  320. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/engine/resolver.py +0 -0
  321. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/hook/exceptions.py +0 -0
  322. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/hook/types.py +0 -0
  323. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/middlewares/__init__.py +0 -0
  324. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/middlewares/compose.py +0 -0
  325. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/op/__init__.py +0 -0
  326. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/op/canonical.py +0 -0
  327. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/op/collect.py +0 -0
  328. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/op/types.py +0 -0
  329. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/requests.py +0 -0
  330. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/rest/__init__.py +0 -0
  331. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/__init__.py +0 -0
  332. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/builder/__init__.py +0 -0
  333. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/builder/build_schema.py +0 -0
  334. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/builder/cache.py +0 -0
  335. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/builder/extras.py +0 -0
  336. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/builder/helpers.py +0 -0
  337. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/builder/list_params.py +0 -0
  338. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/builder/strip_parent_fields.py +0 -0
  339. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/types.py +0 -0
  340. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/schema/utils.py +0 -0
  341. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/security/__init__.py +0 -0
  342. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/security/dependencies.py +0 -0
  343. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/__init__.py +0 -0
  344. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/app.py +0 -0
  345. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/column.py +0 -0
  346. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/engine.py +0 -0
  347. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/hook.py +0 -0
  348. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/op.py +0 -0
  349. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/responses.py +0 -0
  350. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/router.py +0 -0
  351. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/schema.py +0 -0
  352. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/shortcuts/table.py +0 -0
  353. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/specs.py +0 -0
  354. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/__init__.py +0 -0
  355. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/diagnostics/__init__.py +0 -0
  356. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/diagnostics/healthz.py +0 -0
  357. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/diagnostics/hookz.py +0 -0
  358. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/diagnostics/kernelz.py +0 -0
  359. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/diagnostics/methodz.py +0 -0
  360. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/diagnostics/router.py +0 -0
  361. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/diagnostics/utils.py +0 -0
  362. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/__init__.py +0 -0
  363. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/lens.py +0 -0
  364. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/openapi/__init__.py +0 -0
  365. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/openapi/helpers.py +0 -0
  366. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/openapi/metadata.py +0 -0
  367. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/openapi/mount.py +0 -0
  368. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/openapi/schema.py +0 -0
  369. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/openrpc.py +0 -0
  370. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/docs/swagger.py +0 -0
  371. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/favicon/__init__.py +0 -0
  372. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/favicon/assets/favicon.svg +0 -0
  373. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/system/uvicorn.py +0 -0
  374. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/transport/__init__.py +0 -0
  375. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/transport/jsonrpc/__init__.py +0 -0
  376. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/transport/jsonrpc/helpers.py +0 -0
  377. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/transport/jsonrpc/models.py +0 -0
  378. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/transport/rest/__init__.py +0 -0
  379. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/transport/rest/aggregator.py +0 -0
  380. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/utils/__init__.py +0 -0
  381. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/utils/schema.py +0 -0
  382. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/vendor/__init__.py +0 -0
  383. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/vendor/jinja.py +0 -0
  384. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/vendor/pydantic.py +0 -0
  385. {tigrbl-0.3.17.dev11 → tigrbl-0.3.17.dev12}/tigrbl/vendor/sqlalchemy.py +0 -0
@@ -1,10 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrbl
3
- Version: 0.3.17.dev11
3
+ Version: 0.3.17.dev12
4
4
  Summary: A modern pure ASGI/WSGI Python framework for building schema-first REST and JSON-RPC APIs with SQLAlchemy models, typed validation, lifecycle hooks, and engine extension support.
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
7
- Keywords: tigrbl,sdk,standards,asgi,rest,rpc
8
7
  Author: Jacob Stewart
9
8
  Author-email: jacob@swarmauri.com
10
9
  Requires-Python: >=3.10,<3.13
@@ -27,6 +26,10 @@ Requires-Dist: jinja2 (>=3.1.4) ; extra == "templates"
27
26
  Requires-Dist: psycopg2-binary (>=2.9.9) ; extra == "postgres"
28
27
  Requires-Dist: pydantic (>=2.0.0)
29
28
  Requires-Dist: sqlalchemy (>=2.0)
29
+ Requires-Dist: tigrbl-canon
30
+ Requires-Dist: tigrbl-concrete
31
+ Requires-Dist: tigrbl-orm
32
+ Requires-Dist: tigrbl-runtime
30
33
  Requires-Dist: tigrbl-tests ; extra == "tests"
31
34
  Requires-Dist: uvicorn
32
35
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tigrbl"
3
- version = "0.3.17.dev11"
3
+ version = "0.3.17.dev12"
4
4
  description = "A modern pure ASGI/WSGI Python framework for building schema-first REST and JSON-RPC APIs with SQLAlchemy models, typed validation, lifecycle hooks, and engine extension support."
5
5
  license = "Apache-2.0"
6
6
  readme = "README.md"
@@ -18,22 +18,19 @@ classifiers = [
18
18
  ]
19
19
  authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
20
20
  dependencies = [
21
+ "tigrbl-concrete",
22
+ "tigrbl-canon",
23
+ "tigrbl-runtime",
24
+ "tigrbl-orm",
21
25
  "pydantic>=2.0.0",
22
26
  "sqlalchemy>=2.0",
23
27
  "aiosqlite>=0.19.0",
24
28
  "httpx>=0.27.0",
25
29
  "greenlet>=3.2.3",
26
- "uvicorn",
27
- ]
28
- keywords = [
29
- 'tigrbl',
30
- 'sdk',
31
- 'standards',
32
- 'asgi',
33
- 'rest',
34
- 'rpc',
30
+ "uvicorn",
35
31
  ]
36
32
 
33
+
37
34
  [project.optional-dependencies]
38
35
  postgres = [
39
36
  "asyncpg>=0.30.0",
@@ -47,9 +44,14 @@ tests = [
47
44
  ]
48
45
 
49
46
  [tool.uv.sources]
47
+ "tigrbl-concrete" = { workspace = true }
48
+ "tigrbl-canon" = { workspace = true }
49
+ "tigrbl-runtime" = { workspace = true }
50
+ "tigrbl-orm" = { workspace = true }
50
51
  tigrbl-tests = { workspace = true }
51
52
  tigrbl_client = { workspace = true }
52
53
 
54
+
53
55
  [tool.pytest.ini_options]
54
56
  norecursedirs = ["combined", "scripts"]
55
57
  testpaths = ["../tigrbl_tests/tests"]
@@ -9,6 +9,10 @@ register RPC & REST, and (optionally) mount JSON-RPC and diagnostics.
9
9
 
10
10
  from __future__ import annotations
11
11
 
12
+ from pkgutil import extend_path
13
+
14
+ __path__ = extend_path(__path__, __name__)
15
+
12
16
  from ._concrete import Router
13
17
 
14
18
  # ── OpSpec (source of truth) ───────────────────────────────────────────────────
@@ -1,24 +0,0 @@
1
- """Base class implementations for tigrbl internals."""
2
-
3
- from ._hook_base import HookBase
4
- from ._storage import ForeignKeyBase
5
- from ._op_base import OpBase
6
- from ._request_base import RequestBase
7
- from ._schema_base import SchemaBase
8
- from ._session_abc import SessionABC
9
- from ._session_base import TigrblSessionBase
10
- from ._table_base import TableBase
11
- from ._table_registry_base import TableRegistryBase
12
-
13
-
14
- __all__ = [
15
- "HookBase",
16
- "ForeignKeyBase",
17
- "OpBase",
18
- "RequestBase",
19
- "SchemaBase",
20
- "SessionABC",
21
- "TigrblSessionBase",
22
- "TableBase",
23
- "TableRegistryBase",
24
- ]
@@ -1,25 +0,0 @@
1
- """Base runtime hook wrapper for Tigrbl v3."""
2
-
3
- from __future__ import annotations
4
-
5
- from dataclasses import dataclass
6
- from typing import Iterable, Optional, Union
7
-
8
- from ..hook.types import HookPhase, StepFn
9
- from .._spec.hook_spec import HookSpec
10
-
11
-
12
- @dataclass(frozen=True, slots=True)
13
- class HookBase(HookSpec):
14
- """Base hook bound to a phase and one or more ops."""
15
-
16
- phase: HookPhase
17
- fn: StepFn
18
- ops: Union[str, Iterable[str]] = "*"
19
- order: int = 0
20
- when: Optional[object] = None
21
- name: Optional[str] = None
22
- description: Optional[str] = None
23
-
24
-
25
- __all__ = ["HookBase"]
@@ -1,141 +0,0 @@
1
- """Request/response middleware base with ``dispatch`` + ``call_next`` semantics."""
2
-
3
- from __future__ import annotations
4
-
5
- from typing import Any
6
- from urllib.parse import urlencode
7
-
8
- from tigrbl._concrete._request import Request
9
- from tigrbl._concrete._request_adapters import request_from_asgi
10
- from tigrbl._concrete._response import Response
11
- from tigrbl.runtime.atoms.egress.asgi_send import finalize_transport_response
12
-
13
- from .._spec.middleware_spec import MiddlewareSpec, ASGIReceive, ASGISend, Message
14
-
15
-
16
- class MiddlewareBase(MiddlewareSpec):
17
- """Base middleware for intercepting HTTP requests in ASGI mode."""
18
-
19
- async def dispatch(
20
- self,
21
- request: Request,
22
- call_next: Any,
23
- ) -> Response:
24
- """Process the request and optionally delegate to downstream middleware/app."""
25
-
26
- return await call_next(request)
27
-
28
- @staticmethod
29
- def _scope_from_request(scope: dict[str, Any], request: Request) -> dict[str, Any]:
30
- query_string = urlencode(
31
- [
32
- (name, value)
33
- for name, values in request.query.items()
34
- for value in values
35
- ],
36
- doseq=True,
37
- ).encode("latin-1")
38
- return {
39
- **scope,
40
- "method": request.method,
41
- "path": request.path,
42
- "query_string": query_string,
43
- "headers": [
44
- (key.encode("latin-1"), value.encode("latin-1"))
45
- for key, value in request.headers.items()
46
- ],
47
- "root_path": request.script_name,
48
- }
49
-
50
- async def asgi(
51
- self,
52
- scope: dict[str, Any],
53
- receive: ASGIReceive,
54
- send: ASGISend,
55
- ) -> None:
56
- if scope.get("type") != "http":
57
- await self.app(scope, receive, send)
58
- return
59
-
60
- request_body = b""
61
- more_body = True
62
- while more_body:
63
- message = await receive()
64
- request_body += message.get("body", b"")
65
- more_body = message.get("more_body", False)
66
-
67
- request = request_from_asgi(None, scope, request_body)
68
-
69
- async def call_next(forward_request: Request | None = None) -> Response:
70
- target_request = forward_request or request
71
- target_scope = self._scope_from_request(scope, target_request)
72
-
73
- messages: list[Message] = []
74
- body_sent = False
75
-
76
- async def receive_for_app() -> Message:
77
- nonlocal body_sent
78
- if body_sent:
79
- return {"type": "http.request", "body": b"", "more_body": False}
80
- body_sent = True
81
- return {
82
- "type": "http.request",
83
- "body": target_request.body,
84
- "more_body": False,
85
- }
86
-
87
- async def send_from_app(message: Message) -> None:
88
- messages.append(message)
89
-
90
- await self.app(target_scope, receive_for_app, send_from_app)
91
-
92
- start = next(
93
- message
94
- for message in messages
95
- if message.get("type") == "http.response.start"
96
- )
97
- raw_headers = list(start.get("headers", []))
98
- body = b"".join(
99
- message.get("body", b"")
100
- for message in messages
101
- if message.get("type") == "http.response.body"
102
- )
103
- headers, finalized_body = finalize_transport_response(
104
- target_scope,
105
- int(start.get("status", 200)),
106
- raw_headers,
107
- body,
108
- )
109
- return Response(
110
- status_code=int(start.get("status", 200)),
111
- headers=[
112
- (key.decode("latin-1"), value.decode("latin-1"))
113
- for key, value in headers
114
- ],
115
- body=finalized_body,
116
- )
117
-
118
- response = await self.dispatch(request, call_next)
119
- headers, finalized_body = finalize_transport_response(
120
- scope,
121
- response.status_code,
122
- response.raw_headers,
123
- response.body,
124
- )
125
- await send(
126
- {
127
- "type": "http.response.start",
128
- "status": response.status_code,
129
- "headers": headers,
130
- }
131
- )
132
- await send(
133
- {
134
- "type": "http.response.body",
135
- "body": finalized_body,
136
- "more_body": False,
137
- }
138
- )
139
-
140
-
141
- __all__ = ["MiddlewareBase"]
@@ -1,12 +0,0 @@
1
- """Base operation descriptor implementation for Tigrbl."""
2
-
3
- from __future__ import annotations
4
-
5
- from .._spec.op_spec import OpSpec
6
-
7
-
8
- class OpBase(OpSpec):
9
- """Base operation descriptor type."""
10
-
11
-
12
- __all__ = ["OpBase"]
@@ -1,32 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Any
4
-
5
- from .._spec.request_spec import RequestSpec
6
-
7
-
8
- class RequestBase(RequestSpec):
9
- """Base request model behavior shared by concrete request implementations."""
10
-
11
- @classmethod
12
- def from_scope(
13
- cls,
14
- scope: dict[str, Any],
15
- receive: Any | None = None,
16
- *,
17
- app: Any | None = None,
18
- state: Any | None = None,
19
- ) -> "RequestBase":
20
- """Construct a request from an ASGI scope.
21
-
22
- Middleware/tests may resolve ``Request`` through base/spec surfaces during
23
- import cycles. Delegate to the concrete request model to keep
24
- ``Request.from_scope(...)`` consistently available.
25
- """
26
-
27
- from tigrbl._concrete._request import Request
28
-
29
- return Request.from_scope(scope, receive, app=app, state=state)
30
-
31
-
32
- __all__ = ["RequestBase"]
@@ -1,231 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import json as json_module
4
- from dataclasses import dataclass
5
- from http.cookies import SimpleCookie
6
- from typing import Any, Mapping
7
-
8
- from tigrbl._concrete._headers import HeaderCookies, Headers
9
-
10
- from .._spec.response_spec import ResponseSpec, TemplateSpec
11
-
12
-
13
- class _JSONDualMethod:
14
- def __get__(
15
- self,
16
- obj: "ResponseBase" | None,
17
- owner: type["ResponseBase"],
18
- ):
19
- if obj is None:
20
-
21
- def _factory(
22
- data: Any,
23
- status_code: int = 200,
24
- headers: Mapping[str, str] | None = None,
25
- ) -> "ResponseBase":
26
- return owner.from_json(data, status_code=status_code, headers=headers)
27
-
28
- return _factory
29
-
30
- def _instance_json() -> Any:
31
- return obj.json_body()
32
-
33
- return _instance_json
34
-
35
-
36
- class ResponseBase(ResponseSpec):
37
- """Concrete HTTP response object that also implements ``ResponseSpec``."""
38
-
39
- json = _JSONDualMethod()
40
-
41
- def __init__(
42
- self,
43
- *,
44
- status_code: int = 200,
45
- headers: Mapping[str, str] | list[tuple[str, str]] | None = None,
46
- body: bytes | None = None,
47
- content: bytes | None = None,
48
- media_type: str | None = None,
49
- kind: str = "auto",
50
- envelope: bool | None = None,
51
- template: TemplateSpec | None = None,
52
- filename: str | None = None,
53
- download: bool | None = None,
54
- etag: str | None = None,
55
- cache_control: str | None = None,
56
- redirect_to: str | None = None,
57
- ) -> None:
58
- if body is not None and content is not None:
59
- raise TypeError(
60
- "ResponseBase: provide either 'body' or 'content', not both"
61
- )
62
-
63
- payload = (
64
- body if body is not None else (content if content is not None else b"")
65
- )
66
-
67
- super().__init__(
68
- kind=kind,
69
- media_type=media_type,
70
- status_code=status_code,
71
- headers={
72
- k: v
73
- for k, v in (
74
- headers.items() if hasattr(headers, "items") else (headers or [])
75
- )
76
- },
77
- envelope=envelope,
78
- template=template,
79
- filename=filename,
80
- download=download,
81
- etag=etag,
82
- cache_control=cache_control,
83
- redirect_to=redirect_to,
84
- )
85
- self.status_code = status_code
86
- self.headers = Headers(headers or {})
87
- self.body = payload
88
- self.media_type = media_type
89
- self._headers = self.headers
90
-
91
- @staticmethod
92
- def _status_text(code: int) -> str:
93
- return {
94
- 200: "OK",
95
- 201: "Created",
96
- 205: "Reset Content",
97
- 204: "No Content",
98
- 301: "Moved Permanently",
99
- 302: "Found",
100
- 307: "Temporary Redirect",
101
- 308: "Permanent Redirect",
102
- 400: "Bad Request",
103
- 401: "Unauthorized",
104
- 403: "Forbidden",
105
- 404: "Not Found",
106
- 405: "Method Not Allowed",
107
- 422: "Unprocessable Entity",
108
- 500: "Internal Server Error",
109
- }.get(code, "OK")
110
-
111
- def status_line(self) -> str:
112
- return f"{self.status_code} {self._status_text(self.status_code)}"
113
-
114
- @property
115
- def raw_headers(self) -> list[tuple[bytes, bytes]]:
116
- return [
117
- (k.encode("latin-1"), v.encode("latin-1")) for k, v in self.headers.items()
118
- ]
119
-
120
- @property
121
- def headers_map(self) -> Headers:
122
- return self.headers
123
-
124
- @property
125
- def body_text(self) -> str:
126
- return self.body.decode("utf-8")
127
-
128
- def json_body(self) -> Any:
129
- if not self.body:
130
- return None
131
- return json_module.loads(self.body.decode("utf-8"))
132
-
133
- @property
134
- def cookies(self) -> HeaderCookies:
135
- cookie = SimpleCookie()
136
- for name, value in self.headers.items():
137
- if name == "set-cookie":
138
- cookie.load(value)
139
- return HeaderCookies({name: morsel.value for name, morsel in cookie.items()})
140
-
141
- def set_cookie(
142
- self,
143
- key: str,
144
- value: str,
145
- *,
146
- path: str = "/",
147
- domain: str | None = None,
148
- secure: bool = False,
149
- httponly: bool = False,
150
- samesite: str | None = None,
151
- max_age: int | None = None,
152
- expires: str | None = None,
153
- ) -> None:
154
- cookie = SimpleCookie()
155
- cookie[key] = value
156
- morsel = cookie[key]
157
- morsel["path"] = path
158
- if domain is not None:
159
- morsel["domain"] = domain
160
- if secure:
161
- morsel["secure"] = True
162
- if httponly:
163
- morsel["httponly"] = True
164
- if samesite is not None:
165
- morsel["samesite"] = samesite
166
- if max_age is not None:
167
- morsel["max-age"] = str(max_age)
168
- if expires is not None:
169
- morsel["expires"] = expires
170
- self.headers["set-cookie"] = cookie.output(header="").strip()
171
-
172
- @classmethod
173
- def from_json(
174
- cls,
175
- data: Any,
176
- status_code: int = 200,
177
- headers: Mapping[str, str] | None = None,
178
- ) -> "ResponseBase":
179
- payload = json_module.dumps(
180
- data, ensure_ascii=False, separators=(",", ":"), default=str
181
- ).encode("utf-8")
182
- hdrs = [("content-type", "application/json; charset=utf-8")]
183
- for k, v in (headers or {}).items():
184
- hdrs.append((k.lower(), v))
185
- return cls(
186
- status_code=status_code,
187
- headers=hdrs,
188
- body=payload,
189
- media_type="application/json",
190
- )
191
-
192
- @classmethod
193
- def html(
194
- cls,
195
- html: str,
196
- status_code: int = 200,
197
- headers: Mapping[str, str] | None = None,
198
- ) -> "ResponseBase":
199
- payload = html.encode("utf-8")
200
- hdrs = [("content-type", "text/html; charset=utf-8")]
201
- for k, v in (headers or {}).items():
202
- hdrs.append((k.lower(), v))
203
- return cls(
204
- status_code=status_code,
205
- headers=hdrs,
206
- body=payload,
207
- media_type="text/html",
208
- )
209
-
210
- @classmethod
211
- def text(
212
- cls,
213
- text: str,
214
- status_code: int = 200,
215
- headers: Mapping[str, str] | None = None,
216
- ) -> "ResponseBase":
217
- payload = text.encode("utf-8")
218
- hdrs = [("content-type", "text/plain; charset=utf-8")]
219
- for k, v in (headers or {}).items():
220
- hdrs.append((k.lower(), v))
221
- return cls(
222
- status_code=status_code,
223
- headers=hdrs,
224
- body=payload,
225
- media_type="text/plain",
226
- )
227
-
228
-
229
- @dataclass
230
- class TemplateBase(TemplateSpec):
231
- """Concrete template configuration used at runtime."""
@@ -1,14 +0,0 @@
1
- from __future__ import annotations
2
-
3
-
4
- class SchemaBase:
5
- """Shared schema helpers used by concrete schema wrappers."""
6
-
7
- @classmethod
8
- def collect(cls, model: type) -> dict[str, dict[str, type]]:
9
- from ..mapping.collect_decorated_schemas import collect_decorated_schemas
10
-
11
- return collect_decorated_schemas(model)
12
-
13
-
14
- __all__ = ["SchemaBase"]
@@ -1,69 +0,0 @@
1
- """Core OpenAPI security scheme primitives."""
2
-
3
- from __future__ import annotations
4
-
5
- from typing import Any, Mapping, Sequence
6
-
7
- _VALID_SECURITY_SCHEME_TYPES = {
8
- "http",
9
- "apiKey",
10
- "oauth2",
11
- "openIdConnect",
12
- "mutualTLS",
13
- }
14
-
15
-
16
- class OpenAPISecurityDependency:
17
- """Base security dependency with OpenAPI document metadata."""
18
-
19
- def __init__(
20
- self,
21
- *,
22
- scheme_name: str,
23
- scheme: Mapping[str, Any],
24
- scopes: Sequence[str] | None = None,
25
- auto_error: bool = True,
26
- ) -> None:
27
- self.scheme_name = scheme_name
28
- self.auto_error = auto_error
29
- self._scheme = dict(scheme)
30
- self._scopes = list(scopes or [])
31
- validate_openapi_security_scheme(self._scheme)
32
-
33
- def openapi_security_scheme(self) -> dict[str, Any]:
34
- return dict(self._scheme)
35
-
36
- def openapi_security_requirement(self) -> dict[str, list[str]]:
37
- return {self.scheme_name: list(self._scopes)}
38
-
39
- def __call__(self, request: Any) -> Any | None:
40
- return None
41
-
42
-
43
- def validate_openapi_security_scheme(scheme: Mapping[str, Any]) -> None:
44
- scheme_type = scheme.get("type")
45
- if scheme_type not in _VALID_SECURITY_SCHEME_TYPES:
46
- raise ValueError(
47
- "OpenAPI security scheme 'type' must be one of: "
48
- f"{sorted(_VALID_SECURITY_SCHEME_TYPES)}"
49
- )
50
-
51
- if "scheme" in scheme and scheme_type != "http":
52
- raise ValueError("OpenAPI 'scheme' is only valid when type is 'http'.")
53
-
54
- if scheme_type == "http" and not scheme.get("scheme"):
55
- raise ValueError("OpenAPI type='http' requires a non-empty 'scheme'.")
56
-
57
- if scheme_type == "apiKey":
58
- if scheme.get("in") not in {"header", "query", "cookie"}:
59
- raise ValueError(
60
- "OpenAPI type='apiKey' requires 'in' to be header/query/cookie."
61
- )
62
- if not scheme.get("name"):
63
- raise ValueError("OpenAPI type='apiKey' requires 'name'.")
64
-
65
- if scheme_type == "oauth2" and not isinstance(scheme.get("flows"), Mapping):
66
- raise ValueError("OpenAPI type='oauth2' requires a 'flows' object.")
67
-
68
- if scheme_type == "openIdConnect" and not scheme.get("openIdConnectUrl"):
69
- raise ValueError("OpenAPI type='openIdConnect' requires 'openIdConnectUrl'.")
@@ -1,47 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from abc import ABC, abstractmethod
4
- from typing import Any, Callable
5
-
6
-
7
- class SessionABC(ABC):
8
- """Authoritative Tigrbl session interface."""
9
-
10
- @abstractmethod
11
- async def begin(self) -> None: ...
12
-
13
- @abstractmethod
14
- async def commit(self) -> None: ...
15
-
16
- @abstractmethod
17
- async def rollback(self) -> None: ...
18
-
19
- @abstractmethod
20
- def in_transaction(self) -> bool: ...
21
-
22
- @abstractmethod
23
- async def get(self, model: type, ident: Any) -> Any | None: ...
24
-
25
- @abstractmethod
26
- def add(self, obj: Any) -> None: ...
27
-
28
- @abstractmethod
29
- async def delete(self, obj: Any) -> None: ...
30
-
31
- @abstractmethod
32
- async def flush(self) -> None: ...
33
-
34
- @abstractmethod
35
- async def refresh(self, obj: Any) -> None: ...
36
-
37
- @abstractmethod
38
- async def execute(self, stmt: Any) -> Any: ...
39
-
40
- @abstractmethod
41
- async def close(self) -> None: ...
42
-
43
- @abstractmethod
44
- async def run_sync(self, fn: Callable[[Any], Any]) -> Any: ...
45
-
46
-
47
- __all__ = ["SessionABC"]