From e00a25e8ce91a877886e4fdeb0d3a893a0882a22 Mon Sep 17 00:00:00 2001 From: Connor Kirkpatrick Date: Mon, 19 Jan 2026 16:56:34 +0000 Subject: [PATCH 1/3] fix(typing): resolve ty diagnostics in logging and metrics modules - logging/buffer/functions.py: add guard clause for None values from dict.get() before comparison - metrics/base.py: add cast for functools.wraps union type, add set_default_dimensions stub to base class Resolves 3 of 10 diagnostics from #7929 --- aws_lambda_powertools/logging/buffer/functions.py | 3 +++ aws_lambda_powertools/metrics/base.py | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/aws_lambda_powertools/logging/buffer/functions.py b/aws_lambda_powertools/logging/buffer/functions.py index cbd453bcb00..f21d2429fbb 100644 --- a/aws_lambda_powertools/logging/buffer/functions.py +++ b/aws_lambda_powertools/logging/buffer/functions.py @@ -121,6 +121,9 @@ def _check_minimum_buffer_log_level(buffer_log_level, current_log_level): buffer_level_num = log_levels.get(buffer_log_level.upper()) current_level_num = log_levels.get(current_log_level.upper()) + if buffer_level_num is None or current_level_num is None: + return False + # Compare numeric levels if buffer_level_num < current_level_num: return True diff --git a/aws_lambda_powertools/metrics/base.py b/aws_lambda_powertools/metrics/base.py index 2e5ea59df20..205237425eb 100644 --- a/aws_lambda_powertools/metrics/base.py +++ b/aws_lambda_powertools/metrics/base.py @@ -15,7 +15,7 @@ import warnings from collections import defaultdict from contextlib import contextmanager -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, cast from aws_lambda_powertools.metrics.exceptions import ( MetricResolutionError, @@ -375,6 +375,10 @@ def flush_metrics(self, raise_on_empty_metrics: bool = False) -> None: print(json.dumps(metrics, separators=(",", ":"))) self.clear_metrics() + def set_default_dimensions(self, **dimensions: str) -> None: + """Persist dimensions across Lambda invocations. Override in subclass.""" + pass + def log_metrics( self, lambda_handler: Callable[[dict, Any], Any] | Callable[[dict, Any, dict | None], Any] | None = None, @@ -428,7 +432,7 @@ def handler(event, context): default_dimensions=default_dimensions, ) - @functools.wraps(lambda_handler) + @functools.wraps(cast("Callable[..., Any]", lambda_handler)) def decorate(event, context, *args, **kwargs): unwrapped_context = context.lambda_context if is_durable_context(context) else context try: From 225101bad5fd78d77262330ecb09f6f2fca21d92 Mon Sep 17 00:00:00 2001 From: Connor Kirkpatrick Date: Mon, 19 Jan 2026 17:10:15 +0000 Subject: [PATCH 2/3] test(logging): add test for invalid log level handling --- .../required_dependencies/test_logger_buffer_functions.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/unit/logger/required_dependencies/test_logger_buffer_functions.py b/tests/unit/logger/required_dependencies/test_logger_buffer_functions.py index c4e80ec3058..cb8eb6980f8 100644 --- a/tests/unit/logger/required_dependencies/test_logger_buffer_functions.py +++ b/tests/unit/logger/required_dependencies/test_logger_buffer_functions.py @@ -29,3 +29,10 @@ def test_resolve_buffer_log_level_edge_cases(): # Additional edge cases assert _check_minimum_buffer_log_level("DEBUG", "CRITICAL") is True assert _check_minimum_buffer_log_level("CRITICAL", "DEBUG") is False + + +def test_resolve_buffer_log_level_invalid_level(): + # Invalid log levels should return False + assert _check_minimum_buffer_log_level("INVALID", "DEBUG") is False + assert _check_minimum_buffer_log_level("DEBUG", "INVALID") is False + assert _check_minimum_buffer_log_level("INVALID", "INVALID") is False From 402cfd432a93c9df2b2ef61bcef7b8d30ba0b808 Mon Sep 17 00:00:00 2001 From: Connor Kirkpatrick Date: Mon, 19 Jan 2026 17:12:18 +0000 Subject: [PATCH 3/3] chore: add pragma no cover for stub method --- aws_lambda_powertools/metrics/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws_lambda_powertools/metrics/base.py b/aws_lambda_powertools/metrics/base.py index 205237425eb..65e47cd5061 100644 --- a/aws_lambda_powertools/metrics/base.py +++ b/aws_lambda_powertools/metrics/base.py @@ -377,7 +377,7 @@ def flush_metrics(self, raise_on_empty_metrics: bool = False) -> None: def set_default_dimensions(self, **dimensions: str) -> None: """Persist dimensions across Lambda invocations. Override in subclass.""" - pass + pass # pragma: no cover def log_metrics( self,