diff --git a/aws_lambda_powertools/metrics/metrics.py b/aws_lambda_powertools/metrics/metrics.py index d87b7bdd401..d65cb62720a 100644 --- a/aws_lambda_powertools/metrics/metrics.py +++ b/aws_lambda_powertools/metrics/metrics.py @@ -181,6 +181,26 @@ def clear_default_dimensions(self) -> None: def clear_metrics(self) -> None: self.provider.clear_metrics() + # We now allow customers to bring their own instance + # of the AmazonCloudWatchEMFProvider provider + # So we need to define getter/setter for namespace and service properties + # To access these attributes on the provider instance. + @property + def namespace(self): + return self.provider.namespace + + @namespace.setter + def namespace(self, namespace): + self.provider.namespace = namespace + + @property + def service(self): + return self.provider.service + + @service.setter + def service(self, service): + self.provider.service = service + # Maintenance: until v3, we can't afford to break customers. # AmazonCloudWatchEMFProvider has the exact same functionality (non-singleton) diff --git a/tests/functional/test_metrics.py b/tests/functional/test_metrics.py index 1eed6c82294..329ff7064dd 100644 --- a/tests/functional/test_metrics.py +++ b/tests/functional/test_metrics.py @@ -1077,6 +1077,25 @@ def test_clear_default_dimensions(namespace): assert not my_metrics.default_dimensions +def test_get_and_set_namespace_and_service_properties(namespace, service, metrics, capsys): + # GIVEN Metrics instance is initialized without namespace and service + my_metrics = Metrics() + + # WHEN we set service and namespace before flushing the metric + @my_metrics.log_metrics + def lambda_handler(evt, ctx): + my_metrics.namespace = namespace + my_metrics.service = service + for metric in metrics: + my_metrics.add_metric(**metric) + + lambda_handler({}, {}) + invocation = capture_metrics_output(capsys) + + assert service in json.dumps(invocation) + assert namespace in json.dumps(invocation) + + def test_clear_default_dimensions_with_provider(namespace): # GIVEN Metrics is initialized with provider and we persist a set of default dimensions my_provider = AmazonCloudWatchEMFProvider(namespace=namespace)