tigrbl 0.3.16.dev5__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 (385) hide show
  1. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/PKG-INFO +34 -9
  2. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/README.md +24 -7
  3. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/pyproject.toml +24 -10
  4. {tigrbl-0.3.16.dev5 → 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.dev5/tigrbl/column/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/column.py +5 -5
  53. tigrbl-0.3.16.dev5/tigrbl/engine/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/engine.py +19 -17
  54. tigrbl-0.3.16.dev5/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.dev5/tigrbl/responses/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/responses.py +8 -10
  57. tigrbl-0.3.16.dev5/tigrbl/router/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/router.py +4 -18
  58. tigrbl-0.3.16.dev5/tigrbl/schema/shortcuts.py → tigrbl-0.3.17/tigrbl/shortcuts/schema.py +3 -3
  59. tigrbl-0.3.16.dev5/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.dev5 → 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.dev5 → tigrbl-0.3.17}/tigrbl/system/diagnostics/hookz.py +6 -6
  65. tigrbl-0.3.17/tigrbl/system/diagnostics/kernelz.py +57 -0
  66. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/diagnostics/methodz.py +2 -2
  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.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/lens.py +1 -1
  70. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/helpers.py +28 -9
  71. tigrbl-0.3.17/tigrbl/system/docs/openapi/mount.py +85 -0
  72. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/schema.py +27 -11
  73. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openrpc.py +44 -15
  74. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/swagger.py +1 -1
  75. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/favicon/__init__.py +28 -18
  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.dev5/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.dev5/tigrbl/deps → tigrbl-0.3.17/tigrbl/vendor}/sqlalchemy.py +2 -0
  88. tigrbl-0.3.16.dev5/tigrbl/__init__.py +0 -137
  89. tigrbl-0.3.16.dev5/tigrbl/app/_app.py +0 -133
  90. tigrbl-0.3.16.dev5/tigrbl/app/_model_registry.py +0 -67
  91. tigrbl-0.3.16.dev5/tigrbl/app/app_spec.py +0 -44
  92. tigrbl-0.3.16.dev5/tigrbl/app/mro_collect.py +0 -106
  93. tigrbl-0.3.16.dev5/tigrbl/app/shortcuts.py +0 -65
  94. tigrbl-0.3.16.dev5/tigrbl/app/tigrbl_app.py +0 -694
  95. tigrbl-0.3.16.dev5/tigrbl/app/transport.py +0 -154
  96. tigrbl-0.3.16.dev5/tigrbl/bindings/__init__.py +0 -73
  97. tigrbl-0.3.16.dev5/tigrbl/bindings/columns.py +0 -49
  98. tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/__init__.py +0 -10
  99. tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/builder.py +0 -118
  100. tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/ctx.py +0 -73
  101. tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/identifiers.py +0 -227
  102. tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/namespaces.py +0 -50
  103. tigrbl-0.3.16.dev5/tigrbl/bindings/handlers/steps.py +0 -277
  104. tigrbl-0.3.16.dev5/tigrbl/bindings/hooks.py +0 -311
  105. tigrbl-0.3.16.dev5/tigrbl/bindings/model.py +0 -205
  106. tigrbl-0.3.16.dev5/tigrbl/bindings/model_helpers.py +0 -139
  107. tigrbl-0.3.16.dev5/tigrbl/bindings/model_registry.py +0 -85
  108. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/__init__.py +0 -7
  109. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/attach.py +0 -34
  110. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/collection.py +0 -345
  111. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/common.py +0 -134
  112. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/helpers.py +0 -119
  113. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/io.py +0 -333
  114. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/io_headers.py +0 -49
  115. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/member.py +0 -337
  116. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/router.py +0 -342
  117. tigrbl-0.3.16.dev5/tigrbl/bindings/rest/routing.py +0 -160
  118. tigrbl-0.3.16.dev5/tigrbl/bindings/router/__init__.py +0 -15
  119. tigrbl-0.3.16.dev5/tigrbl/bindings/router/common.py +0 -108
  120. tigrbl-0.3.16.dev5/tigrbl/bindings/router/include.py +0 -277
  121. tigrbl-0.3.16.dev5/tigrbl/bindings/router/resource_proxy.py +0 -122
  122. tigrbl-0.3.16.dev5/tigrbl/bindings/router/rpc.py +0 -112
  123. tigrbl-0.3.16.dev5/tigrbl/bindings/rpc.py +0 -383
  124. tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/__init__.py +0 -10
  125. tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/builder.py +0 -347
  126. tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/defaults.py +0 -259
  127. tigrbl-0.3.16.dev5/tigrbl/bindings/schemas/utils.py +0 -192
  128. tigrbl-0.3.16.dev5/tigrbl/column/__init__.py +0 -75
  129. tigrbl-0.3.16.dev5/tigrbl/column/_column.py +0 -96
  130. tigrbl-0.3.16.dev5/tigrbl/column/column_spec.py +0 -40
  131. tigrbl-0.3.16.dev5/tigrbl/column/field_spec.py +0 -32
  132. tigrbl-0.3.16.dev5/tigrbl/column/infer/__init__.py +0 -25
  133. tigrbl-0.3.16.dev5/tigrbl/column/infer/core.py +0 -92
  134. tigrbl-0.3.16.dev5/tigrbl/column/infer/jsonhints.py +0 -44
  135. tigrbl-0.3.16.dev5/tigrbl/column/infer/planning.py +0 -133
  136. tigrbl-0.3.16.dev5/tigrbl/column/infer/types.py +0 -102
  137. tigrbl-0.3.16.dev5/tigrbl/column/infer/utils.py +0 -59
  138. tigrbl-0.3.16.dev5/tigrbl/column/io_spec.py +0 -136
  139. tigrbl-0.3.16.dev5/tigrbl/column/mro_collect.py +0 -59
  140. tigrbl-0.3.16.dev5/tigrbl/column/storage_spec.py +0 -78
  141. tigrbl-0.3.16.dev5/tigrbl/config/__init__.py +0 -19
  142. tigrbl-0.3.16.dev5/tigrbl/config/constants.py +0 -224
  143. tigrbl-0.3.16.dev5/tigrbl/config/defaults.py +0 -32
  144. tigrbl-0.3.16.dev5/tigrbl/config/resolver.py +0 -299
  145. tigrbl-0.3.16.dev5/tigrbl/core/__init__.py +0 -47
  146. tigrbl-0.3.16.dev5/tigrbl/core/crud/__init__.py +0 -43
  147. tigrbl-0.3.16.dev5/tigrbl/core/crud/bulk.py +0 -167
  148. tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/__init__.py +0 -76
  149. tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/db.py +0 -91
  150. tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/enum.py +0 -85
  151. tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/filters.py +0 -161
  152. tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/model.py +0 -131
  153. tigrbl-0.3.16.dev5/tigrbl/core/crud/helpers/normalize.py +0 -98
  154. tigrbl-0.3.16.dev5/tigrbl/core/crud/ops.py +0 -234
  155. tigrbl-0.3.16.dev5/tigrbl/core/crud/params.py +0 -50
  156. tigrbl-0.3.16.dev5/tigrbl/core/resolver.py +0 -81
  157. tigrbl-0.3.16.dev5/tigrbl/ddl/__init__.py +0 -385
  158. tigrbl-0.3.16.dev5/tigrbl/decorators.py +0 -17
  159. tigrbl-0.3.16.dev5/tigrbl/deps/__init__.py +0 -23
  160. tigrbl-0.3.16.dev5/tigrbl/deps/jinja.py +0 -27
  161. tigrbl-0.3.16.dev5/tigrbl/engine/__init__.py +0 -47
  162. tigrbl-0.3.16.dev5/tigrbl/engine/_engine.py +0 -144
  163. tigrbl-0.3.16.dev5/tigrbl/engine/bind.py +0 -38
  164. tigrbl-0.3.16.dev5/tigrbl/engine/builders.py +0 -244
  165. tigrbl-0.3.16.dev5/tigrbl/engine/capabilities.py +0 -29
  166. tigrbl-0.3.16.dev5/tigrbl/engine/collect.py +0 -116
  167. tigrbl-0.3.16.dev5/tigrbl/engine/decorators.py +0 -110
  168. tigrbl-0.3.16.dev5/tigrbl/engine/engine_spec.py +0 -358
  169. tigrbl-0.3.16.dev5/tigrbl/engine/plugins.py +0 -52
  170. tigrbl-0.3.16.dev5/tigrbl/engine/registry.py +0 -36
  171. tigrbl-0.3.16.dev5/tigrbl/engine/resolver.py +0 -358
  172. tigrbl-0.3.16.dev5/tigrbl/headers/__init__.py +0 -3
  173. tigrbl-0.3.16.dev5/tigrbl/headers/_header.py +0 -142
  174. tigrbl-0.3.16.dev5/tigrbl/hook/__init__.py +0 -23
  175. tigrbl-0.3.16.dev5/tigrbl/hook/_hook.py +0 -22
  176. tigrbl-0.3.16.dev5/tigrbl/hook/decorators.py +0 -35
  177. tigrbl-0.3.16.dev5/tigrbl/hook/exceptions.py +0 -18
  178. tigrbl-0.3.16.dev5/tigrbl/hook/hook_spec.py +0 -24
  179. tigrbl-0.3.16.dev5/tigrbl/hook/mro_collect.py +0 -98
  180. tigrbl-0.3.16.dev5/tigrbl/hook/types.py +0 -76
  181. tigrbl-0.3.16.dev5/tigrbl/middlewares/__init__.py +0 -37
  182. tigrbl-0.3.16.dev5/tigrbl/middlewares/base.py +0 -142
  183. tigrbl-0.3.16.dev5/tigrbl/middlewares/cors.py +0 -167
  184. tigrbl-0.3.16.dev5/tigrbl/middlewares/decorators.py +0 -32
  185. tigrbl-0.3.16.dev5/tigrbl/middlewares/middleware.py +0 -37
  186. tigrbl-0.3.16.dev5/tigrbl/middlewares/spec.py +0 -28
  187. tigrbl-0.3.16.dev5/tigrbl/op/__init__.py +0 -54
  188. tigrbl-0.3.16.dev5/tigrbl/op/_op.py +0 -31
  189. tigrbl-0.3.16.dev5/tigrbl/op/alias.py +0 -42
  190. tigrbl-0.3.16.dev5/tigrbl/op/alias_spec.py +0 -35
  191. tigrbl-0.3.16.dev5/tigrbl/op/canonical.py +0 -31
  192. tigrbl-0.3.16.dev5/tigrbl/op/collect.py +0 -11
  193. tigrbl-0.3.16.dev5/tigrbl/op/decorators.py +0 -223
  194. tigrbl-0.3.16.dev5/tigrbl/op/model_registry.py +0 -301
  195. tigrbl-0.3.16.dev5/tigrbl/op/mro_collect.py +0 -97
  196. tigrbl-0.3.16.dev5/tigrbl/op/op_spec.py +0 -90
  197. tigrbl-0.3.16.dev5/tigrbl/op/resolver.py +0 -216
  198. tigrbl-0.3.16.dev5/tigrbl/op/types.py +0 -71
  199. tigrbl-0.3.16.dev5/tigrbl/orm/__init__.py +0 -1
  200. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/_RowBound.py +0 -83
  201. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/__init__.py +0 -95
  202. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/bootstrappable.py +0 -113
  203. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/bound.py +0 -47
  204. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/edges.py +0 -40
  205. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/fields.py +0 -165
  206. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/hierarchy.py +0 -54
  207. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/key_digest.py +0 -44
  208. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/lifecycle.py +0 -115
  209. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/locks.py +0 -51
  210. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/markers.py +0 -16
  211. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/operations.py +0 -57
  212. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/ownable.py +0 -337
  213. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/principals.py +0 -98
  214. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/tenant_bound.py +0 -301
  215. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/upsertable.py +0 -118
  216. tigrbl-0.3.16.dev5/tigrbl/orm/mixins/utils.py +0 -49
  217. tigrbl-0.3.16.dev5/tigrbl/orm/tables/__init__.py +0 -72
  218. tigrbl-0.3.16.dev5/tigrbl/orm/tables/_base.py +0 -8
  219. tigrbl-0.3.16.dev5/tigrbl/orm/tables/audit.py +0 -56
  220. tigrbl-0.3.16.dev5/tigrbl/orm/tables/client.py +0 -25
  221. tigrbl-0.3.16.dev5/tigrbl/orm/tables/group.py +0 -29
  222. tigrbl-0.3.16.dev5/tigrbl/orm/tables/org.py +0 -30
  223. tigrbl-0.3.16.dev5/tigrbl/orm/tables/rbac.py +0 -76
  224. tigrbl-0.3.16.dev5/tigrbl/orm/tables/status.py +0 -106
  225. tigrbl-0.3.16.dev5/tigrbl/orm/tables/tenant.py +0 -22
  226. tigrbl-0.3.16.dev5/tigrbl/orm/tables/user.py +0 -39
  227. tigrbl-0.3.16.dev5/tigrbl/requests/__init__.py +0 -5
  228. tigrbl-0.3.16.dev5/tigrbl/requests/_request.py +0 -251
  229. tigrbl-0.3.16.dev5/tigrbl/requests/adapters.py +0 -68
  230. tigrbl-0.3.16.dev5/tigrbl/responses/README.md +0 -34
  231. tigrbl-0.3.16.dev5/tigrbl/responses/__init__.py +0 -52
  232. tigrbl-0.3.16.dev5/tigrbl/responses/_response.py +0 -278
  233. tigrbl-0.3.16.dev5/tigrbl/responses/_transport.py +0 -32
  234. tigrbl-0.3.16.dev5/tigrbl/responses/bind.py +0 -12
  235. tigrbl-0.3.16.dev5/tigrbl/responses/decorators.py +0 -45
  236. tigrbl-0.3.16.dev5/tigrbl/responses/resolver.py +0 -83
  237. tigrbl-0.3.16.dev5/tigrbl/responses/types.py +0 -49
  238. tigrbl-0.3.16.dev5/tigrbl/rest/__init__.py +0 -27
  239. tigrbl-0.3.16.dev5/tigrbl/router/__init__.py +0 -23
  240. tigrbl-0.3.16.dev5/tigrbl/router/_route.py +0 -119
  241. tigrbl-0.3.16.dev5/tigrbl/router/_router.py +0 -422
  242. tigrbl-0.3.16.dev5/tigrbl/router/_routing.py +0 -143
  243. tigrbl-0.3.16.dev5/tigrbl/router/decorators.py +0 -115
  244. tigrbl-0.3.16.dev5/tigrbl/router/mro_collect.py +0 -45
  245. tigrbl-0.3.16.dev5/tigrbl/router/resolve.py +0 -151
  246. tigrbl-0.3.16.dev5/tigrbl/router/router_spec.py +0 -30
  247. tigrbl-0.3.16.dev5/tigrbl/router/tigrbl_router.py +0 -362
  248. tigrbl-0.3.16.dev5/tigrbl/runtime/README.md +0 -129
  249. tigrbl-0.3.16.dev5/tigrbl/runtime/__init__.py +0 -20
  250. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/__init__.py +0 -103
  251. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/dep/__init__.py +0 -15
  252. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/dep/extra.py +0 -21
  253. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/dep/security.py +0 -21
  254. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/emit/__init__.py +0 -42
  255. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/emit/paired_post.py +0 -158
  256. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/emit/paired_pre.py +0 -106
  257. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/emit/readtime_alias.py +0 -120
  258. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/out/__init__.py +0 -38
  259. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/out/masking.py +0 -135
  260. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/refresh/__init__.py +0 -38
  261. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/refresh/demand.py +0 -130
  262. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/resolve/__init__.py +0 -40
  263. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/resolve/assemble.py +0 -167
  264. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/resolve/paired_gen.py +0 -147
  265. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/__init__.py +0 -19
  266. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/headers_from_payload.py +0 -57
  267. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/negotiate.py +0 -30
  268. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/negotiation.py +0 -43
  269. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/render.py +0 -36
  270. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/renderer.py +0 -117
  271. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/template.py +0 -44
  272. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/response/templates.py +0 -88
  273. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/schema/__init__.py +0 -40
  274. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/schema/collect_in.py +0 -21
  275. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/schema/collect_out.py +0 -21
  276. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/storage/__init__.py +0 -38
  277. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/storage/to_stored.py +0 -167
  278. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/__init__.py +0 -45
  279. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/build_in.py +0 -166
  280. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/build_out.py +0 -87
  281. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/dump.py +0 -206
  282. tigrbl-0.3.16.dev5/tigrbl/runtime/atoms/wire/validate_in.py +0 -228
  283. tigrbl-0.3.16.dev5/tigrbl/runtime/context.py +0 -206
  284. tigrbl-0.3.16.dev5/tigrbl/runtime/events.py +0 -251
  285. tigrbl-0.3.16.dev5/tigrbl/runtime/executor/__init__.py +0 -6
  286. tigrbl-0.3.16.dev5/tigrbl/runtime/executor/guards.py +0 -132
  287. tigrbl-0.3.16.dev5/tigrbl/runtime/executor/helpers.py +0 -88
  288. tigrbl-0.3.16.dev5/tigrbl/runtime/executor/invoke.py +0 -150
  289. tigrbl-0.3.16.dev5/tigrbl/runtime/executor/types.py +0 -76
  290. tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/__init__.py +0 -44
  291. tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/atoms.py +0 -189
  292. tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/cache.py +0 -85
  293. tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/core.py +0 -226
  294. tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/models.py +0 -27
  295. tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/opview_compiler.py +0 -93
  296. tigrbl-0.3.16.dev5/tigrbl/runtime/kernel/payload.py +0 -74
  297. tigrbl-0.3.16.dev5/tigrbl/runtime/labels.py +0 -353
  298. tigrbl-0.3.16.dev5/tigrbl/runtime/opview.py +0 -89
  299. tigrbl-0.3.16.dev5/tigrbl/runtime/ordering.py +0 -258
  300. tigrbl-0.3.16.dev5/tigrbl/runtime/status/__init__.py +0 -63
  301. tigrbl-0.3.16.dev5/tigrbl/runtime/status/converters.py +0 -213
  302. tigrbl-0.3.16.dev5/tigrbl/runtime/status/exceptions.py +0 -149
  303. tigrbl-0.3.16.dev5/tigrbl/runtime/status/mappings.py +0 -94
  304. tigrbl-0.3.16.dev5/tigrbl/runtime/status/utils.py +0 -114
  305. tigrbl-0.3.16.dev5/tigrbl/runtime/system.py +0 -279
  306. tigrbl-0.3.16.dev5/tigrbl/runtime/trace.py +0 -330
  307. tigrbl-0.3.16.dev5/tigrbl/schema/__init__.py +0 -38
  308. tigrbl-0.3.16.dev5/tigrbl/schema/_schema.py +0 -27
  309. tigrbl-0.3.16.dev5/tigrbl/schema/builder/__init__.py +0 -17
  310. tigrbl-0.3.16.dev5/tigrbl/schema/builder/build_schema.py +0 -215
  311. tigrbl-0.3.16.dev5/tigrbl/schema/builder/cache.py +0 -24
  312. tigrbl-0.3.16.dev5/tigrbl/schema/builder/compat.py +0 -16
  313. tigrbl-0.3.16.dev5/tigrbl/schema/builder/extras.py +0 -85
  314. tigrbl-0.3.16.dev5/tigrbl/schema/builder/helpers.py +0 -51
  315. tigrbl-0.3.16.dev5/tigrbl/schema/builder/list_params.py +0 -117
  316. tigrbl-0.3.16.dev5/tigrbl/schema/builder/strip_parent_fields.py +0 -70
  317. tigrbl-0.3.16.dev5/tigrbl/schema/collect.py +0 -78
  318. tigrbl-0.3.16.dev5/tigrbl/schema/decorators.py +0 -67
  319. tigrbl-0.3.16.dev5/tigrbl/schema/schema_spec.py +0 -20
  320. tigrbl-0.3.16.dev5/tigrbl/schema/types.py +0 -34
  321. tigrbl-0.3.16.dev5/tigrbl/schema/utils.py +0 -142
  322. tigrbl-0.3.16.dev5/tigrbl/security/__init__.py +0 -63
  323. tigrbl-0.3.16.dev5/tigrbl/security/dependencies.py +0 -21
  324. tigrbl-0.3.16.dev5/tigrbl/security/schemes/__init__.py +0 -19
  325. tigrbl-0.3.16.dev5/tigrbl/security/schemes/_base.py +0 -69
  326. tigrbl-0.3.16.dev5/tigrbl/security/schemes/api_key.py +0 -57
  327. tigrbl-0.3.16.dev5/tigrbl/security/schemes/http_bearer.py +0 -74
  328. tigrbl-0.3.16.dev5/tigrbl/security/schemes/mutual_tls.py +0 -27
  329. tigrbl-0.3.16.dev5/tigrbl/security/schemes/oauth2.py +0 -28
  330. tigrbl-0.3.16.dev5/tigrbl/security/schemes/openid_connect.py +0 -31
  331. tigrbl-0.3.16.dev5/tigrbl/session/README.md +0 -14
  332. tigrbl-0.3.16.dev5/tigrbl/session/__init__.py +0 -28
  333. tigrbl-0.3.16.dev5/tigrbl/session/abc.py +0 -76
  334. tigrbl-0.3.16.dev5/tigrbl/session/base.py +0 -151
  335. tigrbl-0.3.16.dev5/tigrbl/session/decorators.py +0 -43
  336. tigrbl-0.3.16.dev5/tigrbl/session/default.py +0 -118
  337. tigrbl-0.3.16.dev5/tigrbl/session/shortcuts.py +0 -50
  338. tigrbl-0.3.16.dev5/tigrbl/session/spec.py +0 -112
  339. tigrbl-0.3.16.dev5/tigrbl/shortcuts.py +0 -22
  340. tigrbl-0.3.16.dev5/tigrbl/specs.py +0 -44
  341. tigrbl-0.3.16.dev5/tigrbl/system/__init__.py +0 -98
  342. tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/compat.py +0 -8
  343. tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/healthz.py +0 -41
  344. tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/kernelz.py +0 -20
  345. tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/router.py +0 -74
  346. tigrbl-0.3.16.dev5/tigrbl/system/diagnostics/utils.py +0 -43
  347. tigrbl-0.3.16.dev5/tigrbl/system/docs/openapi/mount.py +0 -30
  348. tigrbl-0.3.16.dev5/tigrbl/table/__init__.py +0 -9
  349. tigrbl-0.3.16.dev5/tigrbl/table/_base.py +0 -439
  350. tigrbl-0.3.16.dev5/tigrbl/table/_table.py +0 -54
  351. tigrbl-0.3.16.dev5/tigrbl/table/mro_collect.py +0 -86
  352. tigrbl-0.3.16.dev5/tigrbl/table/table_spec.py +0 -37
  353. tigrbl-0.3.16.dev5/tigrbl/transport/__init__.py +0 -93
  354. tigrbl-0.3.16.dev5/tigrbl/transport/background.py +0 -29
  355. tigrbl-0.3.16.dev5/tigrbl/transport/dispatch.py +0 -175
  356. tigrbl-0.3.16.dev5/tigrbl/transport/httpx.py +0 -25
  357. tigrbl-0.3.16.dev5/tigrbl/transport/jsonrpc/__init__.py +0 -20
  358. tigrbl-0.3.16.dev5/tigrbl/transport/jsonrpc/dispatcher.py +0 -466
  359. tigrbl-0.3.16.dev5/tigrbl/transport/jsonrpc/helpers.py +0 -98
  360. tigrbl-0.3.16.dev5/tigrbl/transport/jsonrpc/models.py +0 -41
  361. tigrbl-0.3.16.dev5/tigrbl/transport/rest/__init__.py +0 -30
  362. tigrbl-0.3.16.dev5/tigrbl/transport/rest/aggregator.py +0 -118
  363. tigrbl-0.3.16.dev5/tigrbl/types/__init__.py +0 -168
  364. tigrbl-0.3.16.dev5/tigrbl/types/allow_anon_provider.py +0 -19
  365. tigrbl-0.3.16.dev5/tigrbl/types/authn_abc.py +0 -31
  366. tigrbl-0.3.16.dev5/tigrbl/types/nested_path_provider.py +0 -22
  367. tigrbl-0.3.16.dev5/tigrbl/types/op.py +0 -35
  368. tigrbl-0.3.16.dev5/tigrbl/types/op_config_provider.py +0 -17
  369. tigrbl-0.3.16.dev5/tigrbl/types/op_verb_alias_provider.py +0 -33
  370. tigrbl-0.3.16.dev5/tigrbl/types/request_extras_provider.py +0 -22
  371. tigrbl-0.3.16.dev5/tigrbl/types/response_extras_provider.py +0 -22
  372. tigrbl-0.3.16.dev5/tigrbl/types/table_config_provider.py +0 -13
  373. tigrbl-0.3.16.dev5/tigrbl/types/uuid.py +0 -55
  374. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/LICENSE +0 -0
  375. /tigrbl-0.3.16.dev5/tigrbl/column/README.md → /tigrbl-0.3.17/tigrbl/docs/column_specs.md +0 -0
  376. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/docs/verbosity.md +0 -0
  377. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/engine/docs/PLUGINS.md +0 -0
  378. {tigrbl-0.3.16.dev5/tigrbl/app → tigrbl-0.3.17/tigrbl/middlewares}/__init__.py +0 -0
  379. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/middlewares/compose.py +0 -0
  380. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/__init__.py +0 -0
  381. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/__init__.py +0 -0
  382. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/docs/openapi/metadata.py +0 -0
  383. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/favicon/assets/favicon.svg +0 -0
  384. {tigrbl-0.3.16.dev5 → tigrbl-0.3.17}/tigrbl/system/uvicorn.py +0 -0
  385. {tigrbl-0.3.16.dev5/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.dev5
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,6 +67,23 @@ 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.
@@ -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,
@@ -457,7 +482,7 @@ compatible with engine resolution across app, router, table, and op scopes.
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
 
@@ -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
 
@@ -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"))
@@ -26,6 +26,23 @@ 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.
@@ -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,
@@ -424,7 +441,7 @@ compatible with engine resolution across app, router, table, and op scopes.
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
 
@@ -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
 
@@ -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"))
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tigrbl"
3
- version = "0.3.16.dev5"
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
- | Router | `router_spec.py` | `_router.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
 
@@ -0,0 +1,332 @@
1
+ """Tigrbl public API facade over split core packages."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from importlib import import_module
6
+ from pkgutil import extend_path
7
+ import sys
8
+
9
+ __path__ = extend_path(__path__, __name__)
10
+
11
+
12
+ # Compatibility aliases so legacy ``tigrbl.<segment>`` imports resolve to
13
+ # the new split packages.
14
+ _ALIAS_MODULES = {
15
+ "_spec": "tigrbl_core._spec",
16
+ "_base": "tigrbl_base._base",
17
+ "_concrete": "tigrbl_concrete._concrete",
18
+ "core": "tigrbl_ops_oltp",
19
+ "runtime": "tigrbl_runtime.runtime",
20
+ "executors": "tigrbl_runtime.executors",
21
+ "atoms": "tigrbl_atoms.atoms",
22
+ }
23
+
24
+
25
+ def _optional_import(path: str):
26
+ try:
27
+ return import_module(path)
28
+ except ImportError:
29
+ return None
30
+
31
+
32
+ def _install_alias(alias: str, target: str) -> None:
33
+ module = _optional_import(target)
34
+ if module is None:
35
+ return
36
+
37
+ alias_name = f"{__name__}.{alias}"
38
+ sys.modules.setdefault(alias_name, module)
39
+
40
+ target_prefix = f"{target}."
41
+ alias_prefix = f"{alias_name}."
42
+ for name, loaded in tuple(sys.modules.items()):
43
+ if name.startswith(target_prefix):
44
+ suffix = name[len(target_prefix) :]
45
+ sys.modules.setdefault(f"{alias_prefix}{suffix}", loaded)
46
+
47
+ module_path = getattr(module, "__path__", None)
48
+ if not module_path:
49
+ return
50
+
51
+ from pkgutil import walk_packages
52
+
53
+ for info in walk_packages(module_path, target_prefix):
54
+ submodule = _optional_import(info.name)
55
+ if submodule is None:
56
+ continue
57
+ suffix = info.name[len(target_prefix) :]
58
+ sys.modules.setdefault(f"{alias_prefix}{suffix}", submodule)
59
+
60
+
61
+ for alias, target in _ALIAS_MODULES.items():
62
+ _install_alias(alias, target)
63
+
64
+
65
+ _spec = import_module("tigrbl_core._spec")
66
+ _base = import_module("tigrbl_base._base")
67
+ _concrete = import_module("tigrbl_concrete._concrete")
68
+ canon = None
69
+ orm = import_module("tigrbl_orm.orm")
70
+ runtime = _optional_import("tigrbl_runtime.runtime")
71
+ atoms = _optional_import("tigrbl_atoms.atoms")
72
+ kernel = None
73
+ core = _optional_import("tigrbl_ops_oltp")
74
+
75
+ # Backward-compatible names requested for top-level facade access.
76
+ specs = _spec
77
+ base = _base
78
+ concrete = _concrete
79
+
80
+ from tigrbl_concrete._concrete import ( # noqa: E402
81
+ APIKey,
82
+ Alias,
83
+ App,
84
+ BackgroundTask,
85
+ Column,
86
+ FileResponse,
87
+ ForeignKey,
88
+ Hook,
89
+ HTMLResponse,
90
+ HTTPBearer,
91
+ JSONResponse,
92
+ MutualTLS,
93
+ OAuth2,
94
+ OpenIdConnect,
95
+ Op,
96
+ PlainTextResponse,
97
+ RedirectResponse,
98
+ Request,
99
+ Response,
100
+ Route,
101
+ Router,
102
+ Schema,
103
+ StorageTransform,
104
+ StreamingResponse,
105
+ Table,
106
+ TableRegistry,
107
+ TigrblApp,
108
+ TigrblRouter,
109
+ )
110
+ from tigrbl_concrete._concrete.dependencies import Depends # noqa: E402
111
+ from tigrbl_runtime.runtime.status.exceptions import HTTPException # noqa: E402
112
+ from tigrbl.engine import resolver # noqa: E402
113
+ from tigrbl.system import mount_diagnostics # noqa: E402
114
+ from tigrbl_core.config.constants import DEFAULT_HTTP_METHODS, HOOK_DECLS_ATTR # noqa: E402
115
+ from tigrbl.decorators import ( # noqa: E402
116
+ alias,
117
+ allow_anon,
118
+ alias_ctx,
119
+ engine_ctx,
120
+ hook_ctx,
121
+ middleware,
122
+ middlewares,
123
+ op_alias,
124
+ op_ctx,
125
+ response_ctx,
126
+ route_ctx,
127
+ schema_ctx,
128
+ )
129
+ from tigrbl.shortcuts.op import op # noqa: E402
130
+ from tigrbl.schema import _build_list_params, _build_schema, get_schema # noqa: E402
131
+ from tigrbl.ddl import bootstrap_dbschema, ensure_schemas, register_sqlite_attach # noqa: E402
132
+
133
+ from tigrbl_base._base import ( # noqa: E402
134
+ AppBase,
135
+ ForeignKeyBase,
136
+ HookBase,
137
+ RouterBase,
138
+ TableBase,
139
+ TableRegistryBase,
140
+ )
141
+ from tigrbl_core._spec import ( # noqa: E402
142
+ AppSpec,
143
+ Arity,
144
+ ColumnSpec,
145
+ EngineSpec,
146
+ FieldSpec,
147
+ ForeignKeySpec,
148
+ HookPhase,
149
+ IOSpec,
150
+ OpSpec,
151
+ PersistPolicy,
152
+ PHASE,
153
+ PHASES,
154
+ RequestSpec,
155
+ ResponseSpec,
156
+ RouterSpec,
157
+ SchemaArg,
158
+ SchemaRef,
159
+ SchemaSpec,
160
+ SessionSpec,
161
+ StorageSpec,
162
+ StorageTransformSpec,
163
+ TableRegistrySpec,
164
+ TableSpec,
165
+ TargetOp,
166
+ TemplateSpec,
167
+ )
168
+ from tigrbl_runtime.runtime.executor import _invoke # noqa: E402
169
+
170
+
171
+ def bind(*args, **kwargs):
172
+ return import_module("tigrbl_concrete._mapping.model").bind(*args, **kwargs)
173
+
174
+
175
+ def rebind(*args, **kwargs):
176
+ return import_module("tigrbl_concrete._mapping.model").rebind(*args, **kwargs)
177
+
178
+
179
+ def build_schemas(*args, **kwargs):
180
+ return import_module("tigrbl_concrete._mapping.model")._materialize_schemas(
181
+ *args, **kwargs
182
+ )
183
+
184
+
185
+ def build_hooks(*args, **kwargs):
186
+ return import_module("tigrbl_concrete._mapping.model")._bind_model_hooks(
187
+ *args, **kwargs
188
+ )
189
+
190
+
191
+ def build_handlers(*args, **kwargs):
192
+ mod = import_module("tigrbl_concrete._mapping.model")
193
+ specs = mod._materialize_handlers(*args, **kwargs)
194
+ model = args[0] if args else kwargs.get("model")
195
+ spec_arg = args[1] if len(args) > 1 else kwargs.get("specs", ())
196
+ spec_tuple = tuple(spec_arg or ())
197
+ if model is not None:
198
+ mod._bind_model_hooks(model, spec_tuple)
199
+ return specs
200
+
201
+
202
+ def register_rpc(*args, **kwargs):
203
+ return import_module("tigrbl_base._base._rpc_map").register_and_attach(
204
+ *args, **kwargs
205
+ )
206
+
207
+
208
+ def build_rest(*args, **kwargs):
209
+ if "router" not in kwargs:
210
+ kwargs["router"] = None
211
+ return import_module("tigrbl_concrete._mapping.model")._materialize_rest_router(
212
+ *args, **kwargs
213
+ )
214
+
215
+
216
+ def include_tables(*args, **kwargs):
217
+ return import_module("tigrbl_concrete._mapping.router.include").include_tables(
218
+ *args, **kwargs
219
+ )
220
+
221
+
222
+ async def rpc_call(*args, **kwargs):
223
+ return await import_module("tigrbl_concrete._mapping.router.rpc").rpc_call(
224
+ *args, **kwargs
225
+ )
226
+
227
+
228
+ __all__ = [
229
+ "specs",
230
+ "base",
231
+ "concrete",
232
+ "canon",
233
+ "orm",
234
+ "runtime",
235
+ "atoms",
236
+ "kernel",
237
+ "core",
238
+ "TigrblApp",
239
+ "TigrblRouter",
240
+ "Router",
241
+ "Depends",
242
+ "HTTPException",
243
+ "TableBase",
244
+ "RouterBase",
245
+ "Op",
246
+ "op",
247
+ "HTTPBearer",
248
+ "APIKey",
249
+ "OAuth2",
250
+ "OpenIdConnect",
251
+ "MutualTLS",
252
+ "OpSpec",
253
+ "TargetOp",
254
+ "Arity",
255
+ "PersistPolicy",
256
+ "PHASE",
257
+ "PHASES",
258
+ "HookPhase",
259
+ "SchemaRef",
260
+ "SchemaArg",
261
+ "alias_ctx",
262
+ "op_ctx",
263
+ "route_ctx",
264
+ "hook_ctx",
265
+ "schema_ctx",
266
+ "response_ctx",
267
+ "alias",
268
+ "allow_anon",
269
+ "Alias",
270
+ "op_alias",
271
+ "engine_ctx",
272
+ "ResponseSpec",
273
+ "bind",
274
+ "rebind",
275
+ "build_schemas",
276
+ "build_hooks",
277
+ "build_handlers",
278
+ "register_rpc",
279
+ "build_rest",
280
+ "include_tables",
281
+ "rpc_call",
282
+ "_invoke",
283
+ "_build_schema",
284
+ "_build_list_params",
285
+ "get_schema",
286
+ "mount_diagnostics",
287
+ "ensure_schemas",
288
+ "register_sqlite_attach",
289
+ "bootstrap_dbschema",
290
+ "DEFAULT_HTTP_METHODS",
291
+ "Request",
292
+ "Response",
293
+ "JSONResponse",
294
+ "BackgroundTask",
295
+ "resolver",
296
+ "AppSpec",
297
+ "RouterSpec",
298
+ "TableSpec",
299
+ "TableRegistrySpec",
300
+ "ColumnSpec",
301
+ "FieldSpec",
302
+ "IOSpec",
303
+ "StorageSpec",
304
+ "StorageTransform",
305
+ "StorageTransformSpec",
306
+ "ForeignKeySpec",
307
+ "RequestSpec",
308
+ "SchemaSpec",
309
+ "SessionSpec",
310
+ "EngineSpec",
311
+ "TemplateSpec",
312
+ "ForeignKeyBase",
313
+ "HookBase",
314
+ "TableRegistryBase",
315
+ "AppBase",
316
+ "App",
317
+ "Table",
318
+ "Column",
319
+ "Route",
320
+ "Schema",
321
+ "Hook",
322
+ "ForeignKey",
323
+ "TableRegistry",
324
+ "HOOK_DECLS_ATTR",
325
+ "middleware",
326
+ "middlewares",
327
+ "FileResponse",
328
+ "HTMLResponse",
329
+ "PlainTextResponse",
330
+ "StreamingResponse",
331
+ "RedirectResponse",
332
+ ]
@@ -0,0 +1,3 @@
1
+ """Compatibility shim for relocated config module."""
2
+
3
+ from tigrbl_core.config import * # noqa: F403
@@ -0,0 +1,3 @@
1
+ """Compatibility shim for constants moved to ``tigrbl_core``."""
2
+
3
+ from tigrbl_core.config.constants import * # noqa: F403
@@ -0,0 +1,3 @@
1
+ """Compatibility shim for relocated config defaults."""
2
+
3
+ from tigrbl_core.config.defaults import * # noqa: F403
@@ -0,0 +1,3 @@
1
+ """Compatibility shim for relocated DDL module."""
2
+
3
+ from tigrbl_concrete.ddl import * # noqa: F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.allow_anon import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.engine import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.hook import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.middlewares import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.op import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.response import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.rest import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.router import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.schema import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete._decorators.session import * # noqa: F401,F403
@@ -0,0 +1,11 @@
1
+ # Session Architecture
2
+
3
+ Tigrbl session support is organized across core layers:
4
+
5
+ - `_spec/session_spec.py`: `SessionSpec` policy model plus helpers (`session_spec`, `tx_*`, `readonly`, `wrap_sessionmaker`).
6
+ - `_base/_session_abc.py`: `SessionABC` contract expected by runtime and adapters.
7
+ - `_base/_session_base.py`: `TigrblSessionBase` guardrails and transaction behavior.
8
+ - `_concrete/_session.py`: `DefaultSession` delegating wrapper for provider-native sessions.
9
+ - `decorators/session.py`: `session_ctx` and `read_only_session` decorators for app/router/model/op policy scopes.
10
+
11
+ This design is backend-agnostic and does not depend on specific database drivers.
@@ -0,0 +1 @@
1
+ from tigrbl_concrete.engine import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete.engine.bind import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete.engine.builders import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete.engine.capabilities import * # noqa: F401,F403
@@ -0,0 +1 @@
1
+ from tigrbl_concrete.engine.collect import * # noqa: F401,F403