Closed
Description
Expected Behaviour
On a CodePipeline Job Data Class, accessing either decoded_user_parameters
or user_parameters
should return None
if no User Parameters were supplied.
Current Behaviour
Attempting to call decoded_user_parameters
or user_parameters
, when none were supplied, causes a KeyError to occur.
The AWS CodePipeline Lambda Action does not require UserParameters, however the CodePipeline Event Data Class expects it to be set, and raises a KeyError.
Code snippet
from aws_lambda_powertools.utilities.data_classes import (
event_source,
CodePipelineJobEvent,
)
from aws_lambda_powertools.utilities.typing import LambdaContext
from aws_lambda_powertools.logging import Logger
import boto3
CODEPIPELINE = boto3.client("codepipeline")
logger = Logger(service="bug-report", level="DEBUG")
@event_source(data_class=CodePipelineJobEvent)
def handler(event: CodePipelineJobEvent, context: LambdaContext):
try:
logger.debug(str(event.raw_event))
event.decoded_user_parameters
except Exception as e:
logger.exception(e, stack_info=True)
CODEPIPELINE.put_job_failure_result(
jobId=event.get_id, failureDetails={"type": "JobFailed", "message": str(e)}
)
raise e
CODEPIPELINE.put_job_success_result(jobId=event.get_id)
Possible Solution
See #2113
Steps to Reproduce
-
Create a CodePipeline with a AWS Lambda Build Step, without User Parameters.
-
Write Lambda to access
event.decoded_user_parameters
Traceback (most recent call last):
File \"/var/task/pipeline_action.py\", line 22, in handler
check_inputs(event)
File \"/var/task/pipeline_action.py\", line 119, in check_inputs
elif \"TemplateFile\" not in event.decoded_user_parameters:
File \"/var/task/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py\", line 165, in decoded_user_parameters
return self.data.action_configuration.configuration.decoded_user_parameters
File \"/var/task/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py\", line 27, in decoded_user_parameters
self._json_data = json.loads(self.user_parameters)
File \"/var/task/aws_lambda_powertools/utilities/data_classes/code_pipeline_job_event.py\", line 21, in user_parameters
return self[\"UserParameters\"]
File \"/var/task/aws_lambda_powertools/utilities/data_classes/common.py\", line 17, in __getitem__
return self._data[key]
KeyError: 'UserParameters'
AWS Lambda Powertools for Python version
latest
AWS Lambda function runtime
3.8
Packaging format used
PyPi
Debugging logs
No response