Skip to content

Commit 0def6bd

Browse files
committed
squash! fix(metrics): warnings when there are default_dimensions
* Property cast dimension value to str in all code that updates dimension_set. * No need to check if `isinstance(value, str)` before casting to str. This is already optimized in CPython, which reuses the same instance if value is already an str. This is unnecessary overengineering.
1 parent 8e8a56a commit 0def6bd

1 file changed

Lines changed: 8 additions & 11 deletions

File tree

  • aws_lambda_powertools/metrics/provider/cloudwatch_emf

aws_lambda_powertools/metrics/provider/cloudwatch_emf/cloudwatch.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ def __init__(
100100
self._metric_unit_valid_options = list(MetricUnit.__members__)
101101
self._metric_resolutions = [resolution.value for resolution in MetricResolution]
102102

103-
self.dimension_set.update(**self.default_dimensions)
103+
for name, value in self.default_dimensions.items():
104+
self.add_dimension(name, value)
104105

105106
def add_metric(
106107
self,
@@ -306,7 +307,7 @@ def add_dimension(self, name: str, value: str) -> None:
306307
f"Maximum number of dimensions exceeded ({MAX_DIMENSIONS}): Unable to add dimension {name}.",
307308
)
308309

309-
value = value if isinstance(value, str) else str(value)
310+
value = str(value)
310311

311312
if not name.strip() or not value.strip():
312313
warnings.warn(
@@ -317,7 +318,7 @@ def add_dimension(self, name: str, value: str) -> None:
317318
)
318319
return
319320

320-
if name in self.dimension_set or name in self.default_dimensions:
321+
if name in self.dimension_set:
321322
warnings.warn(
322323
f"Dimension '{name}' has already been added. The previous value will be overwritten.",
323324
category=PowertoolsUserWarning,
@@ -415,12 +416,8 @@ def add_metadata(self, key: str, value: Any) -> None:
415416
logger.debug(f"Adding metadata: {key}:{value}")
416417

417418
# Cast key to str according to EMF spec
418-
# Majority of keys are expected to be string already, so
419-
# checking before casting improves performance in most cases
420-
if isinstance(key, str):
421-
self.metadata_set[key] = value
422-
else:
423-
self.metadata_set[str(key)] = value
419+
# Majority of keys are expected to be string already
420+
self.metadata_set[str(key)] = value
424421

425422
def set_timestamp(self, timestamp: int | datetime.datetime):
426423
"""
@@ -453,8 +450,8 @@ def clear_metrics(self) -> None:
453450
self.dimension_set.clear()
454451
self.dimension_sets.clear()
455452
self.metadata_set.clear()
456-
# Initialize dimension_set as in __init__
457-
self.dimension_set.update(**self.default_dimensions)
453+
for name, value in self.default_dimensions.items():
454+
self.add_dimension(name, value)
458455

459456
def flush_metrics(self, raise_on_empty_metrics: bool = False) -> None:
460457
"""Manually flushes the metrics. This is normally not necessary,

0 commit comments

Comments
 (0)