iii-sdk 0.21.1.dev1__tar.gz → 0.21.2.dev1__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.
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/PKG-INFO +2 -2
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/pyproject.toml +2 -2
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_baggage_span_processor.py +21 -69
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/.gitignore +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/README.md +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/__init__.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/channel.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/channels.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/engine.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/errors.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/format_utils.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/helpers.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/iii.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/iii_constants.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/iii_types.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/internal.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/otel_worker_gauges.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/protocol.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/runtime.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/state.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/stream.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/trigger.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/triggers.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/types.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/utils.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/src/iii/worker_metrics.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/conftest.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_api_triggers.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_async_api.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_bridge.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_channel_close_delay.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_channel_submodule.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_context_propagation.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_data_channels.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_engine_constants.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_errors.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_format_utils.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_healthcheck.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_helpers.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_hold_process.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_http_external_functions_integration.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_iii_registration_dedup.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_init_api.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_invocation_exception.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_invocation_metadata.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_logger_function_ids.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_logger_otel.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_middleware.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_payload.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_pubsub.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_queue_integration.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_rbac_workers.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_register_function_args.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_runtime_submodule.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_span_ops.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_state.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_stream_models.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_stream_types.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_streams.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_streams_runtime_annotations.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_sync_api.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_telemetry.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_telemetry_exporters.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_telemetry_types.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_trace_helpers.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_trigger_metadata.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_trigger_registration_error.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_trigger_submodule.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_trigger_type_lifecycle.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_utils.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_worker_metadata.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_worker_metrics.py +0 -0
- {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iii-sdk
|
|
3
|
-
Version: 0.21.
|
|
3
|
+
Version: 0.21.2.dev1
|
|
4
4
|
Summary: III SDK for Python
|
|
5
5
|
Project-URL: Homepage, https://github.com/iii-hq/iii
|
|
6
6
|
Project-URL: Repository, https://github.com/iii-hq/iii
|
|
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
16
|
Requires-Python: >=3.10
|
|
17
|
-
Requires-Dist: iii-helpers==0.21.
|
|
17
|
+
Requires-Dist: iii-helpers==0.21.2.dev1
|
|
18
18
|
Requires-Dist: opentelemetry-api>=1.25
|
|
19
19
|
Requires-Dist: pydantic>=2.0
|
|
20
20
|
Requires-Dist: websockets>=12.0
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "iii-sdk"
|
|
7
|
-
version = "0.21.
|
|
7
|
+
version = "0.21.2.dev1"
|
|
8
8
|
description = "III SDK for Python"
|
|
9
9
|
authors = [{ name = "III" }]
|
|
10
10
|
license = { text = "Apache-2.0" }
|
|
@@ -23,7 +23,7 @@ dependencies = [
|
|
|
23
23
|
"websockets>=12.0",
|
|
24
24
|
"pydantic>=2.0",
|
|
25
25
|
"opentelemetry-api>=1.25",
|
|
26
|
-
"iii-helpers==0.21.
|
|
26
|
+
"iii-helpers==0.21.2.dev1",
|
|
27
27
|
]
|
|
28
28
|
|
|
29
29
|
[project.urls]
|
|
@@ -10,10 +10,7 @@ from opentelemetry.sdk.trace.export.in_memory_span_exporter import (
|
|
|
10
10
|
)
|
|
11
11
|
from opentelemetry.sdk.trace.sampling import ALWAYS_OFF
|
|
12
12
|
|
|
13
|
-
from iii_helpers.observability import
|
|
14
|
-
DEFAULT_ALLOWLIST,
|
|
15
|
-
BaggageSpanProcessor,
|
|
16
|
-
)
|
|
13
|
+
from iii_helpers.observability import BaggageSpanProcessor
|
|
17
14
|
|
|
18
15
|
|
|
19
16
|
def _build_test_provider(
|
|
@@ -40,26 +37,35 @@ def _first_span_attr(exporter: InMemorySpanExporter, key: str) -> object | None:
|
|
|
40
37
|
return spans[0].attributes.get(key) if spans[0].attributes else None
|
|
41
38
|
|
|
42
39
|
|
|
43
|
-
def
|
|
40
|
+
def test_copies_every_baggage_entry_to_attributes() -> None:
|
|
41
|
+
"""No key policy: baggage copies to span attributes unconditionally.
|
|
42
|
+
|
|
43
|
+
Which attributes *mean* something (`iii.tag.*`, `iii.session.*`) is a
|
|
44
|
+
query-side convention owned by the engine's traces API — a filtering
|
|
45
|
+
policy baked into worker binaries would silently drop newer keys from
|
|
46
|
+
any worker running an older SDK.
|
|
47
|
+
"""
|
|
44
48
|
provider, exporter = _build_test_provider(BaggageSpanProcessor())
|
|
45
49
|
tracer = provider.get_tracer("test")
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
entries = {
|
|
52
|
+
"iii.session.id": "S-1",
|
|
53
|
+
"iii.session.name": "refactor auth",
|
|
54
|
+
"iii.message.id": "M-1",
|
|
55
|
+
"iii.function.id": "auth::set_token",
|
|
56
|
+
"iii.tag.message": "fix the login bug",
|
|
57
|
+
# Non-iii baggage is a first-class tag source too.
|
|
58
|
+
"tenant.id": "t-42",
|
|
59
|
+
}
|
|
60
|
+
token = _attach_baggage(entries)
|
|
54
61
|
try:
|
|
55
62
|
with tracer.start_as_current_span("inner"):
|
|
56
63
|
pass
|
|
57
64
|
finally:
|
|
58
65
|
context.detach(token)
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
assert _first_span_attr(exporter, "iii.function.id") == "auth::set_token"
|
|
67
|
+
for key, value in entries.items():
|
|
68
|
+
assert _first_span_attr(exporter, key) == value, key
|
|
63
69
|
|
|
64
70
|
|
|
65
71
|
def test_missing_baggage_entry_means_attribute_not_set() -> None:
|
|
@@ -78,51 +84,6 @@ def test_missing_baggage_entry_means_attribute_not_set() -> None:
|
|
|
78
84
|
assert _first_span_attr(exporter, "iii.function.id") is None
|
|
79
85
|
|
|
80
86
|
|
|
81
|
-
def test_baggage_entries_not_in_allowlist_are_dropped() -> None:
|
|
82
|
-
provider, exporter = _build_test_provider(BaggageSpanProcessor())
|
|
83
|
-
tracer = provider.get_tracer("test")
|
|
84
|
-
|
|
85
|
-
token = _attach_baggage(
|
|
86
|
-
{
|
|
87
|
-
"iii.message.id": "M",
|
|
88
|
-
"tenant.id": "t-42",
|
|
89
|
-
"debug.feature_flag": "on",
|
|
90
|
-
}
|
|
91
|
-
)
|
|
92
|
-
try:
|
|
93
|
-
with tracer.start_as_current_span("inner"):
|
|
94
|
-
pass
|
|
95
|
-
finally:
|
|
96
|
-
context.detach(token)
|
|
97
|
-
|
|
98
|
-
assert _first_span_attr(exporter, "iii.message.id") == "M"
|
|
99
|
-
assert _first_span_attr(exporter, "tenant.id") is None
|
|
100
|
-
assert _first_span_attr(exporter, "debug.feature_flag") is None
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
def test_custom_allowlist_is_honored() -> None:
|
|
104
|
-
processor = BaggageSpanProcessor(allowlist=["tenant.id", "iii.message.id"])
|
|
105
|
-
provider, exporter = _build_test_provider(processor)
|
|
106
|
-
tracer = provider.get_tracer("test")
|
|
107
|
-
|
|
108
|
-
token = _attach_baggage(
|
|
109
|
-
{
|
|
110
|
-
"tenant.id": "t-1",
|
|
111
|
-
"iii.message.id": "M",
|
|
112
|
-
"iii.session.id": "S-not-copied",
|
|
113
|
-
}
|
|
114
|
-
)
|
|
115
|
-
try:
|
|
116
|
-
with tracer.start_as_current_span("inner"):
|
|
117
|
-
pass
|
|
118
|
-
finally:
|
|
119
|
-
context.detach(token)
|
|
120
|
-
|
|
121
|
-
assert _first_span_attr(exporter, "tenant.id") == "t-1"
|
|
122
|
-
assert _first_span_attr(exporter, "iii.message.id") == "M"
|
|
123
|
-
assert _first_span_attr(exporter, "iii.session.id") is None
|
|
124
|
-
|
|
125
|
-
|
|
126
87
|
def test_empty_parent_context_produces_no_attributes() -> None:
|
|
127
88
|
provider, exporter = _build_test_provider(BaggageSpanProcessor())
|
|
128
89
|
tracer = provider.get_tracer("test")
|
|
@@ -151,12 +112,3 @@ def test_noop_guard_skips_processing_when_sampled_out() -> None:
|
|
|
151
112
|
context.detach(token)
|
|
152
113
|
|
|
153
114
|
assert exporter.get_finished_spans() == ()
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
def test_default_allowlist_matches_other_sdks() -> None:
|
|
157
|
-
"""DEFAULT_ALLOWLIST drift across languages would break worker chains."""
|
|
158
|
-
assert tuple(DEFAULT_ALLOWLIST) == (
|
|
159
|
-
"iii.session.id",
|
|
160
|
-
"iii.message.id",
|
|
161
|
-
"iii.function.id",
|
|
162
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iii_sdk-0.21.1.dev1 → iii_sdk-0.21.2.dev1}/tests/test_http_external_functions_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|