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:
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