From 580420ae44dc96f135b4917fb66aa174e77d25f9 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Thu, 7 Jul 2022 14:56:01 +0530 Subject: [PATCH 1/6] Adding multiple connection support for python --- .../instrumentation/dbapi/__init__.py | 4 +- .../middleware/sqlcommenter_middleware.py | 64 +++++-------------- .../tests/test_middleware.py | 8 ++- .../tests/test_sqlcommenter.py | 17 ++++- .../instrumentation/sqlalchemy/engine.py | 4 +- .../opentelemetry/instrumentation/utils.py | 34 +++++++--- 6 files changed, 68 insertions(+), 63 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py index 2559466221..fdf0e30c29 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py @@ -47,7 +47,7 @@ from opentelemetry.instrumentation.dbapi.version import __version__ from opentelemetry.instrumentation.utils import ( _generate_opentelemetry_traceparent, - _generate_sql_comment, + generate_sql_comment, unwrap, ) from opentelemetry.semconv.trace import SpanAttributes @@ -382,7 +382,7 @@ def _generate_comment(span: Span) -> str: if span_context.is_valid: meta.update(_generate_opentelemetry_traceparent(span)) # TODO(schekuri): revisit to enrich with info such as route, db_driver etc... - return _generate_sql_comment(**meta) + return generate_sql_comment(**meta) def traced_execution( self, diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py index 556bd92938..6565fb8d14 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py @@ -15,16 +15,20 @@ # limitations under the License. from logging import getLogger from typing import Any, Type, TypeVar -from urllib.parse import quote as urllib_quote +from contextlib import ExitStack # pylint: disable=no-name-in-module from django import conf, get_version -from django.db import connection +from django.db import connections from django.db.backends.utils import CursorDebugWrapper from opentelemetry.trace.propagation.tracecontext import ( TraceContextTextMapPropagator, ) +from opentelemetry.instrumentation.utils import ( + get_opentelemetry_values, + generate_sql_comment, +) _propagator = TraceContextTextMapPropagator() @@ -44,7 +48,13 @@ def __init__(self, get_response) -> None: self.get_response = get_response def __call__(self, request) -> Any: - with connection.execute_wrapper(_QueryWrapper(request)): + with ExitStack() as stack: + for db_alias in connections: + stack.enter_context( + connections[db_alias].execute_wrapper( + _QueryWrapper(request) + ) + ) return self.get_response(request) @@ -74,7 +84,7 @@ def __call__(self, execute: Type[T], sql, params, many, context) -> T: db_driver = context["connection"].settings_dict.get("ENGINE", "") resolver_match = self.request.resolver_match - sql_comment = _generate_sql_comment( + sql_comment = generate_sql_comment( # Information about the controller. controller=resolver_match.view_name if resolver_match and with_controller @@ -94,7 +104,7 @@ def __call__(self, execute: Type[T], sql, params, many, context) -> T: framework=f"django:{_django_version}" if with_framework else None, # Information about the database and driver. db_driver=db_driver if with_db_driver else None, - **_get_opentelemetry_values() if with_opentelemetry else {}, + **get_opentelemetry_values() if with_opentelemetry else {}, ) # TODO: MySQL truncates logs > 1024B so prepend comments @@ -105,49 +115,7 @@ def __call__(self, execute: Type[T], sql, params, many, context) -> T: sql += sql_comment # Add the query to the query log if debugging. - if context["cursor"].__class__ is CursorDebugWrapper: + if isinstance(context["cursor"], CursorDebugWrapper): context["connection"].queries_log.append(sql) return execute(sql, params, many, context) - - -def _generate_sql_comment(**meta) -> str: - """ - Return a SQL comment with comma delimited key=value pairs created from - **meta kwargs. - """ - key_value_delimiter = "," - - if not meta: # No entries added. - return "" - - # Sort the keywords to ensure that caching works and that testing is - # deterministic. It eases visual inspection as well. - return ( - " /*" - + key_value_delimiter.join( - f"{_url_quote(key)}={_url_quote(value)!r}" - for key, value in sorted(meta.items()) - if value is not None - ) - + "*/" - ) - - -def _url_quote(value) -> str: - if not isinstance(value, (str, bytes)): - return value - _quoted = urllib_quote(value) - # Since SQL uses '%' as a keyword, '%' is a by-product of url quoting - # e.g. foo,bar --> foo%2Cbar - # thus in our quoting, we need to escape it too to finally give - # foo,bar --> foo%%2Cbar - return _quoted.replace("%", "%%") - - -def _get_opentelemetry_values() -> dict or None: - """ - Return the OpenTelemetry Trace and Span IDs if Span ID is set in the - OpenTelemetry execution context. - """ - return _propagator.inject({}) diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index a40a7b82ee..05457de43d 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -86,7 +86,13 @@ class TestMiddleware(WsgiTestBase): @classmethod def setUpClass(cls): - conf.settings.configure(ROOT_URLCONF=modules[__name__]) + conf.settings.configure( + ROOT_URLCONF=modules[__name__], + DATABASES={ + "default": {}, + "other": {}, + }, # db.connections gets populated only at first test execution + ) super().setUpClass() def setUp(self): diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py index 682dd5f4e9..451f49d165 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py @@ -13,7 +13,6 @@ # limitations under the License. # pylint: disable=no-name-in-module - from unittest.mock import MagicMock, patch from django import VERSION, conf @@ -23,6 +22,7 @@ from opentelemetry.instrumentation.django import DjangoInstrumentor from opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware import ( _QueryWrapper, + SqlCommenter, ) from opentelemetry.test.wsgitestutil import WsgiTestBase @@ -72,7 +72,7 @@ def test_middleware_added(self, sqlcommenter_middleware): ) @patch( - "opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware._get_opentelemetry_values" + "opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware.get_opentelemetry_values" ) def test_query_wrapper(self, trace_capture): requests_mock = MagicMock() @@ -98,3 +98,16 @@ def test_query_wrapper(self, trace_capture): "Select 1 /*app_name='app',controller='view',route='route',traceparent='%%2Atraceparent%%3D%%2700-0000000" "00000000000000000deadbeef-000000000000beef-00'*/", ) + + @patch( + "opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware._QueryWrapper" + ) + def test_multiple_connection_support(self, query_wrapper): + requests_mock = MagicMock() + get_response = MagicMock() + + sql_instance = SqlCommenter(get_response) + sql_instance(requests_mock) + + # check if query_wrapper is added to the context for 2 databases + self.assertEqual(query_wrapper.call_count, 2) diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py index 910ff7c4f6..a9f3e4ff5f 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py @@ -22,7 +22,7 @@ from opentelemetry.instrumentation.sqlalchemy.version import __version__ from opentelemetry.instrumentation.utils import ( _generate_opentelemetry_traceparent, - _generate_sql_comment, + generate_sql_comment, ) from opentelemetry.semconv.trace import NetTransportValues, SpanAttributes from opentelemetry.trace import Span @@ -137,7 +137,7 @@ def _generate_comment(span: Span) -> str: meta = {} if span_context.is_valid: meta.update(_generate_opentelemetry_traceparent(span)) - return _generate_sql_comment(**meta) + return generate_sql_comment(**meta) # pylint: disable=unused-argument diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py index fea7608388..3ef35045c3 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py @@ -26,6 +26,15 @@ from opentelemetry.propagate import extract from opentelemetry.trace import Span, StatusCode +try: + from opentelemetry.trace.propagation.tracecontext import ( + TraceContextTextMapPropagator, + ) + + propagator = TraceContextTextMapPropagator() +except ImportError: + propagator = None + def extract_attributes_from_object( obj: any, attributes: Sequence[str], existing: Dict[str, str] = None @@ -119,24 +128,22 @@ def _start_internal_or_server_span( return span, token -_KEY_VALUE_DELIMITER = "," - - -def _generate_sql_comment(**meta): +def generate_sql_comment(**meta) -> str: """ Return a SQL comment with comma delimited key=value pairs created from **meta kwargs. """ + key_value_delimiter = "," + if not meta: # No entries added. return "" # Sort the keywords to ensure that caching works and that testing is # deterministic. It eases visual inspection as well. - # pylint: disable=consider-using-f-string return ( " /*" - + _KEY_VALUE_DELIMITER.join( - "{}={!r}".format(_url_quote(key), _url_quote(value)) + + key_value_delimiter.join( + f"{url_quote(key)}={url_quote(value)!r}" for key, value in sorted(meta.items()) if value is not None ) @@ -144,7 +151,7 @@ def _generate_sql_comment(**meta): ) -def _url_quote(s): # pylint: disable=invalid-name +def url_quote(s): # pylint: disable=invalid-name if not isinstance(s, (str, bytes)): return s quoted = urllib.parse.quote(s) @@ -155,6 +162,17 @@ def _url_quote(s): # pylint: disable=invalid-name return quoted.replace("%", "%%") +def get_opentelemetry_values(): + """ + Return the OpenTelemetry Trace and Span IDs if Span ID is set in the + OpenTelemetry execution context. + """ + # Insert the W3C TraceContext generated + _headers = {} + propagator.inject(_headers) + return _headers + + def _generate_opentelemetry_traceparent(span: Span) -> str: meta = {} _version = "00" From b78bd93f40a1471df22c3d20915caed860496e04 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Thu, 7 Jul 2022 17:47:00 +0530 Subject: [PATCH 2/6] Added CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9ec0ed3d7..85882587cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.12.0rc2-0.32b0...HEAD) +- Adding multiple db connections support for django-instrumentation's sqlcommenter + ([#1187](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1187)) ## [1.12.0rc2-0.32b0](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.12.0rc2-0.32b0) - 2022-07-01 From 26164553060544115061ee691fca0c4fffc83f85 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Fri, 8 Jul 2022 15:45:17 +0530 Subject: [PATCH 3/6] Added CHANGELOG.md --- .../django/middleware/sqlcommenter_middleware.py | 10 +++++----- .../tests/test_sqlcommenter.py | 6 +++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py index 6565fb8d14..77eed1340e 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py @@ -13,21 +13,21 @@ # 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. +from contextlib import ExitStack from logging import getLogger from typing import Any, Type, TypeVar -from contextlib import ExitStack # pylint: disable=no-name-in-module from django import conf, get_version from django.db import connections from django.db.backends.utils import CursorDebugWrapper -from opentelemetry.trace.propagation.tracecontext import ( - TraceContextTextMapPropagator, -) from opentelemetry.instrumentation.utils import ( - get_opentelemetry_values, generate_sql_comment, + get_opentelemetry_values, +) +from opentelemetry.trace.propagation.tracecontext import ( + TraceContextTextMapPropagator, ) _propagator = TraceContextTextMapPropagator() diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py index 451f49d165..4c91b8db75 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py @@ -15,14 +15,15 @@ # pylint: disable=no-name-in-module from unittest.mock import MagicMock, patch +import pytest from django import VERSION, conf from django.http import HttpResponse from django.test.utils import setup_test_environment, teardown_test_environment from opentelemetry.instrumentation.django import DjangoInstrumentor from opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware import ( - _QueryWrapper, SqlCommenter, + _QueryWrapper, ) from opentelemetry.test.wsgitestutil import WsgiTestBase @@ -103,6 +104,9 @@ def test_query_wrapper(self, trace_capture): "opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware._QueryWrapper" ) def test_multiple_connection_support(self, query_wrapper): + if not DJANGO_2_0: + pytest.skip() + requests_mock = MagicMock() get_response = MagicMock() From 956ef40a7485fc076deb6f48a67f9f39b52c1662 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Wed, 13 Jul 2022 13:39:00 +0530 Subject: [PATCH 4/6] PR changes --- .../src/opentelemetry/instrumentation/dbapi/__init__.py | 4 ++-- .../django/middleware/sqlcommenter_middleware.py | 4 ++-- .../src/opentelemetry/instrumentation/sqlalchemy/engine.py | 4 ++-- .../src/opentelemetry/instrumentation/utils.py | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py index fdf0e30c29..2559466221 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py @@ -47,7 +47,7 @@ from opentelemetry.instrumentation.dbapi.version import __version__ from opentelemetry.instrumentation.utils import ( _generate_opentelemetry_traceparent, - generate_sql_comment, + _generate_sql_comment, unwrap, ) from opentelemetry.semconv.trace import SpanAttributes @@ -382,7 +382,7 @@ def _generate_comment(span: Span) -> str: if span_context.is_valid: meta.update(_generate_opentelemetry_traceparent(span)) # TODO(schekuri): revisit to enrich with info such as route, db_driver etc... - return generate_sql_comment(**meta) + return _generate_sql_comment(**meta) def traced_execution( self, diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py index 77eed1340e..ba854f8c47 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py @@ -23,7 +23,7 @@ from django.db.backends.utils import CursorDebugWrapper from opentelemetry.instrumentation.utils import ( - generate_sql_comment, + _generate_sql_comment, get_opentelemetry_values, ) from opentelemetry.trace.propagation.tracecontext import ( @@ -84,7 +84,7 @@ def __call__(self, execute: Type[T], sql, params, many, context) -> T: db_driver = context["connection"].settings_dict.get("ENGINE", "") resolver_match = self.request.resolver_match - sql_comment = generate_sql_comment( + sql_comment = _generate_sql_comment( # Information about the controller. controller=resolver_match.view_name if resolver_match and with_controller diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py index a9f3e4ff5f..910ff7c4f6 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py @@ -22,7 +22,7 @@ from opentelemetry.instrumentation.sqlalchemy.version import __version__ from opentelemetry.instrumentation.utils import ( _generate_opentelemetry_traceparent, - generate_sql_comment, + _generate_sql_comment, ) from opentelemetry.semconv.trace import NetTransportValues, SpanAttributes from opentelemetry.trace import Span @@ -137,7 +137,7 @@ def _generate_comment(span: Span) -> str: meta = {} if span_context.is_valid: meta.update(_generate_opentelemetry_traceparent(span)) - return generate_sql_comment(**meta) + return _generate_sql_comment(**meta) # pylint: disable=unused-argument diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py index 3ef35045c3..5982778035 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py @@ -128,7 +128,7 @@ def _start_internal_or_server_span( return span, token -def generate_sql_comment(**meta) -> str: +def _generate_sql_comment(**meta) -> str: """ Return a SQL comment with comma delimited key=value pairs created from **meta kwargs. From 6ded54ffd5df0c3a26d4bcf66a5fac7d641d70f5 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Thu, 14 Jul 2022 11:16:46 +0530 Subject: [PATCH 5/6] PR changes --- .../django/middleware/sqlcommenter_middleware.py | 4 ++-- .../tests/test_sqlcommenter.py | 2 +- .../src/opentelemetry/instrumentation/utils.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py index ba854f8c47..5fe51fca52 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware/sqlcommenter_middleware.py @@ -24,7 +24,7 @@ from opentelemetry.instrumentation.utils import ( _generate_sql_comment, - get_opentelemetry_values, + _get_opentelemetry_values, ) from opentelemetry.trace.propagation.tracecontext import ( TraceContextTextMapPropagator, @@ -104,7 +104,7 @@ def __call__(self, execute: Type[T], sql, params, many, context) -> T: framework=f"django:{_django_version}" if with_framework else None, # Information about the database and driver. db_driver=db_driver if with_db_driver else None, - **get_opentelemetry_values() if with_opentelemetry else {}, + **_get_opentelemetry_values() if with_opentelemetry else {}, ) # TODO: MySQL truncates logs > 1024B so prepend comments diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py index 4c91b8db75..b162cc1f2a 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_sqlcommenter.py @@ -73,7 +73,7 @@ def test_middleware_added(self, sqlcommenter_middleware): ) @patch( - "opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware.get_opentelemetry_values" + "opentelemetry.instrumentation.django.middleware.sqlcommenter_middleware._get_opentelemetry_values" ) def test_query_wrapper(self, trace_capture): requests_mock = MagicMock() diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py index 5982778035..b881d97022 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py @@ -143,7 +143,7 @@ def _generate_sql_comment(**meta) -> str: return ( " /*" + key_value_delimiter.join( - f"{url_quote(key)}={url_quote(value)!r}" + f"{_url_quote(key)}={_url_quote(value)!r}" for key, value in sorted(meta.items()) if value is not None ) @@ -151,7 +151,7 @@ def _generate_sql_comment(**meta) -> str: ) -def url_quote(s): # pylint: disable=invalid-name +def _url_quote(s): # pylint: disable=invalid-name if not isinstance(s, (str, bytes)): return s quoted = urllib.parse.quote(s) @@ -162,7 +162,7 @@ def url_quote(s): # pylint: disable=invalid-name return quoted.replace("%", "%%") -def get_opentelemetry_values(): +def _get_opentelemetry_values(): """ Return the OpenTelemetry Trace and Span IDs if Span ID is set in the OpenTelemetry execution context. From 103d57ed93489041c6d3080e94a9210629be1ae2 Mon Sep 17 00:00:00 2001 From: Thiyagu55 Date: Thu, 14 Jul 2022 13:44:39 +0530 Subject: [PATCH 6/6] PR changes --- .../src/opentelemetry/instrumentation/utils.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py index b881d97022..181d5b6fce 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py @@ -25,15 +25,11 @@ from opentelemetry.context import _SUPPRESS_INSTRUMENTATION_KEY # noqa: F401 from opentelemetry.propagate import extract from opentelemetry.trace import Span, StatusCode +from opentelemetry.trace.propagation.tracecontext import ( + TraceContextTextMapPropagator, +) -try: - from opentelemetry.trace.propagation.tracecontext import ( - TraceContextTextMapPropagator, - ) - - propagator = TraceContextTextMapPropagator() -except ImportError: - propagator = None +propagator = TraceContextTextMapPropagator() def extract_attributes_from_object(