- 
                Notifications
    You must be signed in to change notification settings 
- Fork 455
Description
Use case
Arguably, it might be easier for users if an empty Dict is returned instead of None for path_parameters in APIGatewayProxyEventV2, for example.
Instead of:
@event_source(data_class=APIGatewayProxyEventV2)
def lambda_handler(event: APIGatewayProxyEventV2, context) -> None:
    parameters = event.path_parameters or {}
    handle(parameters["id"])it would become:
@event_source(data_class=APIGatewayProxyEventV2)
def lambda_handler(event: APIGatewayProxyEventV2, context) -> None:
    handle(event.path_parameters["id"])Ultimately this approach could be followed for any return value that is either an Optional[Dict] or an Optional[List], returning an empty Dict or List instead of None in all cases:
- utilities/data_classes/api_gateway_proxy_event.py
- APIGatewayEventAuthorizer
- def claims(self) -> Dict[str, Any]
- def scopes(self) -> List[str]
 
- APIGatewayProxyEvent
- def multi_value_query_string_parameters(self) -> Dict[str, List[str]]
- def path_parameters(self) -> Dict[str, str]
- def stage_variables(self) -> Dict[str, str]
 
- RequestContextV2AuthorizerIam
- def cognito_amr(self) -> List[str]
 
- RequestContextV2Authorizer
- def jwt_claim(self) -> Dict[str, Any]
- def jwt_scopes(self) -> List[str]
- def get_lambda(self) -> Dict[str, Any]
 
- APIGatewayProxyEventV2
- def cookies(self) -> List[str]
- def path_parameters(self) -> Dict[str, str]
- def stage_variables(self) -> Dict[str, str]
 
 
- APIGatewayEventAuthorizer
and so on...
The bottom line is: Does it matter for users to differentiate between None and an empty Dict or List for any Event Source Data Classe property? If it does for a particular one, it an exception to a rule or the rule?
This change would be backwards compatible with the previous code.
This approach was already implemented in only one place so far, as far as I could check:
- utilities/data_classes/common.py
- BaseProxyEvent
- def headers(self) -> Dict[str, str]
 
 
- BaseProxyEvent
Solution/User Experience
Solution can be the same as for the headers in the BaseProxyEvent:
powertools-lambda-python/aws_lambda_powertools/utilities/data_classes/common.py
Lines 98 to 100 in 1905e4c
| @property | |
| def headers(self) -> Dict[str, str]: | |
| return self.get("headers") or {} | 
Alternative solutions
No response
Acknowledgment
- This feature request meets Powertools for AWS Lambda (Python) Tenets
- Should this be considered in other Powertools for AWS Lambda languages? i.e. Java, TypeScript, and .NET
Metadata
Metadata
Assignees
Labels
Type
Projects
Status