From 21d50d49b90a089e75070edba56c2880343a31c7 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 15 Jan 2025 12:19:43 -0500 Subject: [PATCH] chore(tracing): move Pin and TraceFilter from ddtrace to ddtrace.trace [3.0] (#11899) ## Motivation In 3.0 all tracing specific objects should be defined in either `ddtrace.trace` or `ddtrace._trace` packages. This will allow us to better decouple tracing from other Datadog products. ## Changes - Exposes `Pin` and `TraceFilter` classes in `ddtrace.trace.__init__.py`. This keeps these objects in the public API. - Internalize the implementation details of the `Pin` and `TraceFilter` classes by moving `pin.py` and `filters.py` to the `ddtrace._trace` package. - Maintains backwards compatibility by continuing to export all objects in `ddtrace._trace.[pin/filters].py` in `ddtrace.[pin/filters].py`. - Logs a warning if the deprecated filters and pin modules are used. ## Checklist - [ ] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- benchmarks/bm/utils.py | 2 +- ddtrace/__init__.py | 3 +- ddtrace/_trace/filters.py | 72 ++++++ ddtrace/_trace/pin.py | 209 +++++++++++++++++ ddtrace/_trace/tracer.py | 2 +- ddtrace/contrib/aiomysql/__init__.py | 2 +- ddtrace/contrib/aiopg/__init__.py | 3 +- ddtrace/contrib/aioredis/__init__.py | 2 +- ddtrace/contrib/anthropic/__init__.py | 3 +- ddtrace/contrib/aredis/__init__.py | 2 +- ddtrace/contrib/asyncpg/__init__.py | 2 +- ddtrace/contrib/cassandra/__init__.py | 3 +- ddtrace/contrib/consul/__init__.py | 3 +- ddtrace/contrib/dbapi/__init__.py | 2 +- ddtrace/contrib/dbapi_async/__init__.py | 2 +- .../contrib/google_generativeai/__init__.py | 3 +- ddtrace/contrib/graphql/__init__.py | 2 +- ddtrace/contrib/grpc/__init__.py | 6 +- ddtrace/contrib/httpx/__init__.py | 2 +- ddtrace/contrib/internal/aiobotocore/patch.py | 2 +- ddtrace/contrib/internal/aiohttp/patch.py | 2 +- .../contrib/internal/aiohttp_jinja2/patch.py | 2 +- ddtrace/contrib/internal/aiomysql/patch.py | 2 +- ddtrace/contrib/internal/aiopg/connection.py | 2 +- ddtrace/contrib/internal/aioredis/patch.py | 2 +- .../contrib/internal/algoliasearch/patch.py | 2 +- ddtrace/contrib/internal/anthropic/patch.py | 2 +- ddtrace/contrib/internal/aredis/patch.py | 2 +- ddtrace/contrib/internal/asgi/middleware.py | 8 +- ddtrace/contrib/internal/asyncio/patch.py | 2 +- ddtrace/contrib/internal/asyncpg/patch.py | 2 +- ddtrace/contrib/internal/avro/patch.py | 2 +- .../contrib/internal/azure_functions/patch.py | 2 +- ddtrace/contrib/internal/boto/patch.py | 2 +- ddtrace/contrib/internal/botocore/patch.py | 2 +- ddtrace/contrib/internal/cassandra/session.py | 2 +- ddtrace/contrib/internal/celery/app.py | 4 +- ddtrace/contrib/internal/celery/signals.py | 2 +- ddtrace/contrib/internal/consul/patch.py | 2 +- ddtrace/contrib/internal/django/patch.py | 2 +- .../contrib/internal/dogpile_cache/lock.py | 2 +- .../contrib/internal/dogpile_cache/patch.py | 6 +- .../contrib/internal/dogpile_cache/region.py | 2 +- .../contrib/internal/elasticsearch/patch.py | 2 +- ddtrace/contrib/internal/fastapi/patch.py | 2 +- ddtrace/contrib/internal/flask/patch.py | 2 +- ddtrace/contrib/internal/flask/wrappers.py | 2 +- .../internal/google_generativeai/patch.py | 2 +- ddtrace/contrib/internal/graphql/patch.py | 2 +- .../internal/grpc/aio_client_interceptor.py | 2 +- .../internal/grpc/aio_server_interceptor.py | 2 +- ddtrace/contrib/internal/grpc/patch.py | 2 +- ddtrace/contrib/internal/httplib/patch.py | 2 +- ddtrace/contrib/internal/httpx/patch.py | 2 +- ddtrace/contrib/internal/jinja2/patch.py | 2 +- ddtrace/contrib/internal/kafka/patch.py | 2 +- ddtrace/contrib/internal/kombu/patch.py | 2 +- ddtrace/contrib/internal/langchain/patch.py | 2 +- ddtrace/contrib/internal/mako/patch.py | 2 +- ddtrace/contrib/internal/mariadb/patch.py | 2 +- ddtrace/contrib/internal/molten/patch.py | 2 +- ddtrace/contrib/internal/molten/wrappers.py | 2 +- ddtrace/contrib/internal/mysql/patch.py | 2 +- ddtrace/contrib/internal/mysqldb/patch.py | 2 +- ddtrace/contrib/internal/openai/patch.py | 2 +- ddtrace/contrib/internal/protobuf/patch.py | 2 +- .../internal/psycopg/async_connection.py | 2 +- .../contrib/internal/psycopg/connection.py | 2 +- ddtrace/contrib/internal/psycopg/patch.py | 2 +- ddtrace/contrib/internal/pymemcache/client.py | 2 +- ddtrace/contrib/internal/pymemcache/patch.py | 6 +- ddtrace/contrib/internal/pymongo/client.py | 2 +- ddtrace/contrib/internal/pymongo/patch.py | 2 +- ddtrace/contrib/internal/pymysql/patch.py | 2 +- ddtrace/contrib/internal/pynamodb/patch.py | 2 +- ddtrace/contrib/internal/pyodbc/patch.py | 2 +- .../contrib/internal/redis/asyncio_patch.py | 2 +- ddtrace/contrib/internal/redis/patch.py | 2 +- .../contrib/internal/rediscluster/patch.py | 2 +- ddtrace/contrib/internal/requests/patch.py | 2 +- ddtrace/contrib/internal/requests/session.py | 2 +- ddtrace/contrib/internal/rq/patch.py | 2 +- ddtrace/contrib/internal/sanic/patch.py | 2 +- ddtrace/contrib/internal/snowflake/patch.py | 2 +- ddtrace/contrib/internal/sqlalchemy/engine.py | 2 +- ddtrace/contrib/internal/sqlite3/patch.py | 2 +- ddtrace/contrib/internal/starlette/patch.py | 2 +- ddtrace/contrib/internal/subprocess/patch.py | 2 +- ddtrace/contrib/internal/tornado/template.py | 2 +- ddtrace/contrib/internal/urllib3/patch.py | 2 +- ddtrace/contrib/internal/vertexai/patch.py | 2 +- ddtrace/contrib/internal/vertica/patch.py | 2 +- ddtrace/contrib/internal/wsgi/wsgi.py | 2 +- ddtrace/contrib/internal/yaaredis/patch.py | 2 +- ddtrace/contrib/kafka/__init__.py | 2 +- ddtrace/contrib/kombu/__init__.py | 3 +- ddtrace/contrib/mariadb/__init__.py | 2 +- ddtrace/contrib/mongoengine/__init__.py | 3 +- ddtrace/contrib/mysql/__init__.py | 2 +- ddtrace/contrib/mysqldb/__init__.py | 2 +- ddtrace/contrib/openai/__init__.py | 3 +- ddtrace/contrib/psycopg/__init__.py | 2 +- ddtrace/contrib/pylibmc/__init__.py | 3 +- ddtrace/contrib/pymemcache/__init__.py | 3 +- ddtrace/contrib/pymongo/__init__.py | 3 +- ddtrace/contrib/pymysql/__init__.py | 2 +- ddtrace/contrib/pyodbc/__init__.py | 2 +- ddtrace/contrib/redis/__init__.py | 2 +- ddtrace/contrib/rediscluster/__init__.py | 3 +- ddtrace/contrib/rq/__init__.py | 2 +- ddtrace/contrib/snowflake/__init__.py | 2 +- ddtrace/contrib/sqlalchemy/__init__.py | 3 +- ddtrace/contrib/sqlite3/__init__.py | 2 +- ddtrace/contrib/trace_utils.py | 2 +- ddtrace/contrib/trace_utils_async.py | 2 +- ddtrace/contrib/vertexai/__init__.py | 3 +- ddtrace/contrib/vertica/__init__.py | 3 +- ddtrace/contrib/yaaredis/__init__.py | 2 +- ddtrace/filters.py | 78 +------ ddtrace/internal/ci_visibility/filters.py | 2 +- ddtrace/llmobs/_integrations/base.py | 2 +- ddtrace/llmobs/_integrations/openai.py | 2 +- ddtrace/pin.py | 215 +----------------- ddtrace/settings/config.py | 2 +- ddtrace/trace/__init__.py | 9 +- docker-compose.yml | 1 + docs/advanced_usage.rst | 4 +- docs/contributing-integrations.rst | 2 +- docs/troubleshooting.rst | 2 +- ...ers-to-trace-package-2f47fa2d2592b413.yaml | 6 + .../appsec/contrib_appsec/django_app/urls.py | 2 +- .../appsec/contrib_appsec/fastapi_app/app.py | 2 +- tests/appsec/contrib_appsec/flask_app/app.py | 2 +- tests/appsec/contrib_appsec/test_flask.py | 2 +- tests/appsec/contrib_appsec/utils.py | 6 +- tests/commands/ddtrace_run_integration.py | 2 +- tests/contrib/aiobotocore/utils.py | 2 +- tests/contrib/aiohttp/test_aiohttp_client.py | 6 +- tests/contrib/aiohttp_jinja2/conftest.py | 2 +- .../aiohttp_jinja2/test_aiohttp_jinja2.py | 2 +- tests/contrib/aiomysql/test_aiomysql.py | 2 +- tests/contrib/aiopg/test.py | 5 +- tests/contrib/algoliasearch/test.py | 2 +- tests/contrib/anthropic/conftest.py | 2 +- tests/contrib/aredis/test_aredis.py | 4 +- tests/contrib/asyncpg/test_asyncpg.py | 2 +- tests/contrib/avro/test_avro.py | 2 +- tests/contrib/boto/test.py | 5 +- tests/contrib/botocore/test.py | 2 +- tests/contrib/botocore/test_bedrock.py | 2 +- tests/contrib/botocore/test_bedrock_llmobs.py | 2 +- tests/contrib/botocore/test_stepfunctions.py | 2 +- tests/contrib/cassandra/test.py | 2 +- tests/contrib/celery/autopatch.py | 2 +- tests/contrib/celery/base.py | 2 +- tests/contrib/celery/test_app.py | 2 +- tests/contrib/celery/test_integration.py | 2 +- tests/contrib/celery/test_patch.py | 2 +- tests/contrib/celery/test_tagging.py | 2 +- tests/contrib/consul/test.py | 2 +- tests/contrib/dbapi/test_dbapi.py | 2 +- tests/contrib/dbapi/test_dbapi_appsec.py | 2 +- tests/contrib/dbapi_async/test_dbapi_async.py | 2 +- tests/contrib/django/conftest.py | 2 +- tests/contrib/django/test_django_dbm.py | 2 +- tests/contrib/dogpile_cache/test_tracing.py | 2 +- tests/contrib/dramatiq/test_integration.py | 2 +- .../elasticsearch/test_elasticsearch.py | 2 +- tests/contrib/flask/__init__.py | 2 +- tests/contrib/flask/test_blueprint.py | 2 +- tests/contrib/flask/test_flask_helpers.py | 2 +- tests/contrib/flask/test_signals.py | 2 +- tests/contrib/flask/test_template.py | 2 +- .../flask_autopatch/test_flask_autopatch.py | 2 +- tests/contrib/google_generativeai/conftest.py | 2 +- tests/contrib/grpc/common.py | 2 +- tests/contrib/grpc/test_grpc.py | 4 +- tests/contrib/grpc_aio/test_grpc_aio.py | 2 +- tests/contrib/httplib/test_httplib.py | 2 +- .../httplib/test_httplib_distributed.py | 2 +- tests/contrib/httpx/test_httpx.py | 2 +- tests/contrib/httpx/test_httpx_pre_0_11.py | 2 +- tests/contrib/jinja2/test_jinja2.py | 2 +- tests/contrib/kafka/test_kafka.py | 12 +- tests/contrib/kombu/test.py | 2 +- tests/contrib/langchain/conftest.py | 2 +- tests/contrib/mako/test_mako.py | 2 +- tests/contrib/mariadb/test_mariadb.py | 2 +- tests/contrib/molten/test_molten.py | 2 +- tests/contrib/molten/test_molten_di.py | 2 +- tests/contrib/mongoengine/test.py | 2 +- tests/contrib/mysql/test_mysql.py | 2 +- tests/contrib/mysqldb/test_mysqldb.py | 2 +- tests/contrib/openai/conftest.py | 4 +- tests/contrib/openai/test_openai_v0.py | 6 +- tests/contrib/openai/test_openai_v1.py | 6 +- tests/contrib/psycopg/test_psycopg.py | 2 +- tests/contrib/psycopg/test_psycopg_async.py | 2 +- tests/contrib/psycopg2/test_psycopg.py | 2 +- tests/contrib/pylibmc/test.py | 5 +- tests/contrib/pymemcache/test_client.py | 5 +- .../pymemcache/test_client_defaults.py | 5 +- tests/contrib/pymemcache/test_client_mixin.py | 5 +- tests/contrib/pymongo/test.py | 5 +- tests/contrib/pymysql/test_pymysql.py | 2 +- tests/contrib/pynamodb/test_pynamodb.py | 2 +- tests/contrib/pyodbc/test_pyodbc.py | 2 +- .../pyramid/pserve_app/app/__init__.py | 2 +- tests/contrib/pytest/test_pytest.py | 2 +- tests/contrib/redis/test_redis.py | 2 +- tests/contrib/redis/test_redis_asyncio.py | 2 +- tests/contrib/redis/test_redis_cluster.py | 2 +- .../redis/test_redis_cluster_asyncio.py | 16 +- tests/contrib/rediscluster/test.py | 2 +- tests/contrib/rq/test_rq.py | 2 +- tests/contrib/shared_tests.py | 2 +- tests/contrib/shared_tests_async.py | 2 +- tests/contrib/snowflake/test_snowflake.py | 2 +- tests/contrib/sqlalchemy/test_patch.py | 2 +- tests/contrib/sqlite3/test_sqlite3.py | 2 +- tests/contrib/starlette/test_starlette.py | 2 +- tests/contrib/subprocess/test_subprocess.py | 2 +- tests/contrib/tornado/test_config.py | 2 +- tests/contrib/urllib3/test_urllib3.py | 2 +- tests/contrib/vertexai/conftest.py | 2 +- tests/contrib/vertica/test_vertica.py | 2 +- tests/contrib/yaaredis/test_yaaredis.py | 2 +- tests/telemetry/test_telemetry.py | 2 +- tests/tracer/runtime/test_tag_collectors.py | 2 +- tests/tracer/test_filters.py | 4 +- tests/tracer/test_instance_config.py | 2 +- tests/tracer/test_pin.py | 2 +- tests/tracer/test_trace_utils.py | 2 +- tests/webclient.py | 2 +- 234 files changed, 605 insertions(+), 546 deletions(-) create mode 100644 ddtrace/_trace/filters.py create mode 100644 ddtrace/_trace/pin.py create mode 100644 releasenotes/notes/move-pin-and-filters-to-trace-package-2f47fa2d2592b413.yaml diff --git a/benchmarks/bm/utils.py b/benchmarks/bm/utils.py index ba6461336b5..dd7b4991c57 100644 --- a/benchmarks/bm/utils.py +++ b/benchmarks/bm/utils.py @@ -8,8 +8,8 @@ from ddtrace import __version__ as ddtrace_version from ddtrace._trace.span import Span -from ddtrace.filters import TraceFilter from ddtrace.internal import telemetry +from ddtrace.trace import TraceFilter _Span = Span diff --git a/ddtrace/__init__.py b/ddtrace/__init__.py index 1f2049cd0a5..835291fadb7 100644 --- a/ddtrace/__init__.py +++ b/ddtrace/__init__.py @@ -26,7 +26,7 @@ from ._monkey import patch_all # noqa: E402 from .internal.compat import PYTHON_VERSION_INFO # noqa: E402 from .internal.utils.deprecations import DDTraceDeprecationWarning # noqa: E402 -from .pin import Pin # noqa: E402 +from ddtrace._trace.pin import Pin # noqa: E402 from ddtrace._trace.span import Span # noqa: E402 from ddtrace._trace.tracer import Tracer # noqa: E402 from ddtrace.vendor import debtcollector @@ -67,6 +67,7 @@ _DEPRECATED_MODULE_ATTRIBUTES = [ "Span", "Tracer", + "Pin", ] diff --git a/ddtrace/_trace/filters.py b/ddtrace/_trace/filters.py new file mode 100644 index 00000000000..a2e6884f05c --- /dev/null +++ b/ddtrace/_trace/filters.py @@ -0,0 +1,72 @@ +import abc +import re +from typing import TYPE_CHECKING # noqa:F401 +from typing import List # noqa:F401 +from typing import Optional # noqa:F401 +from typing import Union # noqa:F401 + +from ddtrace._trace.processor import TraceProcessor +from ddtrace.ext import http + + +if TYPE_CHECKING: # pragma: no cover + from ddtrace._trace.span import Span # noqa:F401 + + +class TraceFilter(TraceProcessor): + @abc.abstractmethod + def process_trace(self, trace): + # type: (List[Span]) -> Optional[List[Span]] + """Processes a trace. + + None can be returned to prevent the trace from being exported. + """ + pass + + +class FilterRequestsOnUrl(TraceFilter): + r"""Filter out traces from incoming http requests based on the request's url. + + This class takes as argument a list of regular expression patterns + representing the urls to be excluded from tracing. A trace will be excluded + if its root span contains a ``http.url`` tag and if this tag matches any of + the provided regular expression using the standard python regexp match + semantic (https://docs.python.org/3/library/re.html#re.match). + + :param list regexps: a list of regular expressions (or a single string) defining + the urls that should be filtered out. + + Examples: + To filter out http calls to domain api.example.com:: + + FilterRequestsOnUrl(r'http://api\\.example\\.com') + + To filter out http calls to all first level subdomains from example.com:: + + FilterRequestOnUrl(r'http://.*+\\.example\\.com') + + To filter out calls to both http://test.example.com and http://example.com/healthcheck:: + + FilterRequestOnUrl([r'http://test\\.example\\.com', r'http://example\\.com/healthcheck']) + """ + + def __init__(self, regexps: Union[str, List[str]]): + if isinstance(regexps, str): + regexps = [regexps] + self._regexps = [re.compile(regexp) for regexp in regexps] + + def process_trace(self, trace): + # type: (List[Span]) -> Optional[List[Span]] + """ + When the filter is registered in the tracer, process_trace is called by + on each trace before it is sent to the agent, the returned value will + be fed to the next filter in the list. If process_trace returns None, + the whole trace is discarded. + """ + for span in trace: + url = span.get_tag(http.URL) + if span.parent_id is None and url is not None: + for regexp in self._regexps: + if regexp.match(url): + return None + return trace diff --git a/ddtrace/_trace/pin.py b/ddtrace/_trace/pin.py new file mode 100644 index 00000000000..d12303a57ea --- /dev/null +++ b/ddtrace/_trace/pin.py @@ -0,0 +1,209 @@ +from typing import TYPE_CHECKING # noqa:F401 +from typing import Any # noqa:F401 +from typing import Dict # noqa:F401 +from typing import Optional # noqa:F401 + +import wrapt + +import ddtrace + +from ..internal.logger import get_logger + + +log = get_logger(__name__) + + +# To set attributes on wrapt proxy objects use this prefix: +# http://wrapt.readthedocs.io/en/latest/wrappers.html +_DD_PIN_NAME = "_datadog_pin" +_DD_PIN_PROXY_NAME = "_self_" + _DD_PIN_NAME + + +class Pin(object): + """Pin (a.k.a Patch INfo) is a small class which is used to + set tracing metadata on a particular traced connection. + This is useful if you wanted to, say, trace two different + database clusters. + + >>> conn = sqlite.connect('/tmp/user.db') + >>> # Override a pin for a specific connection + >>> pin = Pin.override(conn, service='user-db') + >>> conn = sqlite.connect('/tmp/image.db') + """ + + __slots__ = ["tags", "tracer", "_target", "_config", "_initialized"] + + 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 + tracer = tracer or ddtrace.tracer + self.tags = tags + self.tracer = tracer + self._target = None # type: Optional[int] + # keep the configuration attribute internal because the + # public API to access it is not the Pin class + self._config = _config or {} # type: Dict[str, Any] + # [Backward compatibility]: service argument updates the `Pin` config + self._config["service_name"] = service + self._initialized = True + + @property + def service(self): + # type: () -> str + """Backward compatibility: accessing to `pin.service` returns the underlying + configuration value. + """ + return self._config["service_name"] + + def __setattr__(self, name, value): + if getattr(self, "_initialized", False) and name != "_target": + raise AttributeError("can't mutate a pin, use override() or clone() instead") + super(Pin, self).__setattr__(name, value) + + def __repr__(self): + return "Pin(service=%s, tags=%s, tracer=%s)" % (self.service, self.tags, self.tracer) + + @staticmethod + def _find(*objs): + # type: (Any) -> Optional[Pin] + """ + Return the first :class:`ddtrace.trace.Pin` found on any of the provided objects or `None` if none were found + + + >>> pin = Pin._find(wrapper, instance, conn) + + :param objs: The objects to search for a :class:`ddtrace.trace.Pin` on + :type objs: List of objects + :rtype: :class:`ddtrace.trace.Pin`, None + :returns: The first found :class:`ddtrace.trace.Pin` or `None` is none was found + """ + for obj in objs: + pin = Pin.get_from(obj) + if pin: + return pin + return None + + @staticmethod + def get_from(obj): + # type: (Any) -> Optional[Pin] + """Return the pin associated with the given object. If a pin is attached to + `obj` but the instance is not the owner of the pin, a new pin is cloned and + attached. This ensures that a pin inherited from a class is a copy for the new + instance, avoiding that a specific instance overrides other pins values. + + >>> pin = Pin.get_from(conn) + + :param obj: The object to look for a :class:`ddtrace.trace.Pin` on + :type obj: object + :rtype: :class:`ddtrace.trace.Pin`, None + :returns: :class:`ddtrace.trace.Pin` associated with the object or None + """ + if hasattr(obj, "__getddpin__"): + return obj.__getddpin__() + + pin_name = _DD_PIN_PROXY_NAME if isinstance(obj, wrapt.ObjectProxy) else _DD_PIN_NAME + pin = getattr(obj, pin_name, None) + # detect if the PIN has been inherited from a class + if pin is not None and pin._target != id(obj): + pin = pin.clone() + pin.onto(obj) + return pin + + @classmethod + def override( + cls, + 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. + + That's the recommended way to customize an already instrumented client, without + losing existing attributes. + + >>> conn = sqlite.connect('/tmp/user.db') + >>> # Override a pin for a specific connection + >>> Pin.override(conn, service='user-db') + """ + if not obj: + return + + pin = cls.get_from(obj) + if pin is None: + Pin(service=service, tags=tags, tracer=tracer).onto(obj) + else: + pin.clone(service=service, tags=tags, tracer=tracer).onto(obj) + + def enabled(self): + # type: () -> bool + """Return true if this pin's tracer is enabled.""" + # inline to avoid circular imports + from ddtrace.settings.asm import config as asm_config + + return bool(self.tracer) and (self.tracer.enabled or asm_config._apm_opt_out) + + def onto(self, obj, send=True): + # type: (Any, bool) -> None + """Patch this pin onto the given object. If send is true, it will also + queue the metadata to be sent to the server. + """ + # Actually patch it on the object. + try: + if hasattr(obj, "__setddpin__"): + return obj.__setddpin__(self) + + pin_name = _DD_PIN_PROXY_NAME if isinstance(obj, wrapt.ObjectProxy) else _DD_PIN_NAME + + # set the target reference; any get_from, clones and retarget the new PIN + self._target = id(obj) + if self.service: + ddtrace.config._add_extra_service(self.service) + return setattr(obj, pin_name, self) + except AttributeError: + log.debug("can't pin onto object. skipping", exc_info=True) + + def remove_from(self, obj): + # type: (Any) -> None + # Remove pin from the object. + try: + pin_name = _DD_PIN_PROXY_NAME if isinstance(obj, wrapt.ObjectProxy) else _DD_PIN_NAME + + pin = Pin.get_from(obj) + if pin is not None: + delattr(obj, pin_name) + except AttributeError: + log.debug("can't remove pin from object. skipping", exc_info=True) + + 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() + + # 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: + # + # copy: 0.00654911994934082 + # deepcopy: 0.2787208557128906 + config = self._config.copy() + + return Pin( + service=service or self.service, + tags=tags, + tracer=tracer or self.tracer, # do not clone the Tracer + _config=config, + ) diff --git a/ddtrace/_trace/tracer.py b/ddtrace/_trace/tracer.py index 9752d82ff83..46c00b0c515 100644 --- a/ddtrace/_trace/tracer.py +++ b/ddtrace/_trace/tracer.py @@ -34,7 +34,6 @@ from ddtrace.constants import HOSTNAME_KEY from ddtrace.constants import PID from ddtrace.constants import VERSION_KEY -from ddtrace.filters import TraceFilter from ddtrace.internal import agent from ddtrace.internal import atexit from ddtrace.internal import compat @@ -69,6 +68,7 @@ from ddtrace.settings import Config from ddtrace.settings.asm import config as asm_config from ddtrace.settings.peer_service import _ps_config +from ddtrace.trace import TraceFilter from ddtrace.vendor.debtcollector import deprecate diff --git a/ddtrace/contrib/aiomysql/__init__.py b/ddtrace/contrib/aiomysql/__init__.py index 98f78d3f3ab..06cd9987d81 100644 --- a/ddtrace/contrib/aiomysql/__init__.py +++ b/ddtrace/contrib/aiomysql/__init__.py @@ -19,7 +19,7 @@ To configure the integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin import asyncio import aiomysql diff --git a/ddtrace/contrib/aiopg/__init__.py b/ddtrace/contrib/aiopg/__init__.py index 11a572d12ed..c4cd51fdaa2 100644 --- a/ddtrace/contrib/aiopg/__init__.py +++ b/ddtrace/contrib/aiopg/__init__.py @@ -1,7 +1,8 @@ """ Instrument aiopg to report a span for each executed Postgres queries:: - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin import aiopg # If not patched yet, you can patch aiopg specifically diff --git a/ddtrace/contrib/aioredis/__init__.py b/ddtrace/contrib/aioredis/__init__.py index 2bc3669a340..b390185d48d 100644 --- a/ddtrace/contrib/aioredis/__init__.py +++ b/ddtrace/contrib/aioredis/__init__.py @@ -64,7 +64,7 @@ ``Pin`` API:: import aioredis - from ddtrace import Pin + from ddtrace.trace import Pin myaioredis = aioredis.Aioredis() Pin.override(myaioredis, service="myaioredis") diff --git a/ddtrace/contrib/anthropic/__init__.py b/ddtrace/contrib/anthropic/__init__.py index c43ee4bb43c..f2d8ea8f353 100644 --- a/ddtrace/contrib/anthropic/__init__.py +++ b/ddtrace/contrib/anthropic/__init__.py @@ -76,7 +76,8 @@ ``Pin`` API:: import anthropic - from ddtrace import Pin, config + from ddtrace import config + from ddtrace.trace import Pin Pin.override(anthropic, service="my-anthropic-service") """ # noqa: E501 diff --git a/ddtrace/contrib/aredis/__init__.py b/ddtrace/contrib/aredis/__init__.py index 1af4c5db664..8448740104f 100644 --- a/ddtrace/contrib/aredis/__init__.py +++ b/ddtrace/contrib/aredis/__init__.py @@ -53,7 +53,7 @@ To configure particular aredis instances use the :class:`Pin ` API:: import aredis - from ddtrace import Pin + from ddtrace.trace import Pin client = aredis.StrictRedis(host="localhost", port=6379) diff --git a/ddtrace/contrib/asyncpg/__init__.py b/ddtrace/contrib/asyncpg/__init__.py index c8e56511469..029cfd97790 100644 --- a/ddtrace/contrib/asyncpg/__init__.py +++ b/ddtrace/contrib/asyncpg/__init__.py @@ -38,7 +38,7 @@ basis use the ``Pin`` API:: import asyncpg - from ddtrace import Pin + from ddtrace.trace import Pin conn = asyncpg.connect("postgres://localhost:5432") Pin.override(conn, service="custom-service") diff --git a/ddtrace/contrib/cassandra/__init__.py b/ddtrace/contrib/cassandra/__init__.py index 1d0b6ad0afd..bcce866ad27 100644 --- a/ddtrace/contrib/cassandra/__init__.py +++ b/ddtrace/contrib/cassandra/__init__.py @@ -3,7 +3,8 @@ ``import ddtrace.auto`` will automatically patch your Cluster instance to make it work. :: - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin from cassandra.cluster import Cluster # If not patched yet, you can patch cassandra specifically diff --git a/ddtrace/contrib/consul/__init__.py b/ddtrace/contrib/consul/__init__.py index a6317d0bce0..433c70c0e80 100644 --- a/ddtrace/contrib/consul/__init__.py +++ b/ddtrace/contrib/consul/__init__.py @@ -5,7 +5,8 @@ ``import ddtrace.auto`` will automatically patch your Consul client to make it work. :: - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin import consul # If not patched yet, you can patch consul specifically diff --git a/ddtrace/contrib/dbapi/__init__.py b/ddtrace/contrib/dbapi/__init__.py index 358b928eadd..0b772ac04ec 100644 --- a/ddtrace/contrib/dbapi/__init__.py +++ b/ddtrace/contrib/dbapi/__init__.py @@ -20,7 +20,7 @@ from ...ext import SpanTypes from ...ext import db from ...ext import sql -from ...pin import Pin +from ...trace import Pin from ..trace_utils import ext_service from ..trace_utils import iswrapped diff --git a/ddtrace/contrib/dbapi_async/__init__.py b/ddtrace/contrib/dbapi_async/__init__.py index 6528d2b348a..d0c43fc1c2b 100644 --- a/ddtrace/contrib/dbapi_async/__init__.py +++ b/ddtrace/contrib/dbapi_async/__init__.py @@ -13,7 +13,7 @@ from ...constants import SPAN_MEASURED_KEY from ...ext import SpanKind from ...ext import SpanTypes -from ...pin import Pin +from ...trace import Pin from ..dbapi import TracedConnection from ..dbapi import TracedCursor from ..trace_utils import ext_service diff --git a/ddtrace/contrib/google_generativeai/__init__.py b/ddtrace/contrib/google_generativeai/__init__.py index d63a1134ab2..5066fc4f9a2 100644 --- a/ddtrace/contrib/google_generativeai/__init__.py +++ b/ddtrace/contrib/google_generativeai/__init__.py @@ -73,7 +73,8 @@ ``Pin`` API:: import google.generativeai as genai - from ddtrace import Pin, config + from ddtrace import config + from ddtrace.trace import Pin Pin.override(genai, service="my-gemini-service") """ # noqa: E501 diff --git a/ddtrace/contrib/graphql/__init__.py b/ddtrace/contrib/graphql/__init__.py index 5394f243533..e7ad66745d4 100644 --- a/ddtrace/contrib/graphql/__init__.py +++ b/ddtrace/contrib/graphql/__init__.py @@ -39,7 +39,7 @@ To configure the graphql integration using the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin import graphql Pin.override(graphql, service="mygraphql") diff --git a/ddtrace/contrib/grpc/__init__.py b/ddtrace/contrib/grpc/__init__.py index ff5adb86aea..c746edb17cc 100644 --- a/ddtrace/contrib/grpc/__init__.py +++ b/ddtrace/contrib/grpc/__init__.py @@ -45,7 +45,8 @@ ``Pin`` API:: import grpc - from ddtrace import Pin, patch, Tracer + from ddtrace import patch + from ddtrace.trace import Pin, Tracer patch(grpc=True) custom_tracer = Tracer() @@ -61,7 +62,8 @@ import grpc from grpc.framework.foundation import logging_pool - from ddtrace import Pin, patch, Tracer + from ddtrace import patch + from ddtrace.trace import Pin, Tracer patch(grpc=True) custom_tracer = Tracer() diff --git a/ddtrace/contrib/httpx/__init__.py b/ddtrace/contrib/httpx/__init__.py index 118d0a738b5..28621de44f2 100644 --- a/ddtrace/contrib/httpx/__init__.py +++ b/ddtrace/contrib/httpx/__init__.py @@ -60,7 +60,7 @@ To configure particular ``httpx`` client instances use the :class:`Pin ` API:: import httpx - from ddtrace import Pin + from ddtrace.trace import Pin client = httpx.Client() # Override service name for this instance diff --git a/ddtrace/contrib/internal/aiobotocore/patch.py b/ddtrace/contrib/internal/aiobotocore/patch.py index c5dafcaaa41..7431bd5c592 100644 --- a/ddtrace/contrib/internal/aiobotocore/patch.py +++ b/ddtrace/contrib/internal/aiobotocore/patch.py @@ -21,7 +21,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import deep_getattr from ddtrace.internal.utils.version import parse_version -from ddtrace.pin import Pin +from ddtrace.trace import Pin aiobotocore_version_str = getattr(aiobotocore, "__version__", "") diff --git a/ddtrace/contrib/internal/aiohttp/patch.py b/ddtrace/contrib/internal/aiohttp/patch.py index 13b55ecb4fb..e0f0bc869e9 100644 --- a/ddtrace/contrib/internal/aiohttp/patch.py +++ b/ddtrace/contrib/internal/aiohttp/patch.py @@ -21,8 +21,8 @@ from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import asbool -from ddtrace.pin import Pin from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/aiohttp_jinja2/patch.py b/ddtrace/contrib/internal/aiohttp_jinja2/patch.py index 284352b54f0..84553899c39 100644 --- a/ddtrace/contrib/internal/aiohttp_jinja2/patch.py +++ b/ddtrace/contrib/internal/aiohttp_jinja2/patch.py @@ -1,6 +1,5 @@ import aiohttp_jinja2 -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.trace_utils import unwrap from ddtrace.contrib.trace_utils import with_traced_module @@ -8,6 +7,7 @@ from ddtrace.ext import SpanTypes from ddtrace.internal.constants import COMPONENT from ddtrace.internal.utils import get_argument_value +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/aiomysql/patch.py b/ddtrace/contrib/internal/aiomysql/patch.py index 7f090b4c71d..0053e4f8a5b 100644 --- a/ddtrace/contrib/internal/aiomysql/patch.py +++ b/ddtrace/contrib/internal/aiomysql/patch.py @@ -1,7 +1,6 @@ import aiomysql import wrapt -from ddtrace import Pin from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import SPAN_KIND @@ -18,6 +17,7 @@ from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.wrappers import unwrap from ddtrace.propagation._database_monitoring import _DBM_Propagator +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/aiopg/connection.py b/ddtrace/contrib/internal/aiopg/connection.py index b2522ae3888..1daf84b2987 100644 --- a/ddtrace/contrib/internal/aiopg/connection.py +++ b/ddtrace/contrib/internal/aiopg/connection.py @@ -15,7 +15,7 @@ from ddtrace.internal.schema import schematize_database_operation from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.version import parse_version -from ddtrace.pin import Pin +from ddtrace.trace import Pin AIOPG_VERSION = parse_version(__version__) diff --git a/ddtrace/contrib/internal/aioredis/patch.py b/ddtrace/contrib/internal/aioredis/patch.py index 7915f652641..dc6004b9caa 100644 --- a/ddtrace/contrib/internal/aioredis/patch.py +++ b/ddtrace/contrib/internal/aioredis/patch.py @@ -27,7 +27,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import stringify_cache_args from ddtrace.internal.utils.wrappers import unwrap as _u -from ddtrace.pin import Pin +from ddtrace.trace import Pin from ddtrace.vendor.packaging.version import parse as parse_version diff --git a/ddtrace/contrib/internal/algoliasearch/patch.py b/ddtrace/contrib/internal/algoliasearch/patch.py index 5217861409e..e3074225570 100644 --- a/ddtrace/contrib/internal/algoliasearch/patch.py +++ b/ddtrace/contrib/internal/algoliasearch/patch.py @@ -10,7 +10,7 @@ from ddtrace.internal.schema import schematize_cloud_api_operation from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.wrappers import unwrap as _u -from ddtrace.pin import Pin +from ddtrace.trace import Pin from ddtrace.vendor.packaging.version import parse as parse_version diff --git a/ddtrace/contrib/internal/anthropic/patch.py b/ddtrace/contrib/internal/anthropic/patch.py index e82c4421e78..24f72f2b511 100644 --- a/ddtrace/contrib/internal/anthropic/patch.py +++ b/ddtrace/contrib/internal/anthropic/patch.py @@ -18,7 +18,7 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.llmobs._integrations import AnthropicIntegration from ddtrace.llmobs._utils import _get_attr -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/aredis/patch.py b/ddtrace/contrib/internal/aredis/patch.py index c9ba000ea36..bd8c5b4c750 100644 --- a/ddtrace/contrib/internal/aredis/patch.py +++ b/ddtrace/contrib/internal/aredis/patch.py @@ -12,7 +12,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import stringify_cache_args from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/asgi/middleware.py b/ddtrace/contrib/internal/asgi/middleware.py index 98d352cf75f..2b3e23eb78b 100644 --- a/ddtrace/contrib/internal/asgi/middleware.py +++ b/ddtrace/contrib/internal/asgi/middleware.py @@ -150,7 +150,13 @@ async def __call__(self, scope, receive, send): if scope["type"] == "http": operation_name = schematize_url_operation(operation_name, direction=SpanDirection.INBOUND, protocol="http") - pin = ddtrace.pin.Pin(service="asgi", tracer=self.tracer) + # 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) + with core.context_with_data( "asgi.__call__", remote_addr=scope.get("REMOTE_ADDR"), diff --git a/ddtrace/contrib/internal/asyncio/patch.py b/ddtrace/contrib/internal/asyncio/patch.py index 83f1918e9eb..ed64ca1bf5d 100644 --- a/ddtrace/contrib/internal/asyncio/patch.py +++ b/ddtrace/contrib/internal/asyncio/patch.py @@ -1,10 +1,10 @@ import asyncio -from ddtrace import Pin from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils import set_argument_value from ddtrace.internal.wrapping import unwrap from ddtrace.internal.wrapping import wrap +from ddtrace.trace import Pin def get_version(): diff --git a/ddtrace/contrib/internal/asyncpg/patch.py b/ddtrace/contrib/internal/asyncpg/patch.py index 7b2b269d5f2..ac1347a7de6 100644 --- a/ddtrace/contrib/internal/asyncpg/patch.py +++ b/ddtrace/contrib/internal/asyncpg/patch.py @@ -2,7 +2,7 @@ from types import ModuleType import asyncpg -from ddtrace import Pin +from ddtrace.trace import Pin from ddtrace import config from ddtrace.internal import core from ddtrace.internal.constants import COMPONENT diff --git a/ddtrace/contrib/internal/avro/patch.py b/ddtrace/contrib/internal/avro/patch.py index 6e66fbe20b0..3ef2adbcb0c 100644 --- a/ddtrace/contrib/internal/avro/patch.py +++ b/ddtrace/contrib/internal/avro/patch.py @@ -3,7 +3,7 @@ from ddtrace import config from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin from .schema_iterator import SchemaExtractor diff --git a/ddtrace/contrib/internal/azure_functions/patch.py b/ddtrace/contrib/internal/azure_functions/patch.py index 15089a2e733..1c0c658a9eb 100644 --- a/ddtrace/contrib/internal/azure_functions/patch.py +++ b/ddtrace/contrib/internal/azure_functions/patch.py @@ -8,7 +8,7 @@ from ddtrace.internal import core from ddtrace.internal.schema import schematize_cloud_faas_operation from ddtrace.internal.schema import schematize_service_name -from ddtrace.pin import Pin +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/boto/patch.py b/ddtrace/contrib/internal/boto/patch.py index 8551056dfb3..e7418aba878 100644 --- a/ddtrace/contrib/internal/boto/patch.py +++ b/ddtrace/contrib/internal/boto/patch.py @@ -19,7 +19,7 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin # Original boto client class diff --git a/ddtrace/contrib/internal/botocore/patch.py b/ddtrace/contrib/internal/botocore/patch.py index febad29f982..07c0bd403e4 100644 --- a/ddtrace/contrib/internal/botocore/patch.py +++ b/ddtrace/contrib/internal/botocore/patch.py @@ -33,8 +33,8 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import deep_getattr from ddtrace.llmobs._integrations import BedrockIntegration -from ddtrace.pin import Pin from ddtrace.settings.config import Config +from ddtrace.trace import Pin from .services.bedrock import patched_bedrock_api_call from .services.kinesis import patched_kinesis_api_call diff --git a/ddtrace/contrib/internal/cassandra/session.py b/ddtrace/contrib/internal/cassandra/session.py index 33d307c13c7..7f02d8c0af6 100644 --- a/ddtrace/contrib/internal/cassandra/session.py +++ b/ddtrace/contrib/internal/cassandra/session.py @@ -39,7 +39,7 @@ from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import deep_getattr -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/celery/app.py b/ddtrace/contrib/internal/celery/app.py index 42eed2cb468..54ad5834769 100644 --- a/ddtrace/contrib/internal/celery/app.py +++ b/ddtrace/contrib/internal/celery/app.py @@ -3,8 +3,8 @@ import celery from celery import signals -from ddtrace import Pin from ddtrace import config +from ddtrace._trace.pin import _DD_PIN_NAME from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import SPAN_KIND from ddtrace.constants import SPAN_MEASURED_KEY @@ -19,7 +19,7 @@ from ddtrace.ext import SpanTypes from ddtrace.internal import core from ddtrace.internal.logger import get_logger -from ddtrace.pin import _DD_PIN_NAME +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/celery/signals.py b/ddtrace/contrib/internal/celery/signals.py index 8f27fcc53b0..ea9d8c15863 100644 --- a/ddtrace/contrib/internal/celery/signals.py +++ b/ddtrace/contrib/internal/celery/signals.py @@ -3,7 +3,6 @@ from celery import current_app from celery import registry -from ddtrace import Pin from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import SPAN_KIND @@ -24,6 +23,7 @@ from ddtrace.internal.constants import COMPONENT from ddtrace.internal.logger import get_logger from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/consul/patch.py b/ddtrace/contrib/internal/consul/patch.py index b4725e807ba..b24b138b632 100644 --- a/ddtrace/contrib/internal/consul/patch.py +++ b/ddtrace/contrib/internal/consul/patch.py @@ -15,7 +15,7 @@ from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.wrappers import unwrap as _u -from ddtrace.pin import Pin +from ddtrace.trace import Pin _KV_FUNCS = ["put", "get", "delete"] diff --git a/ddtrace/contrib/internal/django/patch.py b/ddtrace/contrib/internal/django/patch.py index d4b14487e39..98a6163a6e5 100644 --- a/ddtrace/contrib/internal/django/patch.py +++ b/ddtrace/contrib/internal/django/patch.py @@ -17,7 +17,6 @@ import wrapt from wrapt.importer import when_imported -from ddtrace import Pin from ddtrace import config from ddtrace.appsec._utils import _UserInfoRetriever from ddtrace.constants import SPAN_KIND @@ -49,6 +48,7 @@ from ddtrace.propagation._database_monitoring import _DBM_Propagator from ddtrace.settings.asm import config as asm_config from ddtrace.settings.integration import IntegrationConfig +from ddtrace.trace import Pin from ddtrace.vendor.packaging.version import parse as parse_version diff --git a/ddtrace/contrib/internal/dogpile_cache/lock.py b/ddtrace/contrib/internal/dogpile_cache/lock.py index c592562f94f..76cdc2eb839 100644 --- a/ddtrace/contrib/internal/dogpile_cache/lock.py +++ b/ddtrace/contrib/internal/dogpile_cache/lock.py @@ -1,7 +1,7 @@ import dogpile from ddtrace.internal.utils.formats import asbool -from ddtrace.pin import Pin +from ddtrace.trace import Pin def _wrap_lock_ctor(func, instance, args, kwargs): diff --git a/ddtrace/contrib/internal/dogpile_cache/patch.py b/ddtrace/contrib/internal/dogpile_cache/patch.py index f4f41284a29..f78ea5cb23f 100644 --- a/ddtrace/contrib/internal/dogpile_cache/patch.py +++ b/ddtrace/contrib/internal/dogpile_cache/patch.py @@ -7,10 +7,10 @@ from wrapt import wrap_function_wrapper as _w +from ddtrace._trace.pin import _DD_PIN_NAME +from ddtrace._trace.pin import _DD_PIN_PROXY_NAME from ddtrace.internal.schema import schematize_service_name -from ddtrace.pin import _DD_PIN_NAME -from ddtrace.pin import _DD_PIN_PROXY_NAME -from ddtrace.pin import Pin +from ddtrace.trace import Pin from .lock import _wrap_lock_ctor from .region import _wrap_get_create diff --git a/ddtrace/contrib/internal/dogpile_cache/region.py b/ddtrace/contrib/internal/dogpile_cache/region.py index 04b70402e3d..0c89d2d84d9 100644 --- a/ddtrace/contrib/internal/dogpile_cache/region.py +++ b/ddtrace/contrib/internal/dogpile_cache/region.py @@ -7,7 +7,7 @@ from ddtrace.internal.schema import schematize_cache_operation from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value -from ddtrace.pin import Pin +from ddtrace.trace import Pin def _wrap_get_create(func, instance, args, kwargs): diff --git a/ddtrace/contrib/internal/elasticsearch/patch.py b/ddtrace/contrib/internal/elasticsearch/patch.py index 455d0678d02..7c408db55a5 100644 --- a/ddtrace/contrib/internal/elasticsearch/patch.py +++ b/ddtrace/contrib/internal/elasticsearch/patch.py @@ -21,7 +21,7 @@ from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.wrappers import unwrap as _u -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/fastapi/patch.py b/ddtrace/contrib/internal/fastapi/patch.py index b431f3c83f8..485c0424a5f 100644 --- a/ddtrace/contrib/internal/fastapi/patch.py +++ b/ddtrace/contrib/internal/fastapi/patch.py @@ -5,7 +5,6 @@ from wrapt import ObjectProxy from wrapt import wrap_function_wrapper as _w -from ddtrace import Pin from ddtrace import config from ddtrace.appsec._iast._utils import _is_iast_enabled from ddtrace.contrib.internal.asgi.middleware import TraceMiddleware @@ -15,6 +14,7 @@ from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.wrappers import unwrap as _u +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/flask/patch.py b/ddtrace/contrib/internal/flask/patch.py index 429a9d05667..010df5218c5 100644 --- a/ddtrace/contrib/internal/flask/patch.py +++ b/ddtrace/contrib/internal/flask/patch.py @@ -29,7 +29,6 @@ from wrapt import wrap_function_wrapper as _w -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.wsgi.wsgi import _DDWSGIMiddlewareBase from ddtrace.contrib.trace_utils import unwrap as _u @@ -37,6 +36,7 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.importlib import func_name from ddtrace.internal.utils.version import parse_version +from ddtrace.trace import Pin from .wrappers import _wrap_call_with_pin_check from .wrappers import get_current_app diff --git a/ddtrace/contrib/internal/flask/wrappers.py b/ddtrace/contrib/internal/flask/wrappers.py index 3aca2a1466a..d65697224ba 100644 --- a/ddtrace/contrib/internal/flask/wrappers.py +++ b/ddtrace/contrib/internal/flask/wrappers.py @@ -7,7 +7,7 @@ from ddtrace.internal.constants import COMPONENT from ddtrace.internal.logger import get_logger from ddtrace.internal.utils.importlib import func_name -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/google_generativeai/patch.py b/ddtrace/contrib/internal/google_generativeai/patch.py index 29bc18dc756..3564f9ec1ec 100644 --- a/ddtrace/contrib/internal/google_generativeai/patch.py +++ b/ddtrace/contrib/internal/google_generativeai/patch.py @@ -14,7 +14,7 @@ from ddtrace.contrib.trace_utils import wrap from ddtrace.llmobs._integrations import GeminiIntegration from ddtrace.llmobs._integrations.utils import extract_model_name_google -from ddtrace.pin import Pin +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/graphql/patch.py b/ddtrace/contrib/internal/graphql/patch.py index b54df97e520..18916f4222a 100644 --- a/ddtrace/contrib/internal/graphql/patch.py +++ b/ddtrace/contrib/internal/graphql/patch.py @@ -39,7 +39,7 @@ from ddtrace.internal.utils.version import parse_version from ddtrace.internal.wrapping import unwrap from ddtrace.internal.wrapping import wrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin _graphql_version_str = graphql.__version__ diff --git a/ddtrace/contrib/internal/grpc/aio_client_interceptor.py b/ddtrace/contrib/internal/grpc/aio_client_interceptor.py index bf6f156de7e..5c03d1b8527 100644 --- a/ddtrace/contrib/internal/grpc/aio_client_interceptor.py +++ b/ddtrace/contrib/internal/grpc/aio_client_interceptor.py @@ -11,7 +11,6 @@ from grpc.aio._typing import ResponseIterableType from grpc.aio._typing import ResponseType -from ddtrace import Pin from ddtrace import Span from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY @@ -30,6 +29,7 @@ from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/grpc/aio_server_interceptor.py b/ddtrace/contrib/internal/grpc/aio_server_interceptor.py index 2361e3c3be9..d5ec9ed32ab 100644 --- a/ddtrace/contrib/internal/grpc/aio_server_interceptor.py +++ b/ddtrace/contrib/internal/grpc/aio_server_interceptor.py @@ -13,7 +13,6 @@ from grpc.aio._typing import ResponseType import wrapt -from ddtrace import Pin # noqa:F401 from ddtrace import Span # noqa:F401 from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY @@ -30,6 +29,7 @@ from ddtrace.internal.constants import COMPONENT from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection +from ddtrace.trace import Pin # noqa:F401 Continuation = Callable[[grpc.HandlerCallDetails], Awaitable[grpc.RpcMethodHandler]] diff --git a/ddtrace/contrib/internal/grpc/patch.py b/ddtrace/contrib/internal/grpc/patch.py index 9c41c5cc342..122893b030f 100644 --- a/ddtrace/contrib/internal/grpc/patch.py +++ b/ddtrace/contrib/internal/grpc/patch.py @@ -1,7 +1,6 @@ import grpc from wrapt import wrap_function_wrapper as _w -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.grpc import constants from ddtrace.contrib.internal.grpc import utils @@ -13,6 +12,7 @@ from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils import set_argument_value +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/httplib/patch.py b/ddtrace/contrib/internal/httplib/patch.py index e42241a2ca2..3e354aeedea 100644 --- a/ddtrace/contrib/internal/httplib/patch.py +++ b/ddtrace/contrib/internal/httplib/patch.py @@ -20,9 +20,9 @@ from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils.formats import asbool -from ddtrace.pin import Pin from ddtrace.propagation.http import HTTPPropagator from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin span_name = "http.client.request" diff --git a/ddtrace/contrib/internal/httpx/patch.py b/ddtrace/contrib/internal/httpx/patch.py index e6d1893880f..8a9e4eebc3a 100644 --- a/ddtrace/contrib/internal/httpx/patch.py +++ b/ddtrace/contrib/internal/httpx/patch.py @@ -22,8 +22,8 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.version import parse_version from ddtrace.internal.utils.wrappers import unwrap as _u -from ddtrace.pin import Pin from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Pin HTTPX_VERSION = parse_version(httpx.__version__) diff --git a/ddtrace/contrib/internal/jinja2/patch.py b/ddtrace/contrib/internal/jinja2/patch.py index 83aad083747..cdf1254527d 100644 --- a/ddtrace/contrib/internal/jinja2/patch.py +++ b/ddtrace/contrib/internal/jinja2/patch.py @@ -10,7 +10,7 @@ from ddtrace.internal.constants import COMPONENT from ddtrace.internal.utils import ArgumentError from ddtrace.internal.utils import get_argument_value -from ddtrace.pin import Pin +from ddtrace.trace import Pin from .constants import DEFAULT_TEMPLATE_NAME diff --git a/ddtrace/contrib/internal/kafka/patch.py b/ddtrace/contrib/internal/kafka/patch.py index 339e2469914..6f69cda3239 100644 --- a/ddtrace/contrib/internal/kafka/patch.py +++ b/ddtrace/contrib/internal/kafka/patch.py @@ -24,8 +24,8 @@ from ddtrace.internal.utils import set_argument_value from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.version import parse_version -from ddtrace.pin import Pin from ddtrace.propagation.http import HTTPPropagator as Propagator +from ddtrace.trace import Pin _Producer = confluent_kafka.Producer diff --git a/ddtrace/contrib/internal/kombu/patch.py b/ddtrace/contrib/internal/kombu/patch.py index fd571fd445c..fa63e5c4f86 100644 --- a/ddtrace/contrib/internal/kombu/patch.py +++ b/ddtrace/contrib/internal/kombu/patch.py @@ -22,8 +22,8 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Pin from .constants import DEFAULT_SERVICE from .utils import HEADER_POS diff --git a/ddtrace/contrib/internal/langchain/patch.py b/ddtrace/contrib/internal/langchain/patch.py index b7513539da7..f9c58249cb2 100644 --- a/ddtrace/contrib/internal/langchain/patch.py +++ b/ddtrace/contrib/internal/langchain/patch.py @@ -62,7 +62,7 @@ from ddtrace.internal.utils.version import parse_version from ddtrace.llmobs._integrations import LangChainIntegration from ddtrace.llmobs._utils import safe_json -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/mako/patch.py b/ddtrace/contrib/internal/mako/patch.py index 7db3b2e47df..d39a51238a2 100644 --- a/ddtrace/contrib/internal/mako/patch.py +++ b/ddtrace/contrib/internal/mako/patch.py @@ -11,7 +11,7 @@ from ddtrace.internal.constants import COMPONENT from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.importlib import func_name -from ddtrace.pin import Pin +from ddtrace.trace import Pin from .constants import DEFAULT_TEMPLATE_NAME diff --git a/ddtrace/contrib/internal/mariadb/patch.py b/ddtrace/contrib/internal/mariadb/patch.py index b4ab267c5e3..1307403f6d4 100644 --- a/ddtrace/contrib/internal/mariadb/patch.py +++ b/ddtrace/contrib/internal/mariadb/patch.py @@ -3,7 +3,6 @@ import mariadb import wrapt -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.dbapi import TracedConnection from ddtrace.ext import db @@ -11,6 +10,7 @@ from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.wrappers import unwrap +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/molten/patch.py b/ddtrace/contrib/internal/molten/patch.py index fd6fa53b195..7c60d37d0d6 100644 --- a/ddtrace/contrib/internal/molten/patch.py +++ b/ddtrace/contrib/internal/molten/patch.py @@ -4,7 +4,6 @@ import wrapt from wrapt import wrap_function_wrapper as _w -from ddtrace import Pin from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import SPAN_KIND @@ -21,6 +20,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.importlib import func_name from ddtrace.internal.utils.version import parse_version +from ddtrace.trace import Pin from .wrappers import MOLTEN_ROUTE from .wrappers import WrapperComponent diff --git a/ddtrace/contrib/internal/molten/wrappers.py b/ddtrace/contrib/internal/molten/wrappers.py index 7446224fe45..0a3e325ca0b 100644 --- a/ddtrace/contrib/internal/molten/wrappers.py +++ b/ddtrace/contrib/internal/molten/wrappers.py @@ -1,7 +1,6 @@ import molten import wrapt -from ddtrace import Pin from ddtrace import config from ddtrace.constants import SPAN_KIND from ddtrace.contrib import trace_utils @@ -9,6 +8,7 @@ from ddtrace.ext import http from ddtrace.internal.constants import COMPONENT from ddtrace.internal.utils.importlib import func_name +from ddtrace.trace import Pin MOLTEN_ROUTE = "molten.route" diff --git a/ddtrace/contrib/internal/mysql/patch.py b/ddtrace/contrib/internal/mysql/patch.py index 2d5a8500cb3..d18d357d107 100644 --- a/ddtrace/contrib/internal/mysql/patch.py +++ b/ddtrace/contrib/internal/mysql/patch.py @@ -3,7 +3,6 @@ import mysql.connector import wrapt -from ddtrace import Pin from ddtrace import config from ddtrace.appsec._iast._metrics import _set_metric_iast_instrumented_sink from ddtrace.appsec._iast.constants import VULN_SQL_INJECTION @@ -16,6 +15,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.propagation._database_monitoring import _DBM_Propagator from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/mysqldb/patch.py b/ddtrace/contrib/internal/mysqldb/patch.py index 291d6cb865e..8b6aa7bb7f2 100644 --- a/ddtrace/contrib/internal/mysqldb/patch.py +++ b/ddtrace/contrib/internal/mysqldb/patch.py @@ -3,7 +3,6 @@ import MySQLdb from wrapt import wrap_function_wrapper as _w -from ddtrace import Pin from ddtrace import config from ddtrace.appsec._iast._metrics import _set_metric_iast_instrumented_sink from ddtrace.appsec._iast.constants import VULN_SQL_INJECTION @@ -23,6 +22,7 @@ from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation._database_monitoring import _DBM_Propagator from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/openai/patch.py b/ddtrace/contrib/internal/openai/patch.py index 4ad76a17084..d87b06b3aba 100644 --- a/ddtrace/contrib/internal/openai/patch.py +++ b/ddtrace/contrib/internal/openai/patch.py @@ -13,7 +13,7 @@ from ddtrace.internal.utils.version import parse_version from ddtrace.internal.wrapping import wrap from ddtrace.llmobs._integrations import OpenAIIntegration -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/protobuf/patch.py b/ddtrace/contrib/internal/protobuf/patch.py index 607c29eb1c0..8ecdd7aefa5 100644 --- a/ddtrace/contrib/internal/protobuf/patch.py +++ b/ddtrace/contrib/internal/protobuf/patch.py @@ -4,7 +4,7 @@ from ddtrace import config from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin from .schema_iterator import SchemaExtractor diff --git a/ddtrace/contrib/internal/psycopg/async_connection.py b/ddtrace/contrib/internal/psycopg/async_connection.py index 14ec854ffd1..72c8d70e7ec 100644 --- a/ddtrace/contrib/internal/psycopg/async_connection.py +++ b/ddtrace/contrib/internal/psycopg/async_connection.py @@ -1,4 +1,3 @@ -from ddtrace import Pin from ddtrace import config from ddtrace.constants import SPAN_KIND from ddtrace.constants import SPAN_MEASURED_KEY @@ -11,6 +10,7 @@ from ddtrace.ext import SpanTypes from ddtrace.ext import db from ddtrace.internal.constants import COMPONENT +from ddtrace.trace import Pin class Psycopg3TracedAsyncConnection(dbapi_async.TracedAsyncConnection): diff --git a/ddtrace/contrib/internal/psycopg/connection.py b/ddtrace/contrib/internal/psycopg/connection.py index c823e17dc61..a5e5353ad13 100644 --- a/ddtrace/contrib/internal/psycopg/connection.py +++ b/ddtrace/contrib/internal/psycopg/connection.py @@ -1,4 +1,3 @@ -from ddtrace import Pin from ddtrace import config from ddtrace.constants import SPAN_KIND from ddtrace.constants import SPAN_MEASURED_KEY @@ -15,6 +14,7 @@ from ddtrace.ext import net from ddtrace.ext import sql from ddtrace.internal.constants import COMPONENT +from ddtrace.trace import Pin class Psycopg3TracedConnection(dbapi.TracedConnection): diff --git a/ddtrace/contrib/internal/psycopg/patch.py b/ddtrace/contrib/internal/psycopg/patch.py index 7da5c1c73c7..9e24cee6696 100644 --- a/ddtrace/contrib/internal/psycopg/patch.py +++ b/ddtrace/contrib/internal/psycopg/patch.py @@ -3,9 +3,9 @@ import os from typing import List # noqa:F401 -from ddtrace import Pin from ddtrace import config from ddtrace.contrib import dbapi +from ddtrace.trace import Pin try: diff --git a/ddtrace/contrib/internal/pymemcache/client.py b/ddtrace/contrib/internal/pymemcache/client.py index 18a46a41053..37e14842a94 100644 --- a/ddtrace/contrib/internal/pymemcache/client.py +++ b/ddtrace/contrib/internal/pymemcache/client.py @@ -29,7 +29,7 @@ from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_cache_operation from ddtrace.internal.utils.formats import asbool -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/pymemcache/patch.py b/ddtrace/contrib/internal/pymemcache/patch.py index 07402680e9e..dd3687cd248 100644 --- a/ddtrace/contrib/internal/pymemcache/patch.py +++ b/ddtrace/contrib/internal/pymemcache/patch.py @@ -1,11 +1,11 @@ import pymemcache import pymemcache.client.hash +from ddtrace._trace.pin import _DD_PIN_NAME +from ddtrace._trace.pin import _DD_PIN_PROXY_NAME +from ddtrace._trace.pin import Pin from ddtrace.ext import memcached as memcachedx from ddtrace.internal.schema import schematize_service_name -from ddtrace.pin import _DD_PIN_NAME -from ddtrace.pin import _DD_PIN_PROXY_NAME -from ddtrace.pin import Pin from .client import WrappedClient from .client import WrappedHashClient diff --git a/ddtrace/contrib/internal/pymongo/client.py b/ddtrace/contrib/internal/pymongo/client.py index d5b2530d1f7..426d205f9da 100644 --- a/ddtrace/contrib/internal/pymongo/client.py +++ b/ddtrace/contrib/internal/pymongo/client.py @@ -10,7 +10,6 @@ # project import ddtrace -from ddtrace import Pin from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import SPAN_KIND @@ -26,6 +25,7 @@ from ddtrace.internal.schema import schematize_database_operation from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value +from ddtrace.trace import Pin from .parse import parse_msg from .parse import parse_query diff --git a/ddtrace/contrib/internal/pymongo/patch.py b/ddtrace/contrib/internal/pymongo/patch.py index 0c0927ffea1..200a4a902b8 100644 --- a/ddtrace/contrib/internal/pymongo/patch.py +++ b/ddtrace/contrib/internal/pymongo/patch.py @@ -2,7 +2,6 @@ import pymongo -from ddtrace import Pin from ddtrace import config from ddtrace.constants import SPAN_KIND from ddtrace.constants import SPAN_MEASURED_KEY @@ -15,6 +14,7 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.internal.wrapping import unwrap as _u from ddtrace.internal.wrapping import wrap as _w +from ddtrace.trace import Pin from ....internal.schema import schematize_service_name diff --git a/ddtrace/contrib/internal/pymysql/patch.py b/ddtrace/contrib/internal/pymysql/patch.py index 00fee4f5ad7..a9a16d50608 100644 --- a/ddtrace/contrib/internal/pymysql/patch.py +++ b/ddtrace/contrib/internal/pymysql/patch.py @@ -3,7 +3,6 @@ import pymysql import wrapt -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.dbapi import TracedConnection from ddtrace.contrib.trace_utils import _convert_to_string @@ -13,6 +12,7 @@ from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import asbool from ddtrace.propagation._database_monitoring import _DBM_Propagator +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/pynamodb/patch.py b/ddtrace/contrib/internal/pynamodb/patch.py index 15e1874ee77..be4ba00c893 100644 --- a/ddtrace/contrib/internal/pynamodb/patch.py +++ b/ddtrace/contrib/internal/pynamodb/patch.py @@ -20,7 +20,7 @@ from ddtrace.internal.utils import ArgumentError from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import deep_getattr -from ddtrace.pin import Pin +from ddtrace.trace import Pin # Pynamodb connection class diff --git a/ddtrace/contrib/internal/pyodbc/patch.py b/ddtrace/contrib/internal/pyodbc/patch.py index 40b561d2f53..180895a202e 100644 --- a/ddtrace/contrib/internal/pyodbc/patch.py +++ b/ddtrace/contrib/internal/pyodbc/patch.py @@ -2,7 +2,6 @@ import pyodbc -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.dbapi import TracedConnection from ddtrace.contrib.dbapi import TracedCursor @@ -11,6 +10,7 @@ from ddtrace.ext import db from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import asbool +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/redis/asyncio_patch.py b/ddtrace/contrib/internal/redis/asyncio_patch.py index 0115096ba0f..7c5bad354ab 100644 --- a/ddtrace/contrib/internal/redis/asyncio_patch.py +++ b/ddtrace/contrib/internal/redis/asyncio_patch.py @@ -4,7 +4,7 @@ from ddtrace._trace.utils_redis import _instrument_redis_execute_pipeline from ddtrace.contrib.redis_utils import _run_redis_command_async from ddtrace.internal.utils.formats import stringify_cache_args -from ddtrace.pin import Pin +from ddtrace.trace import Pin async def instrumented_async_execute_command(func, instance, args, kwargs): diff --git a/ddtrace/contrib/internal/redis/patch.py b/ddtrace/contrib/internal/redis/patch.py index 18b23fd68fa..33520e5894d 100644 --- a/ddtrace/contrib/internal/redis/patch.py +++ b/ddtrace/contrib/internal/redis/patch.py @@ -14,7 +14,7 @@ from ddtrace.internal.utils.formats import CMD_MAX_LEN from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import stringify_cache_args -from ddtrace.pin import Pin +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/rediscluster/patch.py b/ddtrace/contrib/internal/rediscluster/patch.py index a415096ef10..c550df7e9ea 100644 --- a/ddtrace/contrib/internal/rediscluster/patch.py +++ b/ddtrace/contrib/internal/rediscluster/patch.py @@ -23,7 +23,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import stringify_cache_args from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin # DEV: In `2.0.0` `__version__` is a string and `VERSION` is a tuple, diff --git a/ddtrace/contrib/internal/requests/patch.py b/ddtrace/contrib/internal/requests/patch.py index a5867662d78..d4ec1f5182d 100644 --- a/ddtrace/contrib/internal/requests/patch.py +++ b/ddtrace/contrib/internal/requests/patch.py @@ -10,8 +10,8 @@ from ddtrace.contrib.trace_utils import unwrap as _u from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import asbool -from ddtrace.pin import Pin from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin from .connection import _wrap_send diff --git a/ddtrace/contrib/internal/requests/session.py b/ddtrace/contrib/internal/requests/session.py index 9551c70226c..783dda4ff7a 100644 --- a/ddtrace/contrib/internal/requests/session.py +++ b/ddtrace/contrib/internal/requests/session.py @@ -1,8 +1,8 @@ import requests from wrapt import wrap_function_wrapper as _w -from ddtrace import Pin from ddtrace import config +from ddtrace.trace import Pin from .connection import _wrap_send diff --git a/ddtrace/contrib/internal/rq/patch.py b/ddtrace/contrib/internal/rq/patch.py index a6b54b28f27..c1f39431f57 100644 --- a/ddtrace/contrib/internal/rq/patch.py +++ b/ddtrace/contrib/internal/rq/patch.py @@ -1,6 +1,5 @@ import os -from ddtrace import Pin from ddtrace import config from ddtrace.constants import SPAN_KIND from ddtrace.internal import core @@ -10,6 +9,7 @@ from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import asbool +from ddtrace.trace import Pin from ....ext import SpanKind from ....ext import SpanTypes diff --git a/ddtrace/contrib/internal/sanic/patch.py b/ddtrace/contrib/internal/sanic/patch.py index 826267cd341..5d105cf2f32 100644 --- a/ddtrace/contrib/internal/sanic/patch.py +++ b/ddtrace/contrib/internal/sanic/patch.py @@ -17,7 +17,7 @@ from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils.wrappers import unwrap as _u -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/snowflake/patch.py b/ddtrace/contrib/internal/snowflake/patch.py index 87896aab109..d28844ea992 100644 --- a/ddtrace/contrib/internal/snowflake/patch.py +++ b/ddtrace/contrib/internal/snowflake/patch.py @@ -2,7 +2,6 @@ import wrapt -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.dbapi import TracedConnection from ddtrace.contrib.dbapi import TracedCursor @@ -11,6 +10,7 @@ from ddtrace.ext import net from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import asbool +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/sqlalchemy/engine.py b/ddtrace/contrib/internal/sqlalchemy/engine.py index 05bdb7ca0f1..57b6db4e9fc 100644 --- a/ddtrace/contrib/internal/sqlalchemy/engine.py +++ b/ddtrace/contrib/internal/sqlalchemy/engine.py @@ -29,7 +29,7 @@ from ddtrace.internal.constants import COMPONENT from ddtrace.internal.schema import schematize_database_operation from ddtrace.internal.schema import schematize_service_name -from ddtrace.pin import Pin +from ddtrace.trace import Pin def trace_engine(engine, tracer=None, service=None): diff --git a/ddtrace/contrib/internal/sqlite3/patch.py b/ddtrace/contrib/internal/sqlite3/patch.py index dedf92c6297..f47906146bc 100644 --- a/ddtrace/contrib/internal/sqlite3/patch.py +++ b/ddtrace/contrib/internal/sqlite3/patch.py @@ -15,8 +15,8 @@ from ddtrace.internal.schema import schematize_database_operation from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import asbool -from ddtrace.pin import Pin from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin # Original connect method diff --git a/ddtrace/contrib/internal/starlette/patch.py b/ddtrace/contrib/internal/starlette/patch.py index b872a77ecd7..064722b67f1 100644 --- a/ddtrace/contrib/internal/starlette/patch.py +++ b/ddtrace/contrib/internal/starlette/patch.py @@ -12,7 +12,6 @@ from wrapt import ObjectProxy from wrapt import wrap_function_wrapper as _w -from ddtrace import Pin from ddtrace import config from ddtrace._trace.span import Span # noqa:F401 from ddtrace.appsec._iast import _is_iast_enabled @@ -28,6 +27,7 @@ from ddtrace.internal.utils import get_blocked from ddtrace.internal.utils import set_argument_value from ddtrace.internal.utils.wrappers import unwrap as _u +from ddtrace.trace import Pin from ddtrace.vendor.packaging.version import parse as parse_version diff --git a/ddtrace/contrib/internal/subprocess/patch.py b/ddtrace/contrib/internal/subprocess/patch.py index 76530c195df..80d05b107bb 100644 --- a/ddtrace/contrib/internal/subprocess/patch.py +++ b/ddtrace/contrib/internal/subprocess/patch.py @@ -14,7 +14,6 @@ from typing import Union # noqa:F401 from typing import cast # noqa:F401 -from ddtrace import Pin from ddtrace import config from ddtrace.contrib import trace_utils from ddtrace.contrib.internal.subprocess.constants import COMMANDS @@ -23,6 +22,7 @@ from ddtrace.internal.compat import shjoin from ddtrace.internal.logger import get_logger from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/tornado/template.py b/ddtrace/contrib/internal/tornado/template.py index 5d94d2a358c..a47ee53b9e4 100644 --- a/ddtrace/contrib/internal/tornado/template.py +++ b/ddtrace/contrib/internal/tornado/template.py @@ -1,9 +1,9 @@ from tornado import template -from ddtrace import Pin from ddtrace import config from ddtrace.ext import SpanTypes from ddtrace.internal.constants import COMPONENT +from ddtrace.trace import Pin def generate(func, renderer, args, kwargs): diff --git a/ddtrace/contrib/internal/urllib3/patch.py b/ddtrace/contrib/internal/urllib3/patch.py index 624dd9efbc6..6c10526c125 100644 --- a/ddtrace/contrib/internal/urllib3/patch.py +++ b/ddtrace/contrib/internal/urllib3/patch.py @@ -22,9 +22,9 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.wrappers import unwrap as _u -from ddtrace.pin import Pin from ddtrace.propagation.http import HTTPPropagator from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin # Ports which, if set, will not be used in hostnames/service names diff --git a/ddtrace/contrib/internal/vertexai/patch.py b/ddtrace/contrib/internal/vertexai/patch.py index 2dbce060234..bc6e46903c3 100644 --- a/ddtrace/contrib/internal/vertexai/patch.py +++ b/ddtrace/contrib/internal/vertexai/patch.py @@ -13,7 +13,7 @@ from ddtrace.contrib.trace_utils import wrap from ddtrace.llmobs._integrations import VertexAIIntegration from ddtrace.llmobs._integrations.utils import extract_model_name_google -from ddtrace.pin import Pin +from ddtrace.trace import Pin config._add( diff --git a/ddtrace/contrib/internal/vertica/patch.py b/ddtrace/contrib/internal/vertica/patch.py index 8e820248f14..b365ade8c05 100644 --- a/ddtrace/contrib/internal/vertica/patch.py +++ b/ddtrace/contrib/internal/vertica/patch.py @@ -18,7 +18,7 @@ from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/wsgi/wsgi.py b/ddtrace/contrib/internal/wsgi/wsgi.py index da86aa8f21e..44e1646f5f9 100644 --- a/ddtrace/contrib/internal/wsgi/wsgi.py +++ b/ddtrace/contrib/internal/wsgi/wsgi.py @@ -11,10 +11,10 @@ from typing import Mapping # noqa:F401 from typing import Optional # noqa:F401 - from ddtrace import Pin # noqa:F401 from ddtrace import Span # noqa:F401 from ddtrace import Tracer # noqa:F401 from ddtrace.settings import Config # noqa:F401 + from ddtrace.trace import Pin # noqa:F401 from urllib.parse import quote diff --git a/ddtrace/contrib/internal/yaaredis/patch.py b/ddtrace/contrib/internal/yaaredis/patch.py index eeba29994f6..58c5a47bda4 100644 --- a/ddtrace/contrib/internal/yaaredis/patch.py +++ b/ddtrace/contrib/internal/yaaredis/patch.py @@ -13,7 +13,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import stringify_cache_args from ddtrace.internal.utils.wrappers import unwrap -from ddtrace.pin import Pin +from ddtrace.trace import Pin from ddtrace.vendor.debtcollector import deprecate diff --git a/ddtrace/contrib/kafka/__init__.py b/ddtrace/contrib/kafka/__init__.py index f3cf66f6f23..355d3a99f48 100644 --- a/ddtrace/contrib/kafka/__init__.py +++ b/ddtrace/contrib/kafka/__init__.py @@ -31,7 +31,7 @@ To configure the kafka integration using the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin from ddtrace import patch # Make sure to patch before importing confluent_kafka diff --git a/ddtrace/contrib/kombu/__init__.py b/ddtrace/contrib/kombu/__init__.py index 49f3485f2ee..1a010892a7b 100644 --- a/ddtrace/contrib/kombu/__init__.py +++ b/ddtrace/contrib/kombu/__init__.py @@ -11,7 +11,8 @@ without the whole trace being dropped. :: - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin import kombu # If not patched yet, you can patch kombu specifically diff --git a/ddtrace/contrib/mariadb/__init__.py b/ddtrace/contrib/mariadb/__init__.py index e5c7139ee74..ea245ab37e7 100644 --- a/ddtrace/contrib/mariadb/__init__.py +++ b/ddtrace/contrib/mariadb/__init__.py @@ -34,7 +34,7 @@ To configure the mariadb integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin from ddtrace import patch # Make sure to patch before importing mariadb diff --git a/ddtrace/contrib/mongoengine/__init__.py b/ddtrace/contrib/mongoengine/__init__.py index 1522ac1438b..eed76b32f4c 100644 --- a/ddtrace/contrib/mongoengine/__init__.py +++ b/ddtrace/contrib/mongoengine/__init__.py @@ -3,7 +3,8 @@ ``import ddtrace.auto`` will automatically patch your mongoengine connect method to make it work. :: - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin import mongoengine # If not patched yet, you can patch mongoengine specifically diff --git a/ddtrace/contrib/mysql/__init__.py b/ddtrace/contrib/mysql/__init__.py index 1c3f6064e55..5fa835be709 100644 --- a/ddtrace/contrib/mysql/__init__.py +++ b/ddtrace/contrib/mysql/__init__.py @@ -41,7 +41,7 @@ To configure the mysql integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin # Make sure to import mysql.connector and not the 'connect' function, # otherwise you won't have access to the patched version import mysql.connector diff --git a/ddtrace/contrib/mysqldb/__init__.py b/ddtrace/contrib/mysqldb/__init__.py index 17bb76b08a8..81dd4b62c37 100644 --- a/ddtrace/contrib/mysqldb/__init__.py +++ b/ddtrace/contrib/mysqldb/__init__.py @@ -55,7 +55,7 @@ # Make sure to import MySQLdb and not the 'connect' function, # otherwise you won't have access to the patched version - from ddtrace import Pin + from ddtrace.trace import Pin import MySQLdb # This will report a span with the default settings diff --git a/ddtrace/contrib/openai/__init__.py b/ddtrace/contrib/openai/__init__.py index 79a5b488834..bf482c93913 100644 --- a/ddtrace/contrib/openai/__init__.py +++ b/ddtrace/contrib/openai/__init__.py @@ -242,7 +242,8 @@ ``Pin`` API:: import openai - from ddtrace import Pin, config + from ddtrace import config + from ddtrace.trace import Pin Pin.override(openai, service="my-openai-service") """ # noqa: E501 diff --git a/ddtrace/contrib/psycopg/__init__.py b/ddtrace/contrib/psycopg/__init__.py index 48869af6cd7..a747be2310a 100644 --- a/ddtrace/contrib/psycopg/__init__.py +++ b/ddtrace/contrib/psycopg/__init__.py @@ -50,7 +50,7 @@ To configure the psycopg integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin import psycopg db = psycopg.connect(connection_factory=factory) diff --git a/ddtrace/contrib/pylibmc/__init__.py b/ddtrace/contrib/pylibmc/__init__.py index 5689fcd9070..a4ca6aa7692 100644 --- a/ddtrace/contrib/pylibmc/__init__.py +++ b/ddtrace/contrib/pylibmc/__init__.py @@ -5,7 +5,8 @@ # Be sure to import pylibmc and not pylibmc.Client directly, # otherwise you won't have access to the patched version - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin import pylibmc # If not patched yet, you can patch pylibmc specifically diff --git a/ddtrace/contrib/pymemcache/__init__.py b/ddtrace/contrib/pymemcache/__init__.py index 871d8ee0f6c..894359fb007 100644 --- a/ddtrace/contrib/pymemcache/__init__.py +++ b/ddtrace/contrib/pymemcache/__init__.py @@ -2,7 +2,8 @@ ``import ddtrace.auto`` will automatically patch the pymemcache ``Client``:: - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin # If not patched yet, patch pymemcache specifically patch(pymemcache=True) diff --git a/ddtrace/contrib/pymongo/__init__.py b/ddtrace/contrib/pymongo/__init__.py index 60394b6c2f3..a9363e65a04 100644 --- a/ddtrace/contrib/pymongo/__init__.py +++ b/ddtrace/contrib/pymongo/__init__.py @@ -8,7 +8,8 @@ # Be sure to import pymongo and not pymongo.MongoClient directly, # otherwise you won't have access to the patched version - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin import pymongo # If not patched yet, you can patch pymongo specifically diff --git a/ddtrace/contrib/pymysql/__init__.py b/ddtrace/contrib/pymysql/__init__.py index d4b24e2cd5f..bd0e36c6be8 100644 --- a/ddtrace/contrib/pymysql/__init__.py +++ b/ddtrace/contrib/pymysql/__init__.py @@ -41,7 +41,7 @@ To configure the integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin from pymysql import connect # This will report a span with the default settings diff --git a/ddtrace/contrib/pyodbc/__init__.py b/ddtrace/contrib/pyodbc/__init__.py index 44605b7cdc9..bc7d2b3e9b3 100644 --- a/ddtrace/contrib/pyodbc/__init__.py +++ b/ddtrace/contrib/pyodbc/__init__.py @@ -41,7 +41,7 @@ To configure the integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin import pyodbc # This will report a span with the default settings diff --git a/ddtrace/contrib/redis/__init__.py b/ddtrace/contrib/redis/__init__.py index 4fddef1c742..638d08b0a79 100644 --- a/ddtrace/contrib/redis/__init__.py +++ b/ddtrace/contrib/redis/__init__.py @@ -55,7 +55,7 @@ To configure particular redis instances use the :class:`Pin ` API:: import redis - from ddtrace import Pin + from ddtrace.trace import Pin client = redis.StrictRedis(host="localhost", port=6379) diff --git a/ddtrace/contrib/rediscluster/__init__.py b/ddtrace/contrib/rediscluster/__init__.py index cb14eb9aa30..65209053b97 100644 --- a/ddtrace/contrib/rediscluster/__init__.py +++ b/ddtrace/contrib/rediscluster/__init__.py @@ -3,7 +3,8 @@ ``import ddtrace.auto`` will automatically patch your Redis Cluster client to make it work. :: - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin import rediscluster # If not patched yet, you can patch redis specifically diff --git a/ddtrace/contrib/rq/__init__.py b/ddtrace/contrib/rq/__init__.py index 7dd6ba48fcb..0ce23d17984 100644 --- a/ddtrace/contrib/rq/__init__.py +++ b/ddtrace/contrib/rq/__init__.py @@ -28,7 +28,7 @@ To override the service name for a queue:: - from ddtrace import Pin + from ddtrace.trace import Pin connection = redis.Redis() queue = rq.Queue(connection=connection) diff --git a/ddtrace/contrib/snowflake/__init__.py b/ddtrace/contrib/snowflake/__init__.py index bbc892a5362..db137130214 100644 --- a/ddtrace/contrib/snowflake/__init__.py +++ b/ddtrace/contrib/snowflake/__init__.py @@ -51,7 +51,7 @@ To configure the integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin from snowflake.connector import connect # This will report a span with the default settings diff --git a/ddtrace/contrib/sqlalchemy/__init__.py b/ddtrace/contrib/sqlalchemy/__init__.py index c294b8c976c..cc4d1775a44 100644 --- a/ddtrace/contrib/sqlalchemy/__init__.py +++ b/ddtrace/contrib/sqlalchemy/__init__.py @@ -7,7 +7,8 @@ using the patch method that **must be called before** importing sqlalchemy:: # patch before importing `create_engine` - from ddtrace import Pin, patch + from ddtrace import patch + from ddtrace.trace import Pin patch(sqlalchemy=True) # use SQLAlchemy as usual diff --git a/ddtrace/contrib/sqlite3/__init__.py b/ddtrace/contrib/sqlite3/__init__.py index 42499cf0447..adf3ea061d6 100644 --- a/ddtrace/contrib/sqlite3/__init__.py +++ b/ddtrace/contrib/sqlite3/__init__.py @@ -41,7 +41,7 @@ To configure the integration on an per-connection basis use the ``Pin`` API:: - from ddtrace import Pin + from ddtrace.trace import Pin import sqlite3 # This will report a span with the default settings diff --git a/ddtrace/contrib/trace_utils.py b/ddtrace/contrib/trace_utils.py index 644475b02ab..56901934e83 100644 --- a/ddtrace/contrib/trace_utils.py +++ b/ddtrace/contrib/trace_utils.py @@ -20,7 +20,6 @@ import wrapt -from ddtrace import Pin from ddtrace import config from ddtrace.ext import http from ddtrace.ext import net @@ -37,6 +36,7 @@ import ddtrace.internal.utils.wrappers from ddtrace.propagation.http import HTTPPropagator from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin if TYPE_CHECKING: # pragma: no cover diff --git a/ddtrace/contrib/trace_utils_async.py b/ddtrace/contrib/trace_utils_async.py index 63a3325db50..f58cc4e34bb 100644 --- a/ddtrace/contrib/trace_utils_async.py +++ b/ddtrace/contrib/trace_utils_async.py @@ -3,8 +3,8 @@ Note that this module should only be imported in Python 3.5+. """ -from ddtrace import Pin from ddtrace.internal.logger import get_logger +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/contrib/vertexai/__init__.py b/ddtrace/contrib/vertexai/__init__.py index f472d28790d..80597e0c8ff 100644 --- a/ddtrace/contrib/vertexai/__init__.py +++ b/ddtrace/contrib/vertexai/__init__.py @@ -77,7 +77,8 @@ ``Pin`` API:: import vertexai - from ddtrace import Pin, config + from ddtrace import config + from ddtrace.trace import Pin Pin.override(vertexai, service="my-vertexai-service") """ # noqa: E501 diff --git a/ddtrace/contrib/vertica/__init__.py b/ddtrace/contrib/vertica/__init__.py index 3ec424fbb53..e4fc457ac13 100644 --- a/ddtrace/contrib/vertica/__init__.py +++ b/ddtrace/contrib/vertica/__init__.py @@ -27,7 +27,8 @@ To configure the Vertica integration on an instance-per-instance basis use the ``Pin`` API:: - from ddtrace import Pin, patch, Tracer + from ddtrace import patch + from ddtrace.trace import Pin, Tracer patch(vertica=True) import vertica_python diff --git a/ddtrace/contrib/yaaredis/__init__.py b/ddtrace/contrib/yaaredis/__init__.py index 03d76db11c0..2eefb3beb93 100644 --- a/ddtrace/contrib/yaaredis/__init__.py +++ b/ddtrace/contrib/yaaredis/__init__.py @@ -53,7 +53,7 @@ To configure particular yaaredis instances use the :class:`Pin ` API:: import yaaredis - from ddtrace import Pin + from ddtrace.trace import Pin client = yaaredis.StrictRedis(host="localhost", port=6379) diff --git a/ddtrace/filters.py b/ddtrace/filters.py index a2e6884f05c..3c9c42892b8 100644 --- a/ddtrace/filters.py +++ b/ddtrace/filters.py @@ -1,72 +1,10 @@ -import abc -import re -from typing import TYPE_CHECKING # noqa:F401 -from typing import List # noqa:F401 -from typing import Optional # noqa:F401 -from typing import Union # noqa:F401 +from ddtrace._trace.filters import * # noqa: F403 +from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning +from ddtrace.vendor.debtcollector import deprecate -from ddtrace._trace.processor import TraceProcessor -from ddtrace.ext import http - -if TYPE_CHECKING: # pragma: no cover - from ddtrace._trace.span import Span # noqa:F401 - - -class TraceFilter(TraceProcessor): - @abc.abstractmethod - def process_trace(self, trace): - # type: (List[Span]) -> Optional[List[Span]] - """Processes a trace. - - None can be returned to prevent the trace from being exported. - """ - pass - - -class FilterRequestsOnUrl(TraceFilter): - r"""Filter out traces from incoming http requests based on the request's url. - - This class takes as argument a list of regular expression patterns - representing the urls to be excluded from tracing. A trace will be excluded - if its root span contains a ``http.url`` tag and if this tag matches any of - the provided regular expression using the standard python regexp match - semantic (https://docs.python.org/3/library/re.html#re.match). - - :param list regexps: a list of regular expressions (or a single string) defining - the urls that should be filtered out. - - Examples: - To filter out http calls to domain api.example.com:: - - FilterRequestsOnUrl(r'http://api\\.example\\.com') - - To filter out http calls to all first level subdomains from example.com:: - - FilterRequestOnUrl(r'http://.*+\\.example\\.com') - - To filter out calls to both http://test.example.com and http://example.com/healthcheck:: - - FilterRequestOnUrl([r'http://test\\.example\\.com', r'http://example\\.com/healthcheck']) - """ - - def __init__(self, regexps: Union[str, List[str]]): - if isinstance(regexps, str): - regexps = [regexps] - self._regexps = [re.compile(regexp) for regexp in regexps] - - def process_trace(self, trace): - # type: (List[Span]) -> Optional[List[Span]] - """ - When the filter is registered in the tracer, process_trace is called by - on each trace before it is sent to the agent, the returned value will - be fed to the next filter in the list. If process_trace returns None, - the whole trace is discarded. - """ - for span in trace: - url = span.get_tag(http.URL) - if span.parent_id is None and url is not None: - for regexp in self._regexps: - if regexp.match(url): - return None - return trace +deprecate( + "The ddtrace.filters module is deprecated and will be removed.", + message="Import ``TraceFilter`` and/or ``FilterRequestsOnUrl`` from the ddtrace.trace package.", + category=DDTraceDeprecationWarning, +) diff --git a/ddtrace/internal/ci_visibility/filters.py b/ddtrace/internal/ci_visibility/filters.py index c90e7324533..f1b22d97e13 100644 --- a/ddtrace/internal/ci_visibility/filters.py +++ b/ddtrace/internal/ci_visibility/filters.py @@ -8,7 +8,7 @@ from ddtrace.constants import AUTO_KEEP from ddtrace.ext import SpanTypes from ddtrace.ext import ci -from ddtrace.filters import TraceFilter +from ddtrace.trace import TraceFilter if TYPE_CHECKING: diff --git a/ddtrace/llmobs/_integrations/base.py b/ddtrace/llmobs/_integrations/base.py index f01c19f173a..2e892904720 100644 --- a/ddtrace/llmobs/_integrations/base.py +++ b/ddtrace/llmobs/_integrations/base.py @@ -6,7 +6,6 @@ from typing import List # noqa:F401 from typing import Optional # noqa:F401 -from ddtrace import Pin from ddtrace import config from ddtrace._trace.sampler import RateSampler from ddtrace._trace.span import Span @@ -24,6 +23,7 @@ from ddtrace.llmobs._log_writer import V2LogWriter from ddtrace.llmobs._utils import _get_llmobs_parent_id from ddtrace.settings import IntegrationConfig +from ddtrace.trace import Pin log = get_logger(__name__) diff --git a/ddtrace/llmobs/_integrations/openai.py b/ddtrace/llmobs/_integrations/openai.py index bd727b1a5a2..ea660f53f68 100644 --- a/ddtrace/llmobs/_integrations/openai.py +++ b/ddtrace/llmobs/_integrations/openai.py @@ -24,7 +24,7 @@ from ddtrace.llmobs._integrations.base import BaseLLMIntegration from ddtrace.llmobs._utils import _get_attr from ddtrace.llmobs.utils import Document -from ddtrace.pin import Pin +from ddtrace.trace import Pin class OpenAIIntegration(BaseLLMIntegration): diff --git a/ddtrace/pin.py b/ddtrace/pin.py index 926918b6cea..0e683b3b22e 100644 --- a/ddtrace/pin.py +++ b/ddtrace/pin.py @@ -1,209 +1,10 @@ -from typing import TYPE_CHECKING # noqa:F401 -from typing import Any # noqa:F401 -from typing import Dict # noqa:F401 -from typing import Optional # noqa:F401 +from ddtrace._trace.pin import * # noqa: F403 +from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning +from ddtrace.vendor.debtcollector import deprecate -import wrapt -import ddtrace - -from .internal.logger import get_logger - - -log = get_logger(__name__) - - -# To set attributes on wrapt proxy objects use this prefix: -# http://wrapt.readthedocs.io/en/latest/wrappers.html -_DD_PIN_NAME = "_datadog_pin" -_DD_PIN_PROXY_NAME = "_self_" + _DD_PIN_NAME - - -class Pin(object): - """Pin (a.k.a Patch INfo) is a small class which is used to - set tracing metadata on a particular traced connection. - This is useful if you wanted to, say, trace two different - database clusters. - - >>> conn = sqlite.connect('/tmp/user.db') - >>> # Override a pin for a specific connection - >>> pin = Pin.override(conn, service='user-db') - >>> conn = sqlite.connect('/tmp/image.db') - """ - - __slots__ = ["tags", "tracer", "_target", "_config", "_initialized"] - - 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 - tracer = tracer or ddtrace.tracer - self.tags = tags - self.tracer = tracer - self._target = None # type: Optional[int] - # keep the configuration attribute internal because the - # public API to access it is not the Pin class - self._config = _config or {} # type: Dict[str, Any] - # [Backward compatibility]: service argument updates the `Pin` config - self._config["service_name"] = service - self._initialized = True - - @property - def service(self): - # type: () -> str - """Backward compatibility: accessing to `pin.service` returns the underlying - configuration value. - """ - return self._config["service_name"] - - def __setattr__(self, name, value): - if getattr(self, "_initialized", False) and name != "_target": - raise AttributeError("can't mutate a pin, use override() or clone() instead") - super(Pin, self).__setattr__(name, value) - - def __repr__(self): - return "Pin(service=%s, tags=%s, tracer=%s)" % (self.service, self.tags, self.tracer) - - @staticmethod - def _find(*objs): - # type: (Any) -> Optional[Pin] - """ - Return the first :class:`ddtrace.pin.Pin` found on any of the provided objects or `None` if none were found - - - >>> pin = Pin._find(wrapper, instance, conn) - - :param objs: The objects to search for a :class:`ddtrace.pin.Pin` on - :type objs: List of objects - :rtype: :class:`ddtrace.pin.Pin`, None - :returns: The first found :class:`ddtrace.pin.Pin` or `None` is none was found - """ - for obj in objs: - pin = Pin.get_from(obj) - if pin: - return pin - return None - - @staticmethod - def get_from(obj): - # type: (Any) -> Optional[Pin] - """Return the pin associated with the given object. If a pin is attached to - `obj` but the instance is not the owner of the pin, a new pin is cloned and - attached. This ensures that a pin inherited from a class is a copy for the new - instance, avoiding that a specific instance overrides other pins values. - - >>> pin = Pin.get_from(conn) - - :param obj: The object to look for a :class:`ddtrace.pin.Pin` on - :type obj: object - :rtype: :class:`ddtrace.pin.Pin`, None - :returns: :class:`ddtrace.pin.Pin` associated with the object, or None if none was found - """ - if hasattr(obj, "__getddpin__"): - return obj.__getddpin__() - - pin_name = _DD_PIN_PROXY_NAME if isinstance(obj, wrapt.ObjectProxy) else _DD_PIN_NAME - pin = getattr(obj, pin_name, None) - # detect if the PIN has been inherited from a class - if pin is not None and pin._target != id(obj): - pin = pin.clone() - pin.onto(obj) - return pin - - @classmethod - def override( - cls, - 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. - - That's the recommended way to customize an already instrumented client, without - losing existing attributes. - - >>> conn = sqlite.connect('/tmp/user.db') - >>> # Override a pin for a specific connection - >>> Pin.override(conn, service='user-db') - """ - if not obj: - return - - pin = cls.get_from(obj) - if pin is None: - Pin(service=service, tags=tags, tracer=tracer).onto(obj) - else: - pin.clone(service=service, tags=tags, tracer=tracer).onto(obj) - - def enabled(self): - # type: () -> bool - """Return true if this pin's tracer is enabled.""" - # inline to avoid circular imports - from ddtrace.settings.asm import config as asm_config - - return bool(self.tracer) and (self.tracer.enabled or asm_config._apm_opt_out) - - def onto(self, obj, send=True): - # type: (Any, bool) -> None - """Patch this pin onto the given object. If send is true, it will also - queue the metadata to be sent to the server. - """ - # Actually patch it on the object. - try: - if hasattr(obj, "__setddpin__"): - return obj.__setddpin__(self) - - pin_name = _DD_PIN_PROXY_NAME if isinstance(obj, wrapt.ObjectProxy) else _DD_PIN_NAME - - # set the target reference; any get_from, clones and retarget the new PIN - self._target = id(obj) - if self.service: - ddtrace.config._add_extra_service(self.service) - return setattr(obj, pin_name, self) - except AttributeError: - log.debug("can't pin onto object. skipping", exc_info=True) - - def remove_from(self, obj): - # type: (Any) -> None - # Remove pin from the object. - try: - pin_name = _DD_PIN_PROXY_NAME if isinstance(obj, wrapt.ObjectProxy) else _DD_PIN_NAME - - pin = Pin.get_from(obj) - if pin is not None: - delattr(obj, pin_name) - except AttributeError: - log.debug("can't remove pin from object. skipping", exc_info=True) - - 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() - - # 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: - # - # copy: 0.00654911994934082 - # deepcopy: 0.2787208557128906 - config = self._config.copy() - - return Pin( - service=service or self.service, - tags=tags, - tracer=tracer or self.tracer, # do not clone the Tracer - _config=config, - ) +deprecate( + "The ddtrace.trace.Pin module is deprecated and will be removed.", + message="Import ``Pin`` from the ddtrace.trace package.", + category=DDTraceDeprecationWarning, +) diff --git a/ddtrace/settings/config.py b/ddtrace/settings/config.py index 6ee75fbe6d8..adcd9505a52 100644 --- a/ddtrace/settings/config.py +++ b/ddtrace/settings/config.py @@ -19,6 +19,7 @@ from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning from ddtrace.vendor.debtcollector import deprecate +from .._trace.pin import Pin from ..internal import gitmetadata from ..internal.constants import _PROPAGATION_BEHAVIOR_DEFAULT from ..internal.constants import _PROPAGATION_BEHAVIOR_IGNORE @@ -37,7 +38,6 @@ from ..internal.serverless import in_aws_lambda from ..internal.utils.formats import asbool from ..internal.utils.formats import parse_tags_str -from ..pin import Pin from ._core import get_config as _get_config from ._inferred_base_service import detect_service from ._otel_remapper import otel_remapping as _otel_remapping diff --git a/ddtrace/trace/__init__.py b/ddtrace/trace/__init__.py index 90c662cebc7..dcd3aeb928e 100644 --- a/ddtrace/trace/__init__.py +++ b/ddtrace/trace/__init__.py @@ -1,7 +1,8 @@ from ddtrace._trace.context import Context +from ddtrace._trace.filters import FilterRequestsOnUrl +from ddtrace._trace.filters import TraceFilter +from ddtrace._trace.pin import Pin -# TODO: Move `ddtrace.Pin`, `ddtrace.Tracer`, `ddtrace.Span`, and `ddtrace.tracer` to this module -__all__ = [ - "Context", -] +# TODO: Move `ddtrace.Tracer`, `ddtrace.Span`, and `ddtrace.tracer` to this module +__all__ = ["Context", "Pin", "TraceFilter", "FilterRequestsOnUrl"] diff --git a/docker-compose.yml b/docker-compose.yml index cf40a4a256d..118ad8cc5db 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -142,6 +142,7 @@ services: - DD_DISABLE_ERROR_RESPONSES=true - ENABLED_CHECKS=trace_content_length,trace_stall,meta_tracer_version_header,trace_count_header,trace_peer_service,trace_dd_service - SNAPSHOT_IGNORED_ATTRS=span_id,trace_id,parent_id,duration,start,metrics.system.pid,metrics.system.process_id,metrics.process_id,meta.runtime-id,meta._dd.p.tid,meta.pathway.hash,metrics._dd.tracer_kr,meta._dd.parent_id,meta.kafka.cluster_id + vertica: image: vertica/vertica-ce environment: diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst index 309b6178c56..9906fddea89 100644 --- a/docs/advanced_usage.rst +++ b/docs/advanced_usage.rst @@ -347,7 +347,7 @@ and the resulting trace will either be sent to the Agent or discarded. The library comes with a ``FilterRequestsOnUrl`` filter that can be used to filter out incoming requests to specific urls: -.. autoclass:: ddtrace.filters.FilterRequestsOnUrl +.. autoclass:: ddtrace.trace.FilterRequestsOnUrl :members: **Writing a custom filter** @@ -358,7 +358,7 @@ providing it to the filters parameter of :meth:`ddtrace.Tracer.configure()`. the pipeline or ``None`` if the trace should be discarded:: from ddtrace import Span, tracer - from ddtrace.filters import TraceFilter + from ddtrace.trace import TraceFilter class FilterExample(TraceFilter): def process_trace(self, trace): diff --git a/docs/contributing-integrations.rst b/docs/contributing-integrations.rst index 9d7d2d202ee..0dab68b5053 100644 --- a/docs/contributing-integrations.rst +++ b/docs/contributing-integrations.rst @@ -30,7 +30,7 @@ into the runtime execution of third-party libraries. The essential task of writi the functions in the third-party library that would serve as useful entrypoints and wrapping them with ``wrap_function_wrapper``. There are exceptions, but this is generally a useful starting point. -The Pin API in ``ddtrace.pin`` is used to configure the instrumentation at runtime. It provides a ``Pin`` class +The Pin API in ``ddtrace.trace.Pin`` is used to configure the instrumentation at runtime. It provides a ``Pin`` class that can store configuration data in memory in a manner that is accessible from within functions wrapped by Wrapt. ``Pin`` objects are most often used for storing configuration data scoped to a given integration, such as enable/disable flags and service name overrides. diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 73dde525de9..04bd56d0ba9 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -67,7 +67,7 @@ This can be a problem for users who want to see error details from a child span While this is default behavior for integrations, users can add a trace filter to propagate the error details up to the root span:: from ddtrace import Span, tracer - from ddtrace.filters import TraceFilter + from ddtrace.trace import TraceFilter class ErrorFilter(TraceFilter): diff --git a/releasenotes/notes/move-pin-and-filters-to-trace-package-2f47fa2d2592b413.yaml b/releasenotes/notes/move-pin-and-filters-to-trace-package-2f47fa2d2592b413.yaml new file mode 100644 index 00000000000..29b3ebe277d --- /dev/null +++ b/releasenotes/notes/move-pin-and-filters-to-trace-package-2f47fa2d2592b413.yaml @@ -0,0 +1,6 @@ +--- +deprecations: + - | + tracing: Deprecates ``ddtrace.pin`` module and moves the ``Pin`` class to ``ddtrace.trace`` package. In v3.0.0 the ``ddtrace/pin.py`` will be removed. + - | + tracing: Deprecates ``ddtrace.filters`` module and moves the ``TraceFilter`` and ``FilterRequestsOnUrl`` classes to ``ddtrace.trace`` package. In v3.0.0 the ``ddtrace/filters.py`` will be removed. \ No newline at end of file diff --git a/tests/appsec/contrib_appsec/django_app/urls.py b/tests/appsec/contrib_appsec/django_app/urls.py index aaff69169b5..1b691d43a53 100644 --- a/tests/appsec/contrib_appsec/django_app/urls.py +++ b/tests/appsec/contrib_appsec/django_app/urls.py @@ -196,7 +196,7 @@ def login_user(request): def new_service(request, service_name: str): import ddtrace - ddtrace.Pin.override(django, service=service_name, tracer=ddtrace.tracer) + ddtrace.trace.Pin.override(django, service=service_name, tracer=ddtrace.tracer) return HttpResponse(service_name, status=200) diff --git a/tests/appsec/contrib_appsec/fastapi_app/app.py b/tests/appsec/contrib_appsec/fastapi_app/app.py index c5b765c4bbb..2a97a919395 100644 --- a/tests/appsec/contrib_appsec/fastapi_app/app.py +++ b/tests/appsec/contrib_appsec/fastapi_app/app.py @@ -104,7 +104,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.Pin.override(app, service=service_name, tracer=ddtrace.tracer) + ddtrace.trace.Pin.override(app, service=service_name, tracer=ddtrace.tracer) return HTMLResponse(service_name, 200) async def slow_numbers(minimum, maximum): diff --git a/tests/appsec/contrib_appsec/flask_app/app.py b/tests/appsec/contrib_appsec/flask_app/app.py index 939a7cad678..5a5776cd098 100644 --- a/tests/appsec/contrib_appsec/flask_app/app.py +++ b/tests/appsec/contrib_appsec/flask_app/app.py @@ -60,7 +60,7 @@ def multi_view(param_int=0, param_str=""): def new_service(service_name: str): import ddtrace - ddtrace.Pin.override(Flask, service=service_name, tracer=ddtrace.tracer) + ddtrace.trace.Pin.override(Flask, service=service_name, tracer=ddtrace.tracer) return service_name diff --git a/tests/appsec/contrib_appsec/test_flask.py b/tests/appsec/contrib_appsec/test_flask.py index 90a35ac0c88..b497de98bf9 100644 --- a/tests/appsec/contrib_appsec/test_flask.py +++ b/tests/appsec/contrib_appsec/test_flask.py @@ -1,8 +1,8 @@ from flask.testing import FlaskClient import pytest -from ddtrace import Pin from ddtrace.internal.packages import get_version_for_package +from ddtrace.trace import Pin from tests.appsec.contrib_appsec import utils from tests.utils import TracerTestCase diff --git a/tests/appsec/contrib_appsec/utils.py b/tests/appsec/contrib_appsec/utils.py index d7aa077052f..312c15b5fed 100644 --- a/tests/appsec/contrib_appsec/utils.py +++ b/tests/appsec/contrib_appsec/utils.py @@ -1560,8 +1560,8 @@ def test_tracer(): @contextmanager def post_tracer(interface): - original_tracer = getattr(ddtrace.Pin.get_from(interface.framework), "tracer", None) - ddtrace.Pin.override(interface.framework, tracer=interface.tracer) + original_tracer = getattr(ddtrace.trace.Pin.get_from(interface.framework), "tracer", None) + ddtrace.trace.Pin.override(interface.framework, tracer=interface.tracer) yield if original_tracer is not None: - ddtrace.Pin.override(interface.framework, tracer=original_tracer) + ddtrace.trace.Pin.override(interface.framework, tracer=original_tracer) diff --git a/tests/commands/ddtrace_run_integration.py b/tests/commands/ddtrace_run_integration.py index e52a0c9b8b0..12f8ab857e2 100644 --- a/tests/commands/ddtrace_run_integration.py +++ b/tests/commands/ddtrace_run_integration.py @@ -5,7 +5,7 @@ import redis -from ddtrace import Pin +from ddtrace.trace import Pin from tests.contrib.config import REDIS_CONFIG from tests.utils import DummyWriter diff --git a/tests/contrib/aiobotocore/utils.py b/tests/contrib/aiobotocore/utils.py index 061f8d37847..b51b6550327 100644 --- a/tests/contrib/aiobotocore/utils.py +++ b/tests/contrib/aiobotocore/utils.py @@ -3,7 +3,7 @@ from async_generator import asynccontextmanager from async_generator import yield_ -from ddtrace import Pin +from ddtrace.trace import Pin LOCALSTACK_ENDPOINT_URL = { diff --git a/tests/contrib/aiohttp/test_aiohttp_client.py b/tests/contrib/aiohttp/test_aiohttp_client.py index f490bd85ada..2b2b51c2650 100644 --- a/tests/contrib/aiohttp/test_aiohttp_client.py +++ b/tests/contrib/aiohttp/test_aiohttp_client.py @@ -3,10 +3,10 @@ import aiohttp import pytest -from ddtrace import Pin 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 override_config from tests.utils import override_http_config @@ -101,7 +101,7 @@ async def test_distributed_tracing_disabled(ddtrace_run_python_code_in_subproces import asyncio import sys import aiohttp -from ddtrace import Pin +from ddtrace.trace import Pin from tests.contrib.aiohttp.test_aiohttp_client import URL async def test(): @@ -184,7 +184,7 @@ def test_configure_service_name_pin(ddtrace_run_python_code_in_subprocess): import asyncio import sys import aiohttp -from ddtrace import Pin +from ddtrace.trace import Pin from tests.contrib.aiohttp.test_aiohttp_client import URL_200 async def test(): diff --git a/tests/contrib/aiohttp_jinja2/conftest.py b/tests/contrib/aiohttp_jinja2/conftest.py index 92c49f015f3..a58b72f7f49 100644 --- a/tests/contrib/aiohttp_jinja2/conftest.py +++ b/tests/contrib/aiohttp_jinja2/conftest.py @@ -3,7 +3,7 @@ from ddtrace.contrib.internal.aiohttp_jinja2.patch import patch from ddtrace.contrib.internal.aiohttp_jinja2.patch import unpatch -from ddtrace.pin import Pin +from ddtrace.trace import 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 diff --git a/tests/contrib/aiohttp_jinja2/test_aiohttp_jinja2.py b/tests/contrib/aiohttp_jinja2/test_aiohttp_jinja2.py index 222522d66f6..8889d828752 100644 --- a/tests/contrib/aiohttp_jinja2/test_aiohttp_jinja2.py +++ b/tests/contrib/aiohttp_jinja2/test_aiohttp_jinja2.py @@ -1,9 +1,9 @@ import aiohttp_jinja2 import pytest -from ddtrace import Pin from ddtrace import tracer from ddtrace.constants import ERROR_MSG +from ddtrace.trace import Pin from tests.contrib.aiohttp.app.web import set_filesystem_loader from tests.contrib.aiohttp.app.web import set_package_loader import tests.contrib.aiohttp.conftest # noqa:F401 diff --git a/tests/contrib/aiomysql/test_aiomysql.py b/tests/contrib/aiomysql/test_aiomysql.py index 9bd898c52ae..0bf8839dc96 100644 --- a/tests/contrib/aiomysql/test_aiomysql.py +++ b/tests/contrib/aiomysql/test_aiomysql.py @@ -5,11 +5,11 @@ import pymysql import pytest -from ddtrace import Pin from ddtrace import Tracer 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.contrib import shared_tests_async as shared_tests from tests.contrib.asyncio.utils import AsyncioTestCase from tests.contrib.asyncio.utils import mark_asyncio diff --git a/tests/contrib/aiopg/test.py b/tests/contrib/aiopg/test.py index da741bacca3..eb738e009d8 100644 --- a/tests/contrib/aiopg/test.py +++ b/tests/contrib/aiopg/test.py @@ -4,11 +4,12 @@ from psycopg2 import extras import pytest -# project -from ddtrace import Pin from ddtrace.contrib.internal.aiopg.patch import patch from ddtrace.contrib.internal.aiopg.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME + +# project +from ddtrace.trace import Pin from tests.contrib.asyncio.utils import AsyncioTestCase from tests.contrib.config import POSTGRES_CONFIG from tests.opentracer.utils import init_tracer diff --git a/tests/contrib/algoliasearch/test.py b/tests/contrib/algoliasearch/test.py index 3d563e11035..87f5f7b6910 100644 --- a/tests/contrib/algoliasearch/test.py +++ b/tests/contrib/algoliasearch/test.py @@ -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.pin import Pin +from ddtrace.trace import Pin from ddtrace.vendor.packaging.version import parse as parse_version from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/anthropic/conftest.py b/tests/contrib/anthropic/conftest.py index d975204ef7c..a6a4b53cd4c 100644 --- a/tests/contrib/anthropic/conftest.py +++ b/tests/contrib/anthropic/conftest.py @@ -3,10 +3,10 @@ import mock import pytest -from ddtrace import Pin 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.contrib.anthropic.utils import get_request_vcr from tests.utils import DummyTracer from tests.utils import DummyWriter diff --git a/tests/contrib/aredis/test_aredis.py b/tests/contrib/aredis/test_aredis.py index c0e5719b80e..e62cfa974be 100644 --- a/tests/contrib/aredis/test_aredis.py +++ b/tests/contrib/aredis/test_aredis.py @@ -5,9 +5,9 @@ import pytest from wrapt import ObjectProxy -from ddtrace import Pin from ddtrace.contrib.internal.aredis.patch import patch from ddtrace.contrib.internal.aredis.patch import unpatch +from ddtrace.trace import Pin from tests.conftest import DEFAULT_DDTRACE_SUBPROCESS_TEST_SERVICE_NAME from tests.opentracer.utils import init_tracer from tests.utils import override_config @@ -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.pin import Pin +from ddtrace.trace import Pin import aredis from tests.contrib.config import REDIS_CONFIG from tests.contrib.aredis.test_aredis import traced_aredis diff --git a/tests/contrib/asyncpg/test_asyncpg.py b/tests/contrib/asyncpg/test_asyncpg.py index 539f64f10ac..032a0f91731 100644 --- a/tests/contrib/asyncpg/test_asyncpg.py +++ b/tests/contrib/asyncpg/test_asyncpg.py @@ -5,11 +5,11 @@ import mock import pytest -from ddtrace import Pin from ddtrace import tracer from ddtrace.contrib.internal.asyncpg.patch import patch from ddtrace.contrib.internal.asyncpg.patch import unpatch from ddtrace.contrib.trace_utils import iswrapped +from ddtrace.trace import Pin from tests.contrib.asyncio.utils import AsyncioTestCase from tests.contrib.asyncio.utils import mark_asyncio from tests.contrib.config import POSTGRES_CONFIG diff --git a/tests/contrib/avro/test_avro.py b/tests/contrib/avro/test_avro.py index 7be5e2f6351..3db10460a23 100644 --- a/tests/contrib/avro/test_avro.py +++ b/tests/contrib/avro/test_avro.py @@ -4,11 +4,11 @@ from avro.io import DatumWriter from wrapt import ObjectProxy -from ddtrace import Pin from ddtrace.constants import AUTO_KEEP 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 OPENAPI_USER_SCHEMA_DEF = ( diff --git a/tests/contrib/boto/test.py b/tests/contrib/boto/test.py index cd2520be5b9..2570ca9c65c 100644 --- a/tests/contrib/boto/test.py +++ b/tests/contrib/boto/test.py @@ -14,12 +14,13 @@ from moto import mock_s3 from moto import mock_sts -# project -from ddtrace import Pin from ddtrace.contrib.internal.boto.patch import patch from ddtrace.contrib.internal.boto.patch import unpatch from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME + +# project +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/botocore/test.py b/tests/contrib/botocore/test.py index af70c453d19..9e4f91cb61f 100644 --- a/tests/contrib/botocore/test.py +++ b/tests/contrib/botocore/test.py @@ -33,7 +33,6 @@ except ImportError: from moto import mock_kinesis as mock_firehose -from ddtrace import Pin from ddtrace import config from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK @@ -47,6 +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.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/botocore/test_bedrock.py b/tests/contrib/botocore/test_bedrock.py index 1001aff0dac..99a1729ff1a 100644 --- a/tests/contrib/botocore/test_bedrock.py +++ b/tests/contrib/botocore/test_bedrock.py @@ -4,9 +4,9 @@ import mock import pytest -from ddtrace import Pin from ddtrace.contrib.internal.botocore.patch import patch from ddtrace.contrib.internal.botocore.patch import unpatch +from ddtrace.trace import Pin from tests.contrib.botocore.bedrock_utils import _MODELS from tests.contrib.botocore.bedrock_utils import _REQUEST_BODIES from tests.contrib.botocore.bedrock_utils import get_request_vcr diff --git a/tests/contrib/botocore/test_bedrock_llmobs.py b/tests/contrib/botocore/test_bedrock_llmobs.py index c4af15100f2..790b86f0704 100644 --- a/tests/contrib/botocore/test_bedrock_llmobs.py +++ b/tests/contrib/botocore/test_bedrock_llmobs.py @@ -4,10 +4,10 @@ import mock import pytest -from ddtrace import Pin from ddtrace.contrib.internal.botocore.patch import patch from ddtrace.contrib.internal.botocore.patch import unpatch from ddtrace.llmobs import LLMObs +from ddtrace.trace import Pin from tests.contrib.botocore.bedrock_utils import _MODELS from tests.contrib.botocore.bedrock_utils import _REQUEST_BODIES from tests.contrib.botocore.bedrock_utils import get_request_vcr diff --git a/tests/contrib/botocore/test_stepfunctions.py b/tests/contrib/botocore/test_stepfunctions.py index aaf17eb6051..f350e967d4c 100644 --- a/tests/contrib/botocore/test_stepfunctions.py +++ b/tests/contrib/botocore/test_stepfunctions.py @@ -1,9 +1,9 @@ import json -from ddtrace import Pin from ddtrace.contrib.internal.botocore.services.stepfunctions import update_stepfunction_input from ddtrace.ext import SpanTypes from ddtrace.internal import core +from ddtrace.trace import Pin def test_update_stepfunction_input(): diff --git a/tests/contrib/cassandra/test.py b/tests/contrib/cassandra/test.py index b6f5664ac72..21b98d6396f 100644 --- a/tests/contrib/cassandra/test.py +++ b/tests/contrib/cassandra/test.py @@ -9,7 +9,6 @@ from cassandra.query import SimpleStatement import mock -from ddtrace import Pin from ddtrace import config from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_TYPE @@ -19,6 +18,7 @@ from ddtrace.ext import cassandra as cassx from ddtrace.ext import net from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.contrib.config import CASSANDRA_CONFIG from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer diff --git a/tests/contrib/celery/autopatch.py b/tests/contrib/celery/autopatch.py index 128ad9f8415..08eeed5acad 100644 --- a/tests/contrib/celery/autopatch.py +++ b/tests/contrib/celery/autopatch.py @@ -1,4 +1,4 @@ -from ddtrace import Pin +from ddtrace.trace import Pin if __name__ == "__main__": diff --git a/tests/contrib/celery/base.py b/tests/contrib/celery/base.py index 4e89b77a94b..c2b7de22a54 100644 --- a/tests/contrib/celery/base.py +++ b/tests/contrib/celery/base.py @@ -3,9 +3,9 @@ import celery import pytest -from ddtrace import Pin from ddtrace.contrib.internal.celery.patch import patch from ddtrace.contrib.internal.celery.patch import unpatch +from ddtrace.trace import Pin from tests.utils import TracerTestCase from ..config import RABBITMQ_CONFIG diff --git a/tests/contrib/celery/test_app.py b/tests/contrib/celery/test_app.py index 6f43a04a9bf..6218d77f061 100644 --- a/tests/contrib/celery/test_app.py +++ b/tests/contrib/celery/test_app.py @@ -1,7 +1,7 @@ import celery -from ddtrace import Pin from ddtrace.contrib.internal.celery.patch import unpatch_app +from ddtrace.trace import Pin from .base import CeleryBaseTestCase diff --git a/tests/contrib/celery/test_integration.py b/tests/contrib/celery/test_integration.py index 8b676fa1108..717ed1de359 100644 --- a/tests/contrib/celery/test_integration.py +++ b/tests/contrib/celery/test_integration.py @@ -8,13 +8,13 @@ import mock import pytest -from ddtrace import Pin from ddtrace._trace.context import Context from ddtrace.constants import ERROR_MSG from ddtrace.contrib.internal.celery.patch import patch from ddtrace.contrib.internal.celery.patch import unpatch import ddtrace.internal.forksafe as forksafe from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import flaky diff --git a/tests/contrib/celery/test_patch.py b/tests/contrib/celery/test_patch.py index fe0e5b97b2b..3892fc79fb1 100644 --- a/tests/contrib/celery/test_patch.py +++ b/tests/contrib/celery/test_patch.py @@ -1,6 +1,6 @@ import unittest -from ddtrace import Pin +from ddtrace.trace import Pin from tests.contrib.patch import emit_integration_and_version_to_test_agent diff --git a/tests/contrib/celery/test_tagging.py b/tests/contrib/celery/test_tagging.py index 22e8b539c50..6b88acf9434 100644 --- a/tests/contrib/celery/test_tagging.py +++ b/tests/contrib/celery/test_tagging.py @@ -5,9 +5,9 @@ from celery.contrib.testing.worker import start_worker import pytest -from ddtrace import Pin from ddtrace.contrib.internal.celery.patch import patch from ddtrace.contrib.internal.celery.patch import unpatch +from ddtrace.trace import Pin from tests.utils import DummyTracer from .base import AMQP_BROKER_URL diff --git a/tests/contrib/consul/test.py b/tests/contrib/consul/test.py index c5eec48369d..285287f9e95 100644 --- a/tests/contrib/consul/test.py +++ b/tests/contrib/consul/test.py @@ -1,11 +1,11 @@ import consul from wrapt import BoundFunctionWrapper -from ddtrace import Pin from ddtrace.contrib.internal.consul.patch import patch from ddtrace.contrib.internal.consul.patch import unpatch from ddtrace.ext import consul as consulx from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/dbapi/test_dbapi.py b/tests/contrib/dbapi/test_dbapi.py index 80135734a6a..1f6be1d66f5 100644 --- a/tests/contrib/dbapi/test_dbapi.py +++ b/tests/contrib/dbapi/test_dbapi.py @@ -1,7 +1,6 @@ import mock import pytest -from ddtrace import Pin from ddtrace._trace.span import Span # noqa:F401 from ddtrace.contrib.dbapi import FetchTracedCursor from ddtrace.contrib.dbapi import TracedConnection @@ -9,6 +8,7 @@ from ddtrace.propagation._database_monitoring import _DBM_Propagator from ddtrace.settings import Config from ddtrace.settings.integration import IntegrationConfig +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_is_not_measured diff --git a/tests/contrib/dbapi/test_dbapi_appsec.py b/tests/contrib/dbapi/test_dbapi_appsec.py index b60b3ac05c0..d43d9c37e3c 100644 --- a/tests/contrib/dbapi/test_dbapi_appsec.py +++ b/tests/contrib/dbapi/test_dbapi_appsec.py @@ -1,12 +1,12 @@ import mock import pytest -from ddtrace import Pin from ddtrace.appsec._iast import oce from ddtrace.appsec._iast._utils import _is_python_version_supported from ddtrace.contrib.dbapi import TracedCursor from ddtrace.settings import Config from ddtrace.settings.integration import IntegrationConfig +from ddtrace.trace import 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 TracerTestCase diff --git a/tests/contrib/dbapi_async/test_dbapi_async.py b/tests/contrib/dbapi_async/test_dbapi_async.py index f7151fe1390..7343e875829 100644 --- a/tests/contrib/dbapi_async/test_dbapi_async.py +++ b/tests/contrib/dbapi_async/test_dbapi_async.py @@ -1,7 +1,6 @@ import mock import pytest -from ddtrace import Pin from ddtrace._trace.span import Span # noqa:F401 from ddtrace.contrib.dbapi_async import FetchTracedAsyncCursor from ddtrace.contrib.dbapi_async import TracedAsyncConnection @@ -9,6 +8,7 @@ from ddtrace.propagation._database_monitoring import _DBM_Propagator from ddtrace.settings import Config from ddtrace.settings.integration import IntegrationConfig +from ddtrace.trace import Pin from tests.contrib.asyncio.utils import AsyncioTestCase from tests.contrib.asyncio.utils import mark_asyncio from tests.utils import assert_is_measured diff --git a/tests/contrib/django/conftest.py b/tests/contrib/django/conftest.py index a2de59753fb..3dd992681b4 100644 --- a/tests/contrib/django/conftest.py +++ b/tests/contrib/django/conftest.py @@ -4,8 +4,8 @@ from django.conf import settings import pytest -from ddtrace import Pin from ddtrace.contrib.internal.django.patch import patch +from ddtrace.trace import Pin from tests.utils import DummyTracer from tests.utils import TracerSpanContainer diff --git a/tests/contrib/django/test_django_dbm.py b/tests/contrib/django/test_django_dbm.py index 00edf1c0815..d44f90f3208 100644 --- a/tests/contrib/django/test_django_dbm.py +++ b/tests/contrib/django/test_django_dbm.py @@ -1,7 +1,7 @@ from django.db import connections import mock -from ddtrace import Pin +from ddtrace.trace import Pin from tests.contrib import shared_tests from tests.utils import DummyTracer from tests.utils import override_config diff --git a/tests/contrib/dogpile_cache/test_tracing.py b/tests/contrib/dogpile_cache/test_tracing.py index d6b26bb1b58..fec78818eda 100644 --- a/tests/contrib/dogpile_cache/test_tracing.py +++ b/tests/contrib/dogpile_cache/test_tracing.py @@ -3,9 +3,9 @@ import dogpile import pytest -from ddtrace import Pin from ddtrace.contrib.internal.dogpile_cache.patch import patch from ddtrace.contrib.internal.dogpile_cache.patch import unpatch +from ddtrace.trace import Pin from tests.conftest import DEFAULT_DDTRACE_SUBPROCESS_TEST_SERVICE_NAME from tests.utils import DummyTracer from tests.utils import TracerSpanContainer diff --git a/tests/contrib/dramatiq/test_integration.py b/tests/contrib/dramatiq/test_integration.py index 7d80d554390..ba8d836181c 100644 --- a/tests/contrib/dramatiq/test_integration.py +++ b/tests/contrib/dramatiq/test_integration.py @@ -5,7 +5,7 @@ from ddtrace.contrib.internal.dramatiq.patch import patch from ddtrace.contrib.internal.dramatiq.patch import unpatch -from ddtrace.pin import Pin +from ddtrace.trace import Pin from tests.utils import DummyTracer from tests.utils import snapshot diff --git a/tests/contrib/elasticsearch/test_elasticsearch.py b/tests/contrib/elasticsearch/test_elasticsearch.py index 091fe4b6901..6e381bc1e31 100644 --- a/tests/contrib/elasticsearch/test_elasticsearch.py +++ b/tests/contrib/elasticsearch/test_elasticsearch.py @@ -6,7 +6,6 @@ import pytest -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.elasticsearch.patch import get_version from ddtrace.contrib.internal.elasticsearch.patch import get_versions @@ -14,6 +13,7 @@ from ddtrace.contrib.internal.elasticsearch.patch import unpatch from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.contrib.patch import emit_integration_and_version_to_test_agent from tests.utils import TracerTestCase diff --git a/tests/contrib/flask/__init__.py b/tests/contrib/flask/__init__.py index 216b3676e93..a512a79f196 100644 --- a/tests/contrib/flask/__init__.py +++ b/tests/contrib/flask/__init__.py @@ -2,9 +2,9 @@ from flask.testing import FlaskClient import wrapt -from ddtrace import Pin from ddtrace.contrib.internal.flask.patch import patch from ddtrace.contrib.internal.flask.patch import unpatch +from ddtrace.trace import Pin from tests.utils import TracerTestCase diff --git a/tests/contrib/flask/test_blueprint.py b/tests/contrib/flask/test_blueprint.py index db069d1bf04..96401dfa1a9 100644 --- a/tests/contrib/flask/test_blueprint.py +++ b/tests/contrib/flask/test_blueprint.py @@ -1,7 +1,7 @@ import flask -from ddtrace import Pin from ddtrace.contrib.internal.flask.patch import unpatch +from ddtrace.trace import Pin from . import BaseFlaskTestCase diff --git a/tests/contrib/flask/test_flask_helpers.py b/tests/contrib/flask/test_flask_helpers.py index a02f25eb4af..d3672213a0a 100644 --- a/tests/contrib/flask/test_flask_helpers.py +++ b/tests/contrib/flask/test_flask_helpers.py @@ -2,10 +2,10 @@ import flask -from ddtrace import Pin from ddtrace.contrib.internal.flask.patch import flask_version from ddtrace.contrib.internal.flask.patch import unpatch from ddtrace.internal.compat import StringIO +from ddtrace.trace import Pin from . import BaseFlaskTestCase diff --git a/tests/contrib/flask/test_signals.py b/tests/contrib/flask/test_signals.py index e16cf84157e..b86e8989047 100644 --- a/tests/contrib/flask/test_signals.py +++ b/tests/contrib/flask/test_signals.py @@ -1,9 +1,9 @@ import flask import mock -from ddtrace import Pin from ddtrace.contrib.internal.flask.patch import flask_version from ddtrace.contrib.internal.flask.patch import unpatch +from ddtrace.trace import Pin from . import BaseFlaskTestCase diff --git a/tests/contrib/flask/test_template.py b/tests/contrib/flask/test_template.py index 7231548642e..a38311d3b86 100644 --- a/tests/contrib/flask/test_template.py +++ b/tests/contrib/flask/test_template.py @@ -1,8 +1,8 @@ import flask -from ddtrace import Pin from ddtrace.contrib.internal.flask.patch import flask_version from ddtrace.contrib.internal.flask.patch import unpatch +from ddtrace.trace import Pin from . import BaseFlaskTestCase diff --git a/tests/contrib/flask_autopatch/test_flask_autopatch.py b/tests/contrib/flask_autopatch/test_flask_autopatch.py index 4da8fc921f0..27c4b47e2d0 100644 --- a/tests/contrib/flask_autopatch/test_flask_autopatch.py +++ b/tests/contrib/flask_autopatch/test_flask_autopatch.py @@ -2,9 +2,9 @@ import flask import wrapt -from ddtrace import Pin from ddtrace.contrib.internal.flask.patch import flask_version from ddtrace.ext import http +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code diff --git a/tests/contrib/google_generativeai/conftest.py b/tests/contrib/google_generativeai/conftest.py index 6c370a07452..0cadd515f84 100644 --- a/tests/contrib/google_generativeai/conftest.py +++ b/tests/contrib/google_generativeai/conftest.py @@ -6,7 +6,7 @@ from ddtrace.contrib.internal.google_generativeai.patch import patch from ddtrace.contrib.internal.google_generativeai.patch import unpatch from ddtrace.llmobs import LLMObs -from ddtrace.pin import Pin +from ddtrace.trace import Pin from tests.contrib.google_generativeai.utils import MockGenerativeModelAsyncClient from tests.contrib.google_generativeai.utils import MockGenerativeModelClient from tests.utils import DummyTracer diff --git a/tests/contrib/grpc/common.py b/tests/contrib/grpc/common.py index 668a99d2584..e67e4f32a92 100644 --- a/tests/contrib/grpc/common.py +++ b/tests/contrib/grpc/common.py @@ -2,10 +2,10 @@ from grpc._grpcio_metadata import __version__ as _GRPC_VERSION from grpc.framework.foundation import logging_pool -from ddtrace import Pin from ddtrace.contrib.internal.grpc import constants from ddtrace.contrib.internal.grpc.patch import patch from ddtrace.contrib.internal.grpc.patch import unpatch +from ddtrace.trace import Pin from tests.utils import TracerTestCase from .hello_pb2_grpc import add_HelloServicer_to_server diff --git a/tests/contrib/grpc/test_grpc.py b/tests/contrib/grpc/test_grpc.py index 8f6bd00b4e3..93dacb4cb45 100644 --- a/tests/contrib/grpc/test_grpc.py +++ b/tests/contrib/grpc/test_grpc.py @@ -5,16 +5,16 @@ from grpc.framework.foundation import logging_pool import pytest -from ddtrace import Pin from ddtrace._trace.span import _get_64_highest_order_bits_as_hex from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE -from ddtrace.contrib.grpc import constants +from ddtrace.contrib.internal.grpc import constants from ddtrace.contrib.internal.grpc.patch import _unpatch_server from ddtrace.contrib.internal.grpc.patch import patch from ddtrace.contrib.internal.grpc.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import flaky from tests.utils import snapshot diff --git a/tests/contrib/grpc_aio/test_grpc_aio.py b/tests/contrib/grpc_aio/test_grpc_aio.py index 1296e027486..885765e91ca 100644 --- a/tests/contrib/grpc_aio/test_grpc_aio.py +++ b/tests/contrib/grpc_aio/test_grpc_aio.py @@ -7,7 +7,6 @@ from grpc import aio import pytest -from ddtrace import Pin from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE @@ -16,6 +15,7 @@ from ddtrace.contrib.internal.grpc.patch import patch from ddtrace.contrib.internal.grpc.patch import unpatch from ddtrace.contrib.internal.grpc.utils import _parse_rpc_repr_string +from ddtrace.trace import Pin import ddtrace.vendor.packaging.version as packaging_version from tests.contrib.grpc.hello_pb2 import HelloReply from tests.contrib.grpc.hello_pb2 import HelloRequest diff --git a/tests/contrib/httplib/test_httplib.py b/tests/contrib/httplib/test_httplib.py index 05977b53cc5..24a5fe3f051 100644 --- a/tests/contrib/httplib/test_httplib.py +++ b/tests/contrib/httplib/test_httplib.py @@ -17,7 +17,7 @@ from ddtrace.internal.compat import parse from ddtrace.internal.constants import _HTTPLIB_NO_TRACE_REQUEST from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from ddtrace.pin import Pin +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_span_http_status_code diff --git a/tests/contrib/httplib/test_httplib_distributed.py b/tests/contrib/httplib/test_httplib_distributed.py index 3552f65a51a..40e5e891662 100644 --- a/tests/contrib/httplib/test_httplib_distributed.py +++ b/tests/contrib/httplib/test_httplib_distributed.py @@ -7,7 +7,7 @@ from ddtrace import config from ddtrace._trace.span import _get_64_highest_order_bits_as_hex from ddtrace.internal.compat import httplib -from ddtrace.pin import Pin +from ddtrace.trace import Pin from tests.utils import TracerTestCase from .test_httplib import SOCKET diff --git a/tests/contrib/httpx/test_httpx.py b/tests/contrib/httpx/test_httpx.py index 426099dcf04..33ecadb825f 100644 --- a/tests/contrib/httpx/test_httpx.py +++ b/tests/contrib/httpx/test_httpx.py @@ -6,8 +6,8 @@ from ddtrace.contrib.internal.httpx.patch import HTTPX_VERSION from ddtrace.contrib.internal.httpx.patch import patch from ddtrace.contrib.internal.httpx.patch import unpatch -from ddtrace.pin import Pin from ddtrace.settings.http import HttpConfig +from ddtrace.trace import Pin from tests.utils import flaky from tests.utils import override_config from tests.utils import override_http_config diff --git a/tests/contrib/httpx/test_httpx_pre_0_11.py b/tests/contrib/httpx/test_httpx_pre_0_11.py index fc9c003328c..315c53cb29c 100644 --- a/tests/contrib/httpx/test_httpx_pre_0_11.py +++ b/tests/contrib/httpx/test_httpx_pre_0_11.py @@ -6,8 +6,8 @@ from ddtrace.contrib.internal.httpx.patch import HTTPX_VERSION from ddtrace.contrib.internal.httpx.patch import patch from ddtrace.contrib.internal.httpx.patch import unpatch -from ddtrace.pin import Pin from ddtrace.settings.http import HttpConfig +from ddtrace.trace import Pin from tests.utils import override_config from tests.utils import override_http_config diff --git a/tests/contrib/jinja2/test_jinja2.py b/tests/contrib/jinja2/test_jinja2.py index 985c1114383..64002fd6555 100644 --- a/tests/contrib/jinja2/test_jinja2.py +++ b/tests/contrib/jinja2/test_jinja2.py @@ -4,10 +4,10 @@ # 3rd party import jinja2 -from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.jinja2.patch import patch from ddtrace.contrib.internal.jinja2.patch import unpatch +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_is_not_measured diff --git a/tests/contrib/kafka/test_kafka.py b/tests/contrib/kafka/test_kafka.py index f1afc2dbe89..38f6c783fc1 100644 --- a/tests/contrib/kafka/test_kafka.py +++ b/tests/contrib/kafka/test_kafka.py @@ -11,18 +11,18 @@ import mock import pytest -from ddtrace import Pin from ddtrace import Tracer from ddtrace.contrib.internal.kafka.patch import TracedConsumer from ddtrace.contrib.internal.kafka.patch import patch from ddtrace.contrib.internal.kafka.patch import unpatch -from ddtrace.filters import TraceFilter import ddtrace.internal.datastreams # noqa: F401 - used as part of mock patching from ddtrace.internal.datastreams.processor import PROPAGATION_KEY_BASE_64 from ddtrace.internal.datastreams.processor import ConsumerPartitionKey from ddtrace.internal.datastreams.processor import DataStreamsCtx from ddtrace.internal.datastreams.processor import PartitionKey from ddtrace.internal.utils.retry import fibonacci_backoff_with_jitter +from ddtrace.trace import Pin +from ddtrace.trace import TraceFilter from tests.contrib.config import KAFKA_CONFIG from tests.datastreams.test_public_api import MockedTracer from tests.utils import DummyTracer @@ -518,8 +518,8 @@ def _generate_in_subprocess(random_topic): "auto.offset.reset": "earliest", } ) - ddtrace.Pin.override(producer, tracer=ddtrace.tracer) - ddtrace.Pin.override(consumer, tracer=ddtrace.tracer) + ddtrace.trace.Pin.override(producer, tracer=ddtrace.tracer) + ddtrace.trace.Pin.override(consumer, tracer=ddtrace.tracer) # We run all of these commands with retry attempts because the kafka-confluent API # sys.exits on connection failures, which causes the test to fail. We want to retry @@ -799,7 +799,7 @@ def test_tracing_context_is_propagated_when_enabled(ddtrace_run_python_code_in_s import random import sys -from ddtrace import Pin +from ddtrace.trace import Pin from ddtrace.contrib.internal.kafka.patch import patch from tests.contrib.kafka.test_kafka import consumer @@ -1039,7 +1039,7 @@ def test_does_not_trace_empty_poll_when_disabled(ddtrace_run_python_code_in_subp import random import sys -from ddtrace import Pin +from ddtrace.trace import Pin from ddtrace.contrib.internal.kafka.patch import patch from ddtrace import config diff --git a/tests/contrib/kombu/test.py b/tests/contrib/kombu/test.py index ef27d3a09ac..b56ecdf0d0f 100644 --- a/tests/contrib/kombu/test.py +++ b/tests/contrib/kombu/test.py @@ -2,13 +2,13 @@ import kombu import mock -from ddtrace import Pin from ddtrace.contrib.internal.kombu import utils from ddtrace.contrib.internal.kombu.patch import patch from ddtrace.contrib.internal.kombu.patch import unpatch from ddtrace.ext import kombu as kombux from ddtrace.internal.datastreams.processor import PROPAGATION_KEY_BASE_64 from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/langchain/conftest.py b/tests/contrib/langchain/conftest.py index f54b040bba7..5184f1093b7 100644 --- a/tests/contrib/langchain/conftest.py +++ b/tests/contrib/langchain/conftest.py @@ -3,9 +3,9 @@ import mock import pytest -from ddtrace import Pin from ddtrace.contrib.internal.langchain.patch import patch from ddtrace.contrib.internal.langchain.patch import unpatch +from ddtrace.trace import Pin from tests.utils import DummyTracer from tests.utils import DummyWriter from tests.utils import override_config diff --git a/tests/contrib/mako/test_mako.py b/tests/contrib/mako/test_mako.py index 9acfaf066ae..7e690b04a43 100644 --- a/tests/contrib/mako/test_mako.py +++ b/tests/contrib/mako/test_mako.py @@ -4,13 +4,13 @@ from mako.runtime import Context from mako.template import Template -from ddtrace import Pin from ddtrace.contrib.internal.mako.constants import DEFAULT_TEMPLATE_NAME from ddtrace.contrib.internal.mako.patch import patch from ddtrace.contrib.internal.mako.patch import unpatch from ddtrace.internal.compat import StringIO from ddtrace.internal.compat import to_unicode from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/mariadb/test_mariadb.py b/tests/contrib/mariadb/test_mariadb.py index 05a3718d219..7ea8cd27feb 100644 --- a/tests/contrib/mariadb/test_mariadb.py +++ b/tests/contrib/mariadb/test_mariadb.py @@ -4,9 +4,9 @@ import mariadb import pytest -from ddtrace import Pin from ddtrace.contrib.internal.mariadb.patch import patch from ddtrace.contrib.internal.mariadb.patch import unpatch +from ddtrace.trace import Pin from tests.contrib.config import MARIADB_CONFIG from tests.utils import DummyTracer from tests.utils import assert_dict_issuperset diff --git a/tests/contrib/molten/test_molten.py b/tests/contrib/molten/test_molten.py index d0b1eb1648f..cc73ceef861 100644 --- a/tests/contrib/molten/test_molten.py +++ b/tests/contrib/molten/test_molten.py @@ -2,7 +2,6 @@ from molten.testing import TestClient import pytest -from ddtrace import Pin from ddtrace import config from ddtrace.constants import ERROR_MSG from ddtrace.contrib.internal.molten.patch import MOLTEN_VERSION @@ -12,6 +11,7 @@ from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME 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 TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code diff --git a/tests/contrib/molten/test_molten_di.py b/tests/contrib/molten/test_molten_di.py index f320dd01e64..d360698f4cb 100644 --- a/tests/contrib/molten/test_molten_di.py +++ b/tests/contrib/molten/test_molten_di.py @@ -3,9 +3,9 @@ import molten from molten import DependencyInjector -from ddtrace import Pin from ddtrace.contrib.internal.molten.patch import patch from ddtrace.contrib.internal.molten.patch import unpatch +from ddtrace.trace import Pin from tests.utils import TracerTestCase diff --git a/tests/contrib/mongoengine/test.py b/tests/contrib/mongoengine/test.py index 0f41ac61d8b..b3961e3808c 100644 --- a/tests/contrib/mongoengine/test.py +++ b/tests/contrib/mongoengine/test.py @@ -3,11 +3,11 @@ import mongoengine import pymongo -from ddtrace import Pin from ddtrace.contrib.internal.mongoengine.patch import patch from ddtrace.contrib.internal.mongoengine.patch import unpatch from ddtrace.ext import mongo as mongox from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase diff --git a/tests/contrib/mysql/test_mysql.py b/tests/contrib/mysql/test_mysql.py index 0c80d4a2c57..08626890fac 100644 --- a/tests/contrib/mysql/test_mysql.py +++ b/tests/contrib/mysql/test_mysql.py @@ -1,9 +1,9 @@ import mock import mysql -from ddtrace import Pin from ddtrace.contrib.internal.mysql.patch import patch from ddtrace.contrib.internal.mysql.patch import unpatch +from ddtrace.trace import Pin from tests.contrib import shared_tests from tests.contrib.config import MYSQL_CONFIG from tests.opentracer.utils import init_tracer diff --git a/tests/contrib/mysqldb/test_mysqldb.py b/tests/contrib/mysqldb/test_mysqldb.py index e27163b649a..5d2c98a752c 100644 --- a/tests/contrib/mysqldb/test_mysqldb.py +++ b/tests/contrib/mysqldb/test_mysqldb.py @@ -2,10 +2,10 @@ import MySQLdb import pytest -from ddtrace import Pin from ddtrace.contrib.internal.mysqldb.patch import patch from ddtrace.contrib.internal.mysqldb.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.contrib import shared_tests from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase diff --git a/tests/contrib/openai/conftest.py b/tests/contrib/openai/conftest.py index 0d36a5803bf..02311649bde 100644 --- a/tests/contrib/openai/conftest.py +++ b/tests/contrib/openai/conftest.py @@ -7,11 +7,11 @@ import mock import pytest -from ddtrace import Pin from ddtrace.contrib.internal.openai.patch import patch from ddtrace.contrib.internal.openai.patch import unpatch -from ddtrace.filters import TraceFilter from ddtrace.llmobs import LLMObs +from ddtrace.trace import Pin +from ddtrace.trace import TraceFilter from tests.utils import DummyTracer from tests.utils import DummyWriter from tests.utils import override_config diff --git a/tests/contrib/openai/test_openai_v0.py b/tests/contrib/openai/test_openai_v0.py index 04654f4a4cf..c9ab8aac716 100644 --- a/tests/contrib/openai/test_openai_v0.py +++ b/tests/contrib/openai/test_openai_v0.py @@ -1476,7 +1476,7 @@ def test_integration_sync(openai_api_key, ddtrace_run_python_code_in_subprocess) import ddtrace from tests.contrib.openai.conftest import FilterOrg from tests.contrib.openai.test_openai_v0 import get_openai_vcr -pin = ddtrace.Pin.get_from(openai) +pin = ddtrace.trace.Pin.get_from(openai) pin.tracer.configure(settings={"FILTERS": [FilterOrg()]}) with get_openai_vcr(subdirectory_name="v0").use_cassette("completion.yaml"): resp = openai.Completion.create(model="ada", prompt="Hello world", temperature=0.8, n=2, stop=".", max_tokens=10) @@ -1527,7 +1527,7 @@ def test_integration_async(openai_api_key, ddtrace_run_python_code_in_subprocess import ddtrace from tests.contrib.openai.conftest import FilterOrg from tests.contrib.openai.test_openai_v0 import get_openai_vcr -pin = ddtrace.Pin.get_from(openai) +pin = ddtrace.trace.Pin.get_from(openai) pin.tracer.configure(settings={"FILTERS": [FilterOrg()]}) async def task(): with get_openai_vcr(subdirectory_name="v0").use_cassette("completion_async.yaml"): @@ -1900,7 +1900,7 @@ def test_integration_service_name(openai_api_key, ddtrace_run_python_code_in_sub import ddtrace from tests.contrib.openai.conftest import FilterOrg from tests.contrib.openai.test_openai_v0 import get_openai_vcr -pin = ddtrace.Pin.get_from(openai) +pin = ddtrace.trace.Pin.get_from(openai) pin.tracer.configure(settings={"FILTERS": [FilterOrg()]}) with get_openai_vcr(subdirectory_name="v0").use_cassette("completion.yaml"): resp = openai.Completion.create(model="ada", prompt="Hello world", temperature=0.8, n=2, stop=".", max_tokens=10) diff --git a/tests/contrib/openai/test_openai_v1.py b/tests/contrib/openai/test_openai_v1.py index 91737d9e5eb..9c9738cbb69 100644 --- a/tests/contrib/openai/test_openai_v1.py +++ b/tests/contrib/openai/test_openai_v1.py @@ -1111,7 +1111,7 @@ def test_integration_sync(openai_api_key, ddtrace_run_python_code_in_subprocess) import ddtrace from tests.contrib.openai.conftest import FilterOrg from tests.contrib.openai.test_openai_v1 import get_openai_vcr -pin = ddtrace.Pin.get_from(openai) +pin = ddtrace.trace.Pin.get_from(openai) pin.tracer.configure(settings={"FILTERS": [FilterOrg()]}) with get_openai_vcr(subdirectory_name="v1").use_cassette("completion.yaml"): client = openai.OpenAI() @@ -1159,7 +1159,7 @@ def test_integration_async(openai_api_key, ddtrace_run_python_code_in_subprocess import ddtrace from tests.contrib.openai.conftest import FilterOrg from tests.contrib.openai.test_openai_v1 import get_openai_vcr -pin = ddtrace.Pin.get_from(openai) +pin = ddtrace.trace.Pin.get_from(openai) pin.tracer.configure(settings={"FILTERS": [FilterOrg()]}) async def task(): with get_openai_vcr(subdirectory_name="v1").use_cassette("completion.yaml"): @@ -1547,7 +1547,7 @@ def test_integration_service_name(openai_api_key, ddtrace_run_python_code_in_sub import ddtrace from tests.contrib.openai.conftest import FilterOrg from tests.contrib.openai.test_openai_v1 import get_openai_vcr -pin = ddtrace.Pin.get_from(openai) +pin = ddtrace.trace.Pin.get_from(openai) pin.tracer.configure(settings={"FILTERS": [FilterOrg()]}) with get_openai_vcr(subdirectory_name="v1").use_cassette("completion.yaml"): client = openai.OpenAI() diff --git a/tests/contrib/psycopg/test_psycopg.py b/tests/contrib/psycopg/test_psycopg.py index d7821ca8905..8e13ecc4128 100644 --- a/tests/contrib/psycopg/test_psycopg.py +++ b/tests/contrib/psycopg/test_psycopg.py @@ -8,11 +8,11 @@ from psycopg.sql import Identifier from psycopg.sql import Literal -from ddtrace import Pin from ddtrace.contrib.internal.psycopg.patch import patch from ddtrace.contrib.internal.psycopg.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from ddtrace.internal.utils.version import parse_version +from ddtrace.trace import Pin from tests.contrib.config import POSTGRES_CONFIG from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase diff --git a/tests/contrib/psycopg/test_psycopg_async.py b/tests/contrib/psycopg/test_psycopg_async.py index 7a8654f1626..7e4fbd59624 100644 --- a/tests/contrib/psycopg/test_psycopg_async.py +++ b/tests/contrib/psycopg/test_psycopg_async.py @@ -5,9 +5,9 @@ from psycopg.sql import SQL from psycopg.sql import Literal -from ddtrace import Pin from ddtrace.contrib.internal.psycopg.patch import patch from ddtrace.contrib.internal.psycopg.patch import unpatch +from ddtrace.trace import Pin from tests.contrib.asyncio.utils import AsyncioTestCase from tests.contrib.config import POSTGRES_CONFIG from tests.opentracer.utils import init_tracer diff --git a/tests/contrib/psycopg2/test_psycopg.py b/tests/contrib/psycopg2/test_psycopg.py index eeea555d396..902d24d3c0e 100644 --- a/tests/contrib/psycopg2/test_psycopg.py +++ b/tests/contrib/psycopg2/test_psycopg.py @@ -7,11 +7,11 @@ from psycopg2 import extensions from psycopg2 import extras -from ddtrace import Pin from ddtrace.contrib.internal.psycopg.patch import patch from ddtrace.contrib.internal.psycopg.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from ddtrace.internal.utils.version import parse_version +from ddtrace.trace import Pin from tests.contrib.config import POSTGRES_CONFIG from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase diff --git a/tests/contrib/pylibmc/test.py b/tests/contrib/pylibmc/test.py index 7a112677c27..9de012439dc 100644 --- a/tests/contrib/pylibmc/test.py +++ b/tests/contrib/pylibmc/test.py @@ -5,12 +5,13 @@ # 3p import pylibmc -# project -from ddtrace import Pin from ddtrace.contrib.internal.pylibmc.client import TracedClient from ddtrace.contrib.internal.pylibmc.patch import patch from ddtrace.contrib.internal.pylibmc.patch import unpatch from ddtrace.ext import memcached + +# project +from ddtrace.trace import Pin from tests.contrib.config import MEMCACHED_CONFIG as cfg from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase diff --git a/tests/contrib/pymemcache/test_client.py b/tests/contrib/pymemcache/test_client.py index 07eba3766ed..19a7a93d523 100644 --- a/tests/contrib/pymemcache/test_client.py +++ b/tests/contrib/pymemcache/test_client.py @@ -9,12 +9,13 @@ import pytest import wrapt -# project -from ddtrace import Pin from ddtrace.contrib.internal.pymemcache.client import WrappedClient from ddtrace.contrib.internal.pymemcache.patch import patch from ddtrace.contrib.internal.pymemcache.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME + +# project +from ddtrace.trace import Pin from tests.utils import DummyTracer from tests.utils import TracerTestCase from tests.utils import override_config diff --git a/tests/contrib/pymemcache/test_client_defaults.py b/tests/contrib/pymemcache/test_client_defaults.py index b16414c3c9f..0b5e44aa3b0 100644 --- a/tests/contrib/pymemcache/test_client_defaults.py +++ b/tests/contrib/pymemcache/test_client_defaults.py @@ -2,10 +2,11 @@ import pymemcache import pytest -# project -from ddtrace import Pin from ddtrace.contrib.internal.pymemcache.patch import patch from ddtrace.contrib.internal.pymemcache.patch import unpatch + +# project +from ddtrace.trace import Pin from tests.utils import override_config from .test_client_mixin import TEST_HOST diff --git a/tests/contrib/pymemcache/test_client_mixin.py b/tests/contrib/pymemcache/test_client_mixin.py index 78162fcf93c..2d471765e1f 100644 --- a/tests/contrib/pymemcache/test_client_mixin.py +++ b/tests/contrib/pymemcache/test_client_mixin.py @@ -2,12 +2,13 @@ import pymemcache import pytest -# project -from ddtrace import Pin from ddtrace.contrib.internal.pymemcache.patch import patch from ddtrace.contrib.internal.pymemcache.patch import unpatch from ddtrace.ext import memcached as memcachedx from ddtrace.ext import net + +# project +from ddtrace.trace import Pin from tests.utils import DummyTracer from tests.utils import TracerTestCase from tests.utils import override_config diff --git a/tests/contrib/pymongo/test.py b/tests/contrib/pymongo/test.py index f439036fcc1..7c0c1e58140 100644 --- a/tests/contrib/pymongo/test.py +++ b/tests/contrib/pymongo/test.py @@ -3,13 +3,14 @@ import pymongo -# project -from ddtrace import Pin from ddtrace.contrib.internal.pymongo.client import normalize_filter from ddtrace.contrib.internal.pymongo.patch import _CHECKOUT_FN_NAME from ddtrace.contrib.internal.pymongo.patch import patch from ddtrace.contrib.internal.pymongo.patch import unpatch from ddtrace.ext import SpanTypes + +# project +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase diff --git a/tests/contrib/pymysql/test_pymysql.py b/tests/contrib/pymysql/test_pymysql.py index b8a11e5afa7..e94e03c8395 100644 --- a/tests/contrib/pymysql/test_pymysql.py +++ b/tests/contrib/pymysql/test_pymysql.py @@ -1,10 +1,10 @@ import mock import pymysql -from ddtrace import Pin from ddtrace.contrib.internal.pymysql.patch import patch from ddtrace.contrib.internal.pymysql.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.contrib import shared_tests from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase diff --git a/tests/contrib/pynamodb/test_pynamodb.py b/tests/contrib/pynamodb/test_pynamodb.py index 8f474419bc0..33b4e4c2c14 100644 --- a/tests/contrib/pynamodb/test_pynamodb.py +++ b/tests/contrib/pynamodb/test_pynamodb.py @@ -4,10 +4,10 @@ from pynamodb.connection.base import Connection import pytest -from ddtrace import Pin from ddtrace.contrib.internal.pynamodb.patch import patch from ddtrace.contrib.internal.pynamodb.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/pyodbc/test_pyodbc.py b/tests/contrib/pyodbc/test_pyodbc.py index 8703b0b0391..4c965aede7b 100644 --- a/tests/contrib/pyodbc/test_pyodbc.py +++ b/tests/contrib/pyodbc/test_pyodbc.py @@ -1,9 +1,9 @@ import pyodbc -from ddtrace import Pin from ddtrace.contrib.internal.pyodbc.patch import patch from ddtrace.contrib.internal.pyodbc.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/pyramid/pserve_app/app/__init__.py b/tests/contrib/pyramid/pserve_app/app/__init__.py index 13b4b58b6ab..69ba7b14d8b 100644 --- a/tests/contrib/pyramid/pserve_app/app/__init__.py +++ b/tests/contrib/pyramid/pserve_app/app/__init__.py @@ -2,7 +2,7 @@ from pyramid.response import Response from ddtrace import tracer -from ddtrace.filters import TraceFilter +from ddtrace.trace import TraceFilter class PingFilter(TraceFilter): diff --git a/tests/contrib/pytest/test_pytest.py b/tests/contrib/pytest/test_pytest.py index eeefa59f714..8dcf9c50bd4 100644 --- a/tests/contrib/pytest/test_pytest.py +++ b/tests/contrib/pytest/test_pytest.py @@ -724,7 +724,7 @@ def test_dd_origin_tag_propagated_to_every_span(self): """ import pytest import ddtrace - from ddtrace import Pin + from ddtrace.trace import Pin def test_service(ddtracer): with ddtracer.trace("SPAN2") as span2: diff --git a/tests/contrib/redis/test_redis.py b/tests/contrib/redis/test_redis.py index 4bd4f896686..233e78cba4e 100644 --- a/tests/contrib/redis/test_redis.py +++ b/tests/contrib/redis/test_redis.py @@ -5,10 +5,10 @@ import redis import ddtrace -from ddtrace import Pin from ddtrace.contrib.internal.redis.patch import patch from ddtrace.contrib.internal.redis.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase diff --git a/tests/contrib/redis/test_redis_asyncio.py b/tests/contrib/redis/test_redis_asyncio.py index 116b0dd2784..77a809392cd 100644 --- a/tests/contrib/redis/test_redis_asyncio.py +++ b/tests/contrib/redis/test_redis_asyncio.py @@ -7,10 +7,10 @@ import redis.asyncio from wrapt import ObjectProxy -from ddtrace import Pin from ddtrace import tracer from ddtrace.contrib.internal.redis.patch import patch from ddtrace.contrib.internal.redis.patch import unpatch +from ddtrace.trace import Pin from tests.utils import override_config from ..config import REDIS_CONFIG diff --git a/tests/contrib/redis/test_redis_cluster.py b/tests/contrib/redis/test_redis_cluster.py index dcf58c2d00a..2731a18fcee 100644 --- a/tests/contrib/redis/test_redis_cluster.py +++ b/tests/contrib/redis/test_redis_cluster.py @@ -2,10 +2,10 @@ import pytest import redis -from ddtrace import Pin from ddtrace.contrib.internal.redis.patch import patch from ddtrace.contrib.internal.redis.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerTestCase diff --git a/tests/contrib/redis/test_redis_cluster_asyncio.py b/tests/contrib/redis/test_redis_cluster_asyncio.py index 03815073723..b8624c533aa 100644 --- a/tests/contrib/redis/test_redis_cluster_asyncio.py +++ b/tests/contrib/redis/test_redis_cluster_asyncio.py @@ -2,9 +2,9 @@ import pytest import redis -from ddtrace import Pin from ddtrace.contrib.internal.redis.patch import patch from ddtrace.contrib.internal.redis.patch import unpatch +from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import assert_is_measured @@ -164,9 +164,9 @@ def test_default_service_name_v1(): import redis - from ddtrace import Pin from ddtrace.contrib.internal.redis.patch import patch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME + from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerSpanContainer @@ -210,9 +210,9 @@ def test_user_specified_service_v0(): import redis - from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.redis.patch import patch + from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerSpanContainer @@ -259,9 +259,9 @@ def test_user_specified_service_v1(): import redis - from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.redis.patch import patch + from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerSpanContainer @@ -304,8 +304,8 @@ def test_env_user_specified_rediscluster_service_v0(): import redis - from ddtrace import Pin from ddtrace.contrib.internal.redis.patch import patch + from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerSpanContainer @@ -345,8 +345,8 @@ def test_env_user_specified_rediscluster_service_v1(): import redis - from ddtrace import Pin from ddtrace.contrib.internal.redis.patch import patch + from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerSpanContainer @@ -390,9 +390,9 @@ def test_service_precedence_v0(): import redis - from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.redis.patch import patch + from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerSpanContainer @@ -435,9 +435,9 @@ def test_service_precedence_v1(): import redis - from ddtrace import Pin from ddtrace import config from ddtrace.contrib.internal.redis.patch import patch + from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerSpanContainer diff --git a/tests/contrib/rediscluster/test.py b/tests/contrib/rediscluster/test.py index 1ba8881e161..a2c5ac5c6b2 100644 --- a/tests/contrib/rediscluster/test.py +++ b/tests/contrib/rediscluster/test.py @@ -2,11 +2,11 @@ import pytest import rediscluster -from ddtrace import Pin from ddtrace.contrib.internal.rediscluster.patch import REDISCLUSTER_VERSION from ddtrace.contrib.internal.rediscluster.patch import patch from ddtrace.contrib.internal.rediscluster.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.contrib.config import REDISCLUSTER_CONFIG from tests.utils import DummyTracer from tests.utils import TracerTestCase diff --git a/tests/contrib/rq/test_rq.py b/tests/contrib/rq/test_rq.py index d2efb996227..d72871823da 100644 --- a/tests/contrib/rq/test_rq.py +++ b/tests/contrib/rq/test_rq.py @@ -6,10 +6,10 @@ import redis import rq -from ddtrace import Pin from ddtrace.contrib.internal.rq.patch import get_version from ddtrace.contrib.internal.rq.patch import patch from ddtrace.contrib.internal.rq.patch import unpatch +from ddtrace.trace import Pin from tests.contrib.patch import emit_integration_and_version_to_test_agent from tests.utils import override_config from tests.utils import snapshot diff --git a/tests/contrib/shared_tests.py b/tests/contrib/shared_tests.py index a7659374693..cf647a15628 100644 --- a/tests/contrib/shared_tests.py +++ b/tests/contrib/shared_tests.py @@ -1,4 +1,4 @@ -from ddtrace import Pin +from ddtrace.trace import Pin # DBM Shared Tests diff --git a/tests/contrib/shared_tests_async.py b/tests/contrib/shared_tests_async.py index 97d1df32cfa..0d49f09d608 100644 --- a/tests/contrib/shared_tests_async.py +++ b/tests/contrib/shared_tests_async.py @@ -1,4 +1,4 @@ -from ddtrace import Pin +from ddtrace.trace import Pin # DBM Shared Tests diff --git a/tests/contrib/snowflake/test_snowflake.py b/tests/contrib/snowflake/test_snowflake.py index cdb735fb947..9762804651d 100644 --- a/tests/contrib/snowflake/test_snowflake.py +++ b/tests/contrib/snowflake/test_snowflake.py @@ -6,10 +6,10 @@ import responses import snowflake.connector -from ddtrace import Pin from ddtrace import tracer from ddtrace.contrib.internal.snowflake.patch import patch from ddtrace.contrib.internal.snowflake.patch import unpatch +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import override_config from tests.utils import snapshot diff --git a/tests/contrib/sqlalchemy/test_patch.py b/tests/contrib/sqlalchemy/test_patch.py index f33c4bdd8a5..a6f08bb5f46 100644 --- a/tests/contrib/sqlalchemy/test_patch.py +++ b/tests/contrib/sqlalchemy/test_patch.py @@ -1,10 +1,10 @@ import sqlalchemy from sqlalchemy import text -from ddtrace import Pin from ddtrace.contrib.internal.sqlalchemy.patch import get_version from ddtrace.contrib.internal.sqlalchemy.patch import patch from ddtrace.contrib.internal.sqlalchemy.patch import unpatch +from ddtrace.trace import Pin from tests.contrib.patch import emit_integration_and_version_to_test_agent from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/sqlite3/test_sqlite3.py b/tests/contrib/sqlite3/test_sqlite3.py index f10452cb8da..6101dcfa081 100644 --- a/tests/contrib/sqlite3/test_sqlite3.py +++ b/tests/contrib/sqlite3/test_sqlite3.py @@ -13,7 +13,6 @@ import pytest import ddtrace -from ddtrace import Pin from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE @@ -21,6 +20,7 @@ from ddtrace.contrib.internal.sqlite3.patch import patch from ddtrace.contrib.internal.sqlite3.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured diff --git a/tests/contrib/starlette/test_starlette.py b/tests/contrib/starlette/test_starlette.py index 7d56c71c3f8..f290ade8ea7 100644 --- a/tests/contrib/starlette/test_starlette.py +++ b/tests/contrib/starlette/test_starlette.py @@ -8,13 +8,13 @@ from starlette.testclient import TestClient import ddtrace -from ddtrace import Pin from ddtrace.constants import ERROR_MSG from ddtrace.contrib.internal.sqlalchemy.patch import patch as sql_patch from ddtrace.contrib.internal.sqlalchemy.patch import unpatch as sql_unpatch from ddtrace.contrib.internal.starlette.patch import patch as starlette_patch from ddtrace.contrib.internal.starlette.patch import unpatch as starlette_unpatch from ddtrace.propagation import http as http_propagation +from ddtrace.trace import Pin from tests.contrib.starlette.app import get_app from tests.utils import DummyTracer from tests.utils import TracerSpanContainer diff --git a/tests/contrib/subprocess/test_subprocess.py b/tests/contrib/subprocess/test_subprocess.py index a6ff5a3a9bd..40e7ab67431 100644 --- a/tests/contrib/subprocess/test_subprocess.py +++ b/tests/contrib/subprocess/test_subprocess.py @@ -4,13 +4,13 @@ import pytest -from ddtrace import Pin from ddtrace.contrib.internal.subprocess.constants import COMMANDS from ddtrace.contrib.internal.subprocess.patch import SubprocessCmdLine from ddtrace.contrib.internal.subprocess.patch import patch from ddtrace.contrib.internal.subprocess.patch import unpatch from ddtrace.ext import SpanTypes from ddtrace.internal import core +from ddtrace.trace import Pin from tests.utils import override_config from tests.utils import override_global_config diff --git a/tests/contrib/tornado/test_config.py b/tests/contrib/tornado/test_config.py index d91a2e95912..718bf48d1dc 100644 --- a/tests/contrib/tornado/test_config.py +++ b/tests/contrib/tornado/test_config.py @@ -1,5 +1,5 @@ from ddtrace._trace.tracer import Tracer -from ddtrace.filters import TraceFilter +from ddtrace.trace import TraceFilter from tests.utils import DummyWriter from .utils import TornadoTestCase diff --git a/tests/contrib/urllib3/test_urllib3.py b/tests/contrib/urllib3/test_urllib3.py index 256104a80f5..53c9b12bf6b 100644 --- a/tests/contrib/urllib3/test_urllib3.py +++ b/tests/contrib/urllib3/test_urllib3.py @@ -11,8 +11,8 @@ from ddtrace.contrib.internal.urllib3.patch import unpatch from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from ddtrace.pin import Pin from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Pin from tests.contrib.config import HTTPBIN_CONFIG from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase diff --git a/tests/contrib/vertexai/conftest.py b/tests/contrib/vertexai/conftest.py index d048683a5c7..d5e689137ff 100644 --- a/tests/contrib/vertexai/conftest.py +++ b/tests/contrib/vertexai/conftest.py @@ -5,7 +5,7 @@ from ddtrace.contrib.internal.vertexai.patch import patch from ddtrace.contrib.internal.vertexai.patch import unpatch from ddtrace.llmobs import LLMObs -from ddtrace.pin import Pin +from ddtrace.trace import Pin from tests.contrib.vertexai.utils import MockAsyncPredictionServiceClient from tests.contrib.vertexai.utils import MockPredictionServiceClient from tests.utils import DummyTracer diff --git a/tests/contrib/vertica/test_vertica.py b/tests/contrib/vertica/test_vertica.py index f0c47887f9e..196e1621ee5 100644 --- a/tests/contrib/vertica/test_vertica.py +++ b/tests/contrib/vertica/test_vertica.py @@ -2,7 +2,6 @@ import wrapt import ddtrace -from ddtrace import Pin from ddtrace import config from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK @@ -11,6 +10,7 @@ from ddtrace.contrib.internal.vertica.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from ddtrace.settings.config import _deepmerge +from ddtrace.trace import Pin from tests.contrib.config import VERTICA_CONFIG from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer diff --git a/tests/contrib/yaaredis/test_yaaredis.py b/tests/contrib/yaaredis/test_yaaredis.py index 17903e4ec3d..350b323de9c 100644 --- a/tests/contrib/yaaredis/test_yaaredis.py +++ b/tests/contrib/yaaredis/test_yaaredis.py @@ -6,9 +6,9 @@ from wrapt import ObjectProxy import yaaredis -from ddtrace import Pin from ddtrace.contrib.internal.yaaredis.patch import patch from ddtrace.contrib.internal.yaaredis.patch import unpatch +from ddtrace.trace import Pin from tests.opentracer.utils import init_tracer from tests.utils import override_config diff --git a/tests/telemetry/test_telemetry.py b/tests/telemetry/test_telemetry.py index 558e9961afc..f128e695c67 100644 --- a/tests/telemetry/test_telemetry.py +++ b/tests/telemetry/test_telemetry.py @@ -148,7 +148,7 @@ def test_app_started_error_handled_exception(test_agent_session, run_python_code logging.basicConfig() from ddtrace import tracer -from ddtrace.filters import TraceFilter +from ddtrace.trace import TraceFilter class FailingFilture(TraceFilter): def process_trace(self, trace): diff --git a/tests/tracer/runtime/test_tag_collectors.py b/tests/tracer/runtime/test_tag_collectors.py index 3889b7b7e15..c15590d2daf 100644 --- a/tests/tracer/runtime/test_tag_collectors.py +++ b/tests/tracer/runtime/test_tag_collectors.py @@ -77,8 +77,8 @@ def test_tracer_tags_config(): def test_tracer_tags_service_from_code(): """Ensure we collect the expected tags for the TracerTagCollector""" import ddtrace - from ddtrace.filters import TraceFilter from ddtrace.internal.runtime import tag_collectors + from ddtrace.trace import TraceFilter from tests.conftest import DEFAULT_DDTRACE_SUBPROCESS_TEST_SERVICE_NAME class DropFilter(TraceFilter): diff --git a/tests/tracer/test_filters.py b/tests/tracer/test_filters.py index 73861f8d3a2..871405517b7 100644 --- a/tests/tracer/test_filters.py +++ b/tests/tracer/test_filters.py @@ -4,8 +4,8 @@ from ddtrace._trace.span import Span from ddtrace.ext.http import URL -from ddtrace.filters import FilterRequestsOnUrl -from ddtrace.filters import TraceFilter +from ddtrace.trace import FilterRequestsOnUrl +from ddtrace.trace import TraceFilter class FilterRequestOnUrlTests(TestCase): diff --git a/tests/tracer/test_instance_config.py b/tests/tracer/test_instance_config.py index fb5235a8d77..457bf53a408 100644 --- a/tests/tracer/test_instance_config.py +++ b/tests/tracer/test_instance_config.py @@ -1,8 +1,8 @@ from unittest import TestCase from ddtrace import config -from ddtrace.pin import Pin from ddtrace.settings import IntegrationConfig +from ddtrace.trace import Pin class InstanceConfigTestCase(TestCase): diff --git a/tests/tracer/test_pin.py b/tests/tracer/test_pin.py index a1b83ca4c37..47712d2f421 100644 --- a/tests/tracer/test_pin.py +++ b/tests/tracer/test_pin.py @@ -2,7 +2,7 @@ import pytest -from ddtrace import Pin +from ddtrace.trace import Pin class PinTestCase(TestCase): diff --git a/tests/tracer/test_trace_utils.py b/tests/tracer/test_trace_utils.py index e9869c13b17..a7604636b62 100644 --- a/tests/tracer/test_trace_utils.py +++ b/tests/tracer/test_trace_utils.py @@ -13,7 +13,6 @@ import mock import pytest -from ddtrace import Pin from ddtrace import Tracer from ddtrace import config from ddtrace._trace.context import Context @@ -29,6 +28,7 @@ from ddtrace.propagation.http import HTTP_HEADER_TRACE_ID from ddtrace.settings import Config from ddtrace.settings import IntegrationConfig +from ddtrace.trace import Pin from tests.appsec.utils import asm_context from tests.utils import override_global_config diff --git a/tests/webclient.py b/tests/webclient.py index 7254a0896dd..33e5751baf6 100644 --- a/tests/webclient.py +++ b/tests/webclient.py @@ -3,9 +3,9 @@ import requests from ddtrace._trace.context import Context -from ddtrace.filters import TraceFilter from ddtrace.internal.utils.retry import retry from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import TraceFilter class Client(object):