iii-sdk 0.21.1.dev1__tar.gz → 0.21.3.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.
Files changed (73) hide show
  1. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/PKG-INFO +2 -2
  2. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/pyproject.toml +2 -2
  3. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_baggage_span_processor.py +21 -69
  4. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/.gitignore +0 -0
  5. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/README.md +0 -0
  6. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/__init__.py +0 -0
  7. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/channel.py +0 -0
  8. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/channels.py +0 -0
  9. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/engine.py +0 -0
  10. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/errors.py +0 -0
  11. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/format_utils.py +0 -0
  12. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/helpers.py +0 -0
  13. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/iii.py +0 -0
  14. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/iii_constants.py +0 -0
  15. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/iii_types.py +0 -0
  16. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/internal.py +0 -0
  17. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/otel_worker_gauges.py +0 -0
  18. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/protocol.py +0 -0
  19. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/runtime.py +0 -0
  20. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/state.py +0 -0
  21. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/stream.py +0 -0
  22. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/trigger.py +0 -0
  23. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/triggers.py +0 -0
  24. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/types.py +0 -0
  25. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/utils.py +0 -0
  26. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/src/iii/worker_metrics.py +0 -0
  27. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/conftest.py +0 -0
  28. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_api_triggers.py +0 -0
  29. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_async_api.py +0 -0
  30. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_bridge.py +0 -0
  31. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_channel_close_delay.py +0 -0
  32. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_channel_submodule.py +0 -0
  33. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_context_propagation.py +0 -0
  34. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_data_channels.py +0 -0
  35. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_engine_constants.py +0 -0
  36. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_errors.py +0 -0
  37. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_format_utils.py +0 -0
  38. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_healthcheck.py +0 -0
  39. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_helpers.py +0 -0
  40. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_hold_process.py +0 -0
  41. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_http_external_functions_integration.py +0 -0
  42. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_iii_registration_dedup.py +0 -0
  43. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_init_api.py +0 -0
  44. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_invocation_exception.py +0 -0
  45. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_invocation_metadata.py +0 -0
  46. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_logger_function_ids.py +0 -0
  47. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_logger_otel.py +0 -0
  48. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_middleware.py +0 -0
  49. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_payload.py +0 -0
  50. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_pubsub.py +0 -0
  51. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_queue_integration.py +0 -0
  52. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_rbac_workers.py +0 -0
  53. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_register_function_args.py +0 -0
  54. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_runtime_submodule.py +0 -0
  55. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_span_ops.py +0 -0
  56. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_state.py +0 -0
  57. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_stream_models.py +0 -0
  58. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_stream_types.py +0 -0
  59. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_streams.py +0 -0
  60. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_streams_runtime_annotations.py +0 -0
  61. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_sync_api.py +0 -0
  62. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_telemetry.py +0 -0
  63. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_telemetry_exporters.py +0 -0
  64. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_telemetry_types.py +0 -0
  65. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_trace_helpers.py +0 -0
  66. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_trigger_metadata.py +0 -0
  67. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_trigger_registration_error.py +0 -0
  68. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_trigger_submodule.py +0 -0
  69. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_trigger_type_lifecycle.py +0 -0
  70. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_utils.py +0 -0
  71. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_worker_metadata.py +0 -0
  72. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/tests/test_worker_metrics.py +0 -0
  73. {iii_sdk-0.21.1.dev1 → iii_sdk-0.21.3.dev1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iii-sdk
3
- Version: 0.21.1.dev1
3
+ Version: 0.21.3.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.1.dev1
17
+ Requires-Dist: iii-helpers==0.21.3.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.1.dev1"
7
+ version = "0.21.3.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.1.dev1",
26
+ "iii-helpers==0.21.3.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 test_copies_default_allowlist_from_baggage_to_attributes() -> None:
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
- token = _attach_baggage(
48
- {
49
- "iii.session.id": "S-1",
50
- "iii.message.id": "M-1",
51
- "iii.function.id": "auth::set_token",
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
- assert _first_span_attr(exporter, "iii.session.id") == "S-1"
61
- assert _first_span_attr(exporter, "iii.message.id") == "M-1"
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