88import sys
99from abc import ABC , abstractmethod
1010from enum import Enum
11- from types import TracebackType
1211from typing import Any , Callable , Dict , List , Optional , Tuple , Type , Union , overload
1312
1413from 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
1615from aws_lambda_powertools .utilities .data_classes .dynamo_db_stream_event import DynamoDBRecord
1716from aws_lambda_powertools .utilities .data_classes .kinesis_stream_event import KinesisStreamRecord
1817from aws_lambda_powertools .utilities .data_classes .sqs_event import SQSRecord
@@ -30,8 +29,6 @@ class EventType(Enum):
3029# type specifics
3130#
3231has_pydantic = "pydantic" in sys .modules
33- ExceptionInfo = Tuple [Type [BaseException ], BaseException , TracebackType ]
34- OptExcInfo = Union [ExceptionInfo , Tuple [None , None , None ]]
3532
3633# For IntelliSense and Mypy to work, we need to account for possible SQS, Kinesis and DynamoDB subclasses
3734# 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):
6158 def __init__ (self ):
6259 self .success_messages : List [BatchEventTypes ] = []
6360 self .fail_messages : List [BatchEventTypes ] = []
64- self .exceptions : List = []
61+ self .exceptions : List [ ExceptionInfo ] = []
6562
6663 @abstractmethod
6764 def _prepare (self ):
@@ -132,15 +129,15 @@ def success_handler(self, record, result: Any) -> SuccessResponse:
132129 self .success_messages .append (record )
133130 return entry
134131
135- def failure_handler (self , record , exception : OptExcInfo ) -> FailureResponse :
132+ def failure_handler (self , record , exception : ExceptionInfo ) -> FailureResponse :
136133 """
137134 Keeps track of batch records that failed processing
138135
139136 Parameters
140137 ----------
141138 record: Any
142139 record that failed processing
143- exception: OptExcInfo
140+ exception: ExceptionInfo
144141 Exception information containing type, value, and traceback (sys.exc_info())
145142
146143 Returns
@@ -411,32 +408,28 @@ def _get_messages_to_report(self) -> Dict[str, str]:
411408 def _collect_sqs_failures (self ):
412409 if self .model :
413410 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 }
416412
417413 def _collect_kinesis_failures (self ):
418414 if self .model :
419415 # Pydantic model uses int but Lambda poller expects str
420416 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 }
423418
424419 def _collect_dynamodb_failures (self ):
425420 if self .model :
426421 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 }
429423
430424 @overload
431425 def _to_batch_type (self , record : dict , event_type : EventType , model : "BatchTypeModels" ) -> "BatchTypeModels" :
432- ...
426+ ... # pragma: no cover
433427
434428 @overload
435429 def _to_batch_type (self , record : dict , event_type : EventType ) -> EventSourceDataClassTypes :
436- ...
430+ ... # pragma: no cover
437431
438432 def _to_batch_type (self , record : dict , event_type : EventType , model : Optional ["BatchTypeModels" ] = None ):
439433 if model is not None :
440434 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