diff --git a/ddtrace/__init__.py b/ddtrace/__init__.py index 4e09cb073a4..862fe723067 100644 --- a/ddtrace/__init__.py +++ b/ddtrace/__init__.py @@ -12,9 +12,7 @@ # configure ddtrace logger before other modules log configure_ddtrace_logger() # noqa: E402 -from .settings._config import Config as _Config - -config = _Config() +from .settings._config import config # Enable telemetry writer and excepthook as early as possible to ensure we capture any exceptions from initialization diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index fa882275e23..9ead65d3b00 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -5,9 +5,9 @@ from wrapt.importer import when_imported -from ddtrace import config from ddtrace.appsec import load_common_appsec_modules from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE +from ddtrace.settings._config import config from ddtrace.settings.asm import config as asm_config from ddtrace.vendor.debtcollector import deprecate @@ -88,10 +88,10 @@ "falcon": True, "pyramid": True, # Auto-enable logging if the environment variable DD_LOGS_INJECTION is true - "logbook": config._logs_injection, # type: ignore - "logging": config._logs_injection, # type: ignore - "loguru": config._logs_injection, # type: ignore - "structlog": config._logs_injection, # type: ignore + "logbook": config._logs_injection, + "logging": config._logs_injection, + "loguru": config._logs_injection, + "structlog": config._logs_injection, "pynamodb": True, "pyodbc": True, "fastapi": True, diff --git a/ddtrace/_trace/processor/__init__.py b/ddtrace/_trace/processor/__init__.py index e4b4c75755e..e3a66833c95 100644 --- a/ddtrace/_trace/processor/__init__.py +++ b/ddtrace/_trace/processor/__init__.py @@ -8,7 +8,6 @@ from typing import Optional from typing import Union -from ddtrace import config from ddtrace._trace.sampler import DatadogSampler from ddtrace._trace.span import Span from ddtrace._trace.span import _get_64_highest_order_bits_as_hex @@ -28,6 +27,7 @@ from ddtrace.internal.telemetry.constants import TELEMETRY_LOG_LEVEL from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE from ddtrace.internal.writer import TraceWriter +from ddtrace.settings._config import config try: diff --git a/ddtrace/_trace/provider.py b/ddtrace/_trace/provider.py index c6136253503..d10b28e0ed3 100644 --- a/ddtrace/_trace/provider.py +++ b/ddtrace/_trace/provider.py @@ -5,7 +5,7 @@ from typing import Optional from typing import Union -from ddtrace import _hooks +from ddtrace._hooks import Hooks from ddtrace._trace.context import Context from ddtrace._trace.span import Span from ddtrace.internal.logger import get_logger @@ -30,7 +30,7 @@ class BaseContextProvider(metaclass=abc.ABCMeta): """ def __init__(self) -> None: - self._hooks = _hooks.Hooks() + self._hooks = Hooks() @abc.abstractmethod def _has_active_context(self) -> bool: diff --git a/ddtrace/_trace/sampler.py b/ddtrace/_trace/sampler.py index beee9094d6c..e15473eacd7 100644 --- a/ddtrace/_trace/sampler.py +++ b/ddtrace/_trace/sampler.py @@ -8,9 +8,9 @@ from typing import List from typing import Optional -from ddtrace import config from ddtrace._trace.span import Span from ddtrace.constants import _SAMPLING_LIMIT_DECISION +from ddtrace.settings._config import config from ..constants import ENV_KEY from ..internal.constants import MAX_UINT_64BITS diff --git a/ddtrace/_trace/span.py b/ddtrace/_trace/span.py index 6d7a0577889..322f1b3a857 100644 --- a/ddtrace/_trace/span.py +++ b/ddtrace/_trace/span.py @@ -15,7 +15,6 @@ from typing import Union from typing import cast -from ddtrace import config from ddtrace._trace._limits import MAX_SPAN_META_VALUE_LEN from ddtrace._trace._span_link import SpanLink from ddtrace._trace._span_link import SpanLinkKind @@ -54,6 +53,7 @@ from ddtrace.internal.logger import get_logger from ddtrace.internal.sampling import SamplingMechanism from ddtrace.internal.sampling import set_sampling_decision_maker +from ddtrace.settings._config import config _NUMERIC_TAGS = (_ANALYTICS_SAMPLE_RATE_KEY,) diff --git a/ddtrace/_trace/tracer.py b/ddtrace/_trace/tracer.py index 7d2aec4e4ae..65bdb4abec0 100644 --- a/ddtrace/_trace/tracer.py +++ b/ddtrace/_trace/tracer.py @@ -16,8 +16,7 @@ from typing import TypeVar from typing import Union -from ddtrace import _hooks -from ddtrace import config +from ddtrace._hooks import Hooks from ddtrace._trace.context import Context from ddtrace._trace.processor import SpanAggregator from ddtrace._trace.processor import SpanProcessor @@ -65,6 +64,7 @@ from ddtrace.internal.writer import TraceWriter from ddtrace.settings._agent import config as agent_config from ddtrace.settings._config import Config +from ddtrace.settings._config import config from ddtrace.settings.asm import config as asm_config from ddtrace.settings.peer_service import _ps_config @@ -274,7 +274,7 @@ def __init__(self) -> None: self.data_streams_processor = DataStreamsProcessor(self._agent_url) register_on_exit_signal(self._atexit) - self._hooks = _hooks.Hooks() + self._hooks = Hooks() forksafe.register_before_fork(self._sample_before_fork) # Non-global tracers require that we still register these hooks, until diff --git a/ddtrace/contrib/internal/subprocess/patch.py b/ddtrace/contrib/internal/subprocess/patch.py index d2b3688e5b2..a450b3e727d 100644 --- a/ddtrace/contrib/internal/subprocess/patch.py +++ b/ddtrace/contrib/internal/subprocess/patch.py @@ -14,13 +14,13 @@ from typing import Union # noqa:F401 from typing import cast # noqa:F401 -from ddtrace import config from ddtrace.contrib import trace_utils from ddtrace.contrib.internal.subprocess.constants import COMMANDS from ddtrace.ext import SpanTypes from ddtrace.internal import core from ddtrace.internal.forksafe import RLock from ddtrace.internal.logger import get_logger +from ddtrace.settings._config import config from ddtrace.settings.asm import config as asm_config from ddtrace.trace import Pin diff --git a/ddtrace/contrib/internal/trace_utils.py b/ddtrace/contrib/internal/trace_utils.py index f9049fbfc66..4ace82499ae 100644 --- a/ddtrace/contrib/internal/trace_utils.py +++ b/ddtrace/contrib/internal/trace_utils.py @@ -21,7 +21,6 @@ import wrapt -from ddtrace import config from ddtrace.ext import http from ddtrace.ext import net from ddtrace.ext import user @@ -36,6 +35,7 @@ from ddtrace.internal.utils.http import strip_query_string import ddtrace.internal.utils.wrappers from ddtrace.propagation.http import HTTPPropagator +from ddtrace.settings._config import config from ddtrace.settings.asm import config as asm_config from ddtrace.trace import Pin diff --git a/ddtrace/internal/core/event_hub.py b/ddtrace/internal/core/event_hub.py index f7254dab3c4..7d4ecd3cba1 100644 --- a/ddtrace/internal/core/event_hub.py +++ b/ddtrace/internal/core/event_hub.py @@ -7,7 +7,7 @@ from typing import Optional from typing import Tuple -from ddtrace import config +from ddtrace.settings._config import config _listeners: Dict[str, Dict[Any, Callable[..., Any]]] = {} diff --git a/ddtrace/internal/datastreams/processor.py b/ddtrace/internal/datastreams/processor.py index ffb7fa38d69..cd60616b02b 100644 --- a/ddtrace/internal/datastreams/processor.py +++ b/ddtrace/internal/datastreams/processor.py @@ -15,13 +15,13 @@ from typing import Optional # noqa:F401 from typing import Union # noqa:F401 -import ddtrace -from ddtrace import config from ddtrace.internal import compat from ddtrace.internal.atexit import register_on_exit_signal from ddtrace.internal.constants import DEFAULT_SERVICE_NAME from ddtrace.internal.native import DDSketch from ddtrace.internal.utils.retry import fibonacci_backoff_with_jitter +from ddtrace.settings._config import config +from ddtrace.version import get_version from .._encoding import packb from ..agent import get_connection @@ -131,9 +131,10 @@ def __init__(self, agent_url, interval=None, timeout=1.0, retry_attempts=3): self._buckets = defaultdict( lambda: Bucket(defaultdict(PathwayStats), defaultdict(int), defaultdict(int)) ) # type: DefaultDict[int, Bucket] + self._version = get_version() self._headers = { "Datadog-Meta-Lang": "python", - "Datadog-Meta-Tracer-Version": ddtrace.__version__, + "Datadog-Meta-Tracer-Version": self._version, "Content-Type": "application/msgpack", "Content-Encoding": "gzip", } # type: Dict[str, str] @@ -297,7 +298,7 @@ def periodic(self): return raw_payload = { "Service": self._service, - "TracerVersion": ddtrace.__version__, + "TracerVersion": self._version, "Lang": "python", "Stats": serialized_stats, "Hostname": self._hostname, diff --git a/ddtrace/internal/processor/stats.py b/ddtrace/internal/processor/stats.py index d955b665043..152093658a5 100644 --- a/ddtrace/internal/processor/stats.py +++ b/ddtrace/internal/processor/stats.py @@ -3,13 +3,13 @@ import os import typing -import ddtrace -from ddtrace import config from ddtrace._trace.processor import SpanProcessor from ddtrace._trace.span import _is_top_level from ddtrace.internal import compat from ddtrace.internal.native import DDSketch from ddtrace.internal.utils.retry import fibonacci_backoff_with_jitter +from ddtrace.settings._config import config +from ddtrace.version import get_version from ...constants import _SPAN_MEASURED_KEY from .._encoding import packb @@ -103,7 +103,7 @@ def __init__(self, agent_url, interval=None, timeout=1.0, retry_attempts=3): ) # type: DefaultDict[int, DefaultDict[SpanAggrKey, SpanAggrStats]] self._headers = { "Datadog-Meta-Lang": "python", - "Datadog-Meta-Tracer-Version": ddtrace.__version__, + "Datadog-Meta-Tracer-Version": get_version(), "Content-Type": "application/msgpack", } # type: Dict[str, str] self._hostname = "" diff --git a/ddtrace/internal/sampling.py b/ddtrace/internal/sampling.py index e51cd8c9879..ba59d8f93ef 100644 --- a/ddtrace/internal/sampling.py +++ b/ddtrace/internal/sampling.py @@ -14,7 +14,6 @@ except ImportError: from typing_extensions import TypedDict -from ddtrace import config from ddtrace._trace.sampling_rule import SamplingRule # noqa:F401 from ddtrace.constants import _SAMPLING_AGENT_DECISION from ddtrace.constants import _SAMPLING_RULE_DECISION @@ -29,6 +28,7 @@ from ddtrace.internal.constants import SamplingMechanism from ddtrace.internal.glob_matching import GlobMatcher from ddtrace.internal.logger import get_logger +from ddtrace.settings._config import config from .rate_limiter import RateLimiter diff --git a/ddtrace/internal/schema/processor.py b/ddtrace/internal/schema/processor.py index 91b0feff5dc..b83a0187b0c 100644 --- a/ddtrace/internal/schema/processor.py +++ b/ddtrace/internal/schema/processor.py @@ -1,6 +1,6 @@ -from ddtrace import config from ddtrace._trace.processor import TraceProcessor from ddtrace.constants import _BASE_SERVICE_KEY +from ddtrace.settings._config import config from . import schematize_service_name diff --git a/ddtrace/propagation/http.py b/ddtrace/propagation/http.py index e1ba7d0bd65..6df69d92df4 100644 --- a/ddtrace/propagation/http.py +++ b/ddtrace/propagation/http.py @@ -12,13 +12,13 @@ import urllib.parse import ddtrace -from ddtrace import config from ddtrace._trace._span_link import SpanLink from ddtrace._trace.span import _get_64_highest_order_bits_as_hex from ddtrace._trace.span import _get_64_lowest_order_bits_as_int from ddtrace._trace.span import _MetaDictType from ddtrace.appsec._constants import APPSEC from ddtrace.internal.core import dispatch +from ddtrace.settings._config import config from ddtrace.settings.asm import config as asm_config from ddtrace.trace import Context from ddtrace.trace import Span # noqa:F401 diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 1ca90dcbebc..4de92f1113f 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -877,3 +877,6 @@ def _convert_rc_trace_sampling_rules( def _lower(self, value): return value.lower() + + +config = Config() diff --git a/ddtrace/settings/asm.py b/ddtrace/settings/asm.py index ba4b18f5474..43e11affd59 100644 --- a/ddtrace/settings/asm.py +++ b/ddtrace/settings/asm.py @@ -6,7 +6,6 @@ from typing import List from typing import Optional -from ddtrace import config as tracer_config from ddtrace.appsec._constants import API_SECURITY from ddtrace.appsec._constants import APPSEC from ddtrace.appsec._constants import DEFAULT @@ -17,6 +16,7 @@ from ddtrace.constants import APPSEC_ENV from ddtrace.internal import core from ddtrace.internal.serverless import in_aws_lambda +from ddtrace.settings._config import config as tracer_config from ddtrace.settings._core import DDConfig @@ -64,9 +64,7 @@ class ASMConfig(DDConfig): # prevent empty string if _asm_static_rule_file == "": _asm_static_rule_file = None - _iast_enabled = tracer_config._from_endpoint.get( # type: ignore - "iast_enabled", DDConfig.var(bool, IAST.ENV, default=False) - ) + _iast_enabled = tracer_config._from_endpoint.get("iast_enabled", DDConfig.var(bool, IAST.ENV, default=False)) _iast_request_sampling = DDConfig.var(float, IAST.ENV_REQUEST_SAMPLING, default=30.0) _iast_debug = DDConfig.var(bool, IAST.ENV_DEBUG, default=False, private=True) _iast_propagation_debug = DDConfig.var(bool, IAST.ENV_PROPAGATION_DEBUG, default=False, private=True)