Skip to content

Commit 2c21763

Browse files
fix(typing): resolve ty diagnostics in logging and metrics modules (#7953)
* 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 * test(logging): add test for invalid log level handling * chore: add pragma no cover for stub method --------- Co-authored-by: Leandro Damascena <lcdama@amazon.pt>
1 parent 3b96fa1 commit 2c21763

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

aws_lambda_powertools/logging/buffer/functions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ def _check_minimum_buffer_log_level(buffer_log_level, current_log_level):
121121
buffer_level_num = log_levels.get(buffer_log_level.upper())
122122
current_level_num = log_levels.get(current_log_level.upper())
123123

124+
if buffer_level_num is None or current_level_num is None:
125+
return False
126+
124127
# Compare numeric levels
125128
if buffer_level_num < current_level_num:
126129
return True

aws_lambda_powertools/metrics/base.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import warnings
1616
from collections import defaultdict
1717
from contextlib import contextmanager
18-
from typing import TYPE_CHECKING, Any
18+
from typing import TYPE_CHECKING, Any, cast
1919

2020
from aws_lambda_powertools.metrics.exceptions import (
2121
MetricResolutionError,
@@ -375,6 +375,10 @@ def flush_metrics(self, raise_on_empty_metrics: bool = False) -> None:
375375
print(json.dumps(metrics, separators=(",", ":")))
376376
self.clear_metrics()
377377

378+
def set_default_dimensions(self, **dimensions: str) -> None:
379+
"""Persist dimensions across Lambda invocations. Override in subclass."""
380+
pass # pragma: no cover
381+
378382
def log_metrics(
379383
self,
380384
lambda_handler: Callable[[dict, Any], Any] | Callable[[dict, Any, dict | None], Any] | None = None,
@@ -428,7 +432,7 @@ def handler(event, context):
428432
default_dimensions=default_dimensions,
429433
)
430434

431-
@functools.wraps(lambda_handler)
435+
@functools.wraps(cast("Callable[..., Any]", lambda_handler))
432436
def decorate(event, context, *args, **kwargs):
433437
unwrapped_context = context.lambda_context if is_durable_context(context) else context
434438
try:

tests/unit/logger/required_dependencies/test_logger_buffer_functions.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,10 @@ def test_resolve_buffer_log_level_edge_cases():
2929
# Additional edge cases
3030
assert _check_minimum_buffer_log_level("DEBUG", "CRITICAL") is True
3131
assert _check_minimum_buffer_log_level("CRITICAL", "DEBUG") is False
32+
33+
34+
def test_resolve_buffer_log_level_invalid_level():
35+
# Invalid log levels should return False
36+
assert _check_minimum_buffer_log_level("INVALID", "DEBUG") is False
37+
assert _check_minimum_buffer_log_level("DEBUG", "INVALID") is False
38+
assert _check_minimum_buffer_log_level("INVALID", "INVALID") is False

0 commit comments

Comments
 (0)