From 2574707f40b3d09154f40f4047866a76332060f0 Mon Sep 17 00:00:00 2001 From: Puskar Deb <36558965+puskardeb@users.noreply.github.com> Date: Wed, 20 Mar 2024 23:49:23 +0000 Subject: [PATCH 01/11] Adds support OTEL_SDK_DISABLED environment variable (#3648) * Adds support OTEL_SDK_DISABLED environment variable * Pass schema_url and version to NoOpMeter and NoOpLogger, implement comments from review * Add CHANGELOG entry * Fix lint error * Suppress lint errors due to returning a NoOpTracer when SDK is disabled --------- Co-authored-by: Leighton Chen Co-authored-by: Diego Hurtado --- CHANGELOG.md | 2 ++ .../src/opentelemetry/sdk/_logs/_internal/__init__.py | 6 ++++++ .../src/opentelemetry/sdk/environment_variables.py | 8 ++++++++ .../src/opentelemetry/sdk/metrics/_internal/__init__.py | 8 ++++++++ .../src/opentelemetry/sdk/trace/__init__.py | 8 +++++++- opentelemetry-sdk/tests/logs/test_logs.py | 9 ++++++++- opentelemetry-sdk/tests/metrics/test_metrics.py | 6 ++++++ opentelemetry-sdk/tests/trace/test_trace.py | 9 +++++++++ 8 files changed, 54 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca3d0687bf..56168db8eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#3751](https://github.com/open-telemetry/opentelemetry-python/pull/3751)) - bump mypy to 0.982 ([#3776](https://github.com/open-telemetry/opentelemetry-python/pull/3776)) +- Add support for OTEL_SDK_DISABLED environment variable + ([#3648](https://github.com/open-telemetry/opentelemetry-python/pull/3648)) - Fix ValueError message for PeriodicExportingMetricsReader ([#3769](https://github.com/open-telemetry/opentelemetry-python/pull/3769)) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py index d84c991960..8ba0dae6f2 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/_logs/_internal/__init__.py @@ -37,6 +37,7 @@ from opentelemetry.sdk.environment_variables import ( OTEL_ATTRIBUTE_COUNT_LIMIT, OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, + OTEL_SDK_DISABLED, ) from opentelemetry.sdk.resources import Resource from opentelemetry.sdk.util import ns_to_iso_str @@ -607,6 +608,8 @@ def __init__( self._multi_log_record_processor = ( multi_log_record_processor or SynchronousMultiLogRecordProcessor() ) + disabled = environ.get(OTEL_SDK_DISABLED, "") + self._disabled = disabled.lower().strip() == "true" self._at_exit_handler = None if shutdown_on_exit: self._at_exit_handler = atexit.register(self.shutdown) @@ -621,6 +624,9 @@ def get_logger( version: Optional[str] = None, schema_url: Optional[str] = None, ) -> Logger: + if self._disabled: + _logger.warning("SDK is disabled.") + return NoOpLogger(name, version=version, schema_url=schema_url) return Logger( self._resource, self._multi_log_record_processor, diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/environment_variables.py b/opentelemetry-sdk/src/opentelemetry/sdk/environment_variables.py index a69e451cbb..6557d2a139 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/environment_variables.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/environment_variables.py @@ -12,6 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +OTEL_SDK_DISABLED = "OTEL_SDK_DISABLED" +""" +.. envvar:: OTEL_SDK_DISABLED + +The :envvar:`OTEL_SDK_DISABLED` environment variable disables the SDK for all signals +Default: "false" +""" + OTEL_RESOURCE_ATTRIBUTES = "OTEL_RESOURCE_ATTRIBUTES" """ .. envvar:: OTEL_RESOURCE_ATTRIBUTES diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/__init__.py index 9b5aac1614..908d8f81cf 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/__init__.py @@ -14,6 +14,7 @@ from atexit import register, unregister from logging import getLogger +from os import environ from threading import Lock from time import time_ns from typing import Optional, Sequence @@ -32,6 +33,7 @@ ) from opentelemetry.metrics import UpDownCounter as APIUpDownCounter from opentelemetry.metrics import _Gauge as APIGauge +from opentelemetry.sdk.environment_variables import OTEL_SDK_DISABLED from opentelemetry.sdk.metrics._internal.exceptions import MetricsTimeoutError from opentelemetry.sdk.metrics._internal.instrument import ( _Counter, @@ -394,6 +396,8 @@ def __init__( self._measurement_consumer = SynchronousMeasurementConsumer( sdk_config=self._sdk_config ) + disabled = environ.get(OTEL_SDK_DISABLED, "") + self._disabled = disabled.lower().strip() == "true" if shutdown_on_exit: self._atexit_handler = register(self.shutdown) @@ -512,6 +516,10 @@ def get_meter( schema_url: Optional[str] = None, ) -> Meter: + if self._disabled: + _logger.warning("SDK is disabled.") + return NoOpMeter(name, version=version, schema_url=schema_url) + if self._shutdown: _logger.warning( "A shutdown `MeterProvider` can not provide a `Meter`" diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 7c0a194c82..8833653616 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -49,6 +49,7 @@ OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT, OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, + OTEL_SDK_DISABLED, OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT, OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT, OTEL_SPAN_EVENT_COUNT_LIMIT, @@ -62,7 +63,7 @@ InstrumentationInfo, InstrumentationScope, ) -from opentelemetry.trace import SpanContext +from opentelemetry.trace import NoOpTracer, SpanContext from opentelemetry.trace.status import Status, StatusCode from opentelemetry.util import types from opentelemetry.util._decorator import _agnosticcontextmanager @@ -1176,6 +1177,8 @@ def __init__( sampler = sampling._get_from_env_or_default() self.sampler = sampler self._span_limits = span_limits or SpanLimits() + disabled = environ.get(OTEL_SDK_DISABLED, "") + self._disabled = disabled.lower().strip() == "true" self._atexit_handler = None if shutdown_on_exit: @@ -1191,6 +1194,9 @@ def get_tracer( instrumenting_library_version: typing.Optional[str] = None, schema_url: typing.Optional[str] = None, ) -> "trace_api.Tracer": + if self._disabled: + logger.warning("SDK is disabled.") + return NoOpTracer() if not instrumenting_module_name: # Reject empty strings too. instrumenting_module_name = "" logger.error("get_tracer called with missing module name.") diff --git a/opentelemetry-sdk/tests/logs/test_logs.py b/opentelemetry-sdk/tests/logs/test_logs.py index 935b5ee249..71098531d4 100644 --- a/opentelemetry-sdk/tests/logs/test_logs.py +++ b/opentelemetry-sdk/tests/logs/test_logs.py @@ -15,12 +15,14 @@ # pylint: disable=protected-access import unittest -from unittest.mock import patch +from unittest.mock import Mock, patch from opentelemetry.sdk._logs import LoggerProvider from opentelemetry.sdk._logs._internal import ( + NoOpLogger, SynchronousMultiLogRecordProcessor, ) +from opentelemetry.sdk.environment_variables import OTEL_SDK_DISABLED from opentelemetry.sdk.resources import Resource @@ -61,6 +63,11 @@ def test_get_logger(self): logger._instrumentation_scope.schema_url, "schema_url" ) + @patch.dict("os.environ", {OTEL_SDK_DISABLED: "true"}) + def test_get_logger_with_sdk_disabled(self): + logger = LoggerProvider().get_logger(Mock()) + self.assertIsInstance(logger, NoOpLogger) + @patch.object(Resource, "create") def test_logger_provider_init(self, resource_patch): logger_provider = LoggerProvider() diff --git a/opentelemetry-sdk/tests/metrics/test_metrics.py b/opentelemetry-sdk/tests/metrics/test_metrics.py index 6232e072e2..199305005b 100644 --- a/opentelemetry-sdk/tests/metrics/test_metrics.py +++ b/opentelemetry-sdk/tests/metrics/test_metrics.py @@ -19,6 +19,7 @@ from unittest.mock import MagicMock, Mock, patch from opentelemetry.metrics import NoOpMeter +from opentelemetry.sdk.environment_variables import OTEL_SDK_DISABLED from opentelemetry.sdk.metrics import ( Counter, Histogram, @@ -465,6 +466,11 @@ def test_create_observable_up_down_counter(self): ) self.assertEqual(observable_up_down_counter.name, "name") + @patch.dict("os.environ", {OTEL_SDK_DISABLED: "true"}) + def test_get_meter_with_sdk_disabled(self): + meter_provider = MeterProvider() + self.assertIsInstance(meter_provider.get_meter(Mock()), NoOpMeter) + class InMemoryMetricExporter(MetricExporter): def __init__(self): diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 40f4f4b316..3e71a1bf62 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -13,6 +13,7 @@ # limitations under the License. # pylint: disable=too-many-lines +# pylint: disable=no-member import shutil import subprocess @@ -33,6 +34,7 @@ OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT, OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, + OTEL_SDK_DISABLED, OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT, OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT, OTEL_SPAN_EVENT_COUNT_LIMIT, @@ -162,6 +164,13 @@ def test_tracer_provider_accepts_concurrent_multi_span_processor(self): span_processor, tracer_provider._active_span_processor ) + @mock.patch.dict("os.environ", {OTEL_SDK_DISABLED: "true"}) + def test_get_tracer_with_sdk_disabled(self): + tracer_provider = trace.TracerProvider() + self.assertIsInstance( + tracer_provider.get_tracer(Mock()), trace_api.NoOpTracer + ) + class TestTracerSampling(unittest.TestCase): def tearDown(self): From 06b82aa31f13a064fa5772e05cda7efbfb8bd4a0 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Thu, 21 Mar 2024 01:16:23 +0100 Subject: [PATCH 02/11] Make record_exception more robust handling them outside the except scope (#3778) Make the stacktrace formatting not rely on being inside the except scope. Fixes #3762 Suggested-by: Alex Hall Co-authored-by: Diego Hurtado Co-authored-by: Srikanth Chekuri --- CHANGELOG.md | 2 ++ .../src/opentelemetry/sdk/trace/__init__.py | 13 ++++++------- opentelemetry-sdk/tests/trace/test_trace.py | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56168db8eb..be91754d3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#3648](https://github.com/open-telemetry/opentelemetry-python/pull/3648)) - Fix ValueError message for PeriodicExportingMetricsReader ([#3769](https://github.com/open-telemetry/opentelemetry-python/pull/3769)) +- Make span.record_exception more robust + ([#3778](https://github.com/open-telemetry/opentelemetry-python/pull/3778)) ## Version 1.23.0/0.44b0 (2024-02-23) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 8833653616..5ba183a2cd 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -988,13 +988,12 @@ def record_exception( escaped: bool = False, ) -> None: """Records an exception as a span event.""" - try: - stacktrace = traceback.format_exc() - except Exception: # pylint: disable=broad-except - # workaround for python 3.4, format_exc can raise - # an AttributeError if the __context__ on - # an exception is None - stacktrace = "Exception occurred on stacktrace formatting" + # TODO: keep only exception as first argument after baseline is 3.10 + stacktrace = "".join( + traceback.format_exception( + type(exception), value=exception, tb=exception.__traceback__ + ) + ) _attributes = { "exception.type": exception.__class__.__name__, "exception.message": str(exception), diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 3e71a1bf62..5441bed6dd 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -1292,6 +1292,23 @@ def test_record_exception_context_manager(self): finally: self.assertEqual(len(span.events), 0) + def test_record_exception_out_of_scope(self): + span = trace._Span("name", mock.Mock(spec=trace_api.SpanContext)) + out_of_scope_exception = ValueError("invalid") + span.record_exception(out_of_scope_exception) + exception_event = span.events[0] + self.assertEqual("exception", exception_event.name) + self.assertEqual( + "invalid", exception_event.attributes["exception.message"] + ) + self.assertEqual( + "ValueError", exception_event.attributes["exception.type"] + ) + self.assertIn( + "ValueError: invalid", + exception_event.attributes["exception.stacktrace"], + ) + def span_event_start_fmt(span_processor_name, span_name): return span_processor_name + ":" + span_name + ":start" From 694445f6a39ab55826b955320c74650e1d2395ae Mon Sep 17 00:00:00 2001 From: Yuri Shkuro Date: Thu, 21 Mar 2024 14:02:19 -0400 Subject: [PATCH 03/11] Fix license field in pyproject.toml files (#3803) * Fix pyproject.toml Signed-off-by: Yuri Shkuro * changelog Signed-off-by: Yuri Shkuro --------- Signed-off-by: Yuri Shkuro --- CHANGELOG.md | 2 ++ docs/examples/error_handler/error_handler_0/pyproject.toml | 2 +- docs/examples/error_handler/error_handler_1/pyproject.toml | 2 +- exporter/opentelemetry-exporter-opencensus/pyproject.toml | 2 +- .../opentelemetry-exporter-otlp-proto-common/pyproject.toml | 2 +- exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml | 2 +- exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml | 2 +- exporter/opentelemetry-exporter-otlp/pyproject.toml | 2 +- exporter/opentelemetry-exporter-prometheus/pyproject.toml | 2 +- exporter/opentelemetry-exporter-zipkin-json/pyproject.toml | 2 +- .../opentelemetry-exporter-zipkin-proto-http/pyproject.toml | 2 +- exporter/opentelemetry-exporter-zipkin/pyproject.toml | 2 +- opentelemetry-api/pyproject.toml | 2 +- opentelemetry-proto/pyproject.toml | 2 +- opentelemetry-sdk/pyproject.toml | 2 +- opentelemetry-semantic-conventions/pyproject.toml | 2 +- propagator/opentelemetry-propagator-b3/pyproject.toml | 2 +- propagator/opentelemetry-propagator-jaeger/pyproject.toml | 2 +- shim/opentelemetry-opencensus-shim/pyproject.toml | 2 +- shim/opentelemetry-opentracing-shim/pyproject.toml | 2 +- tests/opentelemetry-test-utils/pyproject.toml | 2 +- 21 files changed, 22 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be91754d3e..8d4a7add3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#3769](https://github.com/open-telemetry/opentelemetry-python/pull/3769)) - Make span.record_exception more robust ([#3778](https://github.com/open-telemetry/opentelemetry-python/pull/3778)) +- Fix license field in pyproject.toml files + ([#3803](https://github.com/open-telemetry/opentelemetry-python/pull/3803)) ## Version 1.23.0/0.44b0 (2024-02-23) diff --git a/docs/examples/error_handler/error_handler_0/pyproject.toml b/docs/examples/error_handler/error_handler_0/pyproject.toml index 689a4dd019..7869303c11 100644 --- a/docs/examples/error_handler/error_handler_0/pyproject.toml +++ b/docs/examples/error_handler/error_handler_0/pyproject.toml @@ -7,7 +7,7 @@ name = "error-handler-0" dynamic = ["version"] description = "This is just an error handler example package" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/docs/examples/error_handler/error_handler_1/pyproject.toml b/docs/examples/error_handler/error_handler_1/pyproject.toml index af9ad21d18..b2e04d4a67 100644 --- a/docs/examples/error_handler/error_handler_1/pyproject.toml +++ b/docs/examples/error_handler/error_handler_1/pyproject.toml @@ -7,7 +7,7 @@ name = "error-handler-1" dynamic = ["version"] description = "This is just an error handler example package" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-opencensus/pyproject.toml b/exporter/opentelemetry-exporter-opencensus/pyproject.toml index abe50f7b7f..fc2a8f2c2c 100644 --- a/exporter/opentelemetry-exporter-opencensus/pyproject.toml +++ b/exporter/opentelemetry-exporter-opencensus/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-opencensus" dynamic = ["version"] description = "OpenCensus Exporter" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml b/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml index 8043bfbcf9..3963d60c94 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-otlp-proto-common" dynamic = ["version"] description = "OpenTelemetry Protobuf encoding" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml b/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml index b6d9e13066..a54c1e86e3 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-otlp-proto-grpc" dynamic = ["version"] description = "OpenTelemetry Collector Protobuf over gRPC Exporter" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml b/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml index 77a3bcb95b..f1c88db5c9 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-otlp-proto-http" dynamic = ["version"] description = "OpenTelemetry Collector Protobuf over HTTP Exporter" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-otlp/pyproject.toml b/exporter/opentelemetry-exporter-otlp/pyproject.toml index b61acce885..7750cfda59 100644 --- a/exporter/opentelemetry-exporter-otlp/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-otlp" dynamic = ["version"] description = "OpenTelemetry Collector Exporters" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-prometheus/pyproject.toml b/exporter/opentelemetry-exporter-prometheus/pyproject.toml index 3117ee6afb..1c3c9e89dd 100644 --- a/exporter/opentelemetry-exporter-prometheus/pyproject.toml +++ b/exporter/opentelemetry-exporter-prometheus/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-prometheus" dynamic = ["version"] description = "Prometheus Metric Exporter for OpenTelemetry" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-zipkin-json/pyproject.toml b/exporter/opentelemetry-exporter-zipkin-json/pyproject.toml index 8d18ed5f56..ef34f2fc6e 100644 --- a/exporter/opentelemetry-exporter-zipkin-json/pyproject.toml +++ b/exporter/opentelemetry-exporter-zipkin-json/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-zipkin-json" dynamic = ["version"] description = "Zipkin Span JSON Exporter for OpenTelemetry" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml b/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml index 25e0c95877..03a400dce7 100644 --- a/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml +++ b/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-zipkin-proto-http" dynamic = ["version"] description = "Zipkin Span Protobuf Exporter for OpenTelemetry" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/exporter/opentelemetry-exporter-zipkin/pyproject.toml b/exporter/opentelemetry-exporter-zipkin/pyproject.toml index 2d22ea4f24..7ec3ac135f 100644 --- a/exporter/opentelemetry-exporter-zipkin/pyproject.toml +++ b/exporter/opentelemetry-exporter-zipkin/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-exporter-zipkin" dynamic = ["version"] description = "Zipkin Span Exporters for OpenTelemetry" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/opentelemetry-api/pyproject.toml b/opentelemetry-api/pyproject.toml index cd9dc258b3..3f8f070992 100644 --- a/opentelemetry-api/pyproject.toml +++ b/opentelemetry-api/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "opentelemetry-api" description = "OpenTelemetry Python API" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/opentelemetry-proto/pyproject.toml b/opentelemetry-proto/pyproject.toml index 4a5ae1de5e..a31deddcfc 100644 --- a/opentelemetry-proto/pyproject.toml +++ b/opentelemetry-proto/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-proto" dynamic = ["version"] description = "OpenTelemetry Python Proto" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/opentelemetry-sdk/pyproject.toml b/opentelemetry-sdk/pyproject.toml index e8718e2d67..ea5d1ec2b0 100644 --- a/opentelemetry-sdk/pyproject.toml +++ b/opentelemetry-sdk/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-sdk" dynamic = ["version"] description = "OpenTelemetry Python SDK" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/opentelemetry-semantic-conventions/pyproject.toml b/opentelemetry-semantic-conventions/pyproject.toml index 290c54b370..876fb94a98 100644 --- a/opentelemetry-semantic-conventions/pyproject.toml +++ b/opentelemetry-semantic-conventions/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-semantic-conventions" dynamic = ["version"] description = "OpenTelemetry Semantic Conventions" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/propagator/opentelemetry-propagator-b3/pyproject.toml b/propagator/opentelemetry-propagator-b3/pyproject.toml index 736006e74e..dede9efaa9 100644 --- a/propagator/opentelemetry-propagator-b3/pyproject.toml +++ b/propagator/opentelemetry-propagator-b3/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-propagator-b3" dynamic = ["version"] description = "OpenTelemetry B3 Propagator" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/propagator/opentelemetry-propagator-jaeger/pyproject.toml b/propagator/opentelemetry-propagator-jaeger/pyproject.toml index b716925f43..df8df9a98f 100644 --- a/propagator/opentelemetry-propagator-jaeger/pyproject.toml +++ b/propagator/opentelemetry-propagator-jaeger/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-propagator-jaeger" dynamic = ["version"] description = "OpenTelemetry Jaeger Propagator" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/shim/opentelemetry-opencensus-shim/pyproject.toml b/shim/opentelemetry-opencensus-shim/pyproject.toml index be92937fae..85f9784809 100644 --- a/shim/opentelemetry-opencensus-shim/pyproject.toml +++ b/shim/opentelemetry-opencensus-shim/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-opencensus-shim" dynamic = ["version"] description = "OpenCensus Shim for OpenTelemetry" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/shim/opentelemetry-opentracing-shim/pyproject.toml b/shim/opentelemetry-opentracing-shim/pyproject.toml index 79507939f4..0a91ffd7ac 100644 --- a/shim/opentelemetry-opentracing-shim/pyproject.toml +++ b/shim/opentelemetry-opentracing-shim/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-opentracing-shim" dynamic = ["version"] description = "OpenTracing Shim for OpenTelemetry" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, diff --git a/tests/opentelemetry-test-utils/pyproject.toml b/tests/opentelemetry-test-utils/pyproject.toml index 6978ba5e22..9d68cb6708 100644 --- a/tests/opentelemetry-test-utils/pyproject.toml +++ b/tests/opentelemetry-test-utils/pyproject.toml @@ -7,7 +7,7 @@ name = "opentelemetry-test-utils" dynamic = ["version"] description = "Test utilities for OpenTelemetry unit tests" readme = "README.rst" -license = "Apache-2.0" +license = {text = "Apache-2.0"} requires-python = ">=3.8" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, From 29c293fbb120ff8b760519a25e0530b5ab05af83 Mon Sep 17 00:00:00 2001 From: Alexey Ivanov Date: Thu, 21 Mar 2024 18:55:18 -0700 Subject: [PATCH 04/11] Improve tracing sdk type annotations (#3794) * Improve tracing sdk type annotations * Mark instrumentation_scope as optional --- .../src/opentelemetry/sdk/trace/__init__.py | 27 ++++++++-------- .../src/opentelemetry/sdk/trace/sampling.py | 32 ++++++++++--------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index 5ba183a2cd..ff999b9ba8 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -30,6 +30,7 @@ Dict, Iterator, List, + MutableMapping, Optional, Sequence, Tuple, @@ -745,17 +746,17 @@ def __init__( parent: Optional[trace_api.SpanContext] = None, sampler: Optional[sampling.Sampler] = None, trace_config: None = None, # TODO - resource: Resource = None, + resource: Optional[Resource] = None, attributes: types.Attributes = None, - events: Sequence[Event] = None, + events: Optional[Sequence[Event]] = None, links: Sequence[trace_api.Link] = (), kind: trace_api.SpanKind = trace_api.SpanKind.INTERNAL, span_processor: SpanProcessor = SpanProcessor(), - instrumentation_info: InstrumentationInfo = None, + instrumentation_info: Optional[InstrumentationInfo] = None, record_exception: bool = True, set_status_on_exception: bool = True, limits=_UnsetLimits, - instrumentation_scope: InstrumentationScope = None, + instrumentation_scope: Optional[InstrumentationScope] = None, ) -> None: if resource is None: resource = Resource.create({}) @@ -994,7 +995,7 @@ def record_exception( type(exception), value=exception, tb=exception.__traceback__ ) ) - _attributes = { + _attributes: MutableMapping[str, types.AttributeValue] = { "exception.type": exception.__class__.__name__, "exception.message": str(exception), "exception.stacktrace": stacktrace, @@ -1045,7 +1046,7 @@ def start_as_current_span( context: Optional[context_api.Context] = None, kind: trace_api.SpanKind = trace_api.SpanKind.INTERNAL, attributes: types.Attributes = None, - links: Sequence[trace_api.Link] = (), + links: Optional[Sequence[trace_api.Link]] = (), start_time: Optional[int] = None, record_exception: bool = True, set_status_on_exception: bool = True, @@ -1075,7 +1076,7 @@ def start_span( # pylint: disable=too-many-locals context: Optional[context_api.Context] = None, kind: trace_api.SpanKind = trace_api.SpanKind.INTERNAL, attributes: types.Attributes = None, - links: Sequence[trace_api.Link] = (), + links: Optional[Sequence[trace_api.Link]] = (), start_time: Optional[int] = None, record_exception: bool = True, set_status_on_exception: bool = True, @@ -1152,15 +1153,15 @@ class TracerProvider(trace_api.TracerProvider): def __init__( self, - sampler: sampling.Sampler = None, - resource: Resource = None, + sampler: Optional[sampling.Sampler] = None, + resource: Optional[Resource] = None, shutdown_on_exit: bool = True, active_span_processor: Union[ - SynchronousMultiSpanProcessor, ConcurrentMultiSpanProcessor + SynchronousMultiSpanProcessor, ConcurrentMultiSpanProcessor, None ] = None, - id_generator: IdGenerator = None, - span_limits: SpanLimits = None, - ): + id_generator: Optional[IdGenerator] = None, + span_limits: Optional[SpanLimits] = None, + ) -> None: self._active_span_processor = ( active_span_processor or SynchronousMultiSpanProcessor() ) diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/sampling.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/sampling.py index 0236fac6b6..40e142ea1a 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/sampling.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/sampling.py @@ -184,7 +184,7 @@ def __init__( self, decision: Decision, attributes: "Attributes" = None, - trace_state: "TraceState" = None, + trace_state: Optional["TraceState"] = None, ) -> None: self.decision = decision if attributes is None: @@ -201,10 +201,10 @@ def should_sample( parent_context: Optional["Context"], trace_id: int, name: str, - kind: SpanKind = None, + kind: Optional[SpanKind] = None, attributes: Attributes = None, - links: Sequence["Link"] = None, - trace_state: "TraceState" = None, + links: Optional[Sequence["Link"]] = None, + trace_state: Optional["TraceState"] = None, ) -> "SamplingResult": pass @@ -216,7 +216,7 @@ def get_description(self) -> str: class StaticSampler(Sampler): """Sampler that always returns the same decision.""" - def __init__(self, decision: "Decision"): + def __init__(self, decision: "Decision") -> None: self._decision = decision def should_sample( @@ -224,10 +224,10 @@ def should_sample( parent_context: Optional["Context"], trace_id: int, name: str, - kind: SpanKind = None, + kind: Optional[SpanKind] = None, attributes: Attributes = None, - links: Sequence["Link"] = None, - trace_state: "TraceState" = None, + links: Optional[Sequence["Link"]] = None, + trace_state: Optional["TraceState"] = None, ) -> "SamplingResult": if self._decision is Decision.DROP: attributes = None @@ -285,10 +285,10 @@ def should_sample( parent_context: Optional["Context"], trace_id: int, name: str, - kind: SpanKind = None, + kind: Optional[SpanKind] = None, attributes: Attributes = None, - links: Sequence["Link"] = None, - trace_state: "TraceState" = None, + links: Optional[Sequence["Link"]] = None, + trace_state: Optional["TraceState"] = None, ) -> "SamplingResult": decision = Decision.DROP if trace_id & self.TRACE_ID_LIMIT < self.bound: @@ -340,10 +340,10 @@ def should_sample( parent_context: Optional["Context"], trace_id: int, name: str, - kind: SpanKind = None, + kind: Optional[SpanKind] = None, attributes: Attributes = None, - links: Sequence["Link"] = None, - trace_state: "TraceState" = None, + links: Optional[Sequence["Link"]] = None, + trace_state: Optional["TraceState"] = None, ) -> "SamplingResult": parent_span_context = get_current_span( parent_context @@ -443,7 +443,9 @@ def _get_from_env_or_default() -> Sampler: return _KNOWN_SAMPLERS[trace_sampler] -def _get_parent_trace_state(parent_context) -> Optional["TraceState"]: +def _get_parent_trace_state( + parent_context: Optional[Context], +) -> Optional["TraceState"]: parent_span_context = get_current_span(parent_context).get_span_context() if parent_span_context is None or not parent_span_context.is_valid: return None From c2fc94563470215cd4ee51096d65bad72aa8b266 Mon Sep 17 00:00:00 2001 From: Kamal Marhubi Date: Wed, 27 Mar 2024 19:54:51 -0400 Subject: [PATCH 05/11] record_exception: Accept BaseException (#3354) --- CHANGELOG.md | 2 ++ opentelemetry-api/src/opentelemetry/trace/span.py | 4 ++-- opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d4a7add3c..aab968eddb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#3648](https://github.com/open-telemetry/opentelemetry-python/pull/3648)) - Fix ValueError message for PeriodicExportingMetricsReader ([#3769](https://github.com/open-telemetry/opentelemetry-python/pull/3769)) +- Use `BaseException` instead of `Exception` in `record_exception` + ([#3354](https://github.com/open-telemetry/opentelemetry-python/pull/3354)) - Make span.record_exception more robust ([#3778](https://github.com/open-telemetry/opentelemetry-python/pull/3778)) - Fix license field in pyproject.toml files diff --git a/opentelemetry-api/src/opentelemetry/trace/span.py b/opentelemetry-api/src/opentelemetry/trace/span.py index 8201fdb251..5d46ffcb4a 100644 --- a/opentelemetry-api/src/opentelemetry/trace/span.py +++ b/opentelemetry-api/src/opentelemetry/trace/span.py @@ -169,7 +169,7 @@ def set_status( @abc.abstractmethod def record_exception( self, - exception: Exception, + exception: BaseException, attributes: types.Attributes = None, timestamp: typing.Optional[int] = None, escaped: bool = False, @@ -563,7 +563,7 @@ def set_status( def record_exception( self, - exception: Exception, + exception: BaseException, attributes: types.Attributes = None, timestamp: typing.Optional[int] = None, escaped: bool = False, diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py index ff999b9ba8..0110a5c0e0 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py @@ -983,7 +983,7 @@ def __exit__( def record_exception( self, - exception: Exception, + exception: BaseException, attributes: types.Attributes = None, timestamp: Optional[int] = None, escaped: bool = False, From bb89e0ab3f6f98c48b38381a4aba21b34c3e96ed Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Thu, 28 Mar 2024 23:14:26 +0530 Subject: [PATCH 06/11] Make `create_gauge` non-abstract method (#3817) --- CHANGELOG.md | 2 + .../metrics/_internal/__init__.py | 5 +- opentelemetry-api/tests/metrics/test_meter.py | 1 - .../metrics/test_subclass_instantiation.py | 209 ++++++++++++++++++ 4 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 opentelemetry-api/tests/metrics/test_subclass_instantiation.py diff --git a/CHANGELOG.md b/CHANGELOG.md index aab968eddb..bf1754c214 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- Make create_gauge non-abstract method + ([#3817](https://github.com/open-telemetry/opentelemetry-python/pull/3817)) - Make `tracer.start_as_current_span()` decorator work with async functions ([#3633](https://github.com/open-telemetry/opentelemetry-python/pull/3633)) - Fix python 3.12 deprecation warning diff --git a/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py b/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py index 2e6914f8e3..1579a1a244 100644 --- a/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py +++ b/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py @@ -41,6 +41,7 @@ """ +import warnings from abc import ABC, abstractmethod from logging import getLogger from os import environ @@ -385,8 +386,7 @@ def create_histogram( description: A description for this instrument and what it measures. """ - @abstractmethod - def create_gauge( + def create_gauge( # type: ignore # pylint: disable=no-self-use self, name: str, unit: str = "", @@ -400,6 +400,7 @@ def create_gauge( example, ``By`` for bytes. UCUM units are recommended. description: A description for this instrument and what it measures. """ + warnings.warn("create_gauge() is not implemented and will be a no-op") @abstractmethod def create_observable_gauge( diff --git a/opentelemetry-api/tests/metrics/test_meter.py b/opentelemetry-api/tests/metrics/test_meter.py index 8b427a7372..2226965521 100644 --- a/opentelemetry-api/tests/metrics/test_meter.py +++ b/opentelemetry-api/tests/metrics/test_meter.py @@ -134,7 +134,6 @@ def test_create_gauge(self): """ self.assertTrue(hasattr(Meter, "create_gauge")) - self.assertTrue(Meter.create_gauge.__isabstractmethod__) def test_create_observable_gauge(self): """ diff --git a/opentelemetry-api/tests/metrics/test_subclass_instantiation.py b/opentelemetry-api/tests/metrics/test_subclass_instantiation.py new file mode 100644 index 0000000000..a5b68d1c06 --- /dev/null +++ b/opentelemetry-api/tests/metrics/test_subclass_instantiation.py @@ -0,0 +1,209 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# type: ignore + +# NOTE: The tests in this file are intended to test the semver compatibility of the public API. +# Any tests that fail here indicate that the public API has changed in a way that is not backwards compatible. +# Either bump the major version of the API, or make the necessary changes to the API to remain semver compatible. + +from typing import Optional + +from opentelemetry.metrics import ( + Asynchronous, + Counter, + Histogram, + Instrument, + Meter, + MeterProvider, + ObservableCounter, + ObservableGauge, + ObservableUpDownCounter, + Synchronous, + UpDownCounter, + _Gauge, +) + + +class MeterProviderImplTest(MeterProvider): + def get_meter( + self, + name: str, + version: Optional[str] = None, + schema_url: Optional[str] = None, + ) -> Meter: + return super().get_meter(name, version, schema_url) + + +def test_meter_provider_subclass_instantiation(): + meter_provider = MeterProviderImplTest() + assert isinstance(meter_provider, MeterProvider) + + +class MeterImplTest(Meter): + def create_counter(self, name, description, **kwargs): + pass + + def create_up_down_counter(self, name, description, **kwargs): + pass + + def create_observable_counter(self, name, description, **kwargs): + pass + + def create_histogram(self, name, description, **kwargs): + pass + + def create_observable_gauge(self, name, description, **kwargs): + pass + + def create_observable_up_down_counter(self, name, description, **kwargs): + pass + + +def test_meter_subclass_instantiation(): + meter = MeterImplTest("subclass_test") + assert isinstance(meter, Meter) + + +class SynchronousImplTest(Synchronous): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + +def test_synchronous_subclass_instantiation(): + synchronous = SynchronousImplTest("subclass_test") + assert isinstance(synchronous, Synchronous) + + +class AsynchronousImplTest(Asynchronous): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + +def test_asynchronous_subclass_instantiation(): + asynchronous = AsynchronousImplTest("subclass_test") + assert isinstance(asynchronous, Asynchronous) + + +class CounterImplTest(Counter): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + def add(self, amount: int, **kwargs): + pass + + +def test_counter_subclass_instantiation(): + counter = CounterImplTest("subclass_test") + assert isinstance(counter, Counter) + + +class UpDownCounterImplTest(UpDownCounter): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + def add(self, amount: int, **kwargs): + pass + + +def test_up_down_counter_subclass_instantiation(): + up_down_counter = UpDownCounterImplTest("subclass_test") + assert isinstance(up_down_counter, UpDownCounter) + + +class ObservableCounterImplTest(ObservableCounter): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + +def test_observable_counter_subclass_instantiation(): + observable_counter = ObservableCounterImplTest("subclass_test") + assert isinstance(observable_counter, ObservableCounter) + + +class HistogramImplTest(Histogram): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + def record(self, amount: int, **kwargs): + pass + + +def test_histogram_subclass_instantiation(): + histogram = HistogramImplTest("subclass_test") + assert isinstance(histogram, Histogram) + + +class GaugeImplTest(_Gauge): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + def set(self, amount: int, **kwargs): + pass + + +def test_gauge_subclass_instantiation(): + gauge = GaugeImplTest("subclass_test") + assert isinstance(gauge, _Gauge) + + +class InstrumentImplTest(Instrument): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + +def test_instrument_subclass_instantiation(): + instrument = InstrumentImplTest("subclass_test") + assert isinstance(instrument, Instrument) + + +class ObservableGaugeImplTest(ObservableGauge): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + +def test_observable_gauge_subclass_instantiation(): + observable_gauge = ObservableGaugeImplTest("subclass_test") + assert isinstance(observable_gauge, ObservableGauge) + + +class ObservableUpDownCounterImplTest(ObservableUpDownCounter): + def __init__( + self, name: str, unit: str = "", description: str = "" + ) -> None: + super().__init__(name, unit, description) + + +def test_observable_up_down_counter_subclass_instantiation(): + observable_up_down_counter = ObservableUpDownCounterImplTest( + "subclass_test" + ) + assert isinstance(observable_up_down_counter, ObservableUpDownCounter) From fa85d7c287d65a53389503e3b08a5e54d47652d7 Mon Sep 17 00:00:00 2001 From: OpenTelemetry Bot <107717825+opentelemetrybot@users.noreply.github.com> Date: Thu, 28 Mar 2024 22:09:34 +0100 Subject: [PATCH 07/11] Update version to 1.25.0.dev/0.46b0.dev (#3818) --- .github/workflows/test.yml | 4 ++-- CHANGELOG.md | 2 ++ eachdist.ini | 4 ++-- exporter/opentelemetry-exporter-opencensus/pyproject.toml | 2 +- .../src/opentelemetry/exporter/opencensus/version.py | 2 +- .../opentelemetry-exporter-otlp-proto-common/pyproject.toml | 2 +- .../src/opentelemetry/exporter/otlp/proto/common/version.py | 2 +- .../opentelemetry-exporter-otlp-proto-grpc/pyproject.toml | 6 +++--- .../src/opentelemetry/exporter/otlp/proto/grpc/version.py | 2 +- .../opentelemetry-exporter-otlp-proto-http/pyproject.toml | 6 +++--- .../src/opentelemetry/exporter/otlp/proto/http/version.py | 2 +- exporter/opentelemetry-exporter-otlp/pyproject.toml | 4 ++-- .../src/opentelemetry/exporter/otlp/version.py | 2 +- exporter/opentelemetry-exporter-prometheus/pyproject.toml | 2 +- .../src/opentelemetry/exporter/prometheus/version.py | 2 +- .../src/opentelemetry/exporter/zipkin/json/version.py | 2 +- .../opentelemetry-exporter-zipkin-proto-http/pyproject.toml | 2 +- .../src/opentelemetry/exporter/zipkin/proto/http/version.py | 2 +- exporter/opentelemetry-exporter-zipkin/pyproject.toml | 4 ++-- .../src/opentelemetry/exporter/zipkin/version.py | 2 +- opentelemetry-api/src/opentelemetry/version.py | 2 +- opentelemetry-proto/src/opentelemetry/proto/version.py | 2 +- opentelemetry-sdk/pyproject.toml | 4 ++-- opentelemetry-sdk/src/opentelemetry/sdk/version.py | 2 +- .../src/opentelemetry/semconv/version.py | 2 +- .../src/opentelemetry/propagators/b3/version.py | 2 +- .../src/opentelemetry/propagators/jaeger/version.py | 2 +- .../src/opentelemetry/shim/opencensus/version.py | 2 +- .../src/opentelemetry/shim/opentracing_shim/version.py | 2 +- tests/opentelemetry-test-utils/pyproject.toml | 4 ++-- .../src/opentelemetry/test/version.py | 2 +- 31 files changed, 42 insertions(+), 40 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2dacdd6b05..651b13ab55 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ env: # Otherwise, set variable to the commit of your branch on # opentelemetry-python-contrib which is compatible with these Core repo # changes. - CONTRIB_REPO_SHA: 9a7c2f7ba16669d00be273aa9e988af0df7aba4c + CONTRIB_REPO_SHA: 3c2788469834aa4f5976e1644d757f43d60bc219 # This is needed because we do not clone the core repo in contrib builds anymore. # When running contrib builds as part of core builds, we use actions/checkout@v2 which # does not set an environment variable (simply just runs tox), which is different when @@ -176,7 +176,7 @@ jobs: - "tornado" - "tortoiseorm" - "urllib" - - "urllib3v" + - "urllib3" - "wsgi" - "prometheus-remote-write" - "richconsole" diff --git a/CHANGELOG.md b/CHANGELOG.md index bf1754c214..56ef2b45cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## Version 1.24.0/0.45b0 (2024-03-28) + - Make create_gauge non-abstract method ([#3817](https://github.com/open-telemetry/opentelemetry-python/pull/3817)) - Make `tracer.start_as_current_span()` decorator work with async functions diff --git a/eachdist.ini b/eachdist.ini index 7749b33a84..b7d73f192a 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -11,7 +11,7 @@ sortfirst= exporter/* [stable] -version=1.24.0.dev +version=1.25.0.dev packages= opentelemetry-sdk @@ -27,7 +27,7 @@ packages= opentelemetry-api [prerelease] -version=0.45b0.dev +version=0.46b0.dev packages= opentelemetry-opentracing-shim diff --git a/exporter/opentelemetry-exporter-opencensus/pyproject.toml b/exporter/opentelemetry-exporter-opencensus/pyproject.toml index fc2a8f2c2c..44ba08ebcb 100644 --- a/exporter/opentelemetry-exporter-opencensus/pyproject.toml +++ b/exporter/opentelemetry-exporter-opencensus/pyproject.toml @@ -27,7 +27,7 @@ classifiers = [ dependencies = [ "grpcio >= 1.0.0, < 2.0.0", "opencensus-proto >= 0.1.0, < 1.0.0", - "opentelemetry-api >= 1.24.0.dev", + "opentelemetry-api >= 1.25.0.dev", "opentelemetry-sdk >= 1.15", "protobuf ~= 3.13", "setuptools >= 16.0", diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py index 2b23bc4994..ff4933b20b 100644 --- a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py +++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.45b0.dev" +__version__ = "0.46b0.dev" diff --git a/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml b/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml index 3963d60c94..64e1b02c7a 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp-proto-common/pyproject.toml @@ -24,7 +24,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", ] dependencies = [ - "opentelemetry-proto == 1.24.0.dev", + "opentelemetry-proto == 1.25.0.dev", ] [project.urls] diff --git a/exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/version.py b/exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/version.py index 8c35630f0e..e8b404f050 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/version.py +++ b/exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml b/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml index a54c1e86e3..967dcebe94 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/pyproject.toml @@ -28,9 +28,9 @@ dependencies = [ "googleapis-common-protos ~= 1.52", "grpcio >= 1.0.0, < 2.0.0", "opentelemetry-api ~= 1.15", - "opentelemetry-proto == 1.24.0.dev", - "opentelemetry-sdk ~= 1.24.0.dev", - "opentelemetry-exporter-otlp-proto-common == 1.24.0.dev", + "opentelemetry-proto == 1.25.0.dev", + "opentelemetry-sdk ~= 1.25.0.dev", + "opentelemetry-exporter-otlp-proto-common == 1.25.0.dev", ] [project.optional-dependencies] diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/version.py b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/version.py index 8c35630f0e..e8b404f050 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/version.py +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml b/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml index f1c88db5c9..1e17052851 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp-proto-http/pyproject.toml @@ -27,9 +27,9 @@ dependencies = [ "Deprecated >= 1.2.6", "googleapis-common-protos ~= 1.52", "opentelemetry-api ~= 1.15", - "opentelemetry-proto == 1.24.0.dev", - "opentelemetry-sdk ~= 1.24.0.dev", - "opentelemetry-exporter-otlp-proto-common == 1.24.0.dev", + "opentelemetry-proto == 1.25.0.dev", + "opentelemetry-sdk ~= 1.25.0.dev", + "opentelemetry-exporter-otlp-proto-common == 1.25.0.dev", "requests ~= 2.7", ] diff --git a/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/version.py b/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/version.py index 8c35630f0e..e8b404f050 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/version.py +++ b/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/exporter/opentelemetry-exporter-otlp/pyproject.toml b/exporter/opentelemetry-exporter-otlp/pyproject.toml index 7750cfda59..d6aa3aa4cd 100644 --- a/exporter/opentelemetry-exporter-otlp/pyproject.toml +++ b/exporter/opentelemetry-exporter-otlp/pyproject.toml @@ -25,8 +25,8 @@ classifiers = [ "Typing :: Typed", ] dependencies = [ - "opentelemetry-exporter-otlp-proto-grpc == 1.24.0.dev", - "opentelemetry-exporter-otlp-proto-http == 1.24.0.dev", + "opentelemetry-exporter-otlp-proto-grpc == 1.25.0.dev", + "opentelemetry-exporter-otlp-proto-http == 1.25.0.dev", ] [project.entry-points.opentelemetry_logs_exporter] diff --git a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py index 8c35630f0e..e8b404f050 100644 --- a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py +++ b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/exporter/opentelemetry-exporter-prometheus/pyproject.toml b/exporter/opentelemetry-exporter-prometheus/pyproject.toml index 1c3c9e89dd..6fdb327124 100644 --- a/exporter/opentelemetry-exporter-prometheus/pyproject.toml +++ b/exporter/opentelemetry-exporter-prometheus/pyproject.toml @@ -26,7 +26,7 @@ classifiers = [ dependencies = [ "opentelemetry-api ~= 1.12", # DONOTMERGE: confirm that this will becomes ~= 1.21 in the next release - "opentelemetry-sdk ~= 1.24.0.dev", + "opentelemetry-sdk ~= 1.25.0.dev", "prometheus_client >= 0.5.0, < 1.0.0", ] diff --git a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py index 2b23bc4994..ff4933b20b 100644 --- a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py +++ b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.45b0.dev" +__version__ = "0.46b0.dev" diff --git a/exporter/opentelemetry-exporter-zipkin-json/src/opentelemetry/exporter/zipkin/json/version.py b/exporter/opentelemetry-exporter-zipkin-json/src/opentelemetry/exporter/zipkin/json/version.py index 8c35630f0e..e8b404f050 100644 --- a/exporter/opentelemetry-exporter-zipkin-json/src/opentelemetry/exporter/zipkin/json/version.py +++ b/exporter/opentelemetry-exporter-zipkin-json/src/opentelemetry/exporter/zipkin/json/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml b/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml index 03a400dce7..a934fc7edd 100644 --- a/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml +++ b/exporter/opentelemetry-exporter-zipkin-proto-http/pyproject.toml @@ -26,7 +26,7 @@ classifiers = [ ] dependencies = [ "opentelemetry-api ~= 1.3", - "opentelemetry-exporter-zipkin-json == 1.24.0.dev", + "opentelemetry-exporter-zipkin-json == 1.25.0.dev", "opentelemetry-sdk ~= 1.11", "protobuf ~= 3.12", "requests ~= 2.7", diff --git a/exporter/opentelemetry-exporter-zipkin-proto-http/src/opentelemetry/exporter/zipkin/proto/http/version.py b/exporter/opentelemetry-exporter-zipkin-proto-http/src/opentelemetry/exporter/zipkin/proto/http/version.py index 8c35630f0e..e8b404f050 100644 --- a/exporter/opentelemetry-exporter-zipkin-proto-http/src/opentelemetry/exporter/zipkin/proto/http/version.py +++ b/exporter/opentelemetry-exporter-zipkin-proto-http/src/opentelemetry/exporter/zipkin/proto/http/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/exporter/opentelemetry-exporter-zipkin/pyproject.toml b/exporter/opentelemetry-exporter-zipkin/pyproject.toml index 7ec3ac135f..905a52fae7 100644 --- a/exporter/opentelemetry-exporter-zipkin/pyproject.toml +++ b/exporter/opentelemetry-exporter-zipkin/pyproject.toml @@ -25,8 +25,8 @@ classifiers = [ "Typing :: Typed", ] dependencies = [ - "opentelemetry-exporter-zipkin-json == 1.24.0.dev", - "opentelemetry-exporter-zipkin-proto-http == 1.24.0.dev", + "opentelemetry-exporter-zipkin-json == 1.25.0.dev", + "opentelemetry-exporter-zipkin-proto-http == 1.25.0.dev", ] [project.entry-points.opentelemetry_traces_exporter] diff --git a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py index 8c35630f0e..e8b404f050 100644 --- a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py +++ b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/opentelemetry-api/src/opentelemetry/version.py b/opentelemetry-api/src/opentelemetry/version.py index 8c35630f0e..e8b404f050 100644 --- a/opentelemetry-api/src/opentelemetry/version.py +++ b/opentelemetry-api/src/opentelemetry/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/opentelemetry-proto/src/opentelemetry/proto/version.py b/opentelemetry-proto/src/opentelemetry/proto/version.py index 8c35630f0e..e8b404f050 100644 --- a/opentelemetry-proto/src/opentelemetry/proto/version.py +++ b/opentelemetry-proto/src/opentelemetry/proto/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/opentelemetry-sdk/pyproject.toml b/opentelemetry-sdk/pyproject.toml index ea5d1ec2b0..25568d42c6 100644 --- a/opentelemetry-sdk/pyproject.toml +++ b/opentelemetry-sdk/pyproject.toml @@ -25,8 +25,8 @@ classifiers = [ "Typing :: Typed", ] dependencies = [ - "opentelemetry-api == 1.24.0.dev", - "opentelemetry-semantic-conventions == 0.45b0.dev", + "opentelemetry-api == 1.25.0.dev", + "opentelemetry-semantic-conventions == 0.46b0.dev", "typing-extensions >= 3.7.4", ] diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/version.py b/opentelemetry-sdk/src/opentelemetry/sdk/version.py index 8c35630f0e..e8b404f050 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/version.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/version.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/version.py index 2b23bc4994..ff4933b20b 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/version.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.45b0.dev" +__version__ = "0.46b0.dev" diff --git a/propagator/opentelemetry-propagator-b3/src/opentelemetry/propagators/b3/version.py b/propagator/opentelemetry-propagator-b3/src/opentelemetry/propagators/b3/version.py index 8c35630f0e..e8b404f050 100644 --- a/propagator/opentelemetry-propagator-b3/src/opentelemetry/propagators/b3/version.py +++ b/propagator/opentelemetry-propagator-b3/src/opentelemetry/propagators/b3/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/version.py b/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/version.py index 8c35630f0e..e8b404f050 100644 --- a/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/version.py +++ b/propagator/opentelemetry-propagator-jaeger/src/opentelemetry/propagators/jaeger/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "1.24.0.dev" +__version__ = "1.25.0.dev" diff --git a/shim/opentelemetry-opencensus-shim/src/opentelemetry/shim/opencensus/version.py b/shim/opentelemetry-opencensus-shim/src/opentelemetry/shim/opencensus/version.py index 2b23bc4994..ff4933b20b 100644 --- a/shim/opentelemetry-opencensus-shim/src/opentelemetry/shim/opencensus/version.py +++ b/shim/opentelemetry-opencensus-shim/src/opentelemetry/shim/opencensus/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.45b0.dev" +__version__ = "0.46b0.dev" diff --git a/shim/opentelemetry-opentracing-shim/src/opentelemetry/shim/opentracing_shim/version.py b/shim/opentelemetry-opentracing-shim/src/opentelemetry/shim/opentracing_shim/version.py index 2b23bc4994..ff4933b20b 100644 --- a/shim/opentelemetry-opentracing-shim/src/opentelemetry/shim/opentracing_shim/version.py +++ b/shim/opentelemetry-opentracing-shim/src/opentelemetry/shim/opentracing_shim/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.45b0.dev" +__version__ = "0.46b0.dev" diff --git a/tests/opentelemetry-test-utils/pyproject.toml b/tests/opentelemetry-test-utils/pyproject.toml index 9d68cb6708..e4547b6e34 100644 --- a/tests/opentelemetry-test-utils/pyproject.toml +++ b/tests/opentelemetry-test-utils/pyproject.toml @@ -24,8 +24,8 @@ classifiers = [ ] dependencies = [ "asgiref ~= 3.0", - "opentelemetry-api == 1.24.0.dev", - "opentelemetry-sdk == 1.24.0.dev", + "opentelemetry-api == 1.25.0.dev", + "opentelemetry-sdk == 1.25.0.dev", ] [project.urls] diff --git a/tests/opentelemetry-test-utils/src/opentelemetry/test/version.py b/tests/opentelemetry-test-utils/src/opentelemetry/test/version.py index ef9e7fdbaf..e38c2cb2e4 100644 --- a/tests/opentelemetry-test-utils/src/opentelemetry/test/version.py +++ b/tests/opentelemetry-test-utils/src/opentelemetry/test/version.py @@ -1 +1 @@ -__version__ = "0.45b0.dev" +__version__ = "0.46b0.dev" From 721beb8b530e7a830c1e27b70c2fb9af6465baf1 Mon Sep 17 00:00:00 2001 From: OpenTelemetry Bot <107717825+opentelemetrybot@users.noreply.github.com> Date: Thu, 28 Mar 2024 22:24:14 +0100 Subject: [PATCH 08/11] Copy change log updates from release/v1.24.x-0.45bx (#3821) --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56ef2b45cf..9315afc210 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1502,3 +1502,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove dependency on 'backoff' library ([#3679](https://github.com/open-telemetry/opentelemetry-python/pull/3679)) + +- Make create_gauge non-abstract method + ([#3817](https://github.com/open-telemetry/opentelemetry-python/pull/3817)) +- Make `tracer.start_as_current_span()` decorator work with async functions + ([#3633](https://github.com/open-telemetry/opentelemetry-python/pull/3633)) +- Fix python 3.12 deprecation warning + ([#3751](https://github.com/open-telemetry/opentelemetry-python/pull/3751)) +- bump mypy to 0.982 + ([#3776](https://github.com/open-telemetry/opentelemetry-python/pull/3776)) +- Add support for OTEL_SDK_DISABLED environment variable + ([#3648](https://github.com/open-telemetry/opentelemetry-python/pull/3648)) +- Fix ValueError message for PeriodicExportingMetricsReader + ([#3769](https://github.com/open-telemetry/opentelemetry-python/pull/3769)) +- Use `BaseException` instead of `Exception` in `record_exception` + ([#3354](https://github.com/open-telemetry/opentelemetry-python/pull/3354)) +- Make span.record_exception more robust + ([#3778](https://github.com/open-telemetry/opentelemetry-python/pull/3778)) +- Fix license field in pyproject.toml files + ([#3803](https://github.com/open-telemetry/opentelemetry-python/pull/3803)) + From 05497a53051c9b2d93ec1da9d3284b7c9cff830f Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Fri, 29 Mar 2024 18:05:21 -0400 Subject: [PATCH 09/11] Fix public symbol checker flaky case (#3825) --- scripts/public_symbols_checker.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/public_symbols_checker.py b/scripts/public_symbols_checker.py index 05b7ad4abb..c8bf7fd22e 100644 --- a/scripts/public_symbols_checker.py +++ b/scripts/public_symbols_checker.py @@ -123,11 +123,11 @@ def remove_common_symbols(): del removed_symbols[file_path] -if added_symbols or removed_symbols: +# If a symbol is added and removed in the same commit, we consider it as not +# added or removed. +remove_common_symbols() - # If a symbol is added and removed in the same commit, we consider it - # as not added or removed. - remove_common_symbols() +if added_symbols or removed_symbols: print("The code in this branch adds the following public symbols:") print() for file_path_, symbols_ in added_symbols.items(): From cb800f0e6f45ac1a6b8594400d298cab6ce943f5 Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Tue, 2 Apr 2024 19:20:50 +0200 Subject: [PATCH 10/11] Bump mypy to 1.9.0 (#3795) --- CHANGELOG.md | 4 ++-- dev-requirements.txt | 2 +- .../opentelemetry/_logs/_internal/__init__.py | 1 - .../opentelemetry/metrics/_internal/__init__.py | 16 ---------------- .../src/opentelemetry/util/_decorator.py | 3 ++- .../src/opentelemetry/util/_providers.py | 2 +- 6 files changed, 6 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9315afc210..585524a6f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,8 +15,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#3633](https://github.com/open-telemetry/opentelemetry-python/pull/3633)) - Fix python 3.12 deprecation warning ([#3751](https://github.com/open-telemetry/opentelemetry-python/pull/3751)) -- bump mypy to 0.982 - ([#3776](https://github.com/open-telemetry/opentelemetry-python/pull/3776)) - Add support for OTEL_SDK_DISABLED environment variable ([#3648](https://github.com/open-telemetry/opentelemetry-python/pull/3648)) - Fix ValueError message for PeriodicExportingMetricsReader @@ -27,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#3778](https://github.com/open-telemetry/opentelemetry-python/pull/3778)) - Fix license field in pyproject.toml files ([#3803](https://github.com/open-telemetry/opentelemetry-python/pull/3803)) +- Bump mypy to 1.9.0 + ([#3795](https://github.com/open-telemetry/opentelemetry-python/pull/3795)) ## Version 1.23.0/0.44b0 (2024-02-23) diff --git a/dev-requirements.txt b/dev-requirements.txt index 15462dea50..01f46ae87e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -3,7 +3,7 @@ flake8==6.1.0 isort==5.12.0 black==22.3.0 httpretty==1.1.4 -mypy==0.982 +mypy==1.9.0 sphinx==7.1.2 sphinx-rtd-theme==2.0.0rc4 sphinx-autodoc-typehints==1.25.2 diff --git a/opentelemetry-api/src/opentelemetry/_logs/_internal/__init__.py b/opentelemetry-api/src/opentelemetry/_logs/_internal/__init__.py index 156b2598e4..ccf9f4597a 100644 --- a/opentelemetry-api/src/opentelemetry/_logs/_internal/__init__.py +++ b/opentelemetry-api/src/opentelemetry/_logs/_internal/__init__.py @@ -193,7 +193,6 @@ def get_logger( schema_url: Optional[str] = None, ) -> Logger: """Returns a NoOpLogger.""" - super().get_logger(name, version=version, schema_url=schema_url) return NoOpLogger(name, version=version, schema_url=schema_url) diff --git a/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py b/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py index 1579a1a244..9cbf14d2ed 100644 --- a/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py +++ b/opentelemetry-api/src/opentelemetry/metrics/_internal/__init__.py @@ -141,7 +141,6 @@ def get_meter( schema_url: Optional[str] = None, ) -> "Meter": """Returns a NoOpMeter.""" - super().get_meter(name, version=version, schema_url=schema_url) return NoOpMeter(name, version=version, schema_url=schema_url) @@ -599,7 +598,6 @@ def create_counter( description: str = "", ) -> Counter: """Returns a no-op Counter.""" - super().create_counter(name, unit=unit, description=description) if self._is_instrument_registered( name, NoOpCounter, unit, description )[0]: @@ -620,7 +618,6 @@ def create_gauge( description: str = "", ) -> Gauge: """Returns a no-op Gauge.""" - super().create_gauge(name, unit=unit, description=description) if self._is_instrument_registered(name, NoOpGauge, unit, description)[ 0 ]: @@ -641,9 +638,6 @@ def create_up_down_counter( description: str = "", ) -> UpDownCounter: """Returns a no-op UpDownCounter.""" - super().create_up_down_counter( - name, unit=unit, description=description - ) if self._is_instrument_registered( name, NoOpUpDownCounter, unit, description )[0]: @@ -665,9 +659,6 @@ def create_observable_counter( description: str = "", ) -> ObservableCounter: """Returns a no-op ObservableCounter.""" - super().create_observable_counter( - name, callbacks, unit=unit, description=description - ) if self._is_instrument_registered( name, NoOpObservableCounter, unit, description )[0]: @@ -693,7 +684,6 @@ def create_histogram( description: str = "", ) -> Histogram: """Returns a no-op Histogram.""" - super().create_histogram(name, unit=unit, description=description) if self._is_instrument_registered( name, NoOpHistogram, unit, description )[0]: @@ -715,9 +705,6 @@ def create_observable_gauge( description: str = "", ) -> ObservableGauge: """Returns a no-op ObservableGauge.""" - super().create_observable_gauge( - name, callbacks, unit=unit, description=description - ) if self._is_instrument_registered( name, NoOpObservableGauge, unit, description )[0]: @@ -744,9 +731,6 @@ def create_observable_up_down_counter( description: str = "", ) -> ObservableUpDownCounter: """Returns a no-op ObservableUpDownCounter.""" - super().create_observable_up_down_counter( - name, callbacks, unit=unit, description=description - ) if self._is_instrument_registered( name, NoOpObservableUpDownCounter, unit, description )[0]: diff --git a/opentelemetry-api/src/opentelemetry/util/_decorator.py b/opentelemetry-api/src/opentelemetry/util/_decorator.py index 233f29ff79..870c97bd98 100644 --- a/opentelemetry-api/src/opentelemetry/util/_decorator.py +++ b/opentelemetry-api/src/opentelemetry/util/_decorator.py @@ -78,4 +78,5 @@ def _agnosticcontextmanager( def helper(*args: Pargs, **kwargs: Pkwargs) -> _AgnosticContextManager[R]: return _AgnosticContextManager(func, args, kwargs) - return helper + # Ignoring the type to keep the original signature of the function + return helper # type: ignore[return-value] diff --git a/opentelemetry-api/src/opentelemetry/util/_providers.py b/opentelemetry-api/src/opentelemetry/util/_providers.py index d255ac999f..307650bb1d 100644 --- a/opentelemetry-api/src/opentelemetry/util/_providers.py +++ b/opentelemetry-api/src/opentelemetry/util/_providers.py @@ -29,7 +29,7 @@ def _load_provider( provider_environment_variable: str, provider: str -) -> Provider: +) -> Provider: # type: ignore[type-var] try: From 5ff904637c18857256482d02b2b1b4a9b9b6be4c Mon Sep 17 00:00:00 2001 From: Alexey Ivanov Date: Tue, 2 Apr 2024 13:01:45 -0700 Subject: [PATCH 11/11] Add to_json method to ExponentialHistogram (#3780) --- CHANGELOG.md | 4 ++ .../sdk/metrics/_internal/point.py | 12 +++++ opentelemetry-sdk/tests/metrics/test_point.py | 44 +++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 585524a6f8..190fbc489a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ([#3633](https://github.com/open-telemetry/opentelemetry-python/pull/3633)) - Fix python 3.12 deprecation warning ([#3751](https://github.com/open-telemetry/opentelemetry-python/pull/3751)) +- Add to_json method to ExponentialHistogram + ([#3780](https://github.com/open-telemetry/opentelemetry-python/pull/3780)) +- bump mypy to 0.982 + ([#3776](https://github.com/open-telemetry/opentelemetry-python/pull/3776)) - Add support for OTEL_SDK_DISABLED environment variable ([#3648](https://github.com/open-telemetry/opentelemetry-python/pull/3648)) - Fix ValueError message for PeriodicExportingMetricsReader diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/point.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/point.py index c30705c59a..42420b9008 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/point.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/point.py @@ -101,6 +101,18 @@ class ExponentialHistogram: "opentelemetry.sdk.metrics.export.AggregationTemporality" ) + def to_json(self, indent=4) -> str: + return dumps( + { + "data_points": [ + loads(data_point.to_json(indent=indent)) + for data_point in self.data_points + ], + "aggregation_temporality": self.aggregation_temporality, + }, + indent=indent, + ) + @dataclass(frozen=True) class Sum: diff --git a/opentelemetry-sdk/tests/metrics/test_point.py b/opentelemetry-sdk/tests/metrics/test_point.py index 5d6640fdea..20dd0e7238 100644 --- a/opentelemetry-sdk/tests/metrics/test_point.py +++ b/opentelemetry-sdk/tests/metrics/test_point.py @@ -16,6 +16,9 @@ from opentelemetry.sdk.metrics.export import ( AggregationTemporality, + Buckets, + ExponentialHistogram, + ExponentialHistogramDataPoint, Gauge, Histogram, HistogramDataPoint, @@ -100,6 +103,22 @@ def setUpClass(cls): ) cls.histogram_data_point_1_str = f'{{"attributes": {cls.attributes_1_str}, "start_time_unix_nano": 2, "time_unix_nano": 3, "count": 4, "sum": 4.4, "bucket_counts": [2, 1, 1], "explicit_bounds": [1.2, 2.3, 3.4, 4.5], "min": 0.3, "max": 4.4}}' + cls.exp_histogram_data_point_0 = ExponentialHistogramDataPoint( + attributes=cls.attributes_0, + start_time_unix_nano=1, + time_unix_nano=2, + count=1, + sum=10, + scale=1, + zero_count=0, + positive=Buckets(offset=0, bucket_counts=[1]), + negative=Buckets(offset=0, bucket_counts=[0]), + flags=0, + min=10, + max=10, + ) + cls.exp_histogram_data_point_0_str = f'{{"attributes": {cls.attributes_0_str}, "start_time_unix_nano": 1, "time_unix_nano": 2, "count": 1, "sum": 10, "scale": 1, "zero_count": 0, "positive": {{"offset": 0, "bucket_counts": [1]}}, "negative": {{"offset": 0, "bucket_counts": [0]}}, "flags": 0, "min": 10, "max": 10}}' + cls.sum_0 = Sum( data_points=[cls.number_data_point_0, cls.number_data_point_1], aggregation_temporality=AggregationTemporality.DELTA, @@ -121,6 +140,14 @@ def setUpClass(cls): ) cls.histogram_0_str = f'{{"data_points": [{cls.histogram_data_point_0_str}, {cls.histogram_data_point_1_str}], "aggregation_temporality": 1}}' + cls.exp_histogram_0 = ExponentialHistogram( + data_points=[ + cls.exp_histogram_data_point_0, + ], + aggregation_temporality=AggregationTemporality.CUMULATIVE, + ) + cls.exp_histogram_0_str = f'{{"data_points": [{cls.exp_histogram_data_point_0_str}], "aggregation_temporality": 2}}' + cls.metric_0 = Metric( name="metric_0", description="description_0", @@ -209,6 +236,15 @@ def test_histogram_data_point(self): self.histogram_data_point_1_str, ) + def test_exp_histogram_data_point(self): + + self.maxDiff = None + + self.assertEqual( + self.exp_histogram_data_point_0.to_json(indent=None), + self.exp_histogram_data_point_0_str, + ) + def test_sum(self): self.assertEqual(self.sum_0.to_json(indent=None), self.sum_0_str) @@ -225,6 +261,14 @@ def test_histogram(self): self.histogram_0.to_json(indent=None), self.histogram_0_str ) + def test_exp_histogram(self): + + self.maxDiff = None + + self.assertEqual( + self.exp_histogram_0.to_json(indent=None), self.exp_histogram_0_str + ) + def test_metric(self): self.assertEqual(self.metric_0.to_json(indent=None), self.metric_0_str)