Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .sg/rules/os-environ-usage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ files:
- "ddtrace/**"
ignores:
- "ddtrace/settings/_env.py"
- "ddtrace/commands/ddtrace_run.py"
- "ddtrace/settings/_inferred_base_service.py" # Not sure which env var are used in this file - Needs to be investigated
- "ddtrace/internal/serverless/__init__.py" # Serverless providers env vars only in this file
- "ddtrace/internal/native/__init__.py" # Needs to be investigated, only DD_TRACE_DEBUG is used in this file
- "ddtrace/internal/dist_computing/utils.py" # Ray specific env var
rule:
any:
# Match os.environ access patterns
Expand Down
4 changes: 2 additions & 2 deletions ddtrace/bootstrap/cloning.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import logging
import os
import sys
import warnings

from ddtrace.internal.module import ModuleWatchdog
from ddtrace.internal.module import is_module_installed
from ddtrace.internal.utils.formats import asbool # noqa:F401
from ddtrace.settings import _env


MODULES_REQUIRING_CLEANUP = ("gevent",)


enabled = (
any(is_module_installed(m) for m in MODULES_REQUIRING_CLEANUP)
if (_unload_modules := os.getenv("DD_UNLOAD_MODULES_FROM_SITECUSTOMIZE", default="auto").lower()) == "auto"
if (_unload_modules := _env.getenv("DD_UNLOAD_MODULES_FROM_SITECUSTOMIZE", default="auto").lower()) == "auto"
else asbool(_unload_modules)
)

Expand Down
3 changes: 2 additions & 1 deletion ddtrace/bootstrap/sitecustomize.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import ddtrace.bootstrap.cloning as cloning
from ddtrace.internal.logger import get_logger # noqa:F401
from ddtrace.internal.telemetry import telemetry_writer
from ddtrace.settings import _env


log = get_logger(__name__)
Expand Down Expand Up @@ -67,7 +68,7 @@
else:
log.debug("additional sitecustomize found in: %s", sys.path)

if os.getenv("_DD_PY_SSI_INJECT") == "1":
if _env.getenv("_DD_PY_SSI_INJECT") == "1":
# _DD_PY_SSI_INJECT is set to `1` in lib-injection/sources/sitecustomize.py when ssi is started
# and doesn't abort.
source = "ssi"
Expand Down
3 changes: 2 additions & 1 deletion ddtrace/ext/ci.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

from ddtrace.ext import git
from ddtrace.internal.logger import get_logger
from ddtrace.settings import _env


# CI app dd_origin tag
Expand Down Expand Up @@ -97,7 +98,7 @@ def _get_runtime_and_os_metadata():
def tags(env=None, cwd=None):
# type: (Optional[MutableMapping[str, str]], Optional[str]) -> Dict[str, str]
"""Extract and set tags from provider environ, as well as git metadata."""
env = os.environ if env is None else env
env = _env.environ if env is None else env
tags = {} # type: Dict[str, Optional[str]]
for key, extract in PROVIDERS:
if key in env:
Expand Down
3 changes: 2 additions & 1 deletion ddtrace/ext/git.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from ddtrace.internal.logger import get_logger
from ddtrace.internal.utils.cache import cached
from ddtrace.internal.utils.time import StopWatch
from ddtrace.settings import _env


GitNotFoundError = FileNotFoundError
Expand Down Expand Up @@ -402,7 +403,7 @@ def extract_git_metadata(cwd=None):
def extract_user_git_metadata(env=None):
# type: (Optional[MutableMapping[str, str]]) -> Dict[str, Optional[str]]
"""Extract git commit metadata from user-provided env vars."""
env = os.environ if env is None else env
env = _env.environ if env is None else env

branch = normalize_ref(env.get("DD_GIT_BRANCH"))
tag = normalize_ref(env.get("DD_GIT_TAG"))
Expand Down
4 changes: 2 additions & 2 deletions ddtrace/ext/test_visibility/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@
NOTE: BETA - this API is currently in development and is subject to change.
"""

import os
import typing as t

from ddtrace import config
from ddtrace.ext.test_visibility._constants import ITR_SKIPPING_LEVEL
from ddtrace.internal.utils.formats import asbool
from ddtrace.settings import _env


def _get_default_test_visibility_contrib_config() -> t.Dict[str, t.Any]:
return dict(
_default_service="default_test_visibility_service",
itr_skipping_level=(
ITR_SKIPPING_LEVEL.SUITE
if asbool(os.getenv("_DD_CIVISIBILITY_ITR_SUITE_MODE", True))
if asbool(_env.getenv("_DD_CIVISIBILITY_ITR_SUITE_MODE", True))
else ITR_SKIPPING_LEVEL.TEST
),
_itr_skipping_ignore_parameters=False,
Expand Down
8 changes: 4 additions & 4 deletions ddtrace/internal/ci_visibility/_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from http.client import RemoteDisconnected
import json
from json import JSONDecodeError
import os
import socket
import typing as t
from typing import TypedDict # noqa:F401
Expand Down Expand Up @@ -55,6 +54,7 @@
from ddtrace.internal.utils.http import get_connection
from ddtrace.internal.utils.http import verify_url
from ddtrace.internal.utils.time import StopWatch
from ddtrace.settings import _env


log = get_logger(__name__)
Expand Down Expand Up @@ -406,7 +406,7 @@ def fetch_settings(self, read_from_cache: bool = True) -> TestVisibilityAPISetti
require_git = attributes["require_git"]
itr_enabled = attributes["itr_enabled"]
flaky_test_retries_enabled = attributes["flaky_test_retries_enabled"] or asbool(
os.getenv("_DD_TEST_FORCE_ENABLE_ATR")
_env.getenv("_DD_TEST_FORCE_ENABLE_ATR")
)
known_tests_enabled = attributes["known_tests_enabled"]

Expand All @@ -424,7 +424,7 @@ def fetch_settings(self, read_from_cache: bool = True) -> TestVisibilityAPISetti

test_management_attributes = attributes.get("test_management", {})
test_management_enabled = test_management_attributes.get("enabled", False)
attempt_to_fix_retries_env = os.getenv("DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES")
attempt_to_fix_retries_env = _env.getenv("DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES")
if attempt_to_fix_retries_env and attempt_to_fix_retries_env.isdigit():
attempt_to_fix_retries = int(attempt_to_fix_retries_env)
log.debug("Number of Attempt to Fix retries obtained from environment: %d", attempt_to_fix_retries)
Expand All @@ -435,7 +435,7 @@ def fetch_settings(self, read_from_cache: bool = True) -> TestVisibilityAPISetti
log.debug("Number of Attempt to Fix retries obtained from API: %d", attempt_to_fix_retries)

test_management = TestManagementSettings(
enabled=test_management_enabled or asbool(os.getenv("_DD_TEST_FORCE_ENABLE_TEST_MANAGEMENT")),
enabled=test_management_enabled or asbool(_env.getenv("_DD_TEST_FORCE_ENABLE_TEST_MANAGEMENT")),
attempt_to_fix_retries=attempt_to_fix_retries,
)

Expand Down
5 changes: 3 additions & 2 deletions ddtrace/internal/ci_visibility/_api_responses_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from ddtrace.internal.logger import get_logger
from ddtrace.internal.utils.formats import asbool
from ddtrace.settings import _env


log = get_logger(__name__)
Expand All @@ -15,7 +16,7 @@


def _is_response_cache_enabled():
return asbool(os.getenv("_DD_CIVISIBILITY_RESPONSE_CACHE_ENABLED", "false").lower())
return asbool(_env.getenv("_DD_CIVISIBILITY_RESPONSE_CACHE_ENABLED", "false").lower())


def _get_cache_file_path(cache_key: str) -> str:
Expand Down Expand Up @@ -68,5 +69,5 @@ def _clean_api_response_cache_dir():
shutil.rmtree(_API_RESPONSE_CACHE_DIR)


if os.environ.get("PYTEST_XDIST_WORKER") is None: # Not an xdist worker
if _env.environ.get("PYTEST_XDIST_WORKER") is None: # Not an xdist worker
atexit.register(_clean_api_response_cache_dir)
6 changes: 3 additions & 3 deletions ddtrace/internal/ci_visibility/api/_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import os
from pathlib import Path
from time import time_ns
from typing import ContextManager
Expand Down Expand Up @@ -44,6 +43,7 @@
from ddtrace.internal.test_visibility._efd_mixins import EFDTestStatus
from ddtrace.internal.test_visibility.coverage_lines import CoverageLines
from ddtrace.internal.utils.formats import asbool
from ddtrace.settings import _env


log = get_logger(__name__)
Expand Down Expand Up @@ -114,7 +114,7 @@ def __init__(
def _start_span(self, context: Optional[Context] = None) -> None:
super()._start_span(context)

if asbool(os.getenv("DD_CIVISIBILITY_USE_BETA_WRITER")) and self._span:
if asbool(_env.getenv("DD_CIVISIBILITY_USE_BETA_WRITER")) and self._span:
self._main_tracer_context = ddtrace.tracer._activate_context(
Context(trace_id=self._span.trace_id, span_id=self._span.span_id)
)
Expand All @@ -123,7 +123,7 @@ def _start_span(self, context: Optional[Context] = None) -> None:
def _finish_span(self, override_finish_time: Optional[float] = None) -> None:
super()._finish_span(override_finish_time)

if asbool(os.getenv("DD_CIVISIBILITY_USE_BETA_WRITER")) and self._main_tracer_context:
if asbool(_env.getenv("DD_CIVISIBILITY_USE_BETA_WRITER")) and self._main_tracer_context:
self._main_tracer_context.__exit__(None, None, None)

def __repr__(self) -> str:
Expand Down
3 changes: 2 additions & 1 deletion ddtrace/internal/ci_visibility/coverage.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@
from ddtrace.internal.coverage.code import ModuleCodeCollector
from ddtrace.internal.logger import get_logger
from ddtrace.internal.utils.formats import asbool
from ddtrace.settings import _env


log = get_logger(__name__)
_global_relative_file_paths_for_cov: Dict[str, Dict[str, str]] = {}

# This feature-flags experimental collection of code coverage via our internal ModuleCodeCollector.
# It is disabled by default because it is not production-ready.
USE_DD_COVERAGE = asbool(os.environ.get("_DD_USE_INTERNAL_COVERAGE", "false"))
USE_DD_COVERAGE = asbool(_env.environ.get("_DD_USE_INTERNAL_COVERAGE", "false"))

try:
from coverage import Coverage
Expand Down
4 changes: 2 additions & 2 deletions ddtrace/internal/ci_visibility/encoder.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from __future__ import annotations

import json
import os
import threading
from typing import TYPE_CHECKING # noqa:F401
from typing import Any # noqa:F401
Expand Down Expand Up @@ -30,6 +29,7 @@
from ddtrace.internal.logger import get_logger
from ddtrace.internal.utils.time import StopWatch
from ddtrace.internal.writer.writer import NoEncodableSpansError
from ddtrace.settings import _env


log = get_logger(__name__)
Expand All @@ -52,7 +52,7 @@ def __init__(self, *args):
super(CIVisibilityEncoderV01, self).__init__()
self._metadata: Dict[str, Dict[str, str]] = {}
self._lock = threading.RLock()
self._is_xdist_worker = os.getenv("PYTEST_XDIST_WORKER") is not None
self._is_xdist_worker = _env.getenv("PYTEST_XDIST_WORKER") is not None
self._init_buffer()

def __len__(self):
Expand Down
3 changes: 2 additions & 1 deletion ddtrace/internal/ci_visibility/git_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from ddtrace.ext.git import extract_workspace_path
from ddtrace.internal.logger import get_logger
from ddtrace.internal.utils.retry import fibonacci_backoff_with_jitter
from ddtrace.settings import _env
from ddtrace.settings._agent import config as agent_config
from ddtrace.settings._telemetry import config as telemetry_config
from ddtrace.trace import Tracer # noqa: F401
Expand Down Expand Up @@ -100,7 +101,7 @@ def __init__(
elif self._requests_mode == REQUESTS_MODE.AGENTLESS_EVENTS:
self._base_url = urljoin(
"https://api.{}".format(
os.getenv("DD_SITE", AGENTLESS_DEFAULT_SITE),
_env.getenv("DD_SITE", AGENTLESS_DEFAULT_SITE),
),
GIT_API_BASE_PATH,
)
Expand Down
Loading
Loading