diff --git a/ddtrace/appsec/_ddwaf/ddwaf_types.py b/ddtrace/appsec/_ddwaf/ddwaf_types.py index 607788069a1..c7a00600ca2 100644 --- a/ddtrace/appsec/_ddwaf/ddwaf_types.py +++ b/ddtrace/appsec/_ddwaf/ddwaf_types.py @@ -105,7 +105,7 @@ class ddwaf_object(ctypes.Structure): def __init__( self, - struct: DDWafRulesType = None, + struct: Optional[DDWafRulesType] = None, observator: _observator = _observator(), # noqa : B008 max_objects: int = DDWAF_MAX_CONTAINER_SIZE, max_depth: int = DDWAF_MAX_CONTAINER_DEPTH, diff --git a/ddtrace/appsec/_ddwaf/waf.py b/ddtrace/appsec/_ddwaf/waf.py index 66e89a75252..002cc8b1372 100644 --- a/ddtrace/appsec/_ddwaf/waf.py +++ b/ddtrace/appsec/_ddwaf/waf.py @@ -172,7 +172,7 @@ def run( self, ctx: ddwaf_context_capsule, data: DDWafRulesType, - ephemeral_data: DDWafRulesType = None, + ephemeral_data: Optional[DDWafRulesType] = None, timeout_ms: float = DEFAULT.WAF_TIMEOUT, ) -> DDWaf_result: start = time.monotonic() diff --git a/ddtrace/appsec/_ddwaf/waf_mock.py b/ddtrace/appsec/_ddwaf/waf_mock.py index 46a97ed1595..f27fb7e3cdb 100644 --- a/ddtrace/appsec/_ddwaf/waf_mock.py +++ b/ddtrace/appsec/_ddwaf/waf_mock.py @@ -1,5 +1,6 @@ from typing import Any from typing import Dict +from typing import Optional from typing import Sequence from typing import Tuple @@ -41,7 +42,7 @@ def run( self, ctx: ddwaf_context_capsule, data: DDWafRulesType, - ephemeral_data: DDWafRulesType = None, + ephemeral_data: Optional[DDWafRulesType] = None, timeout_ms: float = DEFAULT.WAF_TIMEOUT, ) -> DDWaf_result: LOGGER.debug("DDWaf features disabled. dry run") diff --git a/ddtrace/appsec/_ddwaf/waf_stubs.py b/ddtrace/appsec/_ddwaf/waf_stubs.py index 70b0d89478b..1e9fb694660 100644 --- a/ddtrace/appsec/_ddwaf/waf_stubs.py +++ b/ddtrace/appsec/_ddwaf/waf_stubs.py @@ -110,7 +110,7 @@ def run( self, ctx: ddwaf_context_capsule, data: DDWafRulesType, - ephemeral_data: DDWafRulesType = None, + ephemeral_data: Optional[DDWafRulesType] = None, timeout_ms: float = DEFAULT.WAF_TIMEOUT, ) -> DDWaf_result: pass diff --git a/ddtrace/contrib/internal/unittest/patch.py b/ddtrace/contrib/internal/unittest/patch.py index 37c3dff14e9..76a9552ebcf 100644 --- a/ddtrace/contrib/internal/unittest/patch.py +++ b/ddtrace/contrib/internal/unittest/patch.py @@ -1,6 +1,7 @@ import inspect import os from typing import Dict +from typing import Optional from typing import Union import unittest @@ -464,7 +465,7 @@ def unpatch(): _CIVisibility.disable() -def _set_test_span_status(test_item, status: str, exc_info: str = None, skip_reason: str = None): +def _set_test_span_status(test_item, status: str, exc_info: Optional[str] = None, skip_reason: Optional[str] = None): span = _extract_span(test_item) if not span: log.debug("Tried setting test result for test but could not find span for %s", test_item) diff --git a/ddtrace/internal/telemetry/metrics_namespaces.pyi b/ddtrace/internal/telemetry/metrics_namespaces.pyi index 738a0455b17..1d68fd41279 100644 --- a/ddtrace/internal/telemetry/metrics_namespaces.pyi +++ b/ddtrace/internal/telemetry/metrics_namespaces.pyi @@ -20,5 +20,5 @@ class MetricNamespace: namespace: TELEMETRY_NAMESPACE, name: str, value: float = 1.0, - tags: MetricTagType = None, + tags: Optional[MetricTagType] = None, ) -> None: ... diff --git a/ddtrace/internal/telemetry/writer.py b/ddtrace/internal/telemetry/writer.py index c974330a247..e36fcfa3320 100644 --- a/ddtrace/internal/telemetry/writer.py +++ b/ddtrace/internal/telemetry/writer.py @@ -560,7 +560,9 @@ def _format_file_path(self, filename: str) -> str: except ValueError: return filename - def add_gauge_metric(self, namespace: TELEMETRY_NAMESPACE, name: str, value: float, tags: MetricTagType = None): + def add_gauge_metric( + self, namespace: TELEMETRY_NAMESPACE, name: str, value: float, tags: Optional[MetricTagType] = None + ): """ Queues gauge metric """ @@ -573,7 +575,9 @@ def add_gauge_metric(self, namespace: TELEMETRY_NAMESPACE, name: str, value: flo tags, ) - def add_rate_metric(self, namespace: TELEMETRY_NAMESPACE, name: str, value: float, tags: MetricTagType = None): + def add_rate_metric( + self, namespace: TELEMETRY_NAMESPACE, name: str, value: float, tags: Optional[MetricTagType] = None + ): """ Queues rate metric """ @@ -586,7 +590,9 @@ def add_rate_metric(self, namespace: TELEMETRY_NAMESPACE, name: str, value: floa tags, ) - def add_count_metric(self, namespace: TELEMETRY_NAMESPACE, name: str, value: int = 1, tags: MetricTagType = None): + def add_count_metric( + self, namespace: TELEMETRY_NAMESPACE, name: str, value: int = 1, tags: Optional[MetricTagType] = None + ): """ Queues count metric """ @@ -600,7 +606,7 @@ def add_count_metric(self, namespace: TELEMETRY_NAMESPACE, name: str, value: int ) def add_distribution_metric( - self, namespace: TELEMETRY_NAMESPACE, name: str, value: float, tags: MetricTagType = None + self, namespace: TELEMETRY_NAMESPACE, name: str, value: float, tags: Optional[MetricTagType] = None ): """ Queues distributions metric diff --git a/mypy.ini b/mypy.ini index a0b48ad667f..882598d8256 100644 --- a/mypy.ini +++ b/mypy.ini @@ -7,7 +7,6 @@ scripts_are_modules = true show_error_codes = true warn_unused_ignores = true warn_unused_configs = true -no_implicit_optional = true ignore_missing_imports = true namespace_packages = true plugins = envier.mypy diff --git a/tests/appsec/integrations/fastapi_tests/test_fastapi_appsec_iast.py b/tests/appsec/integrations/fastapi_tests/test_fastapi_appsec_iast.py index 09261f1bf0e..5d80bc11646 100644 --- a/tests/appsec/integrations/fastapi_tests/test_fastapi_appsec_iast.py +++ b/tests/appsec/integrations/fastapi_tests/test_fastapi_appsec_iast.py @@ -283,7 +283,7 @@ async def test_route(request: Request): @pytest.mark.skipif(fastapi_version < (0, 95, 0), reason="Header annotation doesn't work on fastapi 94 or lower") def test_header_value_source_typing_param(fastapi_application, client, tracer, test_spans): @fastapi_application.get("/index.html") - async def test_route(iast_header: typing.Annotated[str, Header()] = None): + async def test_route(iast_header: typing.Annotated[str, Header()]): from ddtrace.appsec._iast._taint_tracking import origin_to_str from ddtrace.appsec._iast._taint_tracking._taint_objects_base import get_tainted_ranges diff --git a/tests/ci_visibility/api_client/_util.py b/tests/ci_visibility/api_client/_util.py index 99e57fe9624..f9277931811 100644 --- a/tests/ci_visibility/api_client/_util.py +++ b/tests/ci_visibility/api_client/_util.py @@ -176,7 +176,7 @@ def _get_test_client( self, itr_skipping_level: ITR_SKIPPING_LEVEL = ITR_SKIPPING_LEVEL.TEST, requests_mode: REQUESTS_MODE = _AGENTLESS, - git_data: GitData = None, + git_data: t.Optional[GitData] = None, api_key: t.Optional[str] = "my_api_key", dd_site: t.Optional[str] = None, agentless_url: t.Optional[str] = None, @@ -215,7 +215,7 @@ def _get_test_client( def _get_expected_do_request_setting_payload( self, itr_skipping_level: ITR_SKIPPING_LEVEL = ITR_SKIPPING_LEVEL.TEST, - git_data: GitData = None, + git_data: t.Optional[GitData] = None, dd_service: t.Optional[str] = None, dd_env: t.Optional[str] = None, ): @@ -246,7 +246,7 @@ def _get_expected_do_request_setting_payload( def _get_expected_do_request_skippable_payload( self, itr_skipping_level: ITR_SKIPPING_LEVEL = ITR_SKIPPING_LEVEL.TEST, - git_data: GitData = None, + git_data: t.Optional[GitData] = None, dd_service: t.Optional[str] = None, dd_env: t.Optional[str] = None, ): @@ -275,7 +275,7 @@ def _get_expected_do_request_skippable_payload( def _get_expected_do_request_tests_payload( self, - repository_url: str = None, + repository_url: t.Optional[str] = None, dd_service: t.Optional[str] = None, dd_env: t.Optional[str] = None, ): diff --git a/tests/contrib/integration_registry/registry_update_helpers/integration.py b/tests/contrib/integration_registry/registry_update_helpers/integration.py index d837bf1207b..7b250d32e37 100644 --- a/tests/contrib/integration_registry/registry_update_helpers/integration.py +++ b/tests/contrib/integration_registry/registry_update_helpers/integration.py @@ -1,3 +1,6 @@ +from typing import Optional + + class Integration: """ Represents an integration in the registry. @@ -7,8 +10,8 @@ def __init__( self, integration_name: str, is_external_package: bool = True, - dependency_names: list = None, - tested_versions_by_dependency: dict = None, + dependency_names: Optional[list] = None, + tested_versions_by_dependency: Optional[dict] = None, is_tested: bool = True, ): self.integration_name = integration_name @@ -84,7 +87,7 @@ def should_update(self, new_dependency_versions: dict) -> bool: return True return False - def update(self, updates: dict, update_versions: bool = False, riot_venv: str = None) -> bool: + def update(self, updates: dict, update_versions: bool = False, riot_venv: Optional[str] = None) -> bool: """Updates the integration with the new dependency versions.""" # skip if the integration is not an external package if not self.is_external_package: diff --git a/tests/contrib/openai_agents/test_openai_agents_llmobs.py b/tests/contrib/openai_agents/test_openai_agents_llmobs.py index 3e763d2ae65..588b0e925b0 100644 --- a/tests/contrib/openai_agents/test_openai_agents_llmobs.py +++ b/tests/contrib/openai_agents/test_openai_agents_llmobs.py @@ -1,5 +1,6 @@ from typing import Dict from typing import List +from typing import Optional from typing import Tuple import mock @@ -122,9 +123,9 @@ def _assert_expected_agent_run( expected_span_names: List[str], spans, llmobs_events, - llm_calls: List[Tuple[List[Dict], List[Dict]]] = None, - tool_calls: List[dict] = None, - previous_tool_events: List[dict] = None, + llm_calls: Optional[List[Tuple[List[Dict], List[Dict]]]] = None, + tool_calls: Optional[List[dict]] = None, + previous_tool_events: Optional[List[dict]] = None, is_chat=False, ) -> List[dict]: """Assert expected LLMObs events matches actual events for an agent run diff --git a/tests/contrib/pytest/test_pytest.py b/tests/contrib/pytest/test_pytest.py index 9907b6a7398..44dc5e8e224 100644 --- a/tests/contrib/pytest/test_pytest.py +++ b/tests/contrib/pytest/test_pytest.py @@ -48,7 +48,7 @@ def _get_spans_from_list( spans: t.List[ddtrace.trace.Span], span_type: str, - name: str = None, + name: t.Optional[str] = None, status: t.Optional[str] = None, ) -> t.List[ddtrace.trace.Span]: _names_map = {