Skip to content

Commit ef12496

Browse files
committed
remove Ok in example response,add failure example
1 parent 455402a commit ef12496

File tree

5 files changed

+78
-2
lines changed

5 files changed

+78
-2
lines changed

docs/utilities/data_classes.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,10 @@ in the example below.
989989
```python
990990
--8<-- "examples/event_sources/src/kinesis_firehose_delivery_stream.py"
991991
```
992+
=== "with Failure"
993+
```python hl_lines="25"
994+
--8<-- "examples/event_sources/src/kinesis_firehose_delivery_stream_failed.py"
995+
```
992996

993997
You can also construct response without using `event_source` wrapper. Shown in the example below.
994998

@@ -997,6 +1001,10 @@ You can also construct response without using `event_source` wrapper. Shown in t
9971001
```python
9981002
--8<-- "examples/event_sources/src/kinesis_firehose_response.py"
9991003
```
1004+
=== "with Exception"
1005+
```python hl_lines="26"
1006+
--8<-- "examples/event_sources/src/kinesis_firehose_response_exception.py"
1007+
```
10001008

10011009
### Lambda Function URL
10021010

examples/event_sources/src/kinesis_firehose_delivery_stream.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ def lambda_handler(event: KinesisFirehoseEvent, context: LambdaContext):
2020
transformed_data = {"new_data": "transformed data using Powertools", "original_payload": data}
2121

2222
processed_record = record.build_data_transformation_response(
23-
result="Ok",
2423
data=base64_from_json(transformed_data),
2524
)
2625

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from aws_lambda_powertools.utilities.data_classes import (
2+
KinesisFirehoseDataTransformationResponse,
3+
KinesisFirehoseEvent,
4+
event_source,
5+
)
6+
from aws_lambda_powertools.utilities.serialization import base64_from_json
7+
from aws_lambda_powertools.utilities.typing import LambdaContext
8+
9+
10+
@event_source(data_class=KinesisFirehoseEvent)
11+
def lambda_handler(event: KinesisFirehoseEvent, context: LambdaContext):
12+
result = KinesisFirehoseDataTransformationResponse()
13+
14+
for record in event.records:
15+
# get original data using data_as_text property
16+
data = record.data_as_text
17+
18+
## do all kind of stuff with data
19+
## generate data to return
20+
transformed_data = {"new_data": "transformed data using Powertools", "original_payload": data}
21+
22+
# some process failed, send back to kinesis
23+
processed_record = record.build_data_transformation_response(
24+
data=base64_from_json(transformed_data),
25+
result="ProcessingFailed",
26+
)
27+
28+
result.add_record(processed_record)
29+
30+
# return transformed records
31+
return result.asdict()

examples/event_sources/src/kinesis_firehose_response.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ def lambda_handler(event: dict, context: LambdaContext):
2020

2121
processed_record = KinesisFirehoseDataTransformationRecord(
2222
record_id=record["recordId"],
23-
result="Ok",
2423
data=base64_from_json(transformed_data),
2524
)
2625
result.add_record(processed_record)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import base64
2+
3+
from aws_lambda_powertools.utilities.data_classes import (
4+
KinesisFirehoseDataTransformationRecord,
5+
KinesisFirehoseDataTransformationResponse,
6+
)
7+
from aws_lambda_powertools.utilities.serialization import base64_from_json
8+
from aws_lambda_powertools.utilities.typing import LambdaContext
9+
10+
11+
def lambda_handler(event: dict, context: LambdaContext):
12+
result = KinesisFirehoseDataTransformationResponse()
13+
14+
for record in event["records"]:
15+
print(record["recordId"])
16+
try:
17+
payload = base64.b64decode(record["data"]).decode("utf-8")
18+
## do all kind of stuff with payload
19+
## generate data to return
20+
transformed_data = {"tool_used": "powertools_dataclass", "original_payload": payload}
21+
except Exception:
22+
# add Failed result to processing results and send back to kinesis
23+
processed_record = KinesisFirehoseDataTransformationRecord(
24+
record_id=record["recordId"],
25+
data=base64_from_json(transformed_data),
26+
result="ProcessingFailed",
27+
)
28+
result.add_record(processed_record)
29+
continue
30+
31+
# Default result is Ok
32+
processed_record = KinesisFirehoseDataTransformationRecord(
33+
record_id=record["recordId"],
34+
data=base64_from_json(transformed_data),
35+
)
36+
result.add_record(processed_record)
37+
38+
# return transformed records
39+
return result.asdict()

0 commit comments

Comments
 (0)