tigrbl 0.3.16.dev4__tar.gz → 0.3.17__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 (377) hide show
  1. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/PKG-INFO +50 -25
  2. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/README.md +40 -23
  3. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/pyproject.toml +24 -10
  4. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/README.md +1 -1
  5. tigrbl-0.3.17/tigrbl/__init__.py +332 -0
  6. tigrbl-0.3.17/tigrbl/config/__init__.py +3 -0
  7. tigrbl-0.3.17/tigrbl/config/constants.py +3 -0
  8. tigrbl-0.3.17/tigrbl/config/defaults.py +3 -0
  9. tigrbl-0.3.17/tigrbl/ddl/__init__.py +3 -0
  10. tigrbl-0.3.17/tigrbl/decorators/__init__.py +1 -0
  11. tigrbl-0.3.17/tigrbl/decorators/allow_anon.py +1 -0
  12. tigrbl-0.3.17/tigrbl/decorators/engine.py +1 -0
  13. tigrbl-0.3.17/tigrbl/decorators/hook.py +1 -0
  14. tigrbl-0.3.17/tigrbl/decorators/middlewares.py +1 -0
  15. tigrbl-0.3.17/tigrbl/decorators/op.py +1 -0
  16. tigrbl-0.3.17/tigrbl/decorators/response.py +1 -0
  17. tigrbl-0.3.17/tigrbl/decorators/rest.py +1 -0
  18. tigrbl-0.3.17/tigrbl/decorators/router.py +1 -0
  19. tigrbl-0.3.17/tigrbl/decorators/schema.py +1 -0
  20. tigrbl-0.3.17/tigrbl/decorators/session.py +1 -0
  21. tigrbl-0.3.17/tigrbl/docs/session.md +11 -0
  22. tigrbl-0.3.17/tigrbl/engine/__init__.py +1 -0
  23. tigrbl-0.3.17/tigrbl/engine/bind.py +1 -0
  24. tigrbl-0.3.17/tigrbl/engine/builders.py +1 -0
  25. tigrbl-0.3.17/tigrbl/engine/capabilities.py +1 -0
  26. tigrbl-0.3.17/tigrbl/engine/collect.py +1 -0
  27. tigrbl-0.3.17/tigrbl/engine/plugins.py +1 -0
  28. tigrbl-0.3.17/tigrbl/engine/registry.py +1 -0
  29. tigrbl-0.3.17/tigrbl/engine/resolver.py +8 -0
  30. tigrbl-0.3.17/tigrbl/hook/exceptions.py +3 -0
  31. tigrbl-0.3.17/tigrbl/hook/types.py +10 -0
  32. tigrbl-0.3.17/tigrbl/op/__init__.py +22 -0
  33. tigrbl-0.3.17/tigrbl/op/canonical.py +3 -0
  34. tigrbl-0.3.17/tigrbl/op/collect.py +3 -0
  35. tigrbl-0.3.17/tigrbl/op/types.py +3 -0
  36. tigrbl-0.3.17/tigrbl/orm/__init__.py +32 -0
  37. tigrbl-0.3.17/tigrbl/requests.py +5 -0
  38. tigrbl-0.3.17/tigrbl/rest/__init__.py +15 -0
  39. tigrbl-0.3.17/tigrbl/schema/__init__.py +3 -0
  40. tigrbl-0.3.17/tigrbl/schema/builder/__init__.py +3 -0
  41. tigrbl-0.3.17/tigrbl/schema/builder/build_schema.py +3 -0
  42. tigrbl-0.3.17/tigrbl/schema/builder/cache.py +3 -0
  43. tigrbl-0.3.17/tigrbl/schema/builder/extras.py +3 -0
  44. tigrbl-0.3.17/tigrbl/schema/builder/helpers.py +3 -0
  45. tigrbl-0.3.17/tigrbl/schema/builder/list_params.py +3 -0
  46. tigrbl-0.3.17/tigrbl/schema/builder/strip_parent_fields.py +3 -0
  47. tigrbl-0.3.17/tigrbl/schema/utils.py +9 -0
  48. tigrbl-0.3.17/tigrbl/security/__init__.py +3 -0
  49. tigrbl-0.3.17/tigrbl/security/dependencies.py +3 -0
  50. tigrbl-0.3.17/tigrbl/shortcuts/__init__.py +31 -0
  51. tigrbl-0.3.17/tigrbl/shortcuts/app.py +3 -0
  52. tigrbl-0.3.16.dev4/tigrbl/column/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/column.py +5 -5
  53. tigrbl-0.3.16.dev4/tigrbl/engine/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/engine.py +19 -17
  54. tigrbl-0.3.16.dev4/tigrbl/hook/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/hook.py +3 -3
  55. tigrbl-0.3.17/tigrbl/shortcuts/op.py +14 -0
  56. tigrbl-0.3.16.dev4/tigrbl/responses/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/responses.py +7 -9
  57. tigrbl-0.3.17/tigrbl/shortcuts/router.py +42 -0
  58. tigrbl-0.3.16.dev4/tigrbl/schema/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/schema.py +3 -3
  59. tigrbl-0.3.16.dev4/tigrbl/table/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/table.py +2 -2
  60. tigrbl-0.3.17/tigrbl/specs.py +38 -0
  61. tigrbl-0.3.17/tigrbl/system/__init__.py +3 -0
  62. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/diagnostics/__init__.py +2 -0
  63. tigrbl-0.3.17/tigrbl/system/diagnostics/healthz.py +69 -0
  64. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/diagnostics/hookz.py +7 -7
  65. tigrbl-0.3.17/tigrbl/system/diagnostics/kernelz.py +57 -0
  66. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/diagnostics/methodz.py +3 -3
  67. tigrbl-0.3.17/tigrbl/system/diagnostics/router.py +208 -0
  68. tigrbl-0.3.17/tigrbl/system/diagnostics/utils.py +63 -0
  69. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/lens.py +2 -2
  70. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/helpers.py +29 -10
  71. tigrbl-0.3.17/tigrbl/system/docs/openapi/mount.py +85 -0
  72. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/schema.py +28 -12
  73. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/openrpc.py +98 -35
  74. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/swagger.py +15 -9
  75. tigrbl-0.3.17/tigrbl/system/favicon/__init__.py +138 -0
  76. tigrbl-0.3.17/tigrbl/transport/__init__.py +1 -0
  77. tigrbl-0.3.17/tigrbl/transport/jsonrpc/__init__.py +1 -0
  78. tigrbl-0.3.17/tigrbl/transport/jsonrpc/helpers.py +1 -0
  79. tigrbl-0.3.17/tigrbl/transport/jsonrpc/models.py +1 -0
  80. tigrbl-0.3.17/tigrbl/transport/rest/__init__.py +1 -0
  81. tigrbl-0.3.17/tigrbl/transport/rest/aggregator.py +1 -0
  82. tigrbl-0.3.17/tigrbl/types/__init__.py +35 -0
  83. tigrbl-0.3.17/tigrbl/utils/__init__.py +3 -0
  84. tigrbl-0.3.16.dev4/tigrbl/schema/get_schema.py → tigrbl-0.3.17/tigrbl/utils/schema.py +1 -1
  85. tigrbl-0.3.17/tigrbl/vendor/__init__.py +21 -0
  86. tigrbl-0.3.17/tigrbl/vendor/jinja.py +34 -0
  87. {tigrbl-0.3.16.dev4/tigrbl/deps → tigrbl-0.3.17/tigrbl/vendor}/sqlalchemy.py +2 -0
  88. tigrbl-0.3.16.dev4/tigrbl/__init__.py +0 -150
  89. tigrbl-0.3.16.dev4/tigrbl/api/__init__.py +0 -19
  90. tigrbl-0.3.16.dev4/tigrbl/api/_api.py +0 -150
  91. tigrbl-0.3.16.dev4/tigrbl/api/_route.py +0 -119
  92. tigrbl-0.3.16.dev4/tigrbl/api/_router.py +0 -490
  93. tigrbl-0.3.16.dev4/tigrbl/api/_routing.py +0 -143
  94. tigrbl-0.3.16.dev4/tigrbl/api/api_spec.py +0 -30
  95. tigrbl-0.3.16.dev4/tigrbl/api/mro_collect.py +0 -43
  96. tigrbl-0.3.16.dev4/tigrbl/api/resolve.py +0 -151
  97. tigrbl-0.3.16.dev4/tigrbl/api/shortcuts.py +0 -56
  98. tigrbl-0.3.16.dev4/tigrbl/api/tigrbl_api.py +0 -361
  99. tigrbl-0.3.16.dev4/tigrbl/app/_app.py +0 -119
  100. tigrbl-0.3.16.dev4/tigrbl/app/_model_registry.py +0 -41
  101. tigrbl-0.3.16.dev4/tigrbl/app/app_spec.py +0 -42
  102. tigrbl-0.3.16.dev4/tigrbl/app/mro_collect.py +0 -106
  103. tigrbl-0.3.16.dev4/tigrbl/app/shortcuts.py +0 -65
  104. tigrbl-0.3.16.dev4/tigrbl/app/tigrbl_app.py +0 -594
  105. tigrbl-0.3.16.dev4/tigrbl/app/transport.py +0 -154
  106. tigrbl-0.3.16.dev4/tigrbl/bindings/__init__.py +0 -73
  107. tigrbl-0.3.16.dev4/tigrbl/bindings/api/__init__.py +0 -11
  108. tigrbl-0.3.16.dev4/tigrbl/bindings/api/common.py +0 -108
  109. tigrbl-0.3.16.dev4/tigrbl/bindings/api/include.py +0 -273
  110. tigrbl-0.3.16.dev4/tigrbl/bindings/api/resource_proxy.py +0 -148
  111. tigrbl-0.3.16.dev4/tigrbl/bindings/api/rpc.py +0 -110
  112. tigrbl-0.3.16.dev4/tigrbl/bindings/columns.py +0 -49
  113. tigrbl-0.3.16.dev4/tigrbl/bindings/handlers/__init__.py +0 -10
  114. tigrbl-0.3.16.dev4/tigrbl/bindings/handlers/builder.py +0 -118
  115. tigrbl-0.3.16.dev4/tigrbl/bindings/handlers/ctx.py +0 -73
  116. tigrbl-0.3.16.dev4/tigrbl/bindings/handlers/identifiers.py +0 -227
  117. tigrbl-0.3.16.dev4/tigrbl/bindings/handlers/namespaces.py +0 -50
  118. tigrbl-0.3.16.dev4/tigrbl/bindings/handlers/steps.py +0 -275
  119. tigrbl-0.3.16.dev4/tigrbl/bindings/hooks.py +0 -311
  120. tigrbl-0.3.16.dev4/tigrbl/bindings/model.py +0 -194
  121. tigrbl-0.3.16.dev4/tigrbl/bindings/model_helpers.py +0 -139
  122. tigrbl-0.3.16.dev4/tigrbl/bindings/model_registry.py +0 -77
  123. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/__init__.py +0 -7
  124. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/attach.py +0 -34
  125. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/collection.py +0 -360
  126. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/common.py +0 -134
  127. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/fastapi.py +0 -52
  128. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/helpers.py +0 -119
  129. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/io.py +0 -320
  130. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/io_headers.py +0 -49
  131. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/member.py +0 -386
  132. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/router.py +0 -342
  133. tigrbl-0.3.16.dev4/tigrbl/bindings/rest/routing.py +0 -160
  134. tigrbl-0.3.16.dev4/tigrbl/bindings/rpc.py +0 -445
  135. tigrbl-0.3.16.dev4/tigrbl/bindings/schemas/__init__.py +0 -10
  136. tigrbl-0.3.16.dev4/tigrbl/bindings/schemas/builder.py +0 -347
  137. tigrbl-0.3.16.dev4/tigrbl/bindings/schemas/defaults.py +0 -259
  138. tigrbl-0.3.16.dev4/tigrbl/bindings/schemas/utils.py +0 -192
  139. tigrbl-0.3.16.dev4/tigrbl/column/__init__.py +0 -75
  140. tigrbl-0.3.16.dev4/tigrbl/column/_column.py +0 -96
  141. tigrbl-0.3.16.dev4/tigrbl/column/column_spec.py +0 -40
  142. tigrbl-0.3.16.dev4/tigrbl/column/field_spec.py +0 -32
  143. tigrbl-0.3.16.dev4/tigrbl/column/infer/__init__.py +0 -25
  144. tigrbl-0.3.16.dev4/tigrbl/column/infer/core.py +0 -92
  145. tigrbl-0.3.16.dev4/tigrbl/column/infer/jsonhints.py +0 -44
  146. tigrbl-0.3.16.dev4/tigrbl/column/infer/planning.py +0 -133
  147. tigrbl-0.3.16.dev4/tigrbl/column/infer/types.py +0 -102
  148. tigrbl-0.3.16.dev4/tigrbl/column/infer/utils.py +0 -59
  149. tigrbl-0.3.16.dev4/tigrbl/column/io_spec.py +0 -136
  150. tigrbl-0.3.16.dev4/tigrbl/column/mro_collect.py +0 -59
  151. tigrbl-0.3.16.dev4/tigrbl/column/storage_spec.py +0 -78
  152. tigrbl-0.3.16.dev4/tigrbl/config/__init__.py +0 -19
  153. tigrbl-0.3.16.dev4/tigrbl/config/constants.py +0 -224
  154. tigrbl-0.3.16.dev4/tigrbl/config/defaults.py +0 -29
  155. tigrbl-0.3.16.dev4/tigrbl/config/resolver.py +0 -295
  156. tigrbl-0.3.16.dev4/tigrbl/core/__init__.py +0 -47
  157. tigrbl-0.3.16.dev4/tigrbl/core/crud/__init__.py +0 -36
  158. tigrbl-0.3.16.dev4/tigrbl/core/crud/bulk.py +0 -167
  159. tigrbl-0.3.16.dev4/tigrbl/core/crud/helpers/__init__.py +0 -76
  160. tigrbl-0.3.16.dev4/tigrbl/core/crud/helpers/db.py +0 -91
  161. tigrbl-0.3.16.dev4/tigrbl/core/crud/helpers/enum.py +0 -85
  162. tigrbl-0.3.16.dev4/tigrbl/core/crud/helpers/filters.py +0 -161
  163. tigrbl-0.3.16.dev4/tigrbl/core/crud/helpers/model.py +0 -131
  164. tigrbl-0.3.16.dev4/tigrbl/core/crud/helpers/normalize.py +0 -98
  165. tigrbl-0.3.16.dev4/tigrbl/core/crud/ops.py +0 -234
  166. tigrbl-0.3.16.dev4/tigrbl/core/crud/params.py +0 -50
  167. tigrbl-0.3.16.dev4/tigrbl/core/resolver.py +0 -81
  168. tigrbl-0.3.16.dev4/tigrbl/ddl/__init__.py +0 -385
  169. tigrbl-0.3.16.dev4/tigrbl/decorators.py +0 -17
  170. tigrbl-0.3.16.dev4/tigrbl/deps/__init__.py +0 -25
  171. tigrbl-0.3.16.dev4/tigrbl/deps/jinja.py +0 -27
  172. tigrbl-0.3.16.dev4/tigrbl/engine/__init__.py +0 -47
  173. tigrbl-0.3.16.dev4/tigrbl/engine/_engine.py +0 -144
  174. tigrbl-0.3.16.dev4/tigrbl/engine/bind.py +0 -33
  175. tigrbl-0.3.16.dev4/tigrbl/engine/builders.py +0 -244
  176. tigrbl-0.3.16.dev4/tigrbl/engine/capabilities.py +0 -29
  177. tigrbl-0.3.16.dev4/tigrbl/engine/collect.py +0 -111
  178. tigrbl-0.3.16.dev4/tigrbl/engine/decorators.py +0 -110
  179. tigrbl-0.3.16.dev4/tigrbl/engine/engine_spec.py +0 -358
  180. tigrbl-0.3.16.dev4/tigrbl/engine/plugins.py +0 -52
  181. tigrbl-0.3.16.dev4/tigrbl/engine/registry.py +0 -36
  182. tigrbl-0.3.16.dev4/tigrbl/engine/resolver.py +0 -356
  183. tigrbl-0.3.16.dev4/tigrbl/headers/__init__.py +0 -3
  184. tigrbl-0.3.16.dev4/tigrbl/headers/_header.py +0 -142
  185. tigrbl-0.3.16.dev4/tigrbl/hook/__init__.py +0 -23
  186. tigrbl-0.3.16.dev4/tigrbl/hook/_hook.py +0 -22
  187. tigrbl-0.3.16.dev4/tigrbl/hook/decorators.py +0 -35
  188. tigrbl-0.3.16.dev4/tigrbl/hook/exceptions.py +0 -18
  189. tigrbl-0.3.16.dev4/tigrbl/hook/hook_spec.py +0 -24
  190. tigrbl-0.3.16.dev4/tigrbl/hook/mro_collect.py +0 -98
  191. tigrbl-0.3.16.dev4/tigrbl/hook/types.py +0 -76
  192. tigrbl-0.3.16.dev4/tigrbl/middlewares/__init__.py +0 -37
  193. tigrbl-0.3.16.dev4/tigrbl/middlewares/base.py +0 -142
  194. tigrbl-0.3.16.dev4/tigrbl/middlewares/cors.py +0 -167
  195. tigrbl-0.3.16.dev4/tigrbl/middlewares/decorators.py +0 -32
  196. tigrbl-0.3.16.dev4/tigrbl/middlewares/middleware.py +0 -37
  197. tigrbl-0.3.16.dev4/tigrbl/middlewares/spec.py +0 -28
  198. tigrbl-0.3.16.dev4/tigrbl/op/__init__.py +0 -50
  199. tigrbl-0.3.16.dev4/tigrbl/op/_op.py +0 -31
  200. tigrbl-0.3.16.dev4/tigrbl/op/canonical.py +0 -31
  201. tigrbl-0.3.16.dev4/tigrbl/op/collect.py +0 -11
  202. tigrbl-0.3.16.dev4/tigrbl/op/decorators.py +0 -238
  203. tigrbl-0.3.16.dev4/tigrbl/op/model_registry.py +0 -301
  204. tigrbl-0.3.16.dev4/tigrbl/op/mro_collect.py +0 -99
  205. tigrbl-0.3.16.dev4/tigrbl/op/resolver.py +0 -216
  206. tigrbl-0.3.16.dev4/tigrbl/op/types.py +0 -136
  207. tigrbl-0.3.16.dev4/tigrbl/orm/__init__.py +0 -1
  208. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/_RowBound.py +0 -83
  209. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/__init__.py +0 -95
  210. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/bootstrappable.py +0 -113
  211. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/bound.py +0 -47
  212. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/edges.py +0 -40
  213. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/fields.py +0 -165
  214. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/hierarchy.py +0 -54
  215. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/key_digest.py +0 -44
  216. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/lifecycle.py +0 -115
  217. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/locks.py +0 -51
  218. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/markers.py +0 -16
  219. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/operations.py +0 -57
  220. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/ownable.py +0 -337
  221. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/principals.py +0 -98
  222. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/tenant_bound.py +0 -301
  223. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/upsertable.py +0 -118
  224. tigrbl-0.3.16.dev4/tigrbl/orm/mixins/utils.py +0 -49
  225. tigrbl-0.3.16.dev4/tigrbl/orm/tables/__init__.py +0 -72
  226. tigrbl-0.3.16.dev4/tigrbl/orm/tables/_base.py +0 -8
  227. tigrbl-0.3.16.dev4/tigrbl/orm/tables/audit.py +0 -56
  228. tigrbl-0.3.16.dev4/tigrbl/orm/tables/client.py +0 -25
  229. tigrbl-0.3.16.dev4/tigrbl/orm/tables/group.py +0 -29
  230. tigrbl-0.3.16.dev4/tigrbl/orm/tables/org.py +0 -30
  231. tigrbl-0.3.16.dev4/tigrbl/orm/tables/rbac.py +0 -76
  232. tigrbl-0.3.16.dev4/tigrbl/orm/tables/status.py +0 -106
  233. tigrbl-0.3.16.dev4/tigrbl/orm/tables/tenant.py +0 -22
  234. tigrbl-0.3.16.dev4/tigrbl/orm/tables/user.py +0 -39
  235. tigrbl-0.3.16.dev4/tigrbl/requests/__init__.py +0 -5
  236. tigrbl-0.3.16.dev4/tigrbl/requests/_request.py +0 -251
  237. tigrbl-0.3.16.dev4/tigrbl/requests/adapters.py +0 -68
  238. tigrbl-0.3.16.dev4/tigrbl/responses/README.md +0 -34
  239. tigrbl-0.3.16.dev4/tigrbl/responses/__init__.py +0 -52
  240. tigrbl-0.3.16.dev4/tigrbl/responses/_response.py +0 -278
  241. tigrbl-0.3.16.dev4/tigrbl/responses/_transport.py +0 -32
  242. tigrbl-0.3.16.dev4/tigrbl/responses/bind.py +0 -12
  243. tigrbl-0.3.16.dev4/tigrbl/responses/decorators.py +0 -45
  244. tigrbl-0.3.16.dev4/tigrbl/responses/resolver.py +0 -83
  245. tigrbl-0.3.16.dev4/tigrbl/responses/types.py +0 -49
  246. tigrbl-0.3.16.dev4/tigrbl/rest/__init__.py +0 -27
  247. tigrbl-0.3.16.dev4/tigrbl/runtime/README.md +0 -129
  248. tigrbl-0.3.16.dev4/tigrbl/runtime/__init__.py +0 -20
  249. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/__init__.py +0 -101
  250. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/emit/__init__.py +0 -42
  251. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/emit/paired_post.py +0 -158
  252. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/emit/paired_pre.py +0 -106
  253. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -120
  254. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/out/__init__.py +0 -38
  255. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/out/masking.py +0 -135
  256. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/refresh/__init__.py +0 -38
  257. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/refresh/demand.py +0 -130
  258. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/resolve/__init__.py +0 -40
  259. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/resolve/assemble.py +0 -167
  260. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/resolve/paired_gen.py +0 -147
  261. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/__init__.py +0 -19
  262. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/headers_from_payload.py +0 -57
  263. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/negotiate.py +0 -30
  264. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/negotiation.py +0 -43
  265. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/render.py +0 -36
  266. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/renderer.py +0 -117
  267. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/template.py +0 -44
  268. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/response/templates.py +0 -88
  269. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/schema/__init__.py +0 -40
  270. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/schema/collect_in.py +0 -21
  271. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/schema/collect_out.py +0 -21
  272. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/storage/__init__.py +0 -38
  273. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/storage/to_stored.py +0 -167
  274. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/wire/__init__.py +0 -45
  275. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/wire/build_in.py +0 -166
  276. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/wire/build_out.py +0 -87
  277. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/wire/dump.py +0 -206
  278. tigrbl-0.3.16.dev4/tigrbl/runtime/atoms/wire/validate_in.py +0 -228
  279. tigrbl-0.3.16.dev4/tigrbl/runtime/context.py +0 -206
  280. tigrbl-0.3.16.dev4/tigrbl/runtime/events.py +0 -209
  281. tigrbl-0.3.16.dev4/tigrbl/runtime/executor/__init__.py +0 -6
  282. tigrbl-0.3.16.dev4/tigrbl/runtime/executor/guards.py +0 -132
  283. tigrbl-0.3.16.dev4/tigrbl/runtime/executor/helpers.py +0 -88
  284. tigrbl-0.3.16.dev4/tigrbl/runtime/executor/invoke.py +0 -150
  285. tigrbl-0.3.16.dev4/tigrbl/runtime/executor/types.py +0 -76
  286. tigrbl-0.3.16.dev4/tigrbl/runtime/kernel.py +0 -644
  287. tigrbl-0.3.16.dev4/tigrbl/runtime/labels.py +0 -353
  288. tigrbl-0.3.16.dev4/tigrbl/runtime/opview.py +0 -89
  289. tigrbl-0.3.16.dev4/tigrbl/runtime/ordering.py +0 -256
  290. tigrbl-0.3.16.dev4/tigrbl/runtime/status/__init__.py +0 -63
  291. tigrbl-0.3.16.dev4/tigrbl/runtime/status/converters.py +0 -213
  292. tigrbl-0.3.16.dev4/tigrbl/runtime/status/exceptions.py +0 -149
  293. tigrbl-0.3.16.dev4/tigrbl/runtime/status/mappings.py +0 -94
  294. tigrbl-0.3.16.dev4/tigrbl/runtime/status/utils.py +0 -114
  295. tigrbl-0.3.16.dev4/tigrbl/runtime/system.py +0 -279
  296. tigrbl-0.3.16.dev4/tigrbl/runtime/trace.py +0 -330
  297. tigrbl-0.3.16.dev4/tigrbl/schema/__init__.py +0 -38
  298. tigrbl-0.3.16.dev4/tigrbl/schema/_schema.py +0 -27
  299. tigrbl-0.3.16.dev4/tigrbl/schema/builder/__init__.py +0 -17
  300. tigrbl-0.3.16.dev4/tigrbl/schema/builder/build_schema.py +0 -215
  301. tigrbl-0.3.16.dev4/tigrbl/schema/builder/cache.py +0 -24
  302. tigrbl-0.3.16.dev4/tigrbl/schema/builder/compat.py +0 -16
  303. tigrbl-0.3.16.dev4/tigrbl/schema/builder/extras.py +0 -85
  304. tigrbl-0.3.16.dev4/tigrbl/schema/builder/helpers.py +0 -51
  305. tigrbl-0.3.16.dev4/tigrbl/schema/builder/list_params.py +0 -117
  306. tigrbl-0.3.16.dev4/tigrbl/schema/builder/strip_parent_fields.py +0 -70
  307. tigrbl-0.3.16.dev4/tigrbl/schema/collect.py +0 -78
  308. tigrbl-0.3.16.dev4/tigrbl/schema/decorators.py +0 -67
  309. tigrbl-0.3.16.dev4/tigrbl/schema/schema_spec.py +0 -20
  310. tigrbl-0.3.16.dev4/tigrbl/schema/types.py +0 -34
  311. tigrbl-0.3.16.dev4/tigrbl/schema/utils.py +0 -142
  312. tigrbl-0.3.16.dev4/tigrbl/security/__init__.py +0 -63
  313. tigrbl-0.3.16.dev4/tigrbl/security/dependencies.py +0 -21
  314. tigrbl-0.3.16.dev4/tigrbl/security/schemes/__init__.py +0 -19
  315. tigrbl-0.3.16.dev4/tigrbl/security/schemes/_base.py +0 -69
  316. tigrbl-0.3.16.dev4/tigrbl/security/schemes/api_key.py +0 -57
  317. tigrbl-0.3.16.dev4/tigrbl/security/schemes/http_bearer.py +0 -74
  318. tigrbl-0.3.16.dev4/tigrbl/security/schemes/mutual_tls.py +0 -27
  319. tigrbl-0.3.16.dev4/tigrbl/security/schemes/oauth2.py +0 -28
  320. tigrbl-0.3.16.dev4/tigrbl/security/schemes/openid_connect.py +0 -31
  321. tigrbl-0.3.16.dev4/tigrbl/session/README.md +0 -14
  322. tigrbl-0.3.16.dev4/tigrbl/session/__init__.py +0 -28
  323. tigrbl-0.3.16.dev4/tigrbl/session/abc.py +0 -76
  324. tigrbl-0.3.16.dev4/tigrbl/session/base.py +0 -151
  325. tigrbl-0.3.16.dev4/tigrbl/session/decorators.py +0 -43
  326. tigrbl-0.3.16.dev4/tigrbl/session/default.py +0 -118
  327. tigrbl-0.3.16.dev4/tigrbl/session/shortcuts.py +0 -50
  328. tigrbl-0.3.16.dev4/tigrbl/session/spec.py +0 -112
  329. tigrbl-0.3.16.dev4/tigrbl/shortcuts.py +0 -22
  330. tigrbl-0.3.16.dev4/tigrbl/specs.py +0 -44
  331. tigrbl-0.3.16.dev4/tigrbl/system/__init__.py +0 -98
  332. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/compat.py +0 -31
  333. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/healthz.py +0 -41
  334. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/kernelz.py +0 -20
  335. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/router.py +0 -73
  336. tigrbl-0.3.16.dev4/tigrbl/system/diagnostics/utils.py +0 -43
  337. tigrbl-0.3.16.dev4/tigrbl/system/docs/openapi/mount.py +0 -30
  338. tigrbl-0.3.16.dev4/tigrbl/system/favicon/__init__.py +0 -102
  339. tigrbl-0.3.16.dev4/tigrbl/table/__init__.py +0 -9
  340. tigrbl-0.3.16.dev4/tigrbl/table/_base.py +0 -439
  341. tigrbl-0.3.16.dev4/tigrbl/table/_table.py +0 -54
  342. tigrbl-0.3.16.dev4/tigrbl/table/mro_collect.py +0 -86
  343. tigrbl-0.3.16.dev4/tigrbl/table/table_spec.py +0 -28
  344. tigrbl-0.3.16.dev4/tigrbl/transport/__init__.py +0 -93
  345. tigrbl-0.3.16.dev4/tigrbl/transport/background.py +0 -29
  346. tigrbl-0.3.16.dev4/tigrbl/transport/httpx.py +0 -25
  347. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/__init__.py +0 -23
  348. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/dispatcher.py +0 -460
  349. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/helpers.py +0 -119
  350. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/models.py +0 -41
  351. tigrbl-0.3.16.dev4/tigrbl/transport/jsonrpc/openrpc.py +0 -3
  352. tigrbl-0.3.16.dev4/tigrbl/transport/rest/__init__.py +0 -34
  353. tigrbl-0.3.16.dev4/tigrbl/transport/rest/aggregator.py +0 -132
  354. tigrbl-0.3.16.dev4/tigrbl/transport/rest/decorators.py +0 -30
  355. tigrbl-0.3.16.dev4/tigrbl/types/__init__.py +0 -165
  356. tigrbl-0.3.16.dev4/tigrbl/types/allow_anon_provider.py +0 -19
  357. tigrbl-0.3.16.dev4/tigrbl/types/authn_abc.py +0 -31
  358. tigrbl-0.3.16.dev4/tigrbl/types/nested_path_provider.py +0 -22
  359. tigrbl-0.3.16.dev4/tigrbl/types/op.py +0 -35
  360. tigrbl-0.3.16.dev4/tigrbl/types/op_config_provider.py +0 -17
  361. tigrbl-0.3.16.dev4/tigrbl/types/op_verb_alias_provider.py +0 -33
  362. tigrbl-0.3.16.dev4/tigrbl/types/request_extras_provider.py +0 -22
  363. tigrbl-0.3.16.dev4/tigrbl/types/response_extras_provider.py +0 -22
  364. tigrbl-0.3.16.dev4/tigrbl/types/table_config_provider.py +0 -13
  365. tigrbl-0.3.16.dev4/tigrbl/types/uuid.py +0 -55
  366. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/LICENSE +0 -0
  367. /tigrbl-0.3.16.dev4/tigrbl/column/README.md → /tigrbl-0.3.17/tigrbl/docs/column_specs.md +0 -0
  368. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/docs/verbosity.md +0 -0
  369. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/engine/docs/PLUGINS.md +0 -0
  370. {tigrbl-0.3.16.dev4/tigrbl/app → tigrbl-0.3.17/tigrbl/middlewares}/__init__.py +0 -0
  371. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/middlewares/compose.py +0 -0
  372. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/__init__.py +0 -0
  373. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/__init__.py +0 -0
  374. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/metadata.py +0 -0
  375. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/favicon/assets/favicon.svg +0 -0
  376. {tigrbl-0.3.16.dev4 → tigrbl-0.3.17}/tigrbl/system/uvicorn.py +0 -0
  377. {tigrbl-0.3.16.dev4/tigrbl/deps → tigrbl-0.3.17/tigrbl/vendor}/pydantic.py +0 -0
@@ -1,10 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrbl
3
- Version: 0.3.16.dev4
3
+ Version: 0.3.17
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,15 @@ 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-atoms
30
+ Requires-Dist: tigrbl-base
31
+ Requires-Dist: tigrbl-canon
32
+ Requires-Dist: tigrbl-concrete
33
+ Requires-Dist: tigrbl-core
34
+ Requires-Dist: tigrbl-kernel
35
+ Requires-Dist: tigrbl-ops-oltp
36
+ Requires-Dist: tigrbl-orm
37
+ Requires-Dist: tigrbl-runtime
30
38
  Requires-Dist: tigrbl-tests ; extra == "tests"
31
39
  Requires-Dist: uvicorn
32
40
  Description-Content-Type: text/markdown
@@ -59,11 +67,28 @@ A high-leverage ASGI meta-framework that turns plain SQLAlchemy models into a fu
59
67
  - 🧩 Pluggable engine and provider abstractions
60
68
  - 🚀 Built as an ASGI-native framework with Pydantic-powered schema generation
61
69
 
70
+ ## Split Package Module Locations 🗂️
71
+
72
+ These surfaces are now maintained in the split Tigrbl packages (with `tigrbl.*`
73
+ kept as compatibility imports):
74
+
75
+ - `tigrbl.ddl` → `tigrbl_concrete.ddl`
76
+ - `tigrbl.system` → `tigrbl_concrete.system`
77
+ - `tigrbl.op` → `tigrbl_core.op`
78
+ - `tigrbl.config` → `tigrbl_core.config`
79
+ - `tigrbl.schema` → `tigrbl_core.schema`
80
+ - `tigrbl.security` → `tigrbl_concrete.security`
81
+
82
+ ## Runtime-owned Routing Contract
83
+
84
+ For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
85
+ [`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
86
+
62
87
  ## Terminology 📚
63
88
 
64
89
  - **Tenant** 🏢 – a namespace used to group related resources.
65
90
  - **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.
91
+ - **Resource** 📦 – a logical collection of data or functionality exposed by the router.
67
92
  - **Engine** ⚙️ – the database connection and transaction manager backing a resource.
68
93
  - **Model / Table** 🧱 – the ORM or database representation of a resource's records.
69
94
  - **Column** 📏 – a field on a model that maps to a table column.
@@ -223,7 +248,7 @@ Operation Handler
223
248
  v
224
249
  JSON-RPC Response
225
250
 
226
- ````
251
+ ```
227
252
 
228
253
  ## Hooks 🪝
229
254
 
@@ -240,7 +265,7 @@ class Item(Base):
240
265
  async def validate(cls, ctx):
241
266
  if ctx["request"].payload.get("name") == "bad":
242
267
  raise ValueError("invalid name")
243
- ````
268
+ ```
244
269
 
245
270
  The function runs during the `PRE_HANDLER` phase of `create`. The
246
271
  `ctx` mapping provides request and response objects, a database session,
@@ -310,7 +335,7 @@ increasing order of precedence:
310
335
 
311
336
  1. defaults
312
337
  2. app config
313
- 3. API config
338
+ 3. router config
314
339
  4. table config
315
340
  5. column config
316
341
  6. operation spec
@@ -318,7 +343,7 @@ increasing order of precedence:
318
343
 
319
344
  Later entries override earlier ones, so request overrides win over all other
320
345
  sources. This can be summarized as
321
- `overrides > opspec > colspecs > tabspec > apispec > appspec > defaults`.
346
+ `overrides > opspec > colspecs > tabspec > routerspec > appspec > defaults`.
322
347
 
323
348
  ### Schema Config Precedence 🧬
324
349
 
@@ -327,7 +352,7 @@ Later layers override earlier ones, with the precedence order:
327
352
 
328
353
  1. defaults (lowest)
329
354
  2. app configuration
330
- 3. API configuration
355
+ 3. router configuration
331
356
  4. table configuration
332
357
  5. column-level `cfg` values
333
358
  6. op-specific `cfg`
@@ -367,7 +392,7 @@ This hierarchy ensures that the most specific settings always win. 🥇
367
392
  When assembling values for persistence, defaults are resolved in this order:
368
393
 
369
394
  1. Client-supplied value
370
- 2. API `default_factory`
395
+ 2. router `default_factory`
371
396
  3. ORM default
372
397
  4. Database `server_default`
373
398
  5. HTTP 422 if the field is required and still missing
@@ -408,15 +433,15 @@ approved usage. These are not optional—adhering to them keeps the runtime
408
433
  predictable, preserves hook lifecycle guarantees, and ensures schema
409
434
  consistency across REST and RPC surfaces.
410
435
 
411
- ### 1) Never import SQLAlchemy directly or bypass Tigrbl APIs
436
+ ### 1) Never import SQLAlchemy directly or bypass Tigrbl routers
412
437
 
413
438
  **Why:** Direct imports bypass Tigrbl's compatibility layer and make it
414
439
  harder to evolve internal dependencies. Use the Tigrbl exports so your
415
- code stays aligned with the framework’s versioned ASGI API.
440
+ code stays aligned with the framework’s versioned ASGI router.
416
441
 
417
442
  ✅ **Preferred:**
418
443
  ```python
419
- from tigrbl import Base, TigrblApp, TigrblApi
444
+ from tigrbl import Base, TigrblApp, TigrblRouter
420
445
  from tigrbl.types import Integer, String, Mapped
421
446
  from tigrbl.types import Depends, HTTPException, Request
422
447
  ```
@@ -452,12 +477,12 @@ item_id = UUID(str(payload["id"]))
452
477
  ### 3) Use engine specs for persistence, not ad-hoc engines
453
478
 
454
479
  **Why:** Engine specs make persistence declarative, testable, and
455
- compatible with engine resolution across app, API, table, and op scopes.
480
+ compatible with engine resolution across app, router, table, and op scopes.
456
481
 
457
482
  ✅ **Preferred:**
458
483
  ```python
459
484
  from tigrbl.engine.shortcuts import engine_spec
460
- from tigrbl.engine.decorators import engine_ctx
485
+ from tigrbl.decorators.engine import engine_ctx
461
486
 
462
487
  spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
463
488
 
@@ -588,9 +613,9 @@ async def rotate_keys(payload, *, ctx):
588
613
 
589
614
  🚫 **Avoid:**
590
615
  ```python
591
- from some_framework import APIRouter
616
+ from some_framework import routerRouter
592
617
 
593
- router = APIRouter()
618
+ router = routerRouter()
594
619
 
595
620
  @router.post("/keys/rotate")
596
621
  async def rotate_keys(payload):
@@ -606,7 +631,7 @@ resolved deterministically by the runtime.
606
631
  ✅ **Preferred:**
607
632
  ```python
608
633
  from tigrbl import hook_ctx, op_ctx, schema_ctx
609
- from tigrbl.engine.decorators import engine_ctx
634
+ from tigrbl.decorators.engine import engine_ctx
610
635
 
611
636
  @engine_ctx(kind="sqlite", mode="memory")
612
637
  class Item(Table):
@@ -629,7 +654,7 @@ async def validate(ctx):
629
654
 
630
655
  ```python
631
656
  from tigrbl.engine.shortcuts import engine_spec, prov
632
- from tigrbl.engine._engine import Engine, Provider
657
+ from tigrbl._concrete._engine import Engine, Provider
633
658
 
634
659
  # Build an EngineSpec from a DSN string
635
660
  spec = engine_spec("sqlite://:memory:")
@@ -656,7 +681,7 @@ provider_pg = Provider(spec_pg)
656
681
  `engine_ctx` binds database configuration to different layers. It accepts a
657
682
  DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
658
683
  resolver chooses the most specific binding in the order
659
- `op > table > api > app`.
684
+ `op > table > router > app`.
660
685
 
661
686
  #### Engine precedence 🥇
662
687
 
@@ -664,8 +689,8 @@ When engine contexts are declared at multiple scopes, Tigrbl resolves them
664
689
  with strict precedence:
665
690
 
666
691
  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.
692
+ 2. **Table/Model level** – definitions on a model or table override router and app defaults.
693
+ 3. **router level** – bindings on the router class apply when no model-specific context exists.
669
694
  4. **App level** – the default engine supplied to the application is used last.
670
695
 
671
696
  This ordering ensures that the most specific engine context always wins.
@@ -679,7 +704,7 @@ from tigrbl.engine.shortcuts import prov, engine
679
704
  app = SimpleNamespace(db=prov(kind="sqlite", mode="memory"))
680
705
  alt = SimpleNamespace(db=engine(kind="sqlite", mode="memory"))
681
706
 
682
- class API:
707
+ class router:
683
708
  db = {"kind": "sqlite", "memory": True}
684
709
 
685
710
  class Item:
@@ -700,7 +725,7 @@ create.__tigrbl_engine_ctx__ = {
700
725
  #### Decorative bindings 🎛️
701
726
 
702
727
  ```python
703
- from tigrbl.engine.decorators import engine_ctx
728
+ from tigrbl.decorators.engine import engine_ctx
704
729
  from tigrbl.engine.shortcuts import prov, engine
705
730
 
706
731
  @engine_ctx(prov(kind="sqlite", mode="memory"))
@@ -708,7 +733,7 @@ class App:
708
733
  pass
709
734
 
710
735
  @engine_ctx(engine(kind="sqlite", mode="memory"))
711
- class DecoratedAPI:
736
+ class Decoratedrouter:
712
737
  pass
713
738
 
714
739
  @engine_ctx(kind="sqlite", mode="memory")
@@ -735,7 +760,7 @@ The bridge examples cover two integration styles:
735
760
  * A Swarmauri `Factory` invocation during `PRE_HANDLER` via `hook_ctx`.
736
761
  * Tigrbl default verbs (`create`, `get`, `list`, `update`, `delete`) plus a custom op.
737
762
  * `engine_ctx` at model and operation scope.
738
- * Generated OpenAPI and OpenRPC documents mounted from the same model bindings.
763
+ * Generated Openrouter and OpenRPC documents mounted from the same model bindings.
739
764
 
740
765
  * **Smoother direct-model flow** (`swarmauri_tigrbl_bridge_smooth.py`)
741
766
  * Uses hooks + default `create` persistence to normalize Swarmauri payloads.
@@ -26,11 +26,28 @@ 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
+ ## Split Package Module Locations 🗂️
30
+
31
+ These surfaces are now maintained in the split Tigrbl packages (with `tigrbl.*`
32
+ kept as compatibility imports):
33
+
34
+ - `tigrbl.ddl` → `tigrbl_concrete.ddl`
35
+ - `tigrbl.system` → `tigrbl_concrete.system`
36
+ - `tigrbl.op` → `tigrbl_core.op`
37
+ - `tigrbl.config` → `tigrbl_core.config`
38
+ - `tigrbl.schema` → `tigrbl_core.schema`
39
+ - `tigrbl.security` → `tigrbl_concrete.security`
40
+
41
+ ## Runtime-owned Routing Contract
42
+
43
+ For the kernel-first flow that avoids pre-runtime REST/RPC dispatching, see
44
+ [`RUNTIME_OWNED_ROUTING.md`](./RUNTIME_OWNED_ROUTING.md).
45
+
29
46
  ## Terminology 📚
30
47
 
31
48
  - **Tenant** 🏢 – a namespace used to group related resources.
32
49
  - **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.
50
+ - **Resource** 📦 – a logical collection of data or functionality exposed by the router.
34
51
  - **Engine** ⚙️ – the database connection and transaction manager backing a resource.
35
52
  - **Model / Table** 🧱 – the ORM or database representation of a resource's records.
36
53
  - **Column** 📏 – a field on a model that maps to a table column.
@@ -190,7 +207,7 @@ Operation Handler
190
207
  v
191
208
  JSON-RPC Response
192
209
 
193
- ````
210
+ ```
194
211
 
195
212
  ## Hooks 🪝
196
213
 
@@ -207,7 +224,7 @@ class Item(Base):
207
224
  async def validate(cls, ctx):
208
225
  if ctx["request"].payload.get("name") == "bad":
209
226
  raise ValueError("invalid name")
210
- ````
227
+ ```
211
228
 
212
229
  The function runs during the `PRE_HANDLER` phase of `create`. The
213
230
  `ctx` mapping provides request and response objects, a database session,
@@ -277,7 +294,7 @@ increasing order of precedence:
277
294
 
278
295
  1. defaults
279
296
  2. app config
280
- 3. API config
297
+ 3. router config
281
298
  4. table config
282
299
  5. column config
283
300
  6. operation spec
@@ -285,7 +302,7 @@ increasing order of precedence:
285
302
 
286
303
  Later entries override earlier ones, so request overrides win over all other
287
304
  sources. This can be summarized as
288
- `overrides > opspec > colspecs > tabspec > apispec > appspec > defaults`.
305
+ `overrides > opspec > colspecs > tabspec > routerspec > appspec > defaults`.
289
306
 
290
307
  ### Schema Config Precedence 🧬
291
308
 
@@ -294,7 +311,7 @@ Later layers override earlier ones, with the precedence order:
294
311
 
295
312
  1. defaults (lowest)
296
313
  2. app configuration
297
- 3. API configuration
314
+ 3. router configuration
298
315
  4. table configuration
299
316
  5. column-level `cfg` values
300
317
  6. op-specific `cfg`
@@ -334,7 +351,7 @@ This hierarchy ensures that the most specific settings always win. 🥇
334
351
  When assembling values for persistence, defaults are resolved in this order:
335
352
 
336
353
  1. Client-supplied value
337
- 2. API `default_factory`
354
+ 2. router `default_factory`
338
355
  3. ORM default
339
356
  4. Database `server_default`
340
357
  5. HTTP 422 if the field is required and still missing
@@ -375,15 +392,15 @@ approved usage. These are not optional—adhering to them keeps the runtime
375
392
  predictable, preserves hook lifecycle guarantees, and ensures schema
376
393
  consistency across REST and RPC surfaces.
377
394
 
378
- ### 1) Never import SQLAlchemy directly or bypass Tigrbl APIs
395
+ ### 1) Never import SQLAlchemy directly or bypass Tigrbl routers
379
396
 
380
397
  **Why:** Direct imports bypass Tigrbl's compatibility layer and make it
381
398
  harder to evolve internal dependencies. Use the Tigrbl exports so your
382
- code stays aligned with the framework’s versioned ASGI API.
399
+ code stays aligned with the framework’s versioned ASGI router.
383
400
 
384
401
  ✅ **Preferred:**
385
402
  ```python
386
- from tigrbl import Base, TigrblApp, TigrblApi
403
+ from tigrbl import Base, TigrblApp, TigrblRouter
387
404
  from tigrbl.types import Integer, String, Mapped
388
405
  from tigrbl.types import Depends, HTTPException, Request
389
406
  ```
@@ -419,12 +436,12 @@ item_id = UUID(str(payload["id"]))
419
436
  ### 3) Use engine specs for persistence, not ad-hoc engines
420
437
 
421
438
  **Why:** Engine specs make persistence declarative, testable, and
422
- compatible with engine resolution across app, API, table, and op scopes.
439
+ compatible with engine resolution across app, router, table, and op scopes.
423
440
 
424
441
  ✅ **Preferred:**
425
442
  ```python
426
443
  from tigrbl.engine.shortcuts import engine_spec
427
- from tigrbl.engine.decorators import engine_ctx
444
+ from tigrbl.decorators.engine import engine_ctx
428
445
 
429
446
  spec = engine_spec(kind="postgres", async_=True, host="db", name="app_db")
430
447
 
@@ -555,9 +572,9 @@ async def rotate_keys(payload, *, ctx):
555
572
 
556
573
  🚫 **Avoid:**
557
574
  ```python
558
- from some_framework import APIRouter
575
+ from some_framework import routerRouter
559
576
 
560
- router = APIRouter()
577
+ router = routerRouter()
561
578
 
562
579
  @router.post("/keys/rotate")
563
580
  async def rotate_keys(payload):
@@ -573,7 +590,7 @@ resolved deterministically by the runtime.
573
590
  ✅ **Preferred:**
574
591
  ```python
575
592
  from tigrbl import hook_ctx, op_ctx, schema_ctx
576
- from tigrbl.engine.decorators import engine_ctx
593
+ from tigrbl.decorators.engine import engine_ctx
577
594
 
578
595
  @engine_ctx(kind="sqlite", mode="memory")
579
596
  class Item(Table):
@@ -596,7 +613,7 @@ async def validate(ctx):
596
613
 
597
614
  ```python
598
615
  from tigrbl.engine.shortcuts import engine_spec, prov
599
- from tigrbl.engine._engine import Engine, Provider
616
+ from tigrbl._concrete._engine import Engine, Provider
600
617
 
601
618
  # Build an EngineSpec from a DSN string
602
619
  spec = engine_spec("sqlite://:memory:")
@@ -623,7 +640,7 @@ provider_pg = Provider(spec_pg)
623
640
  `engine_ctx` binds database configuration to different layers. It accepts a
624
641
  DSN string, a mapping, an `EngineSpec`, a `Provider`, or an `Engine`. The
625
642
  resolver chooses the most specific binding in the order
626
- `op > table > api > app`.
643
+ `op > table > router > app`.
627
644
 
628
645
  #### Engine precedence 🥇
629
646
 
@@ -631,8 +648,8 @@ When engine contexts are declared at multiple scopes, Tigrbl resolves them
631
648
  with strict precedence:
632
649
 
633
650
  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.
651
+ 2. **Table/Model level** – definitions on a model or table override router and app defaults.
652
+ 3. **router level** – bindings on the router class apply when no model-specific context exists.
636
653
  4. **App level** – the default engine supplied to the application is used last.
637
654
 
638
655
  This ordering ensures that the most specific engine context always wins.
@@ -646,7 +663,7 @@ from tigrbl.engine.shortcuts import prov, engine
646
663
  app = SimpleNamespace(db=prov(kind="sqlite", mode="memory"))
647
664
  alt = SimpleNamespace(db=engine(kind="sqlite", mode="memory"))
648
665
 
649
- class API:
666
+ class router:
650
667
  db = {"kind": "sqlite", "memory": True}
651
668
 
652
669
  class Item:
@@ -667,7 +684,7 @@ create.__tigrbl_engine_ctx__ = {
667
684
  #### Decorative bindings 🎛️
668
685
 
669
686
  ```python
670
- from tigrbl.engine.decorators import engine_ctx
687
+ from tigrbl.decorators.engine import engine_ctx
671
688
  from tigrbl.engine.shortcuts import prov, engine
672
689
 
673
690
  @engine_ctx(prov(kind="sqlite", mode="memory"))
@@ -675,7 +692,7 @@ class App:
675
692
  pass
676
693
 
677
694
  @engine_ctx(engine(kind="sqlite", mode="memory"))
678
- class DecoratedAPI:
695
+ class Decoratedrouter:
679
696
  pass
680
697
 
681
698
  @engine_ctx(kind="sqlite", mode="memory")
@@ -702,7 +719,7 @@ The bridge examples cover two integration styles:
702
719
  * A Swarmauri `Factory` invocation during `PRE_HANDLER` via `hook_ctx`.
703
720
  * Tigrbl default verbs (`create`, `get`, `list`, `update`, `delete`) plus a custom op.
704
721
  * `engine_ctx` at model and operation scope.
705
- * Generated OpenAPI and OpenRPC documents mounted from the same model bindings.
722
+ * Generated Openrouter and OpenRPC documents mounted from the same model bindings.
706
723
 
707
724
  * **Smoother direct-model flow** (`swarmauri_tigrbl_bridge_smooth.py`)
708
725
  * 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"
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,24 @@ classifiers = [
18
18
  ]
19
19
  authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
20
20
  dependencies = [
21
+ "tigrbl-core",
22
+ "tigrbl-base",
23
+ "tigrbl-concrete",
24
+ "tigrbl-canon",
25
+ "tigrbl-orm",
26
+ "tigrbl-runtime",
27
+ "tigrbl-atoms",
28
+ "tigrbl-kernel",
29
+ "tigrbl-ops-oltp",
21
30
  "pydantic>=2.0.0",
22
31
  "sqlalchemy>=2.0",
23
32
  "aiosqlite>=0.19.0",
24
33
  "httpx>=0.27.0",
25
34
  "greenlet>=3.2.3",
26
- "uvicorn",
27
- ]
28
- keywords = [
29
- 'tigrbl',
30
- 'sdk',
31
- 'standards',
32
- 'asgi',
33
- 'rest',
34
- 'rpc',
35
+ "uvicorn",
35
36
  ]
36
37
 
38
+
37
39
  [project.optional-dependencies]
38
40
  postgres = [
39
41
  "asyncpg>=0.30.0",
@@ -47,7 +49,18 @@ tests = [
47
49
  ]
48
50
 
49
51
  [tool.uv.sources]
52
+ "tigrbl-core" = { workspace = true }
53
+ "tigrbl-base" = { workspace = true }
54
+ "tigrbl-concrete" = { workspace = true }
55
+ "tigrbl-canon" = { workspace = true }
56
+ "tigrbl-orm" = { workspace = true }
57
+ "tigrbl-runtime" = { workspace = true }
58
+ "tigrbl-atoms" = { workspace = true }
59
+ "tigrbl-kernel" = { workspace = true }
60
+ "tigrbl-ops-oltp" = { workspace = true }
50
61
  tigrbl-tests = { workspace = true }
62
+ tigrbl_client = { workspace = true }
63
+
51
64
 
52
65
  [tool.pytest.ini_options]
53
66
  norecursedirs = ["combined", "scripts"]
@@ -81,6 +94,7 @@ packages = [
81
94
 
82
95
  [dependency-groups]
83
96
  dev = [
97
+ "tigrbl_client",
84
98
  "pytest>=8.0",
85
99
  "pytest-asyncio>=0.24.0",
86
100
  "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