Skip to content

Commit 7916176

Browse files
authored
Merge branch 'main' into dont-follow-imports
2 parents a119b4b + 29aad2e commit 7916176

File tree

9 files changed

+37
-17
lines changed

9 files changed

+37
-17
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## Unreleased
99

10+
- Add `attributes` field in `metrics.get_meter` wrapper function
11+
([#4364](https://github.com/open-telemetry/opentelemetry-python/pull/4364))
1012
- Add Python 3.13 support
1113
([#4353](https://github.com/open-telemetry/opentelemetry-python/pull/4353))
14+
- sdk: don't log or print warnings when the SDK has been disabled
15+
([#4371](https://github.com/open-telemetry/opentelemetry-python/pull/4371))
1216

1317
## Version 1.29.0/0.50b0 (2024-12-11)
1418

opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,7 @@ def get_meter(
764764
version: str = "",
765765
meter_provider: Optional[MeterProvider] = None,
766766
schema_url: Optional[str] = None,
767+
attributes: Optional[Attributes] = None,
767768
) -> "Meter":
768769
"""Returns a `Meter` for use by the given instrumentation library.
769770
@@ -774,7 +775,7 @@ def get_meter(
774775
"""
775776
if meter_provider is None:
776777
meter_provider = get_meter_provider()
777-
return meter_provider.get_meter(name, version, schema_url)
778+
return meter_provider.get_meter(name, version, schema_url, attributes)
778779

779780

780781
def _set_meter_provider(meter_provider: MeterProvider, log: bool) -> None:

opentelemetry-api/tests/metrics/test_meter_provider.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@
2929
get_meter_provider,
3030
set_meter_provider,
3131
)
32-
from opentelemetry.metrics._internal import _ProxyMeter, _ProxyMeterProvider
32+
from opentelemetry.metrics._internal import (
33+
_ProxyMeter,
34+
_ProxyMeterProvider,
35+
get_meter,
36+
)
3337
from opentelemetry.metrics._internal.instrument import (
3438
_ProxyCounter,
3539
_ProxyGauge,
@@ -141,6 +145,25 @@ def test_invalid_name(self):
141145

142146
self.assertEqual(meter.name, None)
143147

148+
def test_get_meter_wrapper(self):
149+
"""
150+
`metrics._internal.get_meter` called with valid parameters and a NoOpMeterProvider
151+
should return a NoOpMeter with the same parameters.
152+
"""
153+
154+
meter = get_meter(
155+
"name",
156+
version="version",
157+
meter_provider=NoOpMeterProvider(),
158+
schema_url="schema_url",
159+
attributes={"key": "value", "key2": 5, "key3": "value3"},
160+
)
161+
162+
self.assertIsInstance(meter, NoOpMeter)
163+
self.assertEqual(meter.name, "name")
164+
self.assertEqual(meter.version, "version")
165+
self.assertEqual(meter.schema_url, "schema_url")
166+
144167

145168
class TestProxy(MetricsGlobalsTest, TestCase):
146169
def test_global_proxy_meter_provider(self):

opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,6 @@ def get_logger(
670670
attributes: Optional[Attributes] = None,
671671
) -> Logger:
672672
if self._disabled:
673-
warnings.warn("SDK is disabled.")
674673
return NoOpLogger(
675674
name,
676675
version=version,

opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,6 @@ def get_meter(
537537
attributes: Optional[Attributes] = None,
538538
) -> Meter:
539539
if self._disabled:
540-
_logger.warning("SDK is disabled.")
541540
return NoOpMeter(name, version=version, schema_url=schema_url)
542541

543542
if self._shutdown:

opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
these attributes can be included in the Resource.*
2424
2525
Resource objects are created with `Resource.create`, which accepts attributes
26-
(key-values). Resources should NOT be created via constructor, and working with
26+
(key-values). Resources should NOT be created via constructor except by `ResourceDetector`
27+
instances which can't use `Resource.create` to avoid infinite loops. Working with
2728
`Resource` objects should only be done via the Resource API methods. Resource
2829
attributes can also be passed at process invocation in the
2930
:envvar:`OTEL_RESOURCE_ATTRIBUTES` environment variable. You should register
@@ -175,6 +176,8 @@ def create(
175176
) -> "Resource":
176177
"""Creates a new `Resource` from attributes.
177178
179+
`ResourceDetector` instances should not call this method.
180+
178181
Args:
179182
attributes: Optional zero or more key-value pairs.
180183
schema_url: Optional URL pointing to the schema
@@ -316,6 +319,7 @@ def __init__(self, raise_on_error: bool = False) -> None:
316319

317320
@abc.abstractmethod
318321
def detect(self) -> "Resource":
322+
"""Don't call `Resource.create` here to avoid an infinite loop, instead instantiate `Resource` directly"""
319323
raise NotImplementedError()
320324

321325

opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1228,7 +1228,6 @@ def get_tracer(
12281228
attributes: typing.Optional[types.Attributes] = None,
12291229
) -> "trace_api.Tracer":
12301230
if self._disabled:
1231-
logger.warning("SDK is disabled.")
12321231
return NoOpTracer()
12331232
if not instrumenting_module_name: # Reject empty strings too.
12341233
instrumenting_module_name = ""

opentelemetry-sdk/tests/logs/test_handler.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import logging
1616
import os
1717
import unittest
18-
import warnings
1918
from unittest.mock import Mock, patch
2019

2120
from opentelemetry._logs import NoOpLoggerProvider, SeverityNumber
@@ -290,11 +289,7 @@ def test_handler_root_logger_with_disabled_sdk_does_not_go_into_recursion_error(
290289
processor, logger = set_up_test_logging(
291290
logging.NOTSET, root_logger=True
292291
)
293-
with warnings.catch_warnings(record=True) as cw:
294-
logger.warning("hello")
295-
296-
self.assertEqual(len(cw), 1)
297-
self.assertEqual("SDK is disabled.", str(cw[0].message))
292+
logger.warning("hello")
298293

299294
self.assertEqual(processor.emit_count(), 0)
300295

opentelemetry-sdk/tests/logs/test_logs.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
# pylint: disable=protected-access
1616

1717
import unittest
18-
import warnings
1918
from unittest.mock import Mock, patch
2019

2120
from opentelemetry.sdk._logs import LoggerProvider
@@ -70,12 +69,9 @@ def test_get_logger(self):
7069

7170
@patch.dict("os.environ", {OTEL_SDK_DISABLED: "true"})
7271
def test_get_logger_with_sdk_disabled(self):
73-
with warnings.catch_warnings(record=True) as cw:
74-
logger = LoggerProvider().get_logger(Mock())
72+
logger = LoggerProvider().get_logger(Mock())
7573

7674
self.assertIsInstance(logger, NoOpLogger)
77-
self.assertEqual(len(cw), 1)
78-
self.assertEqual("SDK is disabled.", str(cw[0].message))
7975

8076
@patch.object(Resource, "create")
8177
def test_logger_provider_init(self, resource_patch):

0 commit comments

Comments
 (0)