Skip to content

Commit

Permalink
chore(pin): prevent overriding the global tracer
Browse files Browse the repository at this point in the history
  • Loading branch information
mabdinur committed Feb 4, 2025
1 parent dc30784 commit 20d6173
Show file tree
Hide file tree
Showing 105 changed files with 183 additions and 169 deletions.
30 changes: 3 additions & 27 deletions ddtrace/_trace/pin.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,11 @@ def __init__(
self,
service=None, # type: Optional[str]
tags=None, # type: Optional[Dict[str, str]]
tracer=None,
_config=None, # type: Optional[Dict[str, Any]]
):
# type: (...) -> None
if tracer is not None and tracer is not ddtrace.tracer:
deprecate(
"Initializing ddtrace.trace.Pin with `tracer` argument is deprecated",
message="All Pin instances should use the global tracer instance",
removal_version="3.0.0",
)
tracer = tracer or ddtrace.tracer
self.tags = tags
self.tracer = tracer
self.tracer = ddtrace.tracer
self._target = None # type: Optional[int]
# keep the configuration attribute internal because the
# public API to access it is not the Pin class
Expand Down Expand Up @@ -127,7 +119,6 @@ def override(
obj, # type: Any
service=None, # type: Optional[str]
tags=None, # type: Optional[Dict[str, str]]
tracer=None,
):
# type: (...) -> None
"""Override an object with the given attributes.
Expand All @@ -139,20 +130,14 @@ def override(
>>> # Override a pin for a specific connection
>>> Pin.override(conn, service='user-db')
"""
if tracer is not None:
deprecate(
"Calling ddtrace.trace.Pin.override(...) with the `tracer` argument is deprecated",
message="All Pin instances should use the global tracer instance",
removal_version="3.0.0",
)
if not obj:
return

pin = cls.get_from(obj)
if pin is None:
Pin(service=service, tags=tags, tracer=tracer).onto(obj)
Pin(service=service, tags=tags).onto(obj)
else:
pin.clone(service=service, tags=tags, tracer=tracer).onto(obj)
pin.clone(service=service, tags=tags).onto(obj)

def enabled(self):
# type: () -> bool
Expand Down Expand Up @@ -198,21 +183,13 @@ def clone(
self,
service=None, # type: Optional[str]
tags=None, # type: Optional[Dict[str, str]]
tracer=None,
):
# type: (...) -> Pin
"""Return a clone of the pin with the given attributes replaced."""
# do a shallow copy of Pin dicts
if not tags and self.tags:
tags = self.tags.copy()

if tracer is not None:
deprecate(
"Initializing ddtrace.trace.Pin with `tracer` argument is deprecated",
message="All Pin instances should use the global tracer instance",
removal_version="3.0.0",
)

# we use a copy instead of a deepcopy because we expect configurations
# to have only a root level dictionary without nested objects. Using
# deepcopy introduces a big overhead:
Expand All @@ -224,6 +201,5 @@ def clone(
return Pin(
service=service or self.service,
tags=tags,
tracer=tracer or self.tracer, # do not clone the Tracer
_config=config,
)
5 changes: 1 addition & 4 deletions ddtrace/contrib/internal/asgi/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,7 @@ async def __call__(self, scope, receive, send):

# Calling ddtrace.trace.Pin(...) with the `tracer` argument is deprecated
# Remove this if statement when the `tracer` argument is removed
if self.tracer is ddtrace.tracer:
pin = ddtrace.trace.Pin(service="asgi")
else:
pin = ddtrace.trace.Pin(service="asgi", tracer=self.tracer)
pin = ddtrace.trace.Pin(service="asgi")

with core.context_with_data(
"asgi.__call__",
Expand Down
5 changes: 1 addition & 4 deletions ddtrace/contrib/internal/django/patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,7 @@ def cursor(django, pin, func, instance, args, kwargs):

# Calling ddtrace.pin.Pin(...) with the `tracer` argument generates a deprecation warning.
# Remove this if statement when the `tracer` argument is removed
if pin.tracer is ddtrace.tracer:
pin = Pin(service, tags=tags)
else:
pin = Pin(service, tags=tags, tracer=pin.tracer)
pin = Pin(service, tags=tags)

cursor = func(*args, **kwargs)

Expand Down
8 changes: 1 addition & 7 deletions ddtrace/contrib/internal/mongoengine/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,5 @@ def __call__(self, *args, **kwargs):
client = self.__wrapped__(*args, **kwargs)
pin = ddtrace.trace.Pin.get_from(self)
if pin:
# Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning.
# Remove this if statement when the `tracer` argument is removed
if pin.tracer is ddtrace.tracer:
ddtrace.trace.Pin(service=pin.service).onto(client)
else:
ddtrace.trace.Pin(service=pin.service, tracer=pin.tracer).onto(client)

ddtrace.trace.Pin(service=pin.service).onto(client)
return client
7 changes: 1 addition & 6 deletions ddtrace/contrib/internal/pylibmc/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,7 @@ def __init__(self, client=None, service=memcached.SERVICE, tracer=None, *args, *
super(TracedClient, self).__init__(client)

schematized_service = schematize_service_name(service)
# Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning.
# Remove this if statement when the `tracer` argument is removed
if tracer is ddtrace.tracer:
pin = ddtrace.trace.Pin(service=schematized_service)
else:
pin = ddtrace.trace.Pin(service=schematized_service, tracer=tracer)
pin = ddtrace.trace.Pin(service=schematized_service)
pin.onto(self)

# attempt to collect the pool of urls this client talks to
Expand Down
5 changes: 1 addition & 4 deletions ddtrace/contrib/internal/sqlalchemy/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,7 @@ def __init__(self, tracer, service, engine):
# attach the PIN
# Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning.
# Remove this if statement when the `tracer` argument is removed
if self.tracer is ddtrace.tracer:
Pin(service=self.service).onto(engine)
else:
Pin(tracer=tracer, service=self.service).onto(engine)
Pin(service=self.service).onto(engine)

listen(engine, "before_cursor_execute", self._before_cur_exec)
listen(engine, "after_cursor_execute", self._after_cur_exec)
Expand Down
5 changes: 1 addition & 4 deletions ddtrace/contrib/internal/tornado/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,4 @@ def tracer_config(__init__, app, args, kwargs):
# configure the PIN object for template rendering
# Required for backwards compatibility. Remove the else clause when
# the `ddtrace.trace.Pin` object no longer accepts the Pin argument.
if tracer is ddtrace.tracer:
ddtrace.trace.Pin(service=service).onto(template)
else:
ddtrace.trace.Pin(service=service, tracer=tracer).onto(template)
ddtrace.trace.Pin(service=service).onto(template)
3 changes: 2 additions & 1 deletion tests/appsec/contrib_appsec/django_app/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import ddtrace.constants
from ddtrace.trace import tracer
from tests.utils import Pin


# django.conf.urls.url was deprecated in django 3 and removed in django 4
Expand Down Expand Up @@ -196,7 +197,7 @@ def login_user(request):
def new_service(request, service_name: str):
import ddtrace

ddtrace.trace.Pin.override(django, service=service_name, tracer=ddtrace.tracer)
Pin.override(django, service=service_name, tracer=ddtrace.tracer)
return HttpResponse(service_name, status=200)


Expand Down
3 changes: 2 additions & 1 deletion tests/appsec/contrib_appsec/fastapi_app/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

import ddtrace.constants
from ddtrace.trace import tracer
from tests.utils import Pin


fake_secret_token = "DataDog"
Expand Down Expand Up @@ -104,7 +105,7 @@ async def multi_view_no_param(request: Request): # noqa: B008
async def new_service(service_name: str, request: Request): # noqa: B008
import ddtrace

ddtrace.trace.Pin.override(app, service=service_name, tracer=ddtrace.tracer)
Pin.override(app, service=service_name, tracer=ddtrace.tracer)
return HTMLResponse(service_name, 200)

async def slow_numbers(minimum, maximum):
Expand Down
3 changes: 2 additions & 1 deletion tests/appsec/contrib_appsec/flask_app/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import ddtrace.constants
from ddtrace.trace import tracer
from tests.webclient import PingFilter
from tests.utils import Pin


tracer._configure(trace_processors=[PingFilter()])
Expand Down Expand Up @@ -55,7 +56,7 @@ def multi_view(param_int=0, param_str=""):
def new_service(service_name: str):
import ddtrace

ddtrace.trace.Pin.override(Flask, service=service_name, tracer=ddtrace.tracer)
Pin.override(Flask, service=service_name, tracer=ddtrace.tracer)
return service_name


Expand Down
2 changes: 1 addition & 1 deletion tests/appsec/contrib_appsec/test_flask.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import pytest

from ddtrace.internal.packages import get_version_for_package
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.appsec.contrib_appsec import utils
from tests.utils import TracerTestCase

Expand Down
7 changes: 4 additions & 3 deletions tests/appsec/contrib_appsec/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
from tests.utils import DummyTracer
from tests.utils import override_env
from tests.utils import override_global_config
from tests.utils import Pin


class Interface:
Expand Down Expand Up @@ -1567,8 +1568,8 @@ def test_tracer():

@contextmanager
def post_tracer(interface):
original_tracer = getattr(ddtrace.trace.Pin.get_from(interface.framework), "tracer", None)
ddtrace.trace.Pin.override(interface.framework, tracer=interface.tracer)
original_tracer = getattr(Pin.get_from(interface.framework), "tracer", None)
Pin.override(interface.framework, tracer=interface.tracer)
yield
if original_tracer is not None:
ddtrace.trace.Pin.override(interface.framework, tracer=original_tracer)
Pin.override(interface.framework, tracer=original_tracer)
2 changes: 1 addition & 1 deletion tests/appsec/integrations/django_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from ddtrace.appsec._iast import enable_iast_propagation
from ddtrace.contrib.internal.django.patch import patch
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.appsec.iast.conftest import _end_iast_context_and_oce
from tests.appsec.iast.conftest import _start_iast_context_and_oce
from tests.utils import DummyTracer
Expand Down
2 changes: 1 addition & 1 deletion tests/commands/ddtrace_run_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import redis

from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.contrib.config import REDIS_CONFIG
from tests.utils import DummyWriter

Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/aiobotocore/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from async_generator import asynccontextmanager
from async_generator import yield_

from ddtrace.trace import Pin
from tests.utils import TestPin as Pin


LOCALSTACK_ENDPOINT_URL = {
Expand Down
6 changes: 3 additions & 3 deletions tests/contrib/aiohttp/test_aiohttp_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from ddtrace.contrib.internal.aiohttp.patch import extract_netloc_and_query_info_from_url
from ddtrace.contrib.internal.aiohttp.patch import patch
from ddtrace.contrib.internal.aiohttp.patch import unpatch
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.utils import override_config
from tests.utils import override_http_config

Expand Down Expand Up @@ -101,7 +101,7 @@ async def test_distributed_tracing_disabled(ddtrace_run_python_code_in_subproces
import asyncio
import sys
import aiohttp
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.contrib.aiohttp.test_aiohttp_client import URL
async def test():
Expand Down Expand Up @@ -184,7 +184,7 @@ def test_configure_service_name_pin(ddtrace_run_python_code_in_subprocess):
import asyncio
import sys
import aiohttp
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.contrib.aiohttp.test_aiohttp_client import URL_200
async def test():
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/aiohttp_jinja2/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from ddtrace.contrib.internal.aiohttp_jinja2.patch import patch
from ddtrace.contrib.internal.aiohttp_jinja2.patch import unpatch
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.contrib.aiohttp.conftest import app_tracer # noqa:F401
from tests.contrib.aiohttp.conftest import patched_app_tracer # noqa:F401
from tests.contrib.aiohttp.conftest import untraced_app_tracer # noqa:F401
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/aiohttp_jinja2/test_aiohttp_jinja2.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import pytest

from ddtrace.constants import ERROR_MSG
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from ddtrace.trace import tracer
from tests.contrib.aiohttp.app.web import set_filesystem_loader
from tests.contrib.aiohttp.app.web import set_package_loader
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/aiomysql/test_aiomysql.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from ddtrace.contrib.internal.aiomysql.patch import patch
from ddtrace.contrib.internal.aiomysql.patch import unpatch
from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.contrib import shared_tests_async as shared_tests
from tests.contrib.asyncio.utils import AsyncioTestCase
from tests.contrib.asyncio.utils import mark_asyncio
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/aiopg/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME

# project
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.contrib.asyncio.utils import AsyncioTestCase
from tests.contrib.config import POSTGRES_CONFIG
from tests.opentracer.utils import init_tracer
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/algoliasearch/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from ddtrace.contrib.internal.algoliasearch.patch import algoliasearch_version
from ddtrace.contrib.internal.algoliasearch.patch import patch
from ddtrace.contrib.internal.algoliasearch.patch import unpatch
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from ddtrace.vendor.packaging.version import parse as parse_version
from tests.utils import TracerTestCase
from tests.utils import assert_is_measured
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/anthropic/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from ddtrace.contrib.internal.anthropic.patch import patch
from ddtrace.contrib.internal.anthropic.patch import unpatch
from ddtrace.llmobs import LLMObs
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.contrib.anthropic.utils import get_request_vcr
from tests.utils import DummyTracer
from tests.utils import DummyWriter
Expand Down
4 changes: 2 additions & 2 deletions tests/contrib/aredis/test_aredis.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from ddtrace.contrib.internal.aredis.patch import patch
from ddtrace.contrib.internal.aredis.patch import unpatch
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.conftest import DEFAULT_DDTRACE_SUBPROCESS_TEST_SERVICE_NAME
from tests.opentracer.utils import init_tracer
from tests.utils import override_config
Expand Down Expand Up @@ -152,7 +152,7 @@ def test_schematization_of_service_and_operation(ddtrace_run_python_code_in_subp
import pytest
import sys
from tests.conftest import *
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
import aredis
from tests.contrib.config import REDIS_CONFIG
from tests.contrib.aredis.test_aredis import traced_aredis
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/asyncpg/test_asyncpg.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from ddtrace.contrib.internal.asyncpg.patch import patch
from ddtrace.contrib.internal.asyncpg.patch import unpatch
from ddtrace.contrib.internal.trace_utils import iswrapped
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from ddtrace.trace import tracer
from tests.contrib.asyncio.utils import AsyncioTestCase
from tests.contrib.asyncio.utils import mark_asyncio
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/avro/test_avro.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from ddtrace.contrib.internal.avro.patch import patch
from ddtrace.contrib.internal.avro.patch import unpatch
from ddtrace.ext import schema as SCHEMA_TAGS
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin


OPENAPI_USER_SCHEMA_DEF = (
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/boto/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME

# project
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.opentracer.utils import init_tracer
from tests.utils import TracerTestCase
from tests.utils import assert_is_measured
Expand Down
2 changes: 1 addition & 1 deletion tests/contrib/botocore/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
from ddtrace.internal.utils.version import parse_version
from ddtrace.propagation.http import HTTP_HEADER_PARENT_ID
from ddtrace.propagation.http import HTTP_HEADER_TRACE_ID
from ddtrace.trace import Pin
from tests.utils import TestPin as Pin
from tests.opentracer.utils import init_tracer
from tests.utils import TracerTestCase
from tests.utils import assert_is_measured
Expand Down
Loading

0 comments on commit 20d6173

Please sign in to comment.