tigrbl-concrete 0.4.4.dev1__tar.gz → 0.4.4.dev8__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 (139) hide show
  1. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/PKG-INFO +5 -2
  2. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/README.md +3 -1
  3. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/pyproject.toml +3 -1
  4. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/__init__.py +2 -0
  5. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_app.py +3 -2
  6. tigrbl_concrete-0.4.4.dev8/tigrbl_concrete/_concrete/_execution_backend.py +12 -0
  7. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_headers.py +14 -2
  8. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_router.py +3 -2
  9. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_table.py +12 -2
  10. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/tigrbl_app.py +4 -13
  11. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/tigrbl_router.py +4 -13
  12. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/eventful.py +0 -1
  13. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/op.py +10 -4
  14. tigrbl_concrete-0.4.4.dev8/tigrbl_concrete/_mapping/invoke.py +6 -0
  15. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/model.py +279 -31
  16. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/model_helpers.py +1 -1
  17. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/resource_proxy.py +1 -1
  18. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/rpc.py +1 -1
  19. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/runtime_ops.py +10 -4
  20. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/surface.py +5 -1
  21. tigrbl_concrete-0.4.4.dev1/tigrbl_concrete/_concrete/_rust_backend.py +0 -36
  22. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/LICENSE +0 -0
  23. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/NOTICE +0 -0
  24. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/__init__.py +0 -0
  25. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_alias.py +0 -0
  26. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_allow_anon.py +0 -0
  27. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_background.py +0 -0
  28. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_binding.py +0 -0
  29. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_body.py +0 -0
  30. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_column.py +0 -0
  31. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_cors_middleware.py +0 -0
  32. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_engine.py +0 -0
  33. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_event_stream_response.py +0 -0
  34. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_file_response.py +0 -0
  35. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_hook.py +0 -0
  36. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_html_response.py +0 -0
  37. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_httpx.py +0 -0
  38. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_json_response.py +0 -0
  39. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_middleware.py +0 -0
  40. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_op.py +0 -0
  41. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_op_registry.py +0 -0
  42. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_plain_text_response.py +0 -0
  43. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_redirect_response.py +0 -0
  44. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_request.py +0 -0
  45. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_request_adapters.py +0 -0
  46. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_response.py +0 -0
  47. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_route.py +0 -0
  48. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_schema.py +0 -0
  49. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/__init__.py +0 -0
  50. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/api_key.py +0 -0
  51. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/http_basic.py +0 -0
  52. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/http_bearer.py +0 -0
  53. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/mutual_tls.py +0 -0
  54. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/oauth2.py +0 -0
  55. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/openid_connect.py +0 -0
  56. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_session.py +0 -0
  57. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_storage.py +0 -0
  58. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_streaming_response.py +0 -0
  59. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_table_registry.py +0 -0
  60. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_webhook.py +0 -0
  61. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_websocket.py +0 -0
  62. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/dependencies.py +0 -0
  63. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/engine_resolver.py +0 -0
  64. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/__init__.py +0 -0
  65. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/allow_anon.py +0 -0
  66. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/engine.py +0 -0
  67. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/hook.py +0 -0
  68. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/middlewares.py +0 -0
  69. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/response.py +0 -0
  70. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/rest.py +0 -0
  71. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/schema.py +0 -0
  72. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/session.py +0 -0
  73. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/webhook.py +0 -0
  74. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/__init__.py +0 -0
  75. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/__init__.py +0 -0
  76. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/docs_lowering.py +0 -0
  77. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/engine_lowering.py +0 -0
  78. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/path_lowering.py +0 -0
  79. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/column_mro_collect.py +0 -0
  80. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/core_resolver.py +0 -0
  81. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/op_resolver.py +0 -0
  82. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/__init__.py +0 -0
  83. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/common.py +0 -0
  84. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/include.py +0 -0
  85. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/rpc.py +0 -0
  86. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/ddl/__init__.py +0 -0
  87. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/decorators.py +0 -0
  88. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/__init__.py +0 -0
  89. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/bind.py +0 -0
  90. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/builders.py +0 -0
  91. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/capabilities.py +0 -0
  92. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/collect.py +0 -0
  93. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/plugins.py +0 -0
  94. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/registry.py +0 -0
  95. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/resolver.py +0 -0
  96. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/factories/__init__.py +0 -0
  97. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/factories/app.py +0 -0
  98. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/factories/webhook.py +0 -0
  99. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/resolve/__init__.py +0 -0
  100. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/resolve/handlers.py +0 -0
  101. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/schema/__init__.py +0 -0
  102. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/schema/jsonrpc.py +0 -0
  103. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/security/__init__.py +0 -0
  104. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/security/dependencies.py +0 -0
  105. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/__init__.py +0 -0
  106. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/app.py +0 -0
  107. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/rest.py +0 -0
  108. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/webhook.py +0 -0
  109. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/__init__.py +0 -0
  110. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/__init__.py +0 -0
  111. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/healthz.py +0 -0
  112. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/hookz.py +0 -0
  113. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/kernelz.py +0 -0
  114. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/methodz.py +0 -0
  115. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/router.py +0 -0
  116. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/utils.py +0 -0
  117. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/__init__.py +0 -0
  118. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/json_schema.py +0 -0
  119. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/lens.py +0 -0
  120. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/__init__.py +0 -0
  121. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/helpers.py +0 -0
  122. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/metadata.py +0 -0
  123. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/mount.py +0 -0
  124. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/schema.py +0 -0
  125. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openrpc.py +0 -0
  126. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/swagger.py +0 -0
  127. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/favicon/__init__.py +0 -0
  128. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/favicon/assets/favicon.svg +0 -0
  129. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/static.py +0 -0
  130. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/uvicorn.py +0 -0
  131. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/well_known.py +0 -0
  132. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/__init__.py +0 -0
  133. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/_deprecation.py +0 -0
  134. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/jsonrpc/__init__.py +0 -0
  135. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/jsonrpc/helpers.py +0 -0
  136. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/jsonrpc/models.py +0 -0
  137. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/rest/__init__.py +0 -0
  138. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/rest/aggregator.py +0 -0
  139. {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/webhooks.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrbl-concrete
3
- Version: 0.4.4.dev1
3
+ Version: 0.4.4.dev8
4
4
  Summary: Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -234,6 +234,7 @@ Requires-Dist: tigrbl-core
234
234
  Requires-Dist: tigrbl-ops-olap
235
235
  Requires-Dist: tigrbl-ops-oltp
236
236
  Requires-Dist: tigrbl-ops-realtime
237
+ Requires-Dist: tigrbl-ops-webtransport
237
238
  Requires-Dist: tigrbl-runtime
238
239
  Requires-Dist: tigrbl-typing
239
240
  Requires-Dist: uvicorn
@@ -337,7 +338,7 @@ Package catalog:
337
338
 
338
339
  - Import roots: `tigrbl_concrete`.
339
340
  - Public symbols: public surface is module-oriented; import the package boundary and inspect submodules as needed.
340
- - Workspace dependencies: [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
341
+ - Workspace dependencies: [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-ops-webtransport`](https://pypi.org/project/tigrbl-ops-webtransport/), [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/), [`tigrbl-kernel`](https://pypi.org/project/tigrbl-kernel/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
341
342
  - External runtime dependencies: `orjson`, `pydantic>=2.0`, `sqlalchemy`, `uvicorn`.
342
343
 
343
344
  ## Concrete Implementation Semantics
@@ -466,7 +467,9 @@ Choose `tigrbl-concrete` when the quick-answer table matches your use case. Choo
466
467
  - [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/)
467
468
  - [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/)
468
469
  - [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/)
470
+ - [`tigrbl-ops-webtransport`](https://pypi.org/project/tigrbl-ops-webtransport/)
469
471
  - [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/)
472
+ - [`tigrbl-kernel`](https://pypi.org/project/tigrbl-kernel/)
470
473
  - [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/)
471
474
  - [`tigrbl`](https://pypi.org/project/tigrbl/)
472
475
 
@@ -91,7 +91,7 @@ Package catalog:
91
91
 
92
92
  - Import roots: `tigrbl_concrete`.
93
93
  - Public symbols: public surface is module-oriented; import the package boundary and inspect submodules as needed.
94
- - Workspace dependencies: [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
94
+ - Workspace dependencies: [`tigrbl-atoms`](https://pypi.org/project/tigrbl-atoms/), [`tigrbl-base`](https://pypi.org/project/tigrbl-base/), [`tigrbl-core`](https://pypi.org/project/tigrbl-core/), [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/), [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/), [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/), [`tigrbl-ops-webtransport`](https://pypi.org/project/tigrbl-ops-webtransport/), [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/), [`tigrbl-kernel`](https://pypi.org/project/tigrbl-kernel/), [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/).
95
95
  - External runtime dependencies: `orjson`, `pydantic>=2.0`, `sqlalchemy`, `uvicorn`.
96
96
 
97
97
  ## Concrete Implementation Semantics
@@ -220,7 +220,9 @@ Choose `tigrbl-concrete` when the quick-answer table matches your use case. Choo
220
220
  - [`tigrbl-ops-olap`](https://pypi.org/project/tigrbl-ops-olap/)
221
221
  - [`tigrbl-ops-oltp`](https://pypi.org/project/tigrbl-ops-oltp/)
222
222
  - [`tigrbl-ops-realtime`](https://pypi.org/project/tigrbl-ops-realtime/)
223
+ - [`tigrbl-ops-webtransport`](https://pypi.org/project/tigrbl-ops-webtransport/)
223
224
  - [`tigrbl-runtime`](https://pypi.org/project/tigrbl-runtime/)
225
+ - [`tigrbl-kernel`](https://pypi.org/project/tigrbl-kernel/)
224
226
  - [`tigrbl-typing`](https://pypi.org/project/tigrbl-typing/)
225
227
  - [`tigrbl`](https://pypi.org/project/tigrbl/)
226
228
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tigrbl-concrete"
3
- version = "0.4.4.dev1"
3
+ version = "0.4.4.dev8"
4
4
  description = "Concrete Tigrbl implementations for reusable framework behavior, sessions, routes, responses, and base abstraction adapters."
5
5
  readme = "README.md"
6
6
  license = { file = "LICENSE" }
@@ -50,6 +50,7 @@ dependencies = [
50
50
  "tigrbl-ops-olap",
51
51
  "tigrbl-ops-oltp",
52
52
  "tigrbl-ops-realtime",
53
+ "tigrbl-ops-webtransport",
53
54
  "tigrbl-runtime",
54
55
  "tigrbl-typing",
55
56
  "uvicorn",
@@ -70,6 +71,7 @@ Issues = "https://github.com/tigrbl/tigrbl/issues"
70
71
  "tigrbl-ops-olap" = { workspace = true }
71
72
  "tigrbl-ops-oltp" = { workspace = true }
72
73
  "tigrbl-ops-realtime" = { workspace = true }
74
+ "tigrbl-ops-webtransport" = { workspace = true }
73
75
  "tigrbl-runtime" = { workspace = true }
74
76
  "tigrbl-typing" = { workspace = true }
75
77
 
@@ -22,12 +22,14 @@ _EXPORTS = {
22
22
  "BulkCrudTable": "_table",
23
23
  "CrudTable": "_table",
24
24
  "EventStreamTable": "_table",
25
+ "JsonRpcBulkCrudTable": "_table",
25
26
  "JsonRpcOlapTable": "_table",
26
27
  "JsonRpcOltpTable": "_table",
27
28
  "JsonRpcTable": "_table",
28
29
  "OlapTable": "_table",
29
30
  "OltpTable": "_table",
30
31
  "RealtimeTable": "_table",
32
+ "RestBulkCrudTable": "_table",
31
33
  "RestJsonRpcOlapTable": "_table",
32
34
  "RestJsonRpcOltpTable": "_table",
33
35
  "RestJsonRpcTable": "_table",
@@ -240,6 +240,7 @@ class App(AppBase):
240
240
  normalized_path = full_path.rstrip("/") or "/"
241
241
  pattern, param_names = compile_path(normalized_path)
242
242
  route_name = kwargs.get("name", getattr(handler, "__name__", "websocket"))
243
+ framing = kwargs.get("framing", "text")
243
244
  self.websocket_routes.append(
244
245
  WebSocketRoute(
245
246
  path_template=normalized_path,
@@ -251,7 +252,7 @@ class App(AppBase):
251
252
  exchange=str(
252
253
  kwargs.get("exchange", "bidirectional_stream")
253
254
  ),
254
- framing=str(kwargs.get("framing", "text")),
255
+ framing=str(framing),
255
256
  summary=kwargs.get("summary"),
256
257
  description=kwargs.get("description"),
257
258
  tags=kwargs.get("tags"),
@@ -264,7 +265,7 @@ class App(AppBase):
264
265
  endpoint=handler,
265
266
  protocol=str(kwargs.get("protocol", kwargs.get("proto", "ws"))),
266
267
  exchange=str(kwargs.get("exchange", "bidirectional_stream")),
267
- framing=str(kwargs.get("framing", "text")),
268
+ framing=framing,
268
269
  subprotocols=tuple(kwargs.get("subprotocols", ())),
269
270
  )
270
271
  bump = getattr(self, "_bump_runtime_plan_revision", None)
@@ -0,0 +1,12 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+
6
+ def normalize_execution_backend(value: Any) -> str:
7
+ lowered = str(value or "auto").strip().lower()
8
+ if not lowered:
9
+ return "auto"
10
+ if lowered in {"auto", "python"}:
11
+ return lowered
12
+ raise ValueError(f"unsupported execution backend: {value!r}")
@@ -6,6 +6,8 @@ from collections.abc import Iterable, Mapping, MutableMapping
6
6
  from typing import Any
7
7
  from http.cookies import SimpleCookie
8
8
 
9
+ from tigrbl_core._spec.headers_spec import HeadersSpec
10
+
9
11
 
10
12
  class HeaderCookies(dict[str, str]):
11
13
  """Dot-addressable cookie mapping parsed from a Cookie header value."""
@@ -34,12 +36,15 @@ class Headers(MutableMapping[str, str]):
34
36
 
35
37
  def __init__(
36
38
  self,
37
- values: Iterable[tuple[str, str]] | Mapping[str, str] | None = None,
39
+ values: Iterable[tuple[str, str]] | Mapping[str, str] | HeadersSpec | None = None,
38
40
  ) -> None:
39
41
  self._data: dict[str, tuple[str, str]] = {}
40
42
  if values is None:
41
43
  return
42
- items = values.items() if hasattr(values, "items") else values
44
+ if isinstance(values, HeadersSpec):
45
+ items = values.values.items()
46
+ else:
47
+ items = values.items() if hasattr(values, "items") else values
43
48
  for key, value in items:
44
49
  self[key] = self._normalize_value(value)
45
50
 
@@ -101,6 +106,13 @@ class Headers(MutableMapping[str, str]):
101
106
  def as_list(self) -> list[tuple[str, str]]:
102
107
  return list(self.items())
103
108
 
109
+ @property
110
+ def raw_headers(self) -> list[tuple[bytes, bytes]]:
111
+ return [
112
+ (key.encode("latin-1"), value.encode("latin-1"))
113
+ for key, value in self.items()
114
+ ]
115
+
104
116
  def append(self, item: tuple[str, str]) -> None:
105
117
  key, value = item
106
118
  self[key] = value
@@ -289,6 +289,7 @@ class Router(RouterBase):
289
289
  normalized_path = full_path.rstrip("/") or "/"
290
290
  pattern, param_names = compile_path(normalized_path)
291
291
  route_name = kwargs.get("name", getattr(handler, "__name__", "websocket"))
292
+ framing = kwargs.get("framing", "text")
292
293
  self.websocket_routes.append(
293
294
  WebSocketRoute(
294
295
  path_template=normalized_path,
@@ -300,7 +301,7 @@ class Router(RouterBase):
300
301
  exchange=str(
301
302
  kwargs.get("exchange", "bidirectional_stream")
302
303
  ),
303
- framing=str(kwargs.get("framing", "text")),
304
+ framing=str(framing),
304
305
  summary=kwargs.get("summary"),
305
306
  description=kwargs.get("description"),
306
307
  tags=kwargs.get("tags"),
@@ -313,7 +314,7 @@ class Router(RouterBase):
313
314
  endpoint=handler,
314
315
  protocol=str(kwargs.get("protocol", kwargs.get("proto", "ws"))),
315
316
  exchange=str(kwargs.get("exchange", "bidirectional_stream")),
316
- framing=str(kwargs.get("framing", "text")),
317
+ framing=framing,
317
318
  subprotocols=tuple(kwargs.get("subprotocols", ())),
318
319
  )
319
320
  self._bump_runtime_plan_revision()
@@ -135,9 +135,17 @@ class RestJsonRpcTable(CrudTable):
135
135
  TABLE_PROFILE = make_builtin_table_profile("rest_jsonrpc")
136
136
 
137
137
 
138
- class BulkCrudTable(CrudTable):
138
+ class RestBulkCrudTable(CrudTable):
139
139
  __abstract__ = True
140
- TABLE_PROFILE = make_builtin_table_profile("bulk_crud")
140
+ TABLE_PROFILE = make_builtin_table_profile("rest_bulk_crud")
141
+
142
+
143
+ class JsonRpcBulkCrudTable(CrudTable):
144
+ __abstract__ = True
145
+ TABLE_PROFILE = make_builtin_table_profile("jsonrpc_bulk_crud")
146
+
147
+
148
+ BulkCrudTable = RestBulkCrudTable
141
149
 
142
150
 
143
151
  class RestOltpTable(CrudTable):
@@ -232,12 +240,14 @@ __all__ = [
232
240
  "BulkCrudTable",
233
241
  "CrudTable",
234
242
  "EventStreamTable",
243
+ "JsonRpcBulkCrudTable",
235
244
  "JsonRpcOlapTable",
236
245
  "JsonRpcOltpTable",
237
246
  "JsonRpcTable",
238
247
  "OlapTable",
239
248
  "OltpTable",
240
249
  "RealtimeTable",
250
+ "RestBulkCrudTable",
241
251
  "RestJsonRpcOlapTable",
242
252
  "RestJsonRpcOltpTable",
243
253
  "RestJsonRpcTable",
@@ -69,11 +69,7 @@ from tigrbl_core.config.constants import (
69
69
  __JSONRPC_DEFAULT_ENDPOINT__,
70
70
  )
71
71
  from tigrbl_concrete.system.favicon import FAVICON_PATH, mount_favicon
72
- from ._rust_backend import (
73
- clear_ffi_boundary_events as _clear_rust_boundary_events,
74
- ffi_boundary_events as _rust_boundary_events,
75
- normalize_execution_backend as _normalize_execution_backend,
76
- )
72
+ from ._execution_backend import normalize_execution_backend as _normalize_execution_backend
77
73
 
78
74
 
79
75
  # optional compat: legacy transactional decorator
@@ -316,12 +312,6 @@ class TigrblApp(_App):
316
312
  ):
317
313
  self.include_table(self.__class__)
318
314
 
319
- def rust_trace(self) -> list[dict[str, Any]]:
320
- return _rust_boundary_events()
321
-
322
- def clear_rust_trace(self) -> None:
323
- _clear_rust_boundary_events()
324
-
325
315
  def _has_local_op_declarations(self) -> bool:
326
316
  """Return True when the app subclass declares op_alias/op_ctx operations."""
327
317
  app_cls = self.__class__
@@ -845,6 +835,7 @@ class TigrblApp(_App):
845
835
  normalized_path = full_path.rstrip("/") or "/"
846
836
  pattern, param_names = compile_path(normalized_path)
847
837
  route_name = kwargs.get("name", getattr(handler, "__name__", "websocket"))
838
+ framing = kwargs.get("framing", "text")
848
839
  self.websocket_routes.append(
849
840
  WebSocketRoute(
850
841
  path_template=normalized_path,
@@ -856,7 +847,7 @@ class TigrblApp(_App):
856
847
  exchange=str(
857
848
  kwargs.get("exchange", "bidirectional_stream")
858
849
  ),
859
- framing=str(kwargs.get("framing", "text")),
850
+ framing=str(framing),
860
851
  summary=kwargs.get("summary"),
861
852
  description=kwargs.get("description"),
862
853
  tags=kwargs.get("tags"),
@@ -869,7 +860,7 @@ class TigrblApp(_App):
869
860
  endpoint=handler,
870
861
  protocol=str(kwargs.get("protocol", kwargs.get("proto", "ws"))),
871
862
  exchange=str(kwargs.get("exchange", "bidirectional_stream")),
872
- framing=str(kwargs.get("framing", "text")),
863
+ framing=framing,
873
864
  subprotocols=tuple(kwargs.get("subprotocols", ())),
874
865
  )
875
866
  bump = getattr(self, "_bump_runtime_plan_revision", None)
@@ -39,11 +39,7 @@ from tigrbl_concrete.system import mount_diagnostics as _mount_diagnostics
39
39
  from tigrbl_concrete.system.docs import build_openapi as _build_openapi
40
40
  from tigrbl_concrete._concrete import engine_resolver as _resolver
41
41
  from ._engine import Engine
42
- from ._rust_backend import (
43
- clear_ffi_boundary_events as _clear_rust_boundary_events,
44
- ffi_boundary_events as _rust_boundary_events,
45
- normalize_execution_backend as _normalize_execution_backend,
46
- )
42
+ from ._execution_backend import normalize_execution_backend as _normalize_execution_backend
47
43
 
48
44
 
49
45
  class TigrblRouter(_Router):
@@ -151,12 +147,6 @@ class TigrblRouter(_Router):
151
147
  if tables:
152
148
  self.include_tables(list(tables))
153
149
 
154
- def rust_trace(self) -> list[dict[str, Any]]:
155
- return _rust_boundary_events()
156
-
157
- def clear_rust_trace(self) -> None:
158
- _clear_rust_boundary_events()
159
-
160
150
  # ------------------------- internal helpers -------------------------
161
151
 
162
152
  @staticmethod
@@ -379,6 +369,7 @@ class TigrblRouter(_Router):
379
369
  normalized_path = full_path.rstrip("/") or "/"
380
370
  pattern, param_names = compile_path(normalized_path)
381
371
  route_name = kwargs.get("name", getattr(handler, "__name__", "websocket"))
372
+ framing = kwargs.get("framing", "text")
382
373
  self.websocket_routes.append(
383
374
  WebSocketRoute(
384
375
  path_template=normalized_path,
@@ -390,7 +381,7 @@ class TigrblRouter(_Router):
390
381
  exchange=str(
391
382
  kwargs.get("exchange", "bidirectional_stream")
392
383
  ),
393
- framing=str(kwargs.get("framing", "text")),
384
+ framing=str(framing),
394
385
  summary=kwargs.get("summary"),
395
386
  description=kwargs.get("description"),
396
387
  tags=kwargs.get("tags"),
@@ -403,7 +394,7 @@ class TigrblRouter(_Router):
403
394
  endpoint=handler,
404
395
  protocol=str(kwargs.get("protocol", kwargs.get("proto", "ws"))),
405
396
  exchange=str(kwargs.get("exchange", "bidirectional_stream")),
406
- framing=str(kwargs.get("framing", "text")),
397
+ framing=framing,
407
398
  subprotocols=tuple(kwargs.get("subprotocols", ())),
408
399
  )
409
400
  return handler
@@ -22,7 +22,6 @@ _DECORATOR_BINDINGS: dict[str, dict[str, str]] = {
22
22
  "webtransport_ctx": {
23
23
  "proto": "webtransport",
24
24
  "exchange": "bidirectional_stream",
25
- "framing": "webtransport",
26
25
  },
27
26
  }
28
27
 
@@ -8,11 +8,13 @@ from typing import Any, Callable, Iterable, Optional, Sequence, Union
8
8
  from tigrbl_core._spec.binding_spec import (
9
9
  Exchange,
10
10
  Framing,
11
+ FramingSpec,
11
12
  HttpStreamBindingSpec,
12
13
  SseBindingSpec,
13
14
  TransportBindingSpec,
14
15
  WebTransportBindingSpec,
15
16
  WsBindingSpec,
17
+ framing_spec_from_kind,
16
18
  )
17
19
  from tigrbl_core._spec.op_spec import (
18
20
  Arity,
@@ -273,11 +275,15 @@ def _normalize_bindings(
273
275
  return (value,)
274
276
 
275
277
 
278
+ def _normalize_framing_arg(framing: Framing | FramingSpec | None) -> FramingSpec | None:
279
+ return framing_spec_from_kind(framing)
280
+
281
+
276
282
  def websocket_ctx(
277
283
  path: str,
278
284
  *,
279
285
  proto: str = "ws",
280
- framing: Framing = "text",
286
+ framing: Framing | FramingSpec = "text",
281
287
  subprotocols: Sequence[str] | None = None,
282
288
  **kwargs: Any,
283
289
  ):
@@ -285,7 +291,7 @@ def websocket_ctx(
285
291
  proto=proto,
286
292
  path=path,
287
293
  subprotocols=tuple(subprotocols or ()),
288
- framing=framing,
294
+ framing=_normalize_framing_arg(framing),
289
295
  )
290
296
  exchange = kwargs.pop("exchange", binding.exchange)
291
297
  return op_ctx(bindings=(binding,), exchange=exchange, **kwargs)
@@ -308,14 +314,14 @@ def stream_ctx(
308
314
  *,
309
315
  proto: str = "http.stream",
310
316
  methods: Sequence[str] | None = None,
311
- framing: Framing = "stream",
317
+ framing: Framing | FramingSpec = "stream",
312
318
  **kwargs: Any,
313
319
  ):
314
320
  binding = HttpStreamBindingSpec(
315
321
  proto=proto,
316
322
  path=path,
317
323
  methods=tuple(methods or ("GET",)),
318
- framing=framing,
324
+ framing=_normalize_framing_arg(framing),
319
325
  )
320
326
  exchange = kwargs.pop("exchange", binding.exchange)
321
327
  return op_ctx(bindings=(binding,), exchange=exchange, **kwargs)
@@ -0,0 +1,6 @@
1
+ from __future__ import annotations
2
+
3
+ from tigrbl_runtime.executors.kernel_executor import invoke_op, resolve_phase_chains
4
+
5
+
6
+ __all__ = ["invoke_op", "resolve_phase_chains"]