tigrbl 0.3.16.dev4__tar.gz → 0.3.17.dev2__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 (456) hide show
  1. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/PKG-INFO +27 -22
  2. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/README.md +26 -21
  3. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/pyproject.toml +3 -1
  4. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/README.md +1 -1
  5. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/__init__.py +102 -36
  6. tigrbl-0.3.17.dev2/tigrbl/_base/__init__.py +24 -0
  7. tigrbl-0.3.17.dev2/tigrbl/_base/_hook_base.py +25 -0
  8. tigrbl-0.3.16.dev4/tigrbl/middlewares/base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_middleware_base.py +7 -8
  9. tigrbl-0.3.17.dev2/tigrbl/_base/_op_base.py +12 -0
  10. tigrbl-0.3.17.dev2/tigrbl/_base/_request_base.py +32 -0
  11. tigrbl-0.3.16.dev4/tigrbl/responses/_response.py → tigrbl-0.3.17.dev2/tigrbl/_base/_response_base.py +67 -114
  12. tigrbl-0.3.17.dev2/tigrbl/_base/_schema_base.py +14 -0
  13. tigrbl-0.3.17.dev2/tigrbl/_base/_session_abc.py +47 -0
  14. tigrbl-0.3.16.dev4/tigrbl/session/base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_session_base.py +15 -34
  15. tigrbl-0.3.17.dev2/tigrbl/_base/_storage.py +13 -0
  16. tigrbl-0.3.16.dev4/tigrbl/table/_base.py → tigrbl-0.3.17.dev2/tigrbl/_base/_table_base.py +14 -10
  17. tigrbl-0.3.17.dev2/tigrbl/_base/_table_registry_base.py +55 -0
  18. tigrbl-0.3.17.dev2/tigrbl/_concrete/__init__.py +44 -0
  19. tigrbl-0.3.17.dev2/tigrbl/_concrete/_alias.py +42 -0
  20. tigrbl-0.3.17.dev2/tigrbl/_concrete/_app.py +180 -0
  21. tigrbl-0.3.17.dev2/tigrbl/_concrete/_body.py +27 -0
  22. {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_column.py +4 -4
  23. tigrbl-0.3.16.dev4/tigrbl/middlewares/cors.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_cors_middleware.py +1 -65
  24. {tigrbl-0.3.16.dev4/tigrbl/engine → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_engine.py +44 -1
  25. tigrbl-0.3.17.dev2/tigrbl/_concrete/_file_response.py +26 -0
  26. tigrbl-0.3.17.dev2/tigrbl/_concrete/_hook.py +12 -0
  27. tigrbl-0.3.17.dev2/tigrbl/_concrete/_html_response.py +18 -0
  28. tigrbl-0.3.17.dev2/tigrbl/_concrete/_json_response.py +24 -0
  29. tigrbl-0.3.16.dev4/tigrbl/middlewares/middleware.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_middleware.py +12 -4
  30. {tigrbl-0.3.16.dev4/tigrbl/op → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_op.py +5 -5
  31. tigrbl-0.3.16.dev4/tigrbl/op/model_registry.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_op_registry.py +1 -1
  32. tigrbl-0.3.17.dev2/tigrbl/_concrete/_plain_text_response.py +18 -0
  33. tigrbl-0.3.17.dev2/tigrbl/_concrete/_redirect_response.py +19 -0
  34. {tigrbl-0.3.16.dev4/tigrbl/requests → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_request.py +21 -2
  35. tigrbl-0.3.17.dev2/tigrbl/_concrete/_response.py +35 -0
  36. {tigrbl-0.3.16.dev4/tigrbl/api → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_route.py +3 -0
  37. tigrbl-0.3.17.dev2/tigrbl/_concrete/_router.py +207 -0
  38. tigrbl-0.3.17.dev2/tigrbl/_concrete/_routing.py +139 -0
  39. {tigrbl-0.3.16.dev4/tigrbl/schema → tigrbl-0.3.17.dev2/tigrbl/_concrete}/_schema.py +3 -2
  40. {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/api_key.py +1 -1
  41. {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/http_bearer.py +1 -1
  42. {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/mutual_tls.py +1 -1
  43. {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/oauth2.py +1 -1
  44. {tigrbl-0.3.16.dev4/tigrbl/security/schemes → tigrbl-0.3.17.dev2/tigrbl/_concrete/_security}/openid_connect.py +1 -1
  45. tigrbl-0.3.16.dev4/tigrbl/session/default.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/_session.py +6 -12
  46. tigrbl-0.3.17.dev2/tigrbl/_concrete/_storage.py +13 -0
  47. tigrbl-0.3.17.dev2/tigrbl/_concrete/_streaming_response.py +35 -0
  48. tigrbl-0.3.17.dev2/tigrbl/_concrete/_table.py +103 -0
  49. tigrbl-0.3.17.dev2/tigrbl/_concrete/_table_registry.py +10 -0
  50. tigrbl-0.3.17.dev2/tigrbl/_concrete/tigrbl_app.py +893 -0
  51. tigrbl-0.3.16.dev4/tigrbl/api/tigrbl_api.py → tigrbl-0.3.17.dev2/tigrbl/_concrete/tigrbl_router.py +180 -123
  52. tigrbl-0.3.17.dev2/tigrbl/_spec/__init__.py +67 -0
  53. tigrbl-0.3.17.dev2/tigrbl/_spec/alias_spec.py +35 -0
  54. tigrbl-0.3.17.dev2/tigrbl/_spec/app_spec.py +137 -0
  55. tigrbl-0.3.17.dev2/tigrbl/_spec/binding_spec.py +78 -0
  56. {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/column_spec.py +3 -3
  57. {tigrbl-0.3.16.dev4/tigrbl/engine → tigrbl-0.3.17.dev2/tigrbl/_spec}/engine_spec.py +8 -7
  58. {tigrbl-0.3.16.dev4/tigrbl/hook → tigrbl-0.3.17.dev2/tigrbl/_spec}/hook_spec.py +1 -1
  59. {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/io_spec.py +1 -1
  60. tigrbl-0.3.17.dev2/tigrbl/_spec/op_spec.py +110 -0
  61. tigrbl-0.3.17.dev2/tigrbl/_spec/request_spec.py +19 -0
  62. tigrbl-0.3.16.dev4/tigrbl/responses/types.py → tigrbl-0.3.17.dev2/tigrbl/_spec/response_spec.py +2 -17
  63. tigrbl-0.3.17.dev2/tigrbl/_spec/response_types.py +12 -0
  64. tigrbl-0.3.16.dev4/tigrbl/api/api_spec.py → tigrbl-0.3.17.dev2/tigrbl/_spec/router_spec.py +8 -13
  65. {tigrbl-0.3.16.dev4/tigrbl/schema → tigrbl-0.3.17.dev2/tigrbl/_spec}/schema_spec.py +2 -2
  66. tigrbl-0.3.16.dev4/tigrbl/session/spec.py → tigrbl-0.3.17.dev2/tigrbl/_spec/session_spec.py +49 -1
  67. tigrbl-0.3.17.dev2/tigrbl/_spec/shortcuts_spec.py +8 -0
  68. {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/storage_spec.py +0 -6
  69. tigrbl-0.3.17.dev2/tigrbl/_spec/table_registry_spec.py +14 -0
  70. tigrbl-0.3.17.dev2/tigrbl/_spec/table_spec.py +73 -0
  71. tigrbl-0.3.17.dev2/tigrbl/column/__init__.py +23 -0
  72. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/config/__init__.py +4 -4
  73. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/config/constants.py +3 -3
  74. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/config/defaults.py +3 -0
  75. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/__init__.py +7 -0
  76. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/model.py +7 -2
  77. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/ops.py +65 -1
  78. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/params.py +1 -1
  79. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/ddl/__init__.py +107 -81
  80. tigrbl-0.3.17.dev2/tigrbl/decorators/__init__.py +48 -0
  81. tigrbl-0.3.16.dev4/tigrbl/engine/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/engine.py +3 -3
  82. tigrbl-0.3.16.dev4/tigrbl/hook/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/hook.py +4 -4
  83. tigrbl-0.3.16.dev4/tigrbl/op/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/op.py +39 -23
  84. tigrbl-0.3.16.dev4/tigrbl/responses/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/response.py +1 -1
  85. tigrbl-0.3.17.dev2/tigrbl/decorators/router.py +115 -0
  86. tigrbl-0.3.16.dev4/tigrbl/session/decorators.py → tigrbl-0.3.17.dev2/tigrbl/decorators/session.py +2 -2
  87. tigrbl-0.3.17.dev2/tigrbl/docs/column_specs.md +62 -0
  88. tigrbl-0.3.17.dev2/tigrbl/docs/session.md +11 -0
  89. tigrbl-0.3.17.dev2/tigrbl/engine/__init__.py +108 -0
  90. tigrbl-0.3.17.dev2/tigrbl/engine/bind.py +53 -0
  91. tigrbl-0.3.17.dev2/tigrbl/engine/collect.py +10 -0
  92. tigrbl-0.3.17.dev2/tigrbl/engine/resolver.py +8 -0
  93. tigrbl-0.3.17.dev2/tigrbl/hook/exceptions.py +3 -0
  94. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/hook/types.py +2 -18
  95. tigrbl-0.3.17.dev2/tigrbl/mapping/__init__.py +60 -0
  96. tigrbl-0.3.17.dev2/tigrbl/mapping/app_mro_collect.py +14 -0
  97. tigrbl-0.3.17.dev2/tigrbl/mapping/apply.py +98 -0
  98. tigrbl-0.3.17.dev2/tigrbl/mapping/collect.py +60 -0
  99. tigrbl-0.3.16.dev4/tigrbl/schema/collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/collect_decorated_schemas.py +2 -2
  100. tigrbl-0.3.17.dev2/tigrbl/mapping/column_mro_collect.py +124 -0
  101. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/columns.py +2 -2
  102. tigrbl-0.3.16.dev4/tigrbl/config/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/config_resolver.py +8 -4
  103. tigrbl-0.3.17.dev2/tigrbl/mapping/context.py +48 -0
  104. tigrbl-0.3.16.dev4/tigrbl/core/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/core_resolver.py +32 -11
  105. tigrbl-0.3.17.dev2/tigrbl/mapping/diagnostics.py +20 -0
  106. tigrbl-0.3.16.dev4/tigrbl/engine/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/engine_resolver.py +51 -28
  107. {tigrbl-0.3.16.dev4/tigrbl/bindings/schemas → tigrbl-0.3.17.dev2/tigrbl/mapping/handlers}/__init__.py +2 -2
  108. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/builder.py +4 -4
  109. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/ctx.py +14 -2
  110. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/identifiers.py +2 -2
  111. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/namespaces.py +2 -2
  112. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/handlers/steps.py +6 -5
  113. tigrbl-0.3.16.dev4/tigrbl/hook/mro_collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/hook_mro_collect.py +29 -6
  114. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/hooks.py +36 -22
  115. tigrbl-0.3.17.dev2/tigrbl/mapping/mapping_resolver.py +5 -0
  116. tigrbl-0.3.17.dev2/tigrbl/mapping/model.py +33 -0
  117. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/model_helpers.py +19 -7
  118. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/model_registry.py +14 -6
  119. tigrbl-0.3.17.dev2/tigrbl/mapping/op_mro_collect.py +136 -0
  120. tigrbl-0.3.16.dev4/tigrbl/op/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/op_resolver.py +4 -4
  121. tigrbl-0.3.17.dev2/tigrbl/mapping/passes.py +74 -0
  122. tigrbl-0.3.17.dev2/tigrbl/mapping/plan.py +54 -0
  123. tigrbl-0.3.17.dev2/tigrbl/mapping/precedence.py +45 -0
  124. tigrbl-0.3.16.dev4/tigrbl/responses/resolver.py → tigrbl-0.3.17.dev2/tigrbl/mapping/responses_resolver.py +1 -1
  125. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/__init__.py +1 -1
  126. tigrbl-0.3.17.dev2/tigrbl/mapping/rest/attach.py +25 -0
  127. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/collection.py +28 -98
  128. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/common.py +36 -49
  129. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/helpers.py +3 -14
  130. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/io.py +24 -9
  131. tigrbl-0.3.17.dev2/tigrbl/mapping/rest/member.py +200 -0
  132. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/router.py +10 -33
  133. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/routing.py +15 -40
  134. {tigrbl-0.3.16.dev4/tigrbl/bindings/api → tigrbl-0.3.17.dev2/tigrbl/mapping/router}/common.py +22 -30
  135. tigrbl-0.3.17.dev2/tigrbl/mapping/router/include.py +466 -0
  136. tigrbl-0.3.17.dev2/tigrbl/mapping/router/resource_proxy.py +104 -0
  137. {tigrbl-0.3.16.dev4/tigrbl/bindings/api → tigrbl-0.3.17.dev2/tigrbl/mapping/router}/rpc.py +60 -17
  138. tigrbl-0.3.16.dev4/tigrbl/api/mro_collect.py → tigrbl-0.3.17.dev2/tigrbl/mapping/router_mro_collect.py +10 -8
  139. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rpc.py +113 -65
  140. tigrbl-0.3.17.dev2/tigrbl/mapping/runtime_routes.py +293 -0
  141. {tigrbl-0.3.16.dev4/tigrbl/bindings/handlers → tigrbl-0.3.17.dev2/tigrbl/mapping/schemas}/__init__.py +2 -2
  142. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/builder.py +5 -5
  143. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/defaults.py +3 -3
  144. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/schemas/utils.py +2 -2
  145. tigrbl-0.3.17.dev2/tigrbl/mapping/spec_normalization.py +110 -0
  146. tigrbl-0.3.17.dev2/tigrbl/mapping/table.py +5 -0
  147. tigrbl-0.3.17.dev2/tigrbl/mapping/table_mro_collect.py +14 -0
  148. tigrbl-0.3.17.dev2/tigrbl/mapping/traversal.py +196 -0
  149. tigrbl-0.3.17.dev2/tigrbl/op/__init__.py +39 -0
  150. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/op/canonical.py +13 -11
  151. tigrbl-0.3.17.dev2/tigrbl/op/collect.py +20 -0
  152. tigrbl-0.3.17.dev2/tigrbl/op/types.py +55 -0
  153. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/bound.py +1 -1
  154. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/hierarchy.py +1 -1
  155. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/key_digest.py +2 -2
  156. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/lifecycle.py +1 -1
  157. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/locks.py +1 -1
  158. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/ownable.py +1 -1
  159. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/principals.py +1 -1
  160. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/tenant_bound.py +1 -1
  161. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/__init__.py +3 -2
  162. tigrbl-0.3.17.dev2/tigrbl/orm/tables/_base.py +7 -0
  163. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/audit.py +2 -2
  164. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/client.py +2 -2
  165. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/group.py +2 -2
  166. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/org.py +2 -2
  167. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/rbac.py +5 -5
  168. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/status.py +2 -2
  169. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/tenant.py +2 -2
  170. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/tables/user.py +2 -2
  171. tigrbl-0.3.17.dev2/tigrbl/requests.py +5 -0
  172. tigrbl-0.3.17.dev2/tigrbl/rest/__init__.py +15 -0
  173. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/README.md +52 -1
  174. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/__init__.py +10 -0
  175. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/dep/__init__.py +15 -0
  176. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/dep/extra.py +104 -0
  177. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/dep/security.py +114 -0
  178. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/__init__.py +43 -0
  179. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/asgi_send.py +228 -0
  180. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/envelope_apply.py +101 -0
  181. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/headers_apply.py +58 -0
  182. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/http_finalize.py +43 -0
  183. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/out_dump.py +33 -0
  184. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/result_normalize.py +35 -0
  185. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/egress/to_transport_response.py +125 -0
  186. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/__init__.py +58 -0
  187. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/attach_compiled.py +32 -0
  188. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/body_peek.py +29 -0
  189. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/body_read.py +66 -0
  190. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/ctx_init.py +27 -0
  191. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/headers_parse.py +67 -0
  192. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/method_extract.py +45 -0
  193. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/metrics_start.py +27 -0
  194. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/path_extract.py +46 -0
  195. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/query_parse.py +101 -0
  196. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/raw_from_scope.py +124 -0
  197. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/request_body_apply.py +26 -0
  198. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/ingress/request_from_scope.py +33 -0
  199. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/paired_gen.py +5 -0
  200. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/headers_from_payload.py +2 -2
  201. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/negotiate.py +1 -1
  202. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/response/render.py +82 -0
  203. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/renderer.py +4 -4
  204. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/template.py +1 -1
  205. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/templates.py +2 -2
  206. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/__init__.py +42 -0
  207. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/binding_match.py +155 -0
  208. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/binding_policy_apply.py +82 -0
  209. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/ctx_finalize.py +142 -0
  210. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/op_resolve.py +67 -0
  211. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/params_normalize.py +22 -0
  212. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/path_params_extract.py +21 -0
  213. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/payload_select.py +196 -0
  214. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/plan_select.py +31 -0
  215. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/protocol_detect.py +51 -0
  216. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/rpc_envelope_parse.py +135 -0
  217. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/route/rpc_method_match.py +39 -0
  218. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/__init__.py +26 -0
  219. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/commit_tx.py +16 -0
  220. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/handler_persistence.py +38 -0
  221. tigrbl-0.3.17.dev2/tigrbl/runtime/atoms/sys/start_tx.py +16 -0
  222. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/build_in.py +123 -2
  223. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/build_out.py +12 -0
  224. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/dump.py +66 -2
  225. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/validate_in.py +32 -1
  226. tigrbl-0.3.17.dev2/tigrbl/runtime/events.py +435 -0
  227. {tigrbl-0.3.16.dev4/tigrbl/hook → tigrbl-0.3.17.dev2/tigrbl/runtime}/exceptions.py +1 -1
  228. tigrbl-0.3.17.dev2/tigrbl/runtime/executor/helpers.py +194 -0
  229. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/invoke.py +104 -12
  230. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/types.py +55 -3
  231. tigrbl-0.3.17.dev2/tigrbl/runtime/gw/__init__.py +4 -0
  232. tigrbl-0.3.17.dev2/tigrbl/runtime/gw/invoke.py +339 -0
  233. tigrbl-0.3.17.dev2/tigrbl/runtime/gw/raw.py +26 -0
  234. tigrbl-0.3.17.dev2/tigrbl/runtime/hook_types.py +60 -0
  235. tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/__init__.py +49 -0
  236. tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/atoms.py +234 -0
  237. tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/cache.py +85 -0
  238. tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/core.py +483 -0
  239. tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/models.py +124 -0
  240. tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/opview_compiler.py +99 -0
  241. tigrbl-0.3.17.dev2/tigrbl/runtime/kernel/payload.py +64 -0
  242. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/kernel.py +77 -54
  243. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/labels.py +17 -1
  244. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/opview.py +2 -2
  245. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/ordering.py +75 -0
  246. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/converters.py +9 -0
  247. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/utils.py +1 -1
  248. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/system.py +59 -0
  249. tigrbl-0.3.17.dev2/tigrbl/schema/__init__.py +27 -0
  250. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/build_schema.py +97 -4
  251. tigrbl-0.3.17.dev2/tigrbl/schema/builder/helpers.py +87 -0
  252. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/list_params.py +1 -1
  253. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/strip_parent_fields.py +1 -1
  254. tigrbl-0.3.17.dev2/tigrbl/security/__init__.py +5 -0
  255. tigrbl-0.3.17.dev2/tigrbl/security/dependencies.py +5 -0
  256. tigrbl-0.3.17.dev2/tigrbl/shortcuts/__init__.py +31 -0
  257. tigrbl-0.3.16.dev4/tigrbl/app/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/app.py +9 -9
  258. tigrbl-0.3.16.dev4/tigrbl/column/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/column.py +5 -5
  259. tigrbl-0.3.16.dev4/tigrbl/engine/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/engine.py +2 -2
  260. tigrbl-0.3.16.dev4/tigrbl/hook/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/hook.py +3 -3
  261. tigrbl-0.3.17.dev2/tigrbl/shortcuts/op.py +14 -0
  262. tigrbl-0.3.16.dev4/tigrbl/responses/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/responses.py +7 -9
  263. tigrbl-0.3.17.dev2/tigrbl/shortcuts/router.py +42 -0
  264. tigrbl-0.3.16.dev4/tigrbl/schema/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/schema.py +3 -3
  265. tigrbl-0.3.16.dev4/tigrbl/table/shortcuts.py → tigrbl-0.3.17.dev2/tigrbl/shortcuts/table.py +2 -2
  266. tigrbl-0.3.17.dev2/tigrbl/specs.py +30 -0
  267. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/__init__.py +2 -0
  268. tigrbl-0.3.17.dev2/tigrbl/system/diagnostics/healthz.py +63 -0
  269. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/hookz.py +3 -3
  270. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/kernelz.py +3 -3
  271. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/methodz.py +3 -3
  272. tigrbl-0.3.17.dev2/tigrbl/system/diagnostics/router.py +208 -0
  273. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/diagnostics/utils.py +27 -15
  274. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/lens.py +2 -2
  275. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/helpers.py +3 -3
  276. tigrbl-0.3.17.dev2/tigrbl/system/docs/openapi/mount.py +85 -0
  277. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/schema.py +21 -3
  278. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openrpc.py +83 -23
  279. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/swagger.py +15 -9
  280. tigrbl-0.3.17.dev2/tigrbl/system/favicon/__init__.py +138 -0
  281. tigrbl-0.3.17.dev2/tigrbl/transport/__init__.py +3 -0
  282. tigrbl-0.3.17.dev2/tigrbl/transport/jsonrpc/__init__.py +0 -0
  283. tigrbl-0.3.17.dev2/tigrbl/transport/jsonrpc/helpers.py +55 -0
  284. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/transport/rest/__init__.py +7 -11
  285. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/transport/rest/aggregator.py +18 -32
  286. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/__init__.py +35 -15
  287. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/authn_abc.py +1 -1
  288. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/op_config_provider.py +1 -1
  289. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/uuid.py +1 -1
  290. tigrbl-0.3.17.dev2/tigrbl/utils/__init__.py +3 -0
  291. tigrbl-0.3.16.dev4/tigrbl/schema/get_schema.py → tigrbl-0.3.17.dev2/tigrbl/utils/schema.py +1 -1
  292. tigrbl-0.3.17.dev2/tigrbl/vendor/__init__.py +21 -0
  293. tigrbl-0.3.17.dev2/tigrbl/vendor/jinja.py +34 -0
  294. tigrbl-0.3.16.dev4/tigrbl/api/__init__.py +0 -19
  295. tigrbl-0.3.16.dev4/tigrbl/api/_api.py +0 -150
  296. tigrbl-0.3.16.dev4/tigrbl/api/_router.py +0 -490
  297. tigrbl-0.3.16.dev4/tigrbl/api/_routing.py +0 -143
  298. tigrbl-0.3.16.dev4/tigrbl/api/resolve.py +0 -151
  299. tigrbl-0.3.16.dev4/tigrbl/api/shortcuts.py +0 -56
  300. tigrbl-0.3.16.dev4/tigrbl/app/_app.py +0 -119
  301. tigrbl-0.3.16.dev4/tigrbl/app/_model_registry.py +0 -41
  302. tigrbl-0.3.16.dev4/tigrbl/app/app_spec.py +0 -42
  303. tigrbl-0.3.16.dev4/tigrbl/app/mro_collect.py +0 -106
  304. tigrbl-0.3.16.dev4/tigrbl/app/tigrbl_app.py +0 -594
  305. tigrbl-0.3.16.dev4/tigrbl/app/transport.py +0 -154
  306. tigrbl-0.3.16.dev4/tigrbl/bindings/__init__.py +0 -73
  307. tigrbl-0.3.16.dev4/tigrbl/bindings/api/__init__.py +0 -11
  308. tigrbl-0.3.16.dev4/tigrbl/bindings/api/include.py +0 -273
  309. tigrbl-0.3.16.dev4/tigrbl/bindings/api/resource_proxy.py +0 -148
  310. tigrbl-0.3.16.dev4/tigrbl/bindings/model.py +0 -194
  311. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/attach.py +0 -34
  312. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/fastapi.py +0 -52
  313. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/member.py +0 -386
  314. tigrbl-0.3.16.dev4/tigrbl/column/__init__.py +0 -75
  315. tigrbl-0.3.16.dev4/tigrbl/column/mro_collect.py +0 -59
  316. tigrbl-0.3.16.dev4/tigrbl/decorators.py +0 -17
  317. tigrbl-0.3.16.dev4/tigrbl/deps/__init__.py +0 -25
  318. tigrbl-0.3.16.dev4/tigrbl/deps/jinja.py +0 -27
  319. tigrbl-0.3.16.dev4/tigrbl/engine/__init__.py +0 -47
  320. tigrbl-0.3.16.dev4/tigrbl/engine/bind.py +0 -33
  321. tigrbl-0.3.16.dev4/tigrbl/engine/collect.py +0 -111
  322. tigrbl-0.3.16.dev4/tigrbl/headers/__init__.py +0 -3
  323. tigrbl-0.3.16.dev4/tigrbl/hook/__init__.py +0 -23
  324. tigrbl-0.3.16.dev4/tigrbl/hook/_hook.py +0 -22
  325. tigrbl-0.3.16.dev4/tigrbl/middlewares/__init__.py +0 -37
  326. tigrbl-0.3.16.dev4/tigrbl/op/__init__.py +0 -50
  327. tigrbl-0.3.16.dev4/tigrbl/op/collect.py +0 -11
  328. tigrbl-0.3.16.dev4/tigrbl/op/mro_collect.py +0 -99
  329. tigrbl-0.3.16.dev4/tigrbl/op/types.py +0 -136
  330. tigrbl-0.3.16.dev4/tigrbl/orm/tables/_base.py +0 -8
  331. tigrbl-0.3.16.dev4/tigrbl/requests/__init__.py +0 -5
  332. tigrbl-0.3.16.dev4/tigrbl/responses/README.md +0 -34
  333. tigrbl-0.3.16.dev4/tigrbl/responses/__init__.py +0 -52
  334. tigrbl-0.3.16.dev4/tigrbl/responses/_transport.py +0 -32
  335. tigrbl-0.3.16.dev4/tigrbl/responses/bind.py +0 -12
  336. tigrbl-0.3.16.dev4/tigrbl/rest/__init__.py +0 -27
  337. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/render.py +0 -36
  338. tigrbl-0.3.16.dev4/tigrbl/runtime/events.py +0 -209
  339. tigrbl-0.3.16.dev4/tigrbl/runtime/executor/helpers.py +0 -88
  340. tigrbl-0.3.16.dev4/tigrbl/schema/__init__.py +0 -38
  341. tigrbl-0.3.16.dev4/tigrbl/schema/builder/compat.py +0 -16
  342. tigrbl-0.3.16.dev4/tigrbl/schema/builder/helpers.py +0 -51
  343. tigrbl-0.3.16.dev4/tigrbl/security/__init__.py +0 -63
  344. tigrbl-0.3.16.dev4/tigrbl/security/schemes/__init__.py +0 -19
  345. tigrbl-0.3.16.dev4/tigrbl/session/README.md +0 -14
  346. tigrbl-0.3.16.dev4/tigrbl/session/__init__.py +0 -28
  347. tigrbl-0.3.16.dev4/tigrbl/session/abc.py +0 -76
  348. tigrbl-0.3.16.dev4/tigrbl/session/shortcuts.py +0 -50
  349. tigrbl-0.3.16.dev4/tigrbl/shortcuts.py +0 -22
  350. tigrbl-0.3.16.dev4/tigrbl/specs.py +0 -44
  351. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/compat.py +0 -31
  352. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/healthz.py +0 -41
  353. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/router.py +0 -73
  354. tigrbl-0.3.16.dev4/tigrbl/system/docs/openapi/mount.py +0 -30
  355. tigrbl-0.3.16.dev4/tigrbl/system/favicon/__init__.py +0 -102
  356. tigrbl-0.3.16.dev4/tigrbl/table/__init__.py +0 -9
  357. tigrbl-0.3.16.dev4/tigrbl/table/_table.py +0 -54
  358. tigrbl-0.3.16.dev4/tigrbl/table/mro_collect.py +0 -86
  359. tigrbl-0.3.16.dev4/tigrbl/table/table_spec.py +0 -28
  360. tigrbl-0.3.16.dev4/tigrbl/transport/__init__.py +0 -93
  361. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/__init__.py +0 -23
  362. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/dispatcher.py +0 -460
  363. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/helpers.py +0 -119
  364. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/openrpc.py +0 -3
  365. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/LICENSE +0 -0
  366. /tigrbl-0.3.16.dev4/tigrbl/security/schemes/_base.py → /tigrbl-0.3.17.dev2/tigrbl/_base/_security_base.py +0 -0
  367. /tigrbl-0.3.16.dev4/tigrbl/transport/background.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_background.py +0 -0
  368. /tigrbl-0.3.16.dev4/tigrbl/headers/_header.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_headers.py +0 -0
  369. /tigrbl-0.3.16.dev4/tigrbl/transport/httpx.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_httpx.py +0 -0
  370. /tigrbl-0.3.16.dev4/tigrbl/requests/adapters.py → /tigrbl-0.3.17.dev2/tigrbl/_concrete/_request_adapters.py +0 -0
  371. {tigrbl-0.3.16.dev4/tigrbl/security → tigrbl-0.3.17.dev2/tigrbl/_concrete}/dependencies.py +0 -0
  372. {tigrbl-0.3.16.dev4/tigrbl/column → tigrbl-0.3.17.dev2/tigrbl/_spec}/field_spec.py +0 -0
  373. /tigrbl-0.3.16.dev4/tigrbl/middlewares/spec.py → /tigrbl-0.3.17.dev2/tigrbl/_spec/middleware_spec.py +0 -0
  374. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/README.md +0 -0
  375. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/__init__.py +0 -0
  376. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/core.py +0 -0
  377. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/jsonhints.py +0 -0
  378. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/planning.py +0 -0
  379. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/types.py +0 -0
  380. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/column/infer/utils.py +0 -0
  381. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/__init__.py +0 -0
  382. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/bulk.py +0 -0
  383. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/__init__.py +0 -0
  384. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/db.py +0 -0
  385. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/enum.py +0 -0
  386. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/filters.py +0 -0
  387. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/core/crud/helpers/normalize.py +0 -0
  388. /tigrbl-0.3.16.dev4/tigrbl/middlewares/decorators.py → /tigrbl-0.3.17.dev2/tigrbl/decorators/middlewares.py +0 -0
  389. /tigrbl-0.3.16.dev4/tigrbl/transport/rest/decorators.py → /tigrbl-0.3.17.dev2/tigrbl/decorators/rest.py +0 -0
  390. /tigrbl-0.3.16.dev4/tigrbl/schema/decorators.py → /tigrbl-0.3.17.dev2/tigrbl/decorators/schema.py +0 -0
  391. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/docs/verbosity.md +0 -0
  392. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/builders.py +0 -0
  393. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/capabilities.py +0 -0
  394. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/docs/PLUGINS.md +0 -0
  395. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/plugins.py +0 -0
  396. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/engine/registry.py +0 -0
  397. {tigrbl-0.3.16.dev4/tigrbl/bindings → tigrbl-0.3.17.dev2/tigrbl/mapping}/rest/io_headers.py +0 -0
  398. {tigrbl-0.3.16.dev4/tigrbl/app → tigrbl-0.3.17.dev2/tigrbl/middlewares}/__init__.py +0 -0
  399. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/middlewares/compose.py +0 -0
  400. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/__init__.py +0 -0
  401. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/_RowBound.py +0 -0
  402. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/__init__.py +0 -0
  403. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/bootstrappable.py +0 -0
  404. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/edges.py +0 -0
  405. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/fields.py +0 -0
  406. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/markers.py +0 -0
  407. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/operations.py +0 -0
  408. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/upsertable.py +0 -0
  409. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/orm/mixins/utils.py +0 -0
  410. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/__init__.py +0 -0
  411. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/__init__.py +0 -0
  412. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/paired_post.py +0 -0
  413. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/paired_pre.py +0 -0
  414. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -0
  415. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/out/__init__.py +0 -0
  416. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/out/masking.py +0 -0
  417. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/refresh/__init__.py +0 -0
  418. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/refresh/demand.py +0 -0
  419. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/__init__.py +0 -0
  420. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/resolve/assemble.py +0 -0
  421. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/__init__.py +0 -0
  422. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/response/negotiation.py +0 -0
  423. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/__init__.py +0 -0
  424. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/collect_in.py +0 -0
  425. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/schema/collect_out.py +0 -0
  426. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/storage/__init__.py +0 -0
  427. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/storage/to_stored.py +0 -0
  428. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/atoms/wire/__init__.py +0 -0
  429. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/context.py +0 -0
  430. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/__init__.py +0 -0
  431. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/executor/guards.py +0 -0
  432. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/__init__.py +0 -0
  433. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/exceptions.py +0 -0
  434. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/status/mappings.py +0 -0
  435. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/runtime/trace.py +0 -0
  436. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/__init__.py +0 -0
  437. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/cache.py +0 -0
  438. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/builder/extras.py +0 -0
  439. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/types.py +0 -0
  440. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/schema/utils.py +0 -0
  441. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/__init__.py +0 -0
  442. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/__init__.py +0 -0
  443. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/__init__.py +0 -0
  444. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/docs/openapi/metadata.py +0 -0
  445. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/favicon/assets/favicon.svg +0 -0
  446. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/system/uvicorn.py +0 -0
  447. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/transport/jsonrpc/models.py +0 -0
  448. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/allow_anon_provider.py +0 -0
  449. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/nested_path_provider.py +0 -0
  450. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/op.py +0 -0
  451. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/op_verb_alias_provider.py +0 -0
  452. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/request_extras_provider.py +0 -0
  453. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/response_extras_provider.py +0 -0
  454. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17.dev2}/tigrbl/types/table_config_provider.py +0 -0
  455. {tigrbl-0.3.16.dev4/tigrbl/deps → tigrbl-0.3.17.dev2/tigrbl/vendor}/pydantic.py +0 -0
  456. {tigrbl-0.3.16.dev4/tigrbl/deps → tigrbl-0.3.17.dev2/tigrbl/vendor}/sqlalchemy.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrbl
3
- Version: 0.3.16.dev4
3
+ Version: 0.3.17.dev2
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
@@ -59,11 +59,16 @@ A high-leverage ASGI meta-framework that turns plain SQLAlchemy models into a fu
59
59
  - 🧩 Pluggable engine and provider abstractions
60
60
  - 🚀 Built as an ASGI-native framework with Pydantic-powered schema generation
61
61
 
62
+ ## Runtime-owned Routing Contract
63
+
64
+ For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
65
+ [`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
66
+
62
67
  ## Terminology 📚
63
68
 
64
69
  - **Tenant** 🏢 – a namespace used to group related resources.
65
70
  - **Principal** 👤 – an owner of resources, such as an individual user or an organization.
66
- - **Resource** 📦 – a logical collection of data or functionality exposed by the API.
71
+ - **Resource** 📦 – a logical collection of data or functionality exposed by the router.
67
72
  - **Engine** ⚙️ – the database connection and transaction manager backing a resource.
68
73
  - **Model / Table** 🧱 – the ORM or database representation of a resource's records.
69
74
  - **Column** 📏 – a field on a model that maps to a table column.
@@ -310,7 +315,7 @@ increasing order of precedence:
310
315
 
311
316
  1. defaults
312
317
  2. app config
313
- 3. API config
318
+ 3. router config
314
319
  4. table config
315
320
  5. column config
316
321
  6. operation spec
@@ -318,7 +323,7 @@ increasing order of precedence:
318
323
 
319
324
  Later entries override earlier ones, so request overrides win over all other
320
325
  sources. This can be summarized as
321
- `overrides > opspec > colspecs > tabspec > apispec > appspec > defaults`.
326
+ `overrides > opspec > colspecs > tabspec > routerspec > appspec > defaults`.
322
327
 
323
328
  ### Schema Config Precedence 🧬
324
329
 
@@ -327,7 +332,7 @@ Later layers override earlier ones, with the precedence order:
327
332
 
328
333
  1. defaults (lowest)
329
334
  2. app configuration
330
- 3. API configuration
335
+ 3. router configuration
331
336
  4. table configuration
332
337
  5. column-level `cfg` values
333
338
  6. op-specific `cfg`
@@ -367,7 +372,7 @@ This hierarchy ensures that the most specific settings always win. 🥇
367
372
  When assembling values for persistence, defaults are resolved in this order:
368
373
 
369
374
  1. Client-supplied value
370
- 2. API `default_factory`
375
+ 2. router `default_factory`
371
376
  3. ORM default
372
377
  4. Database `server_default`
373
378
  5. HTTP 422 if the field is required and still missing
@@ -408,15 +413,15 @@ approved usage. These are not optional—adhering to them keeps the runtime
408
413
  predictable, preserves hook lifecycle guarantees, and ensures schema
409
414
  consistency across REST and RPC surfaces.
410
415
 
411
- ### 1) Never import SQLAlchemy directly or bypass Tigrbl APIs
416
+ ### 1) Never import SQLAlchemy directly or bypass Tigrbl routers
412
417
 
413
418
  **Why:** Direct imports bypass Tigrbl's compatibility layer and make it
414
419
  harder to evolve internal dependencies. Use the Tigrbl exports so your
415
- code stays aligned with the framework’s versioned ASGI API.
420
+ code stays aligned with the framework’s versioned ASGI router.
416
421
 
417
422
  ✅ **Preferred:**
418
423
  ```python
419
- from tigrbl import Base, TigrblApp, TigrblApi
424
+ from tigrbl import Base, TigrblApp, TigrblRouter
420
425
  from tigrbl.types import Integer, String, Mapped
421
426
  from tigrbl.types import Depends, HTTPException, Request
422
427
  ```
@@ -452,12 +457,12 @@ item_id = UUID(str(payload["id"]))
452
457
  ### 3) Use engine specs for persistence, not ad-hoc engines
453
458
 
454
459
  **Why:** Engine specs make persistence declarative, testable, and
455
- compatible with engine resolution across app, API, table, and op scopes.
460
+ compatible with engine resolution across app, router, table, and op scopes.
456
461
 
457
462
  ✅ **Preferred:**
458
463
  ```python
459
464
  from tigrbl.engine.shortcuts import engine_spec
460
- from tigrbl.engine.decorators import engine_ctx
465
+ from tigrbl.decorators.engine import engine_ctx
461
466
 
462
467
  spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
463
468
 
@@ -588,9 +593,9 @@ async def rotate_keys(payload, *, ctx):
588
593
 
589
594
  🚫 **Avoid:**
590
595
  ```python
591
- from some_framework import APIRouter
596
+ from some_framework import routerRouter
592
597
 
593
- router = APIRouter()
598
+ router = routerRouter()
594
599
 
595
600
  @router.post("/keys/rotate")
596
601
  async def rotate_keys(payload):
@@ -606,7 +611,7 @@ resolved deterministically by the runtime.
606
611
  ✅ **Preferred:**
607
612
  ```python
608
613
  from tigrbl import hook_ctx, op_ctx, schema_ctx
609
- from tigrbl.engine.decorators import engine_ctx
614
+ from tigrbl.decorators.engine import engine_ctx
610
615
 
611
616
  @engine_ctx(kind="sqlite", mode="memory")
612
617
  class Item(Table):
@@ -629,7 +634,7 @@ async def validate(ctx):
629
634
 
630
635
  ```python
631
636
  from tigrbl.engine.shortcuts import engine_spec, prov
632
- from tigrbl.engine._engine import Engine, Provider
637
+ from tigrbl._concrete._engine import Engine, Provider
633
638
 
634
639
  # Build an EngineSpec from a DSN string
635
640
  spec = engine_spec("sqlite://:memory:")
@@ -656,7 +661,7 @@ provider_pg = Provider(spec_pg)
656
661
  `engine_ctx` binds database configuration to different layers. It accepts a
657
662
  DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
658
663
  resolver chooses the most specific binding in the order
659
- `op > table > api > app`.
664
+ `op > table > router > app`.
660
665
 
661
666
  #### Engine precedence 🥇
662
667
 
@@ -664,8 +669,8 @@ When engine contexts are declared at multiple scopes, Tigrbl resolves them
664
669
  with strict precedence:
665
670
 
666
671
  1. **Op level** – bindings attached directly to an operation take highest priority.
667
- 2. **Table/Model level** – definitions on a model or table override API and app defaults.
668
- 3. **API level** – bindings on the API class apply when no model-specific context exists.
672
+ 2. **Table/Model level** – definitions on a model or table override router and app defaults.
673
+ 3. **router level** – bindings on the router class apply when no model-specific context exists.
669
674
  4. **App level** – the default engine supplied to the application is used last.
670
675
 
671
676
  This ordering ensures that the most specific engine context always wins.
@@ -679,7 +684,7 @@ from tigrbl.engine.shortcuts import prov, engine
679
684
  app = SimpleNamespace(db=prov(kind="sqlite", mode="memory"))
680
685
  alt = SimpleNamespace(db=engine(kind="sqlite", mode="memory"))
681
686
 
682
- class API:
687
+ class router:
683
688
  db = {"kind": "sqlite", "memory": True}
684
689
 
685
690
  class Item:
@@ -700,7 +705,7 @@ create.__tigrbl_engine_ctx__ = {
700
705
  #### Decorative bindings 🎛️
701
706
 
702
707
  ```python
703
- from tigrbl.engine.decorators import engine_ctx
708
+ from tigrbl.decorators.engine import engine_ctx
704
709
  from tigrbl.engine.shortcuts import prov, engine
705
710
 
706
711
  @engine_ctx(prov(kind="sqlite", mode="memory"))
@@ -708,7 +713,7 @@ class App:
708
713
  pass
709
714
 
710
715
  @engine_ctx(engine(kind="sqlite", mode="memory"))
711
- class DecoratedAPI:
716
+ class Decoratedrouter:
712
717
  pass
713
718
 
714
719
  @engine_ctx(kind="sqlite", mode="memory")
@@ -735,7 +740,7 @@ The bridge examples cover two integration styles:
735
740
  * A Swarmauri `Factory` invocation during `PRE_HANDLER` via `hook_ctx`.
736
741
  * Tigrbl default verbs (`create`, `get`, `list`, `update`, `delete`) plus a custom op.
737
742
  * `engine_ctx` at model and operation scope.
738
- * Generated OpenAPI and OpenRPC documents mounted from the same model bindings.
743
+ * Generated Openrouter and OpenRPC documents mounted from the same model bindings.
739
744
 
740
745
  * **Smoother direct-model flow** (`swarmauri_tigrbl_bridge_smooth.py`)
741
746
  * Uses hooks + default `create` persistence to normalize Swarmauri payloads.
@@ -26,11 +26,16 @@ A high-leverage ASGI meta-framework that turns plain SQLAlchemy models into a fu
26
26
  - 🧩 Pluggable engine and provider abstractions
27
27
  - 🚀 Built as an ASGI-native framework with Pydantic-powered schema generation
28
28
 
29
+ ## Runtime-owned Routing Contract
30
+
31
+ For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
32
+ [`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
33
+
29
34
  ## Terminology 📚
30
35
 
31
36
  - **Tenant** 🏢 – a namespace used to group related resources.
32
37
  - **Principal** 👤 – an owner of resources, such as an individual user or an organization.
33
- - **Resource** 📦 – a logical collection of data or functionality exposed by the API.
38
+ - **Resource** 📦 – a logical collection of data or functionality exposed by the router.
34
39
  - **Engine** ⚙️ – the database connection and transaction manager backing a resource.
35
40
  - **Model / Table** 🧱 – the ORM or database representation of a resource's records.
36
41
  - **Column** 📏 – a field on a model that maps to a table column.
@@ -277,7 +282,7 @@ increasing order of precedence:
277
282
 
278
283
  1. defaults
279
284
  2. app config
280
- 3. API config
285
+ 3. router config
281
286
  4. table config
282
287
  5. column config
283
288
  6. operation spec
@@ -285,7 +290,7 @@ increasing order of precedence:
285
290
 
286
291
  Later entries override earlier ones, so request overrides win over all other
287
292
  sources. This can be summarized as
288
- `overrides > opspec > colspecs > tabspec > apispec > appspec > defaults`.
293
+ `overrides > opspec > colspecs > tabspec > routerspec > appspec > defaults`.
289
294
 
290
295
  ### Schema Config Precedence 🧬
291
296
 
@@ -294,7 +299,7 @@ Later layers override earlier ones, with the precedence order:
294
299
 
295
300
  1. defaults (lowest)
296
301
  2. app configuration
297
- 3. API configuration
302
+ 3. router configuration
298
303
  4. table configuration
299
304
  5. column-level `cfg` values
300
305
  6. op-specific `cfg`
@@ -334,7 +339,7 @@ This hierarchy ensures that the most specific settings always win. 🥇
334
339
  When assembling values for persistence, defaults are resolved in this order:
335
340
 
336
341
  1. Client-supplied value
337
- 2. API `default_factory`
342
+ 2. router `default_factory`
338
343
  3. ORM default
339
344
  4. Database `server_default`
340
345
  5. HTTP 422 if the field is required and still missing
@@ -375,15 +380,15 @@ approved usage. These are not optional—adhering to them keeps the runtime
375
380
  predictable, preserves hook lifecycle guarantees, and ensures schema
376
381
  consistency across REST and RPC surfaces.
377
382
 
378
- ### 1) Never import SQLAlchemy directly or bypass Tigrbl APIs
383
+ ### 1) Never import SQLAlchemy directly or bypass Tigrbl routers
379
384
 
380
385
  **Why:** Direct imports bypass Tigrbl's compatibility layer and make it
381
386
  harder to evolve internal dependencies. Use the Tigrbl exports so your
382
- code stays aligned with the framework’s versioned ASGI API.
387
+ code stays aligned with the framework’s versioned ASGI router.
383
388
 
384
389
  ✅ **Preferred:**
385
390
  ```python
386
- from tigrbl import Base, TigrblApp, TigrblApi
391
+ from tigrbl import Base, TigrblApp, TigrblRouter
387
392
  from tigrbl.types import Integer, String, Mapped
388
393
  from tigrbl.types import Depends, HTTPException, Request
389
394
  ```
@@ -419,12 +424,12 @@ item_id = UUID(str(payload["id"]))
419
424
  ### 3) Use engine specs for persistence, not ad-hoc engines
420
425
 
421
426
  **Why:** Engine specs make persistence declarative, testable, and
422
- compatible with engine resolution across app, API, table, and op scopes.
427
+ compatible with engine resolution across app, router, table, and op scopes.
423
428
 
424
429
  ✅ **Preferred:**
425
430
  ```python
426
431
  from tigrbl.engine.shortcuts import engine_spec
427
- from tigrbl.engine.decorators import engine_ctx
432
+ from tigrbl.decorators.engine import engine_ctx
428
433
 
429
434
  spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
430
435
 
@@ -555,9 +560,9 @@ async def rotate_keys(payload, *, ctx):
555
560
 
556
561
  🚫 **Avoid:**
557
562
  ```python
558
- from some_framework import APIRouter
563
+ from some_framework import routerRouter
559
564
 
560
- router = APIRouter()
565
+ router = routerRouter()
561
566
 
562
567
  @router.post("/keys/rotate")
563
568
  async def rotate_keys(payload):
@@ -573,7 +578,7 @@ resolved deterministically by the runtime.
573
578
  ✅ **Preferred:**
574
579
  ```python
575
580
  from tigrbl import hook_ctx, op_ctx, schema_ctx
576
- from tigrbl.engine.decorators import engine_ctx
581
+ from tigrbl.decorators.engine import engine_ctx
577
582
 
578
583
  @engine_ctx(kind="sqlite", mode="memory")
579
584
  class Item(Table):
@@ -596,7 +601,7 @@ async def validate(ctx):
596
601
 
597
602
  ```python
598
603
  from tigrbl.engine.shortcuts import engine_spec, prov
599
- from tigrbl.engine._engine import Engine, Provider
604
+ from tigrbl._concrete._engine import Engine, Provider
600
605
 
601
606
  # Build an EngineSpec from a DSN string
602
607
  spec = engine_spec("sqlite://:memory:")
@@ -623,7 +628,7 @@ provider_pg = Provider(spec_pg)
623
628
  `engine_ctx` binds database configuration to different layers. It accepts a
624
629
  DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
625
630
  resolver chooses the most specific binding in the order
626
- `op > table > api > app`.
631
+ `op > table > router > app`.
627
632
 
628
633
  #### Engine precedence 🥇
629
634
 
@@ -631,8 +636,8 @@ When engine contexts are declared at multiple scopes, Tigrbl resolves them
631
636
  with strict precedence:
632
637
 
633
638
  1. **Op level** – bindings attached directly to an operation take highest priority.
634
- 2. **Table/Model level** – definitions on a model or table override API and app defaults.
635
- 3. **API level** – bindings on the API class apply when no model-specific context exists.
639
+ 2. **Table/Model level** – definitions on a model or table override router and app defaults.
640
+ 3. **router level** – bindings on the router class apply when no model-specific context exists.
636
641
  4. **App level** – the default engine supplied to the application is used last.
637
642
 
638
643
  This ordering ensures that the most specific engine context always wins.
@@ -646,7 +651,7 @@ from tigrbl.engine.shortcuts import prov, engine
646
651
  app = SimpleNamespace(db=prov(kind="sqlite", mode="memory"))
647
652
  alt = SimpleNamespace(db=engine(kind="sqlite", mode="memory"))
648
653
 
649
- class API:
654
+ class router:
650
655
  db = {"kind": "sqlite", "memory": True}
651
656
 
652
657
  class Item:
@@ -667,7 +672,7 @@ create.__tigrbl_engine_ctx__ = {
667
672
  #### Decorative bindings 🎛️
668
673
 
669
674
  ```python
670
- from tigrbl.engine.decorators import engine_ctx
675
+ from tigrbl.decorators.engine import engine_ctx
671
676
  from tigrbl.engine.shortcuts import prov, engine
672
677
 
673
678
  @engine_ctx(prov(kind="sqlite", mode="memory"))
@@ -675,7 +680,7 @@ class App:
675
680
  pass
676
681
 
677
682
  @engine_ctx(engine(kind="sqlite", mode="memory"))
678
- class DecoratedAPI:
683
+ class Decoratedrouter:
679
684
  pass
680
685
 
681
686
  @engine_ctx(kind="sqlite", mode="memory")
@@ -702,7 +707,7 @@ The bridge examples cover two integration styles:
702
707
  * A Swarmauri `Factory` invocation during `PRE_HANDLER` via `hook_ctx`.
703
708
  * Tigrbl default verbs (`create`, `get`, `list`, `update`, `delete`) plus a custom op.
704
709
  * `engine_ctx` at model and operation scope.
705
- * Generated OpenAPI and OpenRPC documents mounted from the same model bindings.
710
+ * Generated Openrouter and OpenRPC documents mounted from the same model bindings.
706
711
 
707
712
  * **Smoother direct-model flow** (`swarmauri_tigrbl_bridge_smooth.py`)
708
713
  * Uses hooks + default `create` persistence to normalize Swarmauri payloads.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tigrbl"
3
- version = "0.3.16.dev4"
3
+ version = "0.3.17.dev2"
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"
@@ -48,6 +48,7 @@ tests = [
48
48
 
49
49
  [tool.uv.sources]
50
50
  tigrbl-tests = { workspace = true }
51
+ tigrbl_client = { workspace = true }
51
52
 
52
53
  [tool.pytest.ini_options]
53
54
  norecursedirs = ["combined", "scripts"]
@@ -81,6 +82,7 @@ packages = [
81
82
 
82
83
  [dependency-groups]
83
84
  dev = [
85
+ "tigrbl_client",
84
86
  "pytest>=8.0",
85
87
  "pytest-asyncio>=0.24.0",
86
88
  "pytest-xdist>=3.6.1",
@@ -86,7 +86,7 @@ Some objects also expose optional helpers:
86
86
  | Column | `column_spec.py` | `_column.py` | — | `shortcuts.py` | `collect.py` | — | — |
87
87
  | Engine | `engine_spec.py` | `_engine.py` | `decorators.py` | `shortcuts.py` | `collect.py` | `resolver.py` | `builders.py` |
88
88
  | Op | `types.py` | `_op.py` | `decorators.py` | — | `collect.py` | — | — |
89
- | API | `api_spec.py` | `_api.py` | — | `shortcuts.py` | — | — | — |
89
+ | API | `router_spec.py` | `_api.py` | — | `shortcuts.py` | — | — | — |
90
90
  | App | `app_spec.py` | `_app.py` | — | `shortcuts.py` | — | — | — |
91
91
  | Table | `table_spec.py` | `_table.py` | — | `shortcuts.py` | — | — | — |
92
92
 
@@ -5,24 +5,12 @@ Tigrbl – public API
5
5
  OpSpec-centric building blocks to bind models, wire schemas/handlers/hooks,
6
6
  register RPC & REST, and (optionally) mount JSON-RPC and diagnostics.
7
7
 
8
- Quick start:
9
- from tigrbl import include_model, build_jsonrpc_router, mount_diagnostics
10
- from tigrbl import OpSpec, hook_ctx, op_ctx, alias_ctx, schema_ctx, SchemaRef
11
-
12
- include_model(api, User, app=asgi_app)
13
- app.include_router(build_jsonrpc_router(api), prefix="/rpc")
14
- app.include_router(mount_diagnostics(api), prefix="/system")
15
-
16
- # Example: custom op using an existing schema
17
- @op_ctx(alias="search", target="custom", arity="collection",
18
- request_schema=SchemaRef("Search", "in"),
19
- response_schema=SchemaRef("Search", "out"))
20
- def search(cls, ctx):
21
- ...
22
8
  """
23
9
 
24
10
  from __future__ import annotations
25
11
 
12
+ from ._concrete import Router
13
+
26
14
  # ── OpSpec (source of truth) ───────────────────────────────────────────────────
27
15
  from .op import (
28
16
  OpSpec,
@@ -40,14 +28,13 @@ from .schema.types import SchemaRef, SchemaArg
40
28
  # ── Ctx-only decorators (new surface; replaces legacy ops.decorators) ─────────
41
29
 
42
30
  from .op import alias_ctx, op_ctx, alias, op_alias
43
- from .hook import hook_ctx
44
- from .engine.decorators import engine_ctx
45
- from .schema.decorators import schema_ctx
46
- from .responses.decorators import response_ctx
47
- from .responses.types import ResponseSpec
48
-
49
- # ── Bindings (model + API orchestration) ───────────────────────────────────────
50
- from .bindings import (
31
+ from .decorators.hook import hook_ctx
32
+ from .decorators.engine import engine_ctx
33
+ from .decorators.schema import schema_ctx
34
+ from .decorators.response import response_ctx
35
+
36
+ # ── Bindings (model + Router orchestration) ───────────────────────────────────────
37
+ from .mapping import (
51
38
  bind,
52
39
  rebind,
53
40
  build_schemas,
@@ -55,8 +42,8 @@ from .bindings import (
55
42
  build_handlers,
56
43
  register_rpc,
57
44
  build_rest,
58
- include_model,
59
- include_models,
45
+ include_table,
46
+ include_tables,
60
47
  rpc_call,
61
48
  )
62
49
 
@@ -67,7 +54,10 @@ from .runtime.executor import _invoke
67
54
  from .schema import _build_schema, _build_list_params, get_schema
68
55
 
69
56
  # ── Transport & Diagnostics (optional) ─────────────────────────────────────────
70
- from .transport.jsonrpc import build_jsonrpc_router
57
+ from ._concrete._request import Request
58
+ from .security import Depends
59
+ from ._concrete._json_response import JSONResponse
60
+ from ._concrete._response import Response
71
61
  from .system import mount_diagnostics
72
62
 
73
63
  # ── DB/bootstrap helpers (infra; optional) ─────────────────────────────────────
@@ -75,22 +65,62 @@ from .ddl import ensure_schemas, register_sqlite_attach, bootstrap_dbschema
75
65
 
76
66
  # ── Config constants (defaults used by REST) ───────────────────────────────────
77
67
  from .config.constants import DEFAULT_HTTP_METHODS
78
- from .app.tigrbl_app import TigrblApp
79
- from .api import Api, TigrblApi
80
-
81
- from .table import Base
68
+ from ._concrete.tigrbl_app import TigrblApp
69
+ from ._concrete.tigrbl_router import TigrblRouter
70
+ from .decorators.router import route_ctx
71
+ from .orm.tables import TableBase
82
72
  from .op import Op
83
- from .security import APIKey, HTTPBearer, MutualTLS, OAuth2, OpenIdConnect
73
+ from .shortcuts.op import op
74
+ from .engine import resolver
75
+ from ._concrete._security.api_key import APIKey
76
+ from ._concrete._security.http_bearer import HTTPBearer
77
+ from ._concrete._security.mutual_tls import MutualTLS
78
+ from ._concrete._security.oauth2 import OAuth2
79
+ from ._concrete._security.openid_connect import OpenIdConnect
80
+ from .runtime.status.exceptions import HTTPException
81
+ from ._spec import (
82
+ AppSpec,
83
+ ColumnSpec,
84
+ EngineSpec,
85
+ FieldSpec,
86
+ ForeignKeySpec,
87
+ IOSpec,
88
+ RequestSpec,
89
+ ResponseSpec,
90
+ RouterSpec,
91
+ SchemaSpec,
92
+ SessionSpec,
93
+ StorageSpec,
94
+ StorageTransform,
95
+ TableRegistrySpec,
96
+ TableSpec,
97
+ TemplateSpec,
98
+ )
99
+ from ._base import ForeignKeyBase, HookBase, TableRegistryBase
100
+ from ._concrete import (
101
+ App,
102
+ Column,
103
+ ForeignKey,
104
+ Hook,
105
+ Route,
106
+ Schema,
107
+ Table,
108
+ TableRegistry,
109
+ )
110
+ from .decorators import HOOK_DECLS_ATTR, middleware, middlewares
84
111
 
85
112
 
86
113
  __all__: list[str] = []
87
114
 
88
115
  __all__ += [
89
116
  "TigrblApp",
90
- "TigrblApi",
91
- "Api",
92
- "Base",
117
+ "TigrblRouter",
118
+ "Router",
119
+ "Depends",
120
+ "HTTPException",
121
+ "TableBase",
93
122
  "Op",
123
+ "op",
94
124
  "HTTPBearer",
95
125
  "APIKey",
96
126
  "OAuth2",
@@ -114,6 +144,7 @@ __all__ += [
114
144
  # Ctx-only decorators
115
145
  "alias_ctx",
116
146
  "op_ctx",
147
+ "route_ctx",
117
148
  "hook_ctx",
118
149
  "schema_ctx",
119
150
  "response_ctx",
@@ -129,8 +160,8 @@ __all__ += [
129
160
  "build_handlers",
130
161
  "register_rpc",
131
162
  "build_rest",
132
- "include_model",
133
- "include_models",
163
+ "include_table",
164
+ "include_tables",
134
165
  "rpc_call",
135
166
  # Runtime
136
167
  "_invoke",
@@ -139,7 +170,6 @@ __all__ += [
139
170
  "_build_list_params",
140
171
  "get_schema",
141
172
  # Transport / Diagnostics
142
- "build_jsonrpc_router",
143
173
  "mount_diagnostics",
144
174
  # DB/infra
145
175
  "ensure_schemas",
@@ -147,4 +177,40 @@ __all__ += [
147
177
  "bootstrap_dbschema",
148
178
  # Config
149
179
  "DEFAULT_HTTP_METHODS",
180
+ "Request",
181
+ "Depends",
182
+ "Response",
183
+ "JSONResponse",
184
+ "resolver",
185
+ ]
186
+ __all__ += [
187
+ "AppSpec",
188
+ "RouterSpec",
189
+ "TableSpec",
190
+ "TableRegistrySpec",
191
+ "ColumnSpec",
192
+ "FieldSpec",
193
+ "IOSpec",
194
+ "StorageSpec",
195
+ "StorageTransform",
196
+ "ForeignKeySpec",
197
+ "RequestSpec",
198
+ "SchemaSpec",
199
+ "SessionSpec",
200
+ "EngineSpec",
201
+ "TemplateSpec",
202
+ "ForeignKeyBase",
203
+ "HookBase",
204
+ "TableRegistryBase",
205
+ "App",
206
+ "Table",
207
+ "Column",
208
+ "Route",
209
+ "Schema",
210
+ "Hook",
211
+ "ForeignKey",
212
+ "TableRegistry",
213
+ "HOOK_DECLS_ATTR",
214
+ "middleware",
215
+ "middlewares",
150
216
  ]
@@ -0,0 +1,24 @@
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
+ ]
@@ -0,0 +1,25 @@
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"]
@@ -5,16 +5,15 @@ from __future__ import annotations
5
5
  from typing import Any
6
6
  from urllib.parse import urlencode
7
7
 
8
- from tigrbl.requests import Request
9
- from tigrbl.requests.adapters import request_from_asgi
10
- from tigrbl.responses import Response
11
- from tigrbl.responses._transport import finalize_transport_response
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
12
 
13
- from .middleware import Middleware
14
- from .spec import ASGIReceive, ASGISend, Message
13
+ from .._spec.middleware_spec import MiddlewareSpec, ASGIReceive, ASGISend, Message
15
14
 
16
15
 
17
- class BaseHTTPMiddleware(Middleware):
16
+ class MiddlewareBase(MiddlewareSpec):
18
17
  """Base middleware for intercepting HTTP requests in ASGI mode."""
19
18
 
20
19
  async def dispatch(
@@ -139,4 +138,4 @@ class BaseHTTPMiddleware(Middleware):
139
138
  )
140
139
 
141
140
 
142
- __all__ = ["BaseHTTPMiddleware"]
141
+ __all__ = ["MiddlewareBase"]
@@ -0,0 +1,12 @@
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"]