From 8487c89be01a55f2c0d2e13b2accbb697170f09c Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Sun, 20 Sep 2020 16:35:58 -0700 Subject: [PATCH 1/4] tests(validator): add missing tests for validator Changes: * validator - Add test for the validator decator with an envelope * data_classes - Call DictWrapper constructor with the nested dict --- .../utilities/data_classes/alb_event.py | 2 +- .../data_classes/api_gateway_proxy_event.py | 4 ++-- .../data_classes/cognito_user_pool_event.py | 24 +++++++++---------- tests/functional/validator/test_validator.py | 8 +++++++ 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/aws_lambda_powertools/utilities/data_classes/alb_event.py b/aws_lambda_powertools/utilities/data_classes/alb_event.py index 5de23dc3ab0..6c7cb9e60c3 100644 --- a/aws_lambda_powertools/utilities/data_classes/alb_event.py +++ b/aws_lambda_powertools/utilities/data_classes/alb_event.py @@ -19,7 +19,7 @@ class ALBEvent(BaseProxyEvent): @property def request_context(self) -> ALBEventRequestContext: - return ALBEventRequestContext(self) + return ALBEventRequestContext(self._data) @property def http_method(self) -> str: diff --git a/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py b/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py index a253348fac4..a7d75eadaa6 100644 --- a/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py +++ b/aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py @@ -231,7 +231,7 @@ def multi_value_query_string_parameters(self) -> Optional[Dict[str, List[str]]]: @property def request_context(self) -> APIGatewayEventRequestContext: - return APIGatewayEventRequestContext(self) + return APIGatewayEventRequestContext(self._data) @property def path_parameters(self) -> Optional[Dict[str, str]]: @@ -371,7 +371,7 @@ def cookies(self) -> Optional[List[str]]: @property def request_context(self) -> RequestContextV2: - return RequestContextV2(self) + return RequestContextV2(self._data) @property def path_parameters(self) -> Optional[Dict[str, str]]: diff --git a/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py b/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py index 7bf38715006..9364839eb93 100644 --- a/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py +++ b/aws_lambda_powertools/utilities/data_classes/cognito_user_pool_event.py @@ -51,7 +51,7 @@ def user_name(self) -> str: @property def caller_context(self) -> CallerContext: """The caller context""" - return CallerContext(self) + return CallerContext(self._data) class PreSignUpTriggerEventRequest(DictWrapper): @@ -119,11 +119,11 @@ class PreSignUpTriggerEvent(BaseTriggerEvent): @property def request(self) -> PreSignUpTriggerEventRequest: - return PreSignUpTriggerEventRequest(self) + return PreSignUpTriggerEventRequest(self._data) @property def response(self) -> PreSignUpTriggerEventResponse: - return PreSignUpTriggerEventResponse(self) + return PreSignUpTriggerEventResponse(self._data) class PostConfirmationTriggerEventRequest(DictWrapper): @@ -156,7 +156,7 @@ class PostConfirmationTriggerEvent(BaseTriggerEvent): @property def request(self) -> PostConfirmationTriggerEventRequest: - return PostConfirmationTriggerEventRequest(self) + return PostConfirmationTriggerEventRequest(self._data) class UserMigrationTriggerEventRequest(DictWrapper): @@ -257,11 +257,11 @@ class UserMigrationTriggerEvent(BaseTriggerEvent): @property def request(self) -> UserMigrationTriggerEventRequest: - return UserMigrationTriggerEventRequest(self) + return UserMigrationTriggerEventRequest(self._data) @property def response(self) -> UserMigrationTriggerEventResponse: - return UserMigrationTriggerEventResponse(self) + return UserMigrationTriggerEventResponse(self._data) class CustomMessageTriggerEventRequest(DictWrapper): @@ -342,11 +342,11 @@ class CustomMessageTriggerEvent(BaseTriggerEvent): @property def request(self) -> CustomMessageTriggerEventRequest: - return CustomMessageTriggerEventRequest(self) + return CustomMessageTriggerEventRequest(self._data) @property def response(self) -> CustomMessageTriggerEventResponse: - return CustomMessageTriggerEventResponse(self) + return CustomMessageTriggerEventResponse(self._data) class PreAuthenticationTriggerEventRequest(DictWrapper): @@ -386,7 +386,7 @@ class PreAuthenticationTriggerEvent(BaseTriggerEvent): @property def request(self) -> PreAuthenticationTriggerEventRequest: """Pre Authentication Request Parameters""" - return PreAuthenticationTriggerEventRequest(self) + return PreAuthenticationTriggerEventRequest(self._data) class PostAuthenticationTriggerEventRequest(DictWrapper): @@ -428,7 +428,7 @@ class PostAuthenticationTriggerEvent(BaseTriggerEvent): @property def request(self) -> PostAuthenticationTriggerEventRequest: """Post Authentication Request Parameters""" - return PostAuthenticationTriggerEventRequest(self) + return PostAuthenticationTriggerEventRequest(self._data) class GroupOverrideDetails(DictWrapper): @@ -552,9 +552,9 @@ class PreTokenGenerationTriggerEvent(BaseTriggerEvent): @property def request(self) -> PreTokenGenerationTriggerEventRequest: """Pre Token Generation Request Parameters""" - return PreTokenGenerationTriggerEventRequest(self) + return PreTokenGenerationTriggerEventRequest(self._data) @property def response(self) -> PreTokenGenerationTriggerEventResponse: """Pre Token Generation Response Parameters""" - return PreTokenGenerationTriggerEventResponse(self) + return PreTokenGenerationTriggerEventResponse(self._data) diff --git a/tests/functional/validator/test_validator.py b/tests/functional/validator/test_validator.py index 7d2a8465529..c0e12792e73 100644 --- a/tests/functional/validator/test_validator.py +++ b/tests/functional/validator/test_validator.py @@ -82,6 +82,14 @@ def lambda_handler(evt, context): lambda_handler(raw_event, {}) +def test_validator_incoming_envelope(schema, apigateway_event): + @validator(inbound_schema=schema, envelope=envelopes.API_GATEWAY_REST) + def lambda_handler(evt, context): + pass + + lambda_handler(apigateway_event, {}) + + def test_validator_outgoing(schema_response, raw_response): @validator(outbound_schema=schema_response) def lambda_handler(evt, context): From abf2cbe5e496962ade4f999fce241a9593edc461 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Sun, 20 Sep 2020 17:03:27 -0700 Subject: [PATCH 2/4] chore: better type hinting --- aws_lambda_powertools/metrics/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aws_lambda_powertools/metrics/base.py b/aws_lambda_powertools/metrics/base.py index ef1ed85eb4b..71dce041163 100644 --- a/aws_lambda_powertools/metrics/base.py +++ b/aws_lambda_powertools/metrics/base.py @@ -80,7 +80,7 @@ class MetricManager: def __init__( self, - metric_set: Dict[str, str] = None, + metric_set: Dict[str, Any] = None, dimension_set: Dict = None, namespace: str = None, metadata_set: Dict[str, Any] = None, @@ -125,7 +125,7 @@ def add_metric(self, name: str, unit: Union[MetricUnit, str], value: float): raise MetricValueError(f"{value} is not a valid number") unit = self.__extract_metric_unit_value(unit=unit) - metric = self.metric_set.get(name, defaultdict(list)) + metric: dict = self.metric_set.get(name, defaultdict(list)) metric["Unit"] = unit metric["Value"].append(float(value)) logger.debug(f"Adding metric: {name} with {metric}") @@ -185,7 +185,7 @@ def serialize_metric_set(self, metrics: Dict = None, dimensions: Dict = None, me logger.debug({"details": "Serializing metrics", "metrics": metrics, "dimensions": dimensions}) metric_names_and_units: List[Dict[str, str]] = [] # [ { "Name": "metric_name", "Unit": "Count" } ] - metric_names_and_values: Dict[str, str] = {} # { "metric_name": 1.0 } + metric_names_and_values: Dict[str, int] = {} # { "metric_name": 1.0 } for metric_name in metrics: metric: dict = metrics[metric_name] From a5df40dd3e86380c02834a2a0fb1d3fb53bbb3d3 Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Mon, 21 Sep 2020 00:38:05 -0700 Subject: [PATCH 3/4] refactor: correct type hint Co-authored-by: Heitor Lessa --- 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 71dce041163..1d3ef095cd7 100644 --- a/aws_lambda_powertools/metrics/base.py +++ b/aws_lambda_powertools/metrics/base.py @@ -185,7 +185,7 @@ def serialize_metric_set(self, metrics: Dict = None, dimensions: Dict = None, me logger.debug({"details": "Serializing metrics", "metrics": metrics, "dimensions": dimensions}) metric_names_and_units: List[Dict[str, str]] = [] # [ { "Name": "metric_name", "Unit": "Count" } ] - metric_names_and_values: Dict[str, int] = {} # { "metric_name": 1.0 } + metric_names_and_values: Dict[str, float] = {} # { "metric_name": 1.0 } for metric_name in metrics: metric: dict = metrics[metric_name] From 4c97eaec8603ccf906250f134b0bb505cd769e7d Mon Sep 17 00:00:00 2001 From: Michael Brewer Date: Mon, 21 Sep 2020 00:45:26 -0700 Subject: [PATCH 4/4] fix: correct type hint Dict instead of dict Co-authored-by: Heitor Lessa --- 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 1d3ef095cd7..5b04e8a3f67 100644 --- a/aws_lambda_powertools/metrics/base.py +++ b/aws_lambda_powertools/metrics/base.py @@ -125,7 +125,7 @@ def add_metric(self, name: str, unit: Union[MetricUnit, str], value: float): raise MetricValueError(f"{value} is not a valid number") unit = self.__extract_metric_unit_value(unit=unit) - metric: dict = self.metric_set.get(name, defaultdict(list)) + metric: Dict = self.metric_set.get(name, defaultdict(list)) metric["Unit"] = unit metric["Value"].append(float(value)) logger.debug(f"Adding metric: {name} with {metric}")