tigrbl-kernel 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_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/PKG-INFO +3 -4
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/README.md +2 -3
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/pyproject.toml +1 -1
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/_compile.py +123 -18
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/contract_classification.py +4 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/core.py +0 -4
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/cross_transport.py +3 -3
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_anchors.py +0 -12
- tigrbl_kernel-0.4.4.dev8/tigrbl_kernel/protocol_bindings.py +456 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/types.py +4 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/utils.py +2 -2
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/webtransport_events.py +6 -3
- tigrbl_kernel-0.4.4.dev1/tigrbl_kernel/protocol_bindings.py +0 -284
- tigrbl_kernel-0.4.4.dev1/tigrbl_kernel/rust_compile.py +0 -24
- tigrbl_kernel-0.4.4.dev1/tigrbl_kernel/rust_plan.py +0 -20
- tigrbl_kernel-0.4.4.dev1/tigrbl_kernel/rust_spec.py +0 -36
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/LICENSE +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/NOTICE +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/__init__.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/_build.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/atoms.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/cache.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/callbacks.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/channel_taxonomy.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/dispatch_taxonomy.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/eventkey.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/eventkey_hooks.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/events.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/helpers.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/hook_types.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/labels.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/lifecycle_matrix.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/loop_modes.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/loop_regions.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/measure.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/models.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/opchannel_capabilities.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/opview_compiler.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/ordering.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/packed_access.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/packed_selectors.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/payload.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_chains/__init__.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_chains/http_stream.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_chains/http_unary.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_chains/lifespan.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_chains/sse.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_chains/static_files.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_chains/websocket.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_completion.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_fusion.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_legality_matrix.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_phase_tree.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/protocol_streams.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/resume_policy.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/runtime_contracts.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/segment_fusion.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/subevent_handlers.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/subevent_taxonomy.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/trace.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/transaction_units.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/transport_atoms.py +0 -0
- {tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/transport_events.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tigrbl-kernel
|
|
3
|
-
Version: 0.4.4.
|
|
3
|
+
Version: 0.4.4.dev8
|
|
4
4
|
Summary: Kernel orchestration for composing Tigrbl runtime plans, bindings, operation dispatch, and optimized ASGI execution.
|
|
5
5
|
License: Apache License
|
|
6
6
|
Version 2.0, January 2004
|
|
@@ -318,7 +318,6 @@ Package catalog:
|
|
|
318
318
|
- `tigrbl_kernel/protocol_bindings.py`, `tigrbl_kernel/protocol_phase_tree.py`, `tigrbl_kernel/protocol_chains/`, `tigrbl_kernel/protocol_completion.py`, `tigrbl_kernel/protocol_fusion.py`, and `tigrbl_kernel/protocol_legality_matrix.py`: transport-specific plan compilation, phase tree construction, chain definitions, completion semantics, fusion, and legality checks.
|
|
319
319
|
- `tigrbl_kernel/eventkey.py`, `tigrbl_kernel/events.py`, `tigrbl_kernel/transport_events.py`, `tigrbl_kernel/webtransport_events.py`, `tigrbl_kernel/subevent_taxonomy.py`, and `tigrbl_kernel/subevent_handlers.py`: event-key construction, subevent taxonomy, and protocol subevent handler mapping.
|
|
320
320
|
- `tigrbl_kernel/opchannel_capabilities.py`, `tigrbl_kernel/loop_modes.py`, `tigrbl_kernel/loop_regions.py`, `tigrbl_kernel/segment_fusion.py`, and `tigrbl_kernel/contract_classification.py`: channel capability checks, loop planning, segment grouping, and contract classification.
|
|
321
|
-
- `tigrbl_kernel/rust_plan.py`, `tigrbl_kernel/rust_compile.py`, and `tigrbl_kernel/rust_spec.py`: deprecated compatibility shims; kernel planning is Python-only.
|
|
322
321
|
|
|
323
322
|
## Public API and Import Surface
|
|
324
323
|
|
|
@@ -354,9 +353,9 @@ Protocol planning keeps binding kind, family, framing, exchange, lane, subevent
|
|
|
354
353
|
| `http.stream` / `https.stream` | stream | stream | handler invoke, transport emit, stream close. |
|
|
355
354
|
| `http.sse` / `https.sse` | stream | SSE | encode event, emit event, close stream. |
|
|
356
355
|
| `ws` / `wss` / `websocket` | message | text or negotiated JSON-RPC | accept, decode, dispatch, handler, emit/close. |
|
|
357
|
-
| `webtransport` | session, stream, or datagram |
|
|
356
|
+
| `webtransport` | session, stream, or datagram | no top-level app framing | lane-specific session, stream, or datagram rows with lane-local framing validation. |
|
|
358
357
|
|
|
359
|
-
Unsupported or ambiguous bindings raise planning errors. For example, WebSocket bindings do not accept HTTP methods, HTTP JSON-RPC requires an RPC method, WebTransport request/response exchange is unsupported, and WebTransport
|
|
358
|
+
Unsupported or ambiguous bindings raise planning errors. For example, WebSocket bindings do not accept HTTP methods, HTTP JSON-RPC requires an RPC method, WebTransport request/response exchange is unsupported, and WebTransport app framing must be declared on the relevant control stream, stream, or datagram lane.
|
|
360
359
|
|
|
361
360
|
## Hook Ordering and Labels
|
|
362
361
|
|
|
@@ -81,7 +81,6 @@ Package catalog:
|
|
|
81
81
|
- `tigrbl_kernel/protocol_bindings.py`, `tigrbl_kernel/protocol_phase_tree.py`, `tigrbl_kernel/protocol_chains/`, `tigrbl_kernel/protocol_completion.py`, `tigrbl_kernel/protocol_fusion.py`, and `tigrbl_kernel/protocol_legality_matrix.py`: transport-specific plan compilation, phase tree construction, chain definitions, completion semantics, fusion, and legality checks.
|
|
82
82
|
- `tigrbl_kernel/eventkey.py`, `tigrbl_kernel/events.py`, `tigrbl_kernel/transport_events.py`, `tigrbl_kernel/webtransport_events.py`, `tigrbl_kernel/subevent_taxonomy.py`, and `tigrbl_kernel/subevent_handlers.py`: event-key construction, subevent taxonomy, and protocol subevent handler mapping.
|
|
83
83
|
- `tigrbl_kernel/opchannel_capabilities.py`, `tigrbl_kernel/loop_modes.py`, `tigrbl_kernel/loop_regions.py`, `tigrbl_kernel/segment_fusion.py`, and `tigrbl_kernel/contract_classification.py`: channel capability checks, loop planning, segment grouping, and contract classification.
|
|
84
|
-
- `tigrbl_kernel/rust_plan.py`, `tigrbl_kernel/rust_compile.py`, and `tigrbl_kernel/rust_spec.py`: deprecated compatibility shims; kernel planning is Python-only.
|
|
85
84
|
|
|
86
85
|
## Public API and Import Surface
|
|
87
86
|
|
|
@@ -117,9 +116,9 @@ Protocol planning keeps binding kind, family, framing, exchange, lane, subevent
|
|
|
117
116
|
| `http.stream` / `https.stream` | stream | stream | handler invoke, transport emit, stream close. |
|
|
118
117
|
| `http.sse` / `https.sse` | stream | SSE | encode event, emit event, close stream. |
|
|
119
118
|
| `ws` / `wss` / `websocket` | message | text or negotiated JSON-RPC | accept, decode, dispatch, handler, emit/close. |
|
|
120
|
-
| `webtransport` | session, stream, or datagram |
|
|
119
|
+
| `webtransport` | session, stream, or datagram | no top-level app framing | lane-specific session, stream, or datagram rows with lane-local framing validation. |
|
|
121
120
|
|
|
122
|
-
Unsupported or ambiguous bindings raise planning errors. For example, WebSocket bindings do not accept HTTP methods, HTTP JSON-RPC requires an RPC method, WebTransport request/response exchange is unsupported, and WebTransport
|
|
121
|
+
Unsupported or ambiguous bindings raise planning errors. For example, WebSocket bindings do not accept HTTP methods, HTTP JSON-RPC requires an RPC method, WebTransport request/response exchange is unsupported, and WebTransport app framing must be declared on the relevant control stream, stream, or datagram lane.
|
|
123
122
|
|
|
124
123
|
## Hook Ordering and Labels
|
|
125
124
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tigrbl-kernel"
|
|
3
|
-
version = "0.4.4.
|
|
3
|
+
version = "0.4.4.dev8"
|
|
4
4
|
description = "Kernel orchestration for composing Tigrbl runtime plans, bindings, operation dispatch, and optimized ASGI execution."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { file = "LICENSE" }
|
|
@@ -5,7 +5,17 @@ from types import SimpleNamespace
|
|
|
5
5
|
from typing import Any, Mapping
|
|
6
6
|
|
|
7
7
|
from tigrbl_atoms import StepFn
|
|
8
|
-
from tigrbl_core._spec.binding_spec import
|
|
8
|
+
from tigrbl_core._spec.binding_spec import (
|
|
9
|
+
HttpJsonRpcProtocolBindingSpec,
|
|
10
|
+
HttpRestBindingSpec,
|
|
11
|
+
HttpRestProtocolBindingSpec,
|
|
12
|
+
WebSocketProtocolBindingSpec,
|
|
13
|
+
WebTransportProtocolBindingSpec,
|
|
14
|
+
derive_websocket_subprotocol_for_framing,
|
|
15
|
+
derive_session_metadata_for_framing,
|
|
16
|
+
framing_kind,
|
|
17
|
+
framing_spec_name,
|
|
18
|
+
)
|
|
9
19
|
from tigrbl_core.config.constants import __JSONRPC_DEFAULT_ENDPOINT__
|
|
10
20
|
from tigrbl_core._spec.op_spec import OpSpec
|
|
11
21
|
from tigrbl_core._spec.well_known_spec import well_known_op_alias
|
|
@@ -28,6 +38,69 @@ from .utils import (
|
|
|
28
38
|
DEFAULT_PHASE_ORDER = tuple(getattr(_ev, "PHASES", ())) or _DEFAULT_PHASE_ORDER
|
|
29
39
|
|
|
30
40
|
|
|
41
|
+
def _route_metadata_for_binding(binding: Any) -> dict[str, Any]:
|
|
42
|
+
framing_obj = getattr(binding, "framing", None)
|
|
43
|
+
framing = framing_kind(framing_obj)
|
|
44
|
+
metadata: dict[str, Any] = {
|
|
45
|
+
"framing": framing,
|
|
46
|
+
"framing_kind": framing,
|
|
47
|
+
"framing_spec": framing_spec_name(framing_obj),
|
|
48
|
+
}
|
|
49
|
+
proto = str(getattr(binding, "proto", "") or "")
|
|
50
|
+
if isinstance(binding, WebSocketProtocolBindingSpec):
|
|
51
|
+
derived_subprotocol = derive_websocket_subprotocol_for_framing(framing_obj)
|
|
52
|
+
if derived_subprotocol is not None:
|
|
53
|
+
metadata["websocket_subprotocol"] = derived_subprotocol
|
|
54
|
+
elif proto in {"ws", "wss"}:
|
|
55
|
+
metadata.update(
|
|
56
|
+
derive_session_metadata_for_framing(
|
|
57
|
+
binding_kind=proto,
|
|
58
|
+
framing=framing_obj,
|
|
59
|
+
subprotocols=tuple(getattr(binding, "subprotocols", ()) or ()),
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
if isinstance(binding, WebTransportProtocolBindingSpec):
|
|
63
|
+
if binding.control_stream is not None:
|
|
64
|
+
control = binding.control_stream
|
|
65
|
+
metadata["control_stream"] = {
|
|
66
|
+
"name": control.name,
|
|
67
|
+
"kind": control.kind,
|
|
68
|
+
"opens": control.opens,
|
|
69
|
+
"purpose": control.purpose,
|
|
70
|
+
"framing": framing_kind(control.framing),
|
|
71
|
+
"framing_spec": framing_spec_name(control.framing),
|
|
72
|
+
}
|
|
73
|
+
metadata["streams"] = tuple(
|
|
74
|
+
{
|
|
75
|
+
"name": stream.name,
|
|
76
|
+
"kind": stream.kind,
|
|
77
|
+
"purpose": stream.purpose,
|
|
78
|
+
"framing": framing_kind(stream.framing),
|
|
79
|
+
"framing_spec": framing_spec_name(stream.framing),
|
|
80
|
+
}
|
|
81
|
+
for stream in binding.streams
|
|
82
|
+
)
|
|
83
|
+
metadata["datagrams"] = tuple(
|
|
84
|
+
{
|
|
85
|
+
"name": datagram.name,
|
|
86
|
+
"purpose": datagram.purpose,
|
|
87
|
+
"framing": framing_kind(datagram.framing),
|
|
88
|
+
"framing_spec": framing_spec_name(datagram.framing),
|
|
89
|
+
}
|
|
90
|
+
for datagram in binding.datagrams
|
|
91
|
+
)
|
|
92
|
+
elif proto == "webtransport":
|
|
93
|
+
lane = getattr(binding, "lane", None) or getattr(binding, "profile", None)
|
|
94
|
+
inner_framing = getattr(binding, "inner_framing", None)
|
|
95
|
+
metadata["lane"] = lane
|
|
96
|
+
metadata["inner_framing"] = framing_kind(inner_framing)
|
|
97
|
+
metadata["inner_framing_spec"] = framing_spec_name(inner_framing)
|
|
98
|
+
if inner_framing is not None:
|
|
99
|
+
metadata["inner_framing_kind"] = str(inner_framing)
|
|
100
|
+
metadata["inner_framing_spec"] = framing_spec_name(inner_framing)
|
|
101
|
+
return metadata
|
|
102
|
+
|
|
103
|
+
|
|
31
104
|
def _pathspec_iter(app: Any) -> tuple[Any, ...]:
|
|
32
105
|
collected: list[Any] = []
|
|
33
106
|
collected.extend(tuple(getattr(app, "_tigrbl_path_specs", ()) or ()))
|
|
@@ -133,9 +206,13 @@ def _compile_plan(self: Any, app: Any) -> KernelPlan:
|
|
|
133
206
|
from tigrbl_core._spec.binding_spec import (
|
|
134
207
|
HttpJsonRpcBindingSpec,
|
|
135
208
|
HttpRestBindingSpec,
|
|
209
|
+
HttpJsonRpcProtocolBindingSpec,
|
|
210
|
+
HttpRestProtocolBindingSpec,
|
|
136
211
|
HttpStreamBindingSpec,
|
|
137
212
|
SseBindingSpec,
|
|
213
|
+
WebSocketProtocolBindingSpec,
|
|
138
214
|
WebTransportBindingSpec,
|
|
215
|
+
WebTransportProtocolBindingSpec,
|
|
139
216
|
WsBindingSpec,
|
|
140
217
|
)
|
|
141
218
|
|
|
@@ -169,7 +246,12 @@ def _compile_plan(self: Any, app: Any) -> KernelPlan:
|
|
|
169
246
|
for binding in getattr(sp, "bindings", ()) or ():
|
|
170
247
|
if isinstance(
|
|
171
248
|
binding,
|
|
172
|
-
(
|
|
249
|
+
(
|
|
250
|
+
HttpRestBindingSpec,
|
|
251
|
+
HttpRestProtocolBindingSpec,
|
|
252
|
+
HttpStreamBindingSpec,
|
|
253
|
+
SseBindingSpec,
|
|
254
|
+
),
|
|
173
255
|
):
|
|
174
256
|
bucket = route_data.setdefault(
|
|
175
257
|
binding.proto, {"exact": {}, "templated": []}
|
|
@@ -199,34 +281,53 @@ def _compile_plan(self: Any, app: Any) -> KernelPlan:
|
|
|
199
281
|
meta_index
|
|
200
282
|
)
|
|
201
283
|
|
|
202
|
-
elif isinstance(binding, HttpJsonRpcBindingSpec):
|
|
203
|
-
|
|
204
|
-
getattr(
|
|
284
|
+
elif isinstance(binding, (HttpJsonRpcBindingSpec, HttpJsonRpcProtocolBindingSpec)):
|
|
285
|
+
rpc_path = str(
|
|
286
|
+
getattr(
|
|
287
|
+
binding,
|
|
288
|
+
"path",
|
|
289
|
+
getattr(binding, "endpoint", __JSONRPC_DEFAULT_ENDPOINT__),
|
|
290
|
+
)
|
|
205
291
|
or __JSONRPC_DEFAULT_ENDPOINT__
|
|
206
292
|
)
|
|
207
|
-
|
|
293
|
+
rpc_method = getattr(
|
|
294
|
+
binding,
|
|
295
|
+
"method",
|
|
296
|
+
getattr(binding, "rpc_method", None),
|
|
297
|
+
)
|
|
298
|
+
selector = f"{rpc_path}:{rpc_method}"
|
|
208
299
|
opkey_to_meta[OpKey(proto=binding.proto, selector=selector)] = (
|
|
209
300
|
meta_index
|
|
210
301
|
)
|
|
211
302
|
proto_bucket = route_data.setdefault(
|
|
212
|
-
binding.proto, {"endpoints": {}}
|
|
213
|
-
)
|
|
214
|
-
endpoint_bucket = proto_bucket.setdefault("endpoints", {}).setdefault(
|
|
215
|
-
endpoint, {}
|
|
303
|
+
binding.proto, {"paths": {}, "endpoints": {}}
|
|
216
304
|
)
|
|
217
|
-
proto_bucket
|
|
218
|
-
endpoint_bucket
|
|
305
|
+
path_bucket = proto_bucket.setdefault("paths", {}).setdefault(rpc_path, {})
|
|
306
|
+
endpoint_bucket = proto_bucket.setdefault("endpoints", {}).setdefault(rpc_path, {})
|
|
307
|
+
proto_bucket[rpc_method] = meta_index
|
|
308
|
+
row = {
|
|
219
309
|
"meta_index": meta_index,
|
|
220
310
|
"selector": selector,
|
|
221
|
-
"
|
|
222
|
-
"
|
|
311
|
+
"method": rpc_method,
|
|
312
|
+
"path": rpc_path,
|
|
223
313
|
}
|
|
314
|
+
path_bucket[rpc_method] = row
|
|
315
|
+
endpoint_bucket[rpc_method] = row
|
|
224
316
|
|
|
225
|
-
elif isinstance(
|
|
317
|
+
elif isinstance(
|
|
318
|
+
binding,
|
|
319
|
+
(
|
|
320
|
+
WsBindingSpec,
|
|
321
|
+
WebSocketProtocolBindingSpec,
|
|
322
|
+
WebTransportBindingSpec,
|
|
323
|
+
WebTransportProtocolBindingSpec,
|
|
324
|
+
),
|
|
325
|
+
):
|
|
226
326
|
bucket = route_data.setdefault(
|
|
227
327
|
binding.proto, {"exact": {}, "templated": []}
|
|
228
328
|
)
|
|
229
329
|
selector = binding.path
|
|
330
|
+
route_metadata = _route_metadata_for_binding(binding)
|
|
230
331
|
opkey_to_meta[OpKey(proto=binding.proto, selector=selector)] = (
|
|
231
332
|
meta_index
|
|
232
333
|
)
|
|
@@ -240,13 +341,17 @@ def _compile_plan(self: Any, app: Any) -> KernelPlan:
|
|
|
240
341
|
"names": names,
|
|
241
342
|
"meta_index": meta_index,
|
|
242
343
|
"selector": selector,
|
|
243
|
-
|
|
244
|
-
getattr(binding, "subprotocols", ()) or ()
|
|
245
|
-
),
|
|
344
|
+
**route_metadata,
|
|
246
345
|
}
|
|
247
346
|
)
|
|
248
347
|
else:
|
|
249
348
|
bucket["exact"][selector] = meta_index
|
|
349
|
+
bucket.setdefault("exact_metadata", {})[selector] = {
|
|
350
|
+
"path": binding.path,
|
|
351
|
+
"meta_index": meta_index,
|
|
352
|
+
"selector": selector,
|
|
353
|
+
**route_metadata,
|
|
354
|
+
}
|
|
250
355
|
|
|
251
356
|
semantic = KernelPlan(
|
|
252
357
|
proto_indices=route_data,
|
{tigrbl_kernel-0.4.4.dev1 → tigrbl_kernel-0.4.4.dev8}/tigrbl_kernel/contract_classification.py
RENAMED
|
@@ -61,6 +61,9 @@ CANONICAL_CONTRACT_EVENTS: tuple[str, ...] = (
|
|
|
61
61
|
"webtransport.stream.stop_sending",
|
|
62
62
|
"webtransport.datagram.receive",
|
|
63
63
|
"webtransport.datagram.send",
|
|
64
|
+
"stream.resume.request",
|
|
65
|
+
"stream.resume.accept",
|
|
66
|
+
"stream.resume.reject",
|
|
64
67
|
"webtransport.disconnect",
|
|
65
68
|
"webtransport.close",
|
|
66
69
|
"transport.emit.complete",
|
|
@@ -71,6 +74,7 @@ _EVENT_SCOPE_PREFIXES: dict[str, str] = {
|
|
|
71
74
|
"http.": "http",
|
|
72
75
|
"websocket.": "websocket",
|
|
73
76
|
"webtransport.": "webtransport",
|
|
77
|
+
"stream.resume.": "webtransport",
|
|
74
78
|
"transport.emit.": "webtransport",
|
|
75
79
|
}
|
|
76
80
|
|
|
@@ -24,7 +24,6 @@ from .cache import _SpecsOnceCache, _WeakMaybeDict
|
|
|
24
24
|
from .models import KernelPlan, OpView
|
|
25
25
|
from .opview_compiler import compile_opview_from_specs
|
|
26
26
|
from .types import DEFAULT_PHASE_ORDER as _DEFAULT_PHASE_ORDER
|
|
27
|
-
from .rust_compile import build_rust_kernel as _build_rust_kernel
|
|
28
27
|
from .utils import (
|
|
29
28
|
_opspecs,
|
|
30
29
|
_table_iter,
|
|
@@ -155,9 +154,6 @@ class Kernel:
|
|
|
155
154
|
return payload
|
|
156
155
|
return {}
|
|
157
156
|
|
|
158
|
-
def compile_rust_plan(self, app: Any):
|
|
159
|
-
return _build_rust_kernel(app)
|
|
160
|
-
|
|
161
157
|
def invalidate_kernelz_payload(self, app: Optional[Any] = None) -> None:
|
|
162
158
|
with self._lock:
|
|
163
159
|
if app is None:
|
|
@@ -27,7 +27,7 @@ TRANSPORT_ENVELOPE_KEYS = frozenset(
|
|
|
27
27
|
class EquivalenceCase:
|
|
28
28
|
op_id: str
|
|
29
29
|
category: str
|
|
30
|
-
bindings: tuple[
|
|
30
|
+
bindings: tuple[Any, ...]
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
def canonical_operation_id(op_id: str) -> str:
|
|
@@ -42,7 +42,7 @@ def canonical_operation_id(op_id: str) -> str:
|
|
|
42
42
|
|
|
43
43
|
def compile_equivalence_manifest(
|
|
44
44
|
op_id: str,
|
|
45
|
-
bindings: Iterable[
|
|
45
|
+
bindings: Iterable[Any],
|
|
46
46
|
*,
|
|
47
47
|
schema_identity: str = "schema:v1",
|
|
48
48
|
runtime_plan_identity: str = "runtime-plan:v1",
|
|
@@ -80,7 +80,7 @@ def equivalent_transport_results(*results: Mapping[str, Any]) -> bool:
|
|
|
80
80
|
return all(normalized_transport_result(result) == first for result in results[1:])
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
def equivalent_binding_group(op_id: str, bindings: Iterable[
|
|
83
|
+
def equivalent_binding_group(op_id: str, bindings: Iterable[Any]) -> bool:
|
|
84
84
|
manifest = compile_equivalence_manifest(op_id, bindings)
|
|
85
85
|
families = {binding["family"] for binding in manifest["bindings"]}
|
|
86
86
|
return bool(families) and len({manifest["op_id"]}) == 1
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from typing import Any
|
|
4
|
-
import warnings
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
def canonical_protocol_anchor_order(
|
|
@@ -32,18 +31,7 @@ def python_protocol_anchor_trace(case: dict[str, Any]) -> tuple[str, ...]:
|
|
|
32
31
|
)
|
|
33
32
|
|
|
34
33
|
|
|
35
|
-
def rust_protocol_anchor_trace(case: dict[str, Any]) -> tuple[str, ...]:
|
|
36
|
-
del case
|
|
37
|
-
warnings.warn(
|
|
38
|
-
"rust_protocol_anchor_trace is deprecated; protocol anchors are Python-only.",
|
|
39
|
-
DeprecationWarning,
|
|
40
|
-
stacklevel=2,
|
|
41
|
-
)
|
|
42
|
-
raise RuntimeError("rust_protocol_anchor_trace is unavailable.")
|
|
43
|
-
|
|
44
|
-
|
|
45
34
|
__all__ = [
|
|
46
35
|
"canonical_protocol_anchor_order",
|
|
47
36
|
"python_protocol_anchor_trace",
|
|
48
|
-
"rust_protocol_anchor_trace",
|
|
49
37
|
]
|