Commit f764e45
authored
feat(config): Add TracerProvider support for declarative config (#4985)
* config: add resource and propagator creation from declarative config
Implements create_resource() and create_propagator()/configure_propagator()
for the declarative file configuration. Resource creation does not read
OTEL_RESOURCE_ATTRIBUTES or run any detectors (matches Java/JS SDK behavior).
Propagator configuration always calls set_global_textmap to override Python's
default tracecontext+baggage, setting a noop CompositePropagator when no
propagator is configured.
Assisted-by: Claude Sonnet 4.6
* update changelog with PR number
Assisted-by: Claude Sonnet 4.6
* fix pylint, pyright and ruff errors in resource/propagator config
- _resource.py: refactor _coerce_attribute_value to dispatch table to
avoid too-many-return-statements; fix short variable names k/v ->
attr_key/attr_val; fix return type of _sdk_default_attributes to
dict[str, str] to satisfy pyright
- _propagator.py: rename short variable names e -> exc, p -> propagator
- test_resource.py: move imports to top level; split TestCreateResource
(25 methods) into three focused classes to satisfy too-many-public-methods
- test_propagator.py: add pylint disable for protected-access
Assisted-by: Claude Sonnet 4.6
* address review feedback: use _DEFAULT_RESOURCE, fix bool_array coercion
- replace _sdk_default_attributes() with _DEFAULT_RESOURCE from resources module
- move _coerce_bool into dispatch tables for both scalar and array bool types,
fixing a bug where bool_array with string values like "false" would coerce
incorrectly via plain bool() (non-empty string -> True)
- add test for bool_array with string values to cover the bug
Assisted-by: Claude Sonnet 4.6
* fix linter
* address review feedback: single coercion table, simplify attributes merge
- collapse _SCALAR_COERCIONS and _ARRAY_COERCIONS into a single _COERCIONS
dict using an _array() factory, reducing _coerce_attribute_value to two lines
- process attributes_list before attributes so explicit attributes naturally
overwrite list entries without needing an explicit guard
Assisted-by: Claude Sonnet 4.6
* use Callable type annotation on _array helper
Assisted-by: Claude Sonnet 4.6
* add detection infrastructure foundations for resource detectors
Adds _run_detectors() stub and _filter_attributes() to create_resource(),
providing the shared scaffolding for detector PRs to build on. Detectors
are opt-in: nothing runs unless explicitly listed under
detection_development.detectors in the config. The include/exclude
attribute filter mirrors other SDK behaviour.
Assisted-by: Claude Sonnet 4.6
* move service.name default into base resource
Merges service.name=unknown_service into base before running detectors,
so detectors (e.g. service) can override it. Previously it was added to
config_attrs and merged last, which would have silently overridden any
detector-provided service.name.
Assisted-by: Claude Sonnet 4.6
* remove unused logging import from _propagator.py
Assisted-by: Claude Sonnet 4.6
* add TracerProvider creation from declarative config
Implements create_tracer_provider() and configure_tracer_provider() for
the declarative configuration pipeline (tracking issue #3631 step 5).
Key behaviors:
- Never reads OTEL_TRACES_SAMPLER or OTEL_SPAN_*_LIMIT env vars; absent
config fields use OTel spec defaults (matching Java SDK behavior)
- Default sampler is ParentBased(root=ALWAYS_ON) per the OTel spec
- SpanLimits absent fields use hardcoded defaults (128) not env vars
- configure_tracer_provider(None) is a no-op per spec/Java/JS behavior
- OTLP exporter fields pass None through so the exporter reads its own
env vars for unspecified values
- Lazy imports for optional OTLP packages with ConfigurationError on missing
- Supports all 4 ParentBased delegate samplers
Assisted-by: Claude Sonnet 4.6
* add changelog entry for PR #4985
Assisted-by: Claude Sonnet 4.6
* fix CI lint/type failures in tracer provider config
- add # noqa: PLC0415 to lazy OTLP imports (ruff also enforces this)
- move SDK imports to top-level (BatchSpanProcessor, etc.)
- convert test helper methods to @staticmethod to satisfy no-self-use
- add pylint: disable=protected-access for private member access in tests
- fix return type annotation on _create_span_processor
Assisted-by: Claude Sonnet 4.6
* fix pylint no-self-use on TestCreateSampler._make_provider
Assisted-by: Claude Sonnet 4.6
* use allowlist for bool coercion in declarative config resource
Assisted-by: Claude Sonnet 4.6
* address review feedback: simplify resource filter and propagator loading
Assisted-by: Claude Sonnet 4.6
* fix ruff formatting
Assisted-by: Claude Sonnet 4.6
* fix pyright: wrap EntryPoints in iter() for next() compatibility
Assisted-by: Claude Sonnet 4.61 parent e301732 commit f764e45
File tree
6 files changed
+762
-19
lines changed- opentelemetry-sdk
- src/opentelemetry/sdk/_configuration
- file
- tests/_configuration
6 files changed
+762
-19
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
16 | 18 | | |
17 | 19 | | |
18 | 20 | | |
| |||
Lines changed: 11 additions & 13 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
40 | | - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
41 | 44 | | |
42 | 45 | | |
43 | 46 | | |
44 | 47 | | |
45 | | - | |
| 48 | + | |
46 | 49 | | |
47 | 50 | | |
48 | 51 | | |
| |||
85 | 88 | | |
86 | 89 | | |
87 | 90 | | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
| 91 | + | |
95 | 92 | | |
96 | 93 | | |
97 | 94 | | |
98 | 95 | | |
99 | 96 | | |
100 | | - | |
| 97 | + | |
101 | 98 | | |
102 | 99 | | |
103 | 100 | | |
104 | 101 | | |
105 | 102 | | |
106 | 103 | | |
107 | 104 | | |
108 | | - | |
| 105 | + | |
| 106 | + | |
109 | 107 | | |
110 | | - | |
| 108 | + | |
111 | 109 | | |
112 | 110 | | |
113 | 111 | | |
| |||
Lines changed: 1 addition & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
173 | 173 | | |
174 | 174 | | |
175 | 175 | | |
176 | | - | |
177 | | - | |
178 | 176 | | |
179 | 177 | | |
180 | | - | |
181 | | - | |
182 | | - | |
| 178 | + | |
183 | 179 | | |
184 | 180 | | |
185 | 181 | | |
| |||
0 commit comments