11import json
2- from typing import Any , Dict , Optional , TypeVar , Union
3- from aws_lambda_powertools .utilities .parser import BaseEnvelope , BaseModel
2+ from typing import Any , Dict , Optional , Type , TypeVar , Union
3+
4+ from pydantic import BaseModel
5+
6+ from aws_lambda_powertools .utilities .parser import BaseEnvelope , event_parser
47from aws_lambda_powertools .utilities .parser .models import EventBridgeModel
5- from aws_lambda_powertools .utilities .parser import event_parser
68from aws_lambda_powertools .utilities .typing import LambdaContext
79
810Model = TypeVar ("Model" , bound = BaseModel )
911
12+
1013class EventBridgeEnvelope (BaseEnvelope ):
11- def parse (self , data : Optional [Union [Dict [str , Any ], Any ]], model : type [Model ]) -> Optional [Model ]:
14+ def parse (self , data : Optional [Union [Dict [str , Any ], Any ]], model : Type [Model ]) -> Optional [Model ]:
1215 if data is None :
1316 return None
1417
15- parsed_envelope = EventBridgeModel .parse_obj (data )
18+ parsed_envelope = EventBridgeModel .model_validate (data )
1619 return self ._parse (data = parsed_envelope .detail , model = model )
1720
21+
1822class OrderDetail (BaseModel ):
1923 order_id : str
2024 amount : float
2125 customer_id : str
2226
27+
2328@event_parser (model = OrderDetail , envelope = EventBridgeEnvelope )
2429def lambda_handler (event : OrderDetail , context : LambdaContext ):
2530 try :
@@ -32,16 +37,15 @@ def lambda_handler(event: OrderDetail, context: LambdaContext):
3237
3338 return {
3439 "statusCode" : 200 ,
35- "body" : json .dumps ({
36- "message" : f"Order { event .order_id } processed successfully" ,
37- "order_id" : event .order_id ,
38- "amount" : event .amount ,
39- "customer_id" : event .customer_id
40- })
40+ "body" : json .dumps (
41+ {
42+ "message" : f"Order { event .order_id } processed successfully" ,
43+ "order_id" : event .order_id ,
44+ "amount" : event .amount ,
45+ "customer_id" : event .customer_id ,
46+ },
47+ ),
4148 }
4249 except Exception as e :
4350 print (f"Error processing order: { str (e )} " )
44- return {
45- "statusCode" : 500 ,
46- "body" : json .dumps ({"error" : "Internal server error" })
47- }
51+ return {"statusCode" : 500 , "body" : json .dumps ({"error" : "Internal server error" })}
0 commit comments