8
8
import sys
9
9
from abc import ABC , abstractmethod
10
10
from enum import Enum
11
- from types import TracebackType
12
11
from typing import Any , Callable , Dict , List , Optional , Tuple , Type , Union , overload
13
12
14
13
from aws_lambda_powertools .middleware_factory import lambda_handler_decorator
15
- from aws_lambda_powertools .utilities .batch .exceptions import BatchProcessingError
14
+ from aws_lambda_powertools .utilities .batch .exceptions import BatchProcessingError , ExceptionInfo
16
15
from aws_lambda_powertools .utilities .data_classes .dynamo_db_stream_event import DynamoDBRecord
17
16
from aws_lambda_powertools .utilities .data_classes .kinesis_stream_event import KinesisStreamRecord
18
17
from aws_lambda_powertools .utilities .data_classes .sqs_event import SQSRecord
@@ -30,8 +29,6 @@ class EventType(Enum):
30
29
# type specifics
31
30
#
32
31
has_pydantic = "pydantic" in sys .modules
33
- ExceptionInfo = Tuple [Type [BaseException ], BaseException , TracebackType ]
34
- OptExcInfo = Union [ExceptionInfo , Tuple [None , None , None ]]
35
32
36
33
# For IntelliSense and Mypy to work, we need to account for possible SQS, Kinesis and DynamoDB subclasses
37
34
# We need them as subclasses as we must access their message ID or sequence number metadata via dot notation
@@ -61,7 +58,7 @@ class BasePartialProcessor(ABC):
61
58
def __init__ (self ):
62
59
self .success_messages : List [BatchEventTypes ] = []
63
60
self .fail_messages : List [BatchEventTypes ] = []
64
- self .exceptions : List = []
61
+ self .exceptions : List [ ExceptionInfo ] = []
65
62
66
63
@abstractmethod
67
64
def _prepare (self ):
@@ -132,15 +129,15 @@ def success_handler(self, record, result: Any) -> SuccessResponse:
132
129
self .success_messages .append (record )
133
130
return entry
134
131
135
- def failure_handler (self , record , exception : OptExcInfo ) -> FailureResponse :
132
+ def failure_handler (self , record , exception : ExceptionInfo ) -> FailureResponse :
136
133
"""
137
134
Keeps track of batch records that failed processing
138
135
139
136
Parameters
140
137
----------
141
138
record: Any
142
139
record that failed processing
143
- exception: OptExcInfo
140
+ exception: ExceptionInfo
144
141
Exception information containing type, value, and traceback (sys.exc_info())
145
142
146
143
Returns
@@ -411,32 +408,28 @@ def _get_messages_to_report(self) -> Dict[str, str]:
411
408
def _collect_sqs_failures (self ):
412
409
if self .model :
413
410
return {"itemIdentifier" : msg .messageId for msg in self .fail_messages }
414
- else :
415
- return {"itemIdentifier" : msg .message_id for msg in self .fail_messages }
411
+ return {"itemIdentifier" : msg .message_id for msg in self .fail_messages }
416
412
417
413
def _collect_kinesis_failures (self ):
418
414
if self .model :
419
415
# Pydantic model uses int but Lambda poller expects str
420
416
return {"itemIdentifier" : msg .kinesis .sequenceNumber for msg in self .fail_messages }
421
- else :
422
- return {"itemIdentifier" : msg .kinesis .sequence_number for msg in self .fail_messages }
417
+ return {"itemIdentifier" : msg .kinesis .sequence_number for msg in self .fail_messages }
423
418
424
419
def _collect_dynamodb_failures (self ):
425
420
if self .model :
426
421
return {"itemIdentifier" : msg .dynamodb .SequenceNumber for msg in self .fail_messages }
427
- else :
428
- return {"itemIdentifier" : msg .dynamodb .sequence_number for msg in self .fail_messages }
422
+ return {"itemIdentifier" : msg .dynamodb .sequence_number for msg in self .fail_messages }
429
423
430
424
@overload
431
425
def _to_batch_type (self , record : dict , event_type : EventType , model : "BatchTypeModels" ) -> "BatchTypeModels" :
432
- ...
426
+ ... # pragma: no cover
433
427
434
428
@overload
435
429
def _to_batch_type (self , record : dict , event_type : EventType ) -> EventSourceDataClassTypes :
436
- ...
430
+ ... # pragma: no cover
437
431
438
432
def _to_batch_type (self , record : dict , event_type : EventType , model : Optional ["BatchTypeModels" ] = None ):
439
433
if model is not None :
440
434
return model .parse_obj (record )
441
- else :
442
- return self ._DATA_CLASS_MAPPING [event_type ](record )
435
+ return self ._DATA_CLASS_MAPPING [event_type ](record )
0 commit comments