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.
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/PKG-INFO +5 -2
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/README.md +3 -1
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/pyproject.toml +3 -1
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/__init__.py +2 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_app.py +3 -2
- tigrbl_concrete-0.4.4.dev8/tigrbl_concrete/_concrete/_execution_backend.py +12 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_headers.py +14 -2
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_router.py +3 -2
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_table.py +12 -2
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/tigrbl_app.py +4 -13
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/tigrbl_router.py +4 -13
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/eventful.py +0 -1
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/op.py +10 -4
- tigrbl_concrete-0.4.4.dev8/tigrbl_concrete/_mapping/invoke.py +6 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/model.py +279 -31
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/model_helpers.py +1 -1
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/resource_proxy.py +1 -1
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/rpc.py +1 -1
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/runtime_ops.py +10 -4
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/surface.py +5 -1
- tigrbl_concrete-0.4.4.dev1/tigrbl_concrete/_concrete/_rust_backend.py +0 -36
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/LICENSE +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/NOTICE +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_alias.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_allow_anon.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_background.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_binding.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_body.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_column.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_cors_middleware.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_engine.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_event_stream_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_file_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_hook.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_html_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_httpx.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_json_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_middleware.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_op.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_op_registry.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_plain_text_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_redirect_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_request.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_request_adapters.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_route.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_schema.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/api_key.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/http_basic.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/http_bearer.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/mutual_tls.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/oauth2.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_security/openid_connect.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_session.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_storage.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_streaming_response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_table_registry.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_webhook.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_websocket.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/dependencies.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/engine_resolver.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/allow_anon.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/engine.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/hook.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/middlewares.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/response.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/rest.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/schema.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/session.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_decorators/webhook.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/docs_lowering.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/engine_lowering.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/appspec/path_lowering.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/column_mro_collect.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/core_resolver.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/op_resolver.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/common.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/router/include.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_mapping/rpc.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/ddl/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/decorators.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/bind.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/builders.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/capabilities.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/collect.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/plugins.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/registry.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/engine/resolver.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/factories/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/factories/app.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/factories/webhook.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/resolve/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/resolve/handlers.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/schema/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/schema/jsonrpc.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/security/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/security/dependencies.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/app.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/rest.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/shortcuts/webhook.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/healthz.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/hookz.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/kernelz.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/methodz.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/router.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/diagnostics/utils.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/json_schema.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/lens.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/helpers.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/metadata.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/mount.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openapi/schema.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/openrpc.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/docs/swagger.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/favicon/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/favicon/assets/favicon.svg +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/static.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/uvicorn.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/system/well_known.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/_deprecation.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/jsonrpc/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/jsonrpc/helpers.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/jsonrpc/models.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/rest/__init__.py +0 -0
- {tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/transport/rest/aggregator.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
{tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/__init__.py
RENAMED
|
@@ -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(
|
|
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=
|
|
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}")
|
{tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_headers.py
RENAMED
|
@@ -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
|
-
|
|
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
|
{tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_router.py
RENAMED
|
@@ -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(
|
|
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=
|
|
317
|
+
framing=framing,
|
|
317
318
|
subprotocols=tuple(kwargs.get("subprotocols", ())),
|
|
318
319
|
)
|
|
319
320
|
self._bump_runtime_plan_revision()
|
{tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/_table.py
RENAMED
|
@@ -135,9 +135,17 @@ class RestJsonRpcTable(CrudTable):
|
|
|
135
135
|
TABLE_PROFILE = make_builtin_table_profile("rest_jsonrpc")
|
|
136
136
|
|
|
137
137
|
|
|
138
|
-
class
|
|
138
|
+
class RestBulkCrudTable(CrudTable):
|
|
139
139
|
__abstract__ = True
|
|
140
|
-
TABLE_PROFILE = make_builtin_table_profile("
|
|
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",
|
{tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/tigrbl_app.py
RENAMED
|
@@ -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 .
|
|
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(
|
|
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=
|
|
863
|
+
framing=framing,
|
|
873
864
|
subprotocols=tuple(kwargs.get("subprotocols", ())),
|
|
874
865
|
)
|
|
875
866
|
bump = getattr(self, "_bump_runtime_plan_revision", None)
|
{tigrbl_concrete-0.4.4.dev1 → tigrbl_concrete-0.4.4.dev8}/tigrbl_concrete/_concrete/tigrbl_router.py
RENAMED
|
@@ -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 .
|
|
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(
|
|
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=
|
|
397
|
+
framing=framing,
|
|
407
398
|
subprotocols=tuple(kwargs.get("subprotocols", ())),
|
|
408
399
|
)
|
|
409
400
|
return handler
|
|
@@ -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)
|