From 61fb71b6276d2d6dc93acbc2a4c1001df2292d5a Mon Sep 17 00:00:00 2001 From: Ogulcan Aydogan Date: Mon, 27 Apr 2026 00:32:15 +0100 Subject: [PATCH 1/2] chore: enable PIE (flake8-pie) ruff rule Part of #4227 Adds `PIE` to the ruff lint select list. Fixes all 49 auto-fixable violations (PIE790 unnecessary pass, PIE804 unnecessary dict kwargs, PIE808 unnecessary range start argument). Suppresses PIE796 on GenAiTokenTypeValues.COMPLETION which is an intentional deprecated alias for OUTPUT sharing the same enum value. --- .../exporter/otlp/proto/grpc/exporter.py | 1 - .../tests/test_otlp_exporter_mixin.py | 6 +-- .../tests/test_otlp_trace_exporter.py | 39 +++++-------------- .../tests/test_proto_span_exporter.py | 6 +-- .../tests/encoder/common_tests.py | 4 +- .../tests/encoder/common_tests.py | 4 +- .../events/test_event_logger_provider.py | 2 +- .../tests/logs/test_logger_provider.py | 2 +- .../tests/metrics/test_meter_provider.py | 2 +- .../tests/propagators/test__envcarrier.py | 7 +--- .../tests/propagators/test_propagators.py | 18 ++++----- .../test_tracecontexthttptextformat.py | 7 +--- .../tests/util/test__providers.py | 6 +-- .../tests/error_handler/test_error_handler.py | 8 ++-- ...xponential_bucket_histogram_aggregation.py | 4 +- opentelemetry-sdk/tests/metrics/test_view.py | 4 +- opentelemetry-sdk/tests/test_configurator.py | 4 +- .../tests/trace/test_span_processor.py | 14 +++---- opentelemetry-sdk/tests/trace/test_trace.py | 4 +- .../attributes/gen_ai_attributes.py | 2 +- pyproject.toml | 1 + 21 files changed, 51 insertions(+), 94 deletions(-) diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py index 3627db70581..61c42e7bfcd 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/src/opentelemetry/exporter/otlp/proto/grpc/exporter.py @@ -546,7 +546,6 @@ def _exporting(self) -> str: Returns a string that describes the overall exporter, to be used in warning messages. """ - pass def _set_meter_provider(self, meter_provider: MeterProvider) -> None: self._metrics = ExporterMetrics( diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_exporter_mixin.py b/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_exporter_mixin.py index 87bd72c5550..ecafd7bbaf0 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_exporter_mixin.py +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_exporter_mixin.py @@ -188,11 +188,7 @@ def setUp(self): self.span = _Span( "a", context=Mock( - **{ - "trace_state": {"a": "b", "c": "d"}, - "span_id": 10217189687419569865, - "trace_id": 67545097771067222548457157018666467027, - } + trace_state={"a": "b", "c": "d"}, span_id=10217189687419569865, trace_id=67545097771067222548457157018666467027 ), ) diff --git a/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_trace_exporter.py b/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_trace_exporter.py index c05fc0565d3..142135168fc 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_trace_exporter.py +++ b/exporter/opentelemetry-exporter-otlp-proto-grpc/tests/test_otlp_trace_exporter.py @@ -84,12 +84,9 @@ def setUp(self): self.tracer = tracer_provider.get_tracer(__name__) event_mock = Mock( - **{ - "timestamp": 1591240820506462784, - "attributes": BoundedAttributes( + timestamp=1591240820506462784, attributes=BoundedAttributes( attributes={"a": 1, "b": False} - ), - } + ) ) type(event_mock).name = PropertyMock(return_value="a") @@ -97,14 +94,10 @@ def setUp(self): self.span = _Span( "a", context=Mock( - **{ - "trace_state": {"a": "b", "c": "d"}, - "span_id": 10217189687419569865, - "trace_id": 67545097771067222548457157018666467027, - } + trace_state={"a": "b", "c": "d"}, span_id=10217189687419569865, trace_id=67545097771067222548457157018666467027 ), resource=SDKResource({"a": 1, "b": False}), - parent=Mock(**{"span_id": 12345}), + parent=Mock(span_id=12345), attributes=BoundedAttributes(attributes={"a": 1, "b": True}), events=[event_mock], links=[ @@ -128,14 +121,10 @@ def setUp(self): self.span2 = _Span( "b", context=Mock( - **{ - "trace_state": {"a": "b", "c": "d"}, - "span_id": 10217189687419569865, - "trace_id": 67545097771067222548457157018666467027, - } + trace_state={"a": "b", "c": "d"}, span_id=10217189687419569865, trace_id=67545097771067222548457157018666467027 ), resource=SDKResource({"a": 2, "b": False}), - parent=Mock(**{"span_id": 12345}), + parent=Mock(span_id=12345), instrumentation_scope=InstrumentationScope( name="name", version="version" ), @@ -144,14 +133,10 @@ def setUp(self): self.span3 = _Span( "c", context=Mock( - **{ - "trace_state": {"a": "b", "c": "d"}, - "span_id": 10217189687419569865, - "trace_id": 67545097771067222548457157018666467027, - } + trace_state={"a": "b", "c": "d"}, span_id=10217189687419569865, trace_id=67545097771067222548457157018666467027 ), resource=SDKResource({"a": 1, "b": False}), - parent=Mock(**{"span_id": 12345}), + parent=Mock(span_id=12345), instrumentation_scope=InstrumentationScope( name="name2", version="version2" ), @@ -795,13 +780,9 @@ def _create_span_with_status(status: SDKStatus): span = _Span( "a", context=Mock( - **{ - "trace_state": {"a": "b", "c": "d"}, - "span_id": 10217189687419569865, - "trace_id": 67545097771067222548457157018666467027, - } + trace_state={"a": "b", "c": "d"}, span_id=10217189687419569865, trace_id=67545097771067222548457157018666467027 ), - parent=Mock(**{"span_id": 12345}), + parent=Mock(span_id=12345), instrumentation_scope=InstrumentationScope( name="name", version="version" ), diff --git a/exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_span_exporter.py b/exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_span_exporter.py index 0df471aa693..153bcc3472e 100644 --- a/exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_span_exporter.py +++ b/exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_span_exporter.py @@ -64,11 +64,7 @@ BASIC_SPAN = _Span( "abc", context=Mock( - **{ - "trace_state": {"a": "b", "c": "d"}, - "span_id": 10217189687419569865, - "trace_id": 67545097771067222548457157018666467027, - } + trace_state={"a": "b", "c": "d"}, span_id=10217189687419569865, trace_id=67545097771067222548457157018666467027 ), ) diff --git a/exporter/opentelemetry-exporter-zipkin-json/tests/encoder/common_tests.py b/exporter/opentelemetry-exporter-zipkin-json/tests/encoder/common_tests.py index ada00c7c8e6..2b4047d05f3 100644 --- a/exporter/opentelemetry-exporter-zipkin-json/tests/encoder/common_tests.py +++ b/exporter/opentelemetry-exporter-zipkin-json/tests/encoder/common_tests.py @@ -195,8 +195,8 @@ def get_data_for_max_tag_length_test( span.set_attribute("tuple4", (2,) * 10) span.set_attribute("tuple5", (True,) * 25) span.set_attribute("tuple6", (True,) * 10) - span.set_attribute("range1", range(0, 25)) - span.set_attribute("range2", range(0, 10)) + span.set_attribute("range1", range(25)) + span.set_attribute("range2", range(10)) span.set_attribute("empty_list", []) span.set_attribute("none_list", ["hello", None, "world"]) span.end(end_time=end_time) diff --git a/exporter/opentelemetry-exporter-zipkin-proto-http/tests/encoder/common_tests.py b/exporter/opentelemetry-exporter-zipkin-proto-http/tests/encoder/common_tests.py index ada00c7c8e6..2b4047d05f3 100644 --- a/exporter/opentelemetry-exporter-zipkin-proto-http/tests/encoder/common_tests.py +++ b/exporter/opentelemetry-exporter-zipkin-proto-http/tests/encoder/common_tests.py @@ -195,8 +195,8 @@ def get_data_for_max_tag_length_test( span.set_attribute("tuple4", (2,) * 10) span.set_attribute("tuple5", (True,) * 25) span.set_attribute("tuple6", (True,) * 10) - span.set_attribute("range1", range(0, 25)) - span.set_attribute("range2", range(0, 10)) + span.set_attribute("range1", range(25)) + span.set_attribute("range2", range(10)) span.set_attribute("empty_list", []) span.set_attribute("none_list", ["hello", None, "world"]) span.end(end_time=end_time) diff --git a/opentelemetry-api/tests/events/test_event_logger_provider.py b/opentelemetry-api/tests/events/test_event_logger_provider.py index 425697bfa39..d0564883327 100644 --- a/opentelemetry-api/tests/events/test_event_logger_provider.py +++ b/opentelemetry-api/tests/events/test_event_logger_provider.py @@ -53,7 +53,7 @@ def test_get_event_logger_provider(self): with patch("opentelemetry._events._load_provider", Mock()): with patch( "opentelemetry._events.cast", - Mock(**{"return_value": "test_event_logger_provider"}), + Mock(return_value="test_event_logger_provider"), ): self.assertEqual( get_event_logger_provider(), diff --git a/opentelemetry-api/tests/logs/test_logger_provider.py b/opentelemetry-api/tests/logs/test_logger_provider.py index 2bd4041b66a..22616cfdf9d 100644 --- a/opentelemetry-api/tests/logs/test_logger_provider.py +++ b/opentelemetry-api/tests/logs/test_logger_provider.py @@ -56,7 +56,7 @@ def test_get_logger_provider(self): with patch("opentelemetry._logs._internal._load_provider", Mock()): with patch( "opentelemetry._logs._internal.cast", - Mock(**{"return_value": "test_logger_provider"}), + Mock(return_value="test_logger_provider"), ): self.assertEqual( get_logger_provider(), "test_logger_provider" diff --git a/opentelemetry-api/tests/metrics/test_meter_provider.py b/opentelemetry-api/tests/metrics/test_meter_provider.py index dfaf94bcec2..bd90414792c 100644 --- a/opentelemetry-api/tests/metrics/test_meter_provider.py +++ b/opentelemetry-api/tests/metrics/test_meter_provider.py @@ -105,7 +105,7 @@ def test_get_meter_provider(reset_meter_provider): with patch("opentelemetry.metrics._internal._load_provider", Mock()): with patch( "opentelemetry.metrics._internal.cast", - Mock(**{"return_value": "test_meter_provider"}), + Mock(return_value="test_meter_provider"), ): assert get_meter_provider() == "test_meter_provider" diff --git a/opentelemetry-api/tests/propagators/test__envcarrier.py b/opentelemetry-api/tests/propagators/test__envcarrier.py index eb2b99c39ca..982ebb4885a 100644 --- a/opentelemetry-api/tests/propagators/test__envcarrier.py +++ b/opentelemetry-api/tests/propagators/test__envcarrier.py @@ -374,12 +374,7 @@ def test_fields(self, mock_get_current_span, mock_invalid_span_context): return_value=Mock( **{ "get_span_context.return_value": Mock( - **{ - "trace_id": 1, - "span_id": 2, - "trace_flags": 3, - "trace_state": TraceState([("a", "b")]), - } + trace_id=1, span_id=2, trace_flags=3, trace_state=TraceState([("a", "b")]) ) } ) diff --git a/opentelemetry-api/tests/propagators/test_propagators.py b/opentelemetry-api/tests/propagators/test_propagators.py index 6215b99727a..5149edb3eb9 100644 --- a/opentelemetry-api/tests/propagators/test_propagators.py +++ b/opentelemetry-api/tests/propagators/test_propagators.py @@ -41,7 +41,7 @@ def test_propagators(propagators): ) mock_compositehttppropagator.configure_mock( - **{"side_effect": test_propagators} + side_effect=test_propagators ) # pylint: disable=import-outside-toplevel @@ -62,7 +62,7 @@ def test_propagators(propagators): ) mock_compositehttppropagator.configure_mock( - **{"side_effect": test_propagators} + side_effect=test_propagators ) # pylint: disable=import-outside-toplevel @@ -85,7 +85,7 @@ def test_propagators(propagators): ) mock_compositehttppropagator.configure_mock( - **{"side_effect": test_propagators} + side_effect=test_propagators ) # pylint: disable=import-outside-toplevel @@ -100,13 +100,12 @@ def test_non_default_propagators( self, mock_entry_points, mock_compositehttppropagator ): mock_entry_points.configure_mock( - **{ - "side_effect": [ + side_effect=[ [ Mock( **{ "load.return_value": Mock( - **{"return_value": "a"} + return_value="a" ) } ), @@ -115,7 +114,7 @@ def test_non_default_propagators( Mock( **{ "load.return_value": Mock( - **{"return_value": "b"} + return_value="b" ) } ) @@ -124,20 +123,19 @@ def test_non_default_propagators( Mock( **{ "load.return_value": Mock( - **{"return_value": "c"} + return_value="c" ) } ) ], ] - } ) def test_propagators(propagators): self.assertEqual(propagators, ["a", "b", "c"]) mock_compositehttppropagator.configure_mock( - **{"side_effect": test_propagators} + side_effect=test_propagators ) # pylint: disable=import-outside-toplevel diff --git a/opentelemetry-api/tests/trace/propagation/test_tracecontexthttptextformat.py b/opentelemetry-api/tests/trace/propagation/test_tracecontexthttptextformat.py index 4ad9e89069d..d8fe95d1d23 100644 --- a/opentelemetry-api/tests/trace/propagation/test_tracecontexthttptextformat.py +++ b/opentelemetry-api/tests/trace/propagation/test_tracecontexthttptextformat.py @@ -249,12 +249,7 @@ def test_fields(self, mock_get_current_span, mock_invalid_span_context): return_value=Mock( **{ "get_span_context.return_value": Mock( - **{ - "trace_id": 1, - "span_id": 2, - "trace_flags": 3, - "trace_state": TraceState([("a", "b")]), - } + trace_id=1, span_id=2, trace_flags=3, trace_state=TraceState([("a", "b")]) ) } ) diff --git a/opentelemetry-api/tests/util/test__providers.py b/opentelemetry-api/tests/util/test__providers.py index 8b2e46b7ec5..26894a0ca94 100644 --- a/opentelemetry-api/tests/util/test__providers.py +++ b/opentelemetry-api/tests/util/test__providers.py @@ -32,19 +32,17 @@ def test__providers(self, mock_entry_points): reload(_providers) mock_entry_points.configure_mock( - **{ - "side_effect": [ + side_effect=[ [ Mock( **{ "load.return_value": Mock( - **{"return_value": "a"} + return_value="a" ) } ), ], ] - } ) self.assertEqual( diff --git a/opentelemetry-sdk/tests/error_handler/test_error_handler.py b/opentelemetry-sdk/tests/error_handler/test_error_handler.py index b753c1c5970..11a3e0ca748 100644 --- a/opentelemetry-sdk/tests/error_handler/test_error_handler.py +++ b/opentelemetry-sdk/tests/error_handler/test_error_handler.py @@ -54,12 +54,10 @@ class AssertionErrorHandler(ErrorHandler, AssertionError): ) mock_entry_points.configure_mock( - **{ - "return_value": [ + return_value=[ mock_entry_point_zero_division_error_handler, mock_entry_point_assertion_error_handler, ] - } ) error = ZeroDivisionError() @@ -91,7 +89,7 @@ def _handle(self, error: Exception): ) mock_entry_points.configure_mock( - **{"return_value": [mock_entry_point_error_error_handler]} + return_value=[mock_entry_point_error_error_handler] ) error = ZeroDivisionError() @@ -115,7 +113,7 @@ def __new__(cls): ) mock_entry_points.configure_mock( - **{"return_value": [mock_entry_point_error_handler]} + return_value=[mock_entry_point_error_handler] ) error = IndexError() diff --git a/opentelemetry-sdk/tests/metrics/exponential_histogram/test_exponential_bucket_histogram_aggregation.py b/opentelemetry-sdk/tests/metrics/exponential_histogram/test_exponential_bucket_histogram_aggregation.py index 820eb1070ab..988db2953c3 100644 --- a/opentelemetry-sdk/tests/metrics/exponential_histogram/test_exponential_bucket_histogram_aggregation.py +++ b/opentelemetry-sdk/tests/metrics/exponential_histogram/test_exponential_bucket_histogram_aggregation.py @@ -509,7 +509,7 @@ def mock_increment(self, bucket_index: int) -> None: exponential_histogram_aggregation._value_positive.offset, ) - for index in range(0, 256): + for index in range(256): self.assertLessEqual( exponential_histogram_aggregation._value_positive[index], 6 * increment, @@ -578,7 +578,7 @@ def test_move_into(self): exponential_histogram_aggregation_1._value_positive.offset, ) - for index in range(0, 256): + for index in range(256): self.assertLessEqual( exponential_histogram_aggregation_1._value_positive[index], 6 ) diff --git a/opentelemetry-sdk/tests/metrics/test_view.py b/opentelemetry-sdk/tests/metrics/test_view.py index ee5df52a7b9..86e66005ca9 100644 --- a/opentelemetry-sdk/tests/metrics/test_view.py +++ b/opentelemetry-sdk/tests/metrics/test_view.py @@ -30,7 +30,7 @@ def test_instrument_type(self): def test_instrument_name(self): mock_instrument = Mock() - mock_instrument.configure_mock(**{"name": "instrument_name"}) + mock_instrument.configure_mock(name="instrument_name") self.assertTrue( View(instrument_name="instrument_name")._match(mock_instrument) @@ -38,7 +38,7 @@ def test_instrument_name(self): def test_instrument_unit(self): mock_instrument = Mock() - mock_instrument.configure_mock(**{"unit": "instrument_unit"}) + mock_instrument.configure_mock(unit="instrument_unit") self.assertTrue( View(instrument_unit="instrument_unit")._match(mock_instrument) diff --git a/opentelemetry-sdk/tests/test_configurator.py b/opentelemetry-sdk/tests/test_configurator.py index 17a2b85bae8..8b7f659e4d8 100644 --- a/opentelemetry-sdk/tests/test_configurator.py +++ b/opentelemetry-sdk/tests/test_configurator.py @@ -1472,7 +1472,7 @@ def mock_entry_points_impl(group, name): class TestImportConfigComponents(TestCase): @patch( "opentelemetry.sdk._configuration.entry_points", - **{"side_effect": KeyError}, + side_effect=KeyError, ) def test__import_config_components_missing_entry_point( self, mock_entry_points @@ -1485,7 +1485,7 @@ def test__import_config_components_missing_entry_point( @patch( "opentelemetry.sdk._configuration.entry_points", - **{"side_effect": StopIteration}, + side_effect=StopIteration, ) def test__import_config_components_missing_component( self, mock_entry_points diff --git a/opentelemetry-sdk/tests/trace/test_span_processor.py b/opentelemetry-sdk/tests/trace/test_span_processor.py index c751ab96d9f..eb21f8d4d04 100644 --- a/opentelemetry-sdk/tests/trace/test_span_processor.py +++ b/opentelemetry-sdk/tests/trace/test_span_processor.py @@ -286,7 +286,7 @@ def create_default_span() -> trace_api.Span: def test_on_start(self): multi_processor = self.create_multi_span_processor() - mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(0, 5)] + mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(5)] for mock_processor in mocks: multi_processor.add_span_processor(mock_processor) @@ -303,7 +303,7 @@ def test_on_start(self): def test_on_ending(self): multi_processor = self.create_multi_span_processor() - mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(0, 5)] + mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(5)] for mock_processor in mocks: multi_processor.add_span_processor(mock_processor) @@ -319,7 +319,7 @@ def test_on_ending(self): def test_on_end(self): multi_processor = self.create_multi_span_processor() - mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(0, 5)] + mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(5)] for mock_processor in mocks: multi_processor.add_span_processor(mock_processor) @@ -333,7 +333,7 @@ def test_on_end(self): def test_on_shutdown(self): multi_processor = self.create_multi_span_processor() - mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(0, 5)] + mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(5)] for mock_processor in mocks: multi_processor.add_span_processor(mock_processor) @@ -345,7 +345,7 @@ def test_on_shutdown(self): def test_force_flush(self): multi_processor = self.create_multi_span_processor() - mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(0, 5)] + mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(5)] for mock_processor in mocks: multi_processor.add_span_processor(mock_processor) timeout_millis = 100 @@ -455,7 +455,7 @@ def delayed_flush(_): late_mock = mock.Mock(spec=trace.SpanProcessor) late_mock.force_flush = mock.Mock(side_effect=delayed_flush) - mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(0, 4)] + mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(4)] mocks.insert(0, late_mock) for mock_processor in mocks: @@ -475,7 +475,7 @@ def test_force_flush_late_by_span_processor(self): late_mock = mock.Mock(spec=trace.SpanProcessor) late_mock.force_flush = mock.Mock(return_value=False) - mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(0, 4)] + mocks = [mock.Mock(spec=trace.SpanProcessor) for _ in range(4)] mocks.insert(0, late_mock) for mock_processor in mocks: diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py index 2c6fdf3f929..eae505f35fc 100644 --- a/opentelemetry-sdk/tests/trace/test_trace.py +++ b/opentelemetry-sdk/tests/trace/test_trace.py @@ -687,7 +687,7 @@ def test_surplus_span_links(self): max_links = trace.SpanLimits().max_links links = [ trace_api.Link(trace_api.SpanContext(0x1, idx, is_remote=False)) - for idx in range(0, 16 + max_links) + for idx in range(16 + max_links) ] tracer = new_tracer() with tracer.start_as_current_span("span", links=links) as root: @@ -696,7 +696,7 @@ def test_surplus_span_links(self): def test_surplus_span_attributes(self): # pylint: disable=protected-access max_attrs = trace.SpanLimits().max_span_attributes - attributes = {str(idx): idx for idx in range(0, 16 + max_attrs)} + attributes = {str(idx): idx for idx in range(16 + max_attrs)} tracer = new_tracer() with tracer.start_as_current_span( "span", attributes=attributes diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py index c7d734cd47a..a236823c8f2 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py @@ -563,5 +563,5 @@ class GenAiTokenTypeValues(Enum): """Input tokens (prompt, input, etc.).""" COMPLETION = "output" """Deprecated: Replaced by `output`.""" - OUTPUT = "output" + OUTPUT = "output" # noqa: PIE796 # intentional deprecated alias for COMPLETION """Output tokens (completion, response, etc.).""" diff --git a/pyproject.toml b/pyproject.toml index 4e4257ceac1..3fa5031c5a3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,6 +86,7 @@ select = [ "Q", # flake8-quotes "G", # https://docs.astral.sh/ruff/rules/#flake8-logging-format-g "TID", # flake8-tidy-imports + "PIE", # flake8-pie "UP011", # lru-cache-without-parameters "UP015", # redundant-open-modes "UP032", # f-string From d7c41292cd9c70ac100e9f819b361618af54bc33 Mon Sep 17 00:00:00 2001 From: Ogulcan Aydogan Date: Mon, 27 Apr 2026 16:13:09 +0100 Subject: [PATCH 2/2] chore: add CHANGELOG entry for PIE ruff rule --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 614f240d4ee..11d50eaed11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +- Enable `PIE` (flake8-pie) ruff rule and fix all violations + ([#5150](https://github.com/open-telemetry/opentelemetry-python/pull/5150)) - `opentelemetry-sdk`: add `additional_properties` support to generated config models via custom `datamodel-codegen` template, enabling plugin/custom component names to flow through typed dataclasses ([#5131](https://github.com/open-telemetry/opentelemetry-python/pull/5131)) - Fix incorrect code example in `create_tracer()` docstring