Skip to content

Commit 994a2ff

Browse files
author
Mike Shultz
authored
Merge pull request #6 from ApeWorX/fix/kick-error
fix: add exception logging in kick() and add type hint for SQSClient
2 parents bf0871a + 2f6960d commit 994a2ff

1 file changed

Lines changed: 21 additions & 14 deletions

File tree

taskiq_sqs/broker.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import boto3
77
from asyncer import asyncify
8-
from mypy_boto3_sqs.service_resource import Queue
8+
from mypy_boto3_sqs.service_resource import Queue, SQSServiceResource
99
from taskiq import AsyncBroker
1010
from taskiq.abc.result_backend import AsyncResultBackend
1111
from taskiq.acks import AckableMessage
@@ -36,7 +36,7 @@ def __init__(
3636
raise BrokerError("A valid SQS Queue URL is required")
3737

3838
self.sqs_queue_url = sqs_queue_url
39-
self._sqs = boto3.resource("sqs")
39+
self._sqs: SQSServiceResource = boto3.resource("sqs")
4040
self._sqs_queue: Optional[Queue] = None
4141

4242
if max_number_of_messages > 10:
@@ -49,7 +49,9 @@ async def _get_queue(self) -> Queue:
4949
queue_name = self.sqs_queue_url.split("/")[-1]
5050

5151
if not self._sqs_queue:
52-
self._sqs_queue = await asyncify(self._sqs.get_queue_by_name)(QueueName=queue_name)
52+
self._sqs_queue = await asyncify(self._sqs.get_queue_by_name)(
53+
QueueName=queue_name
54+
)
5355

5456
if not self._sqs_queue:
5557
raise Exception("SQS Queue not found")
@@ -75,17 +77,22 @@ async def kick(
7577
# Must be explicitly set as a label to a unix timestamp
7678
expiry = message.labels.pop("sqs_expiry", 0)
7779

78-
await asyncify(queue.send_message)(
79-
# SQS structured message attributes
80-
MessageAttributes={
81-
"expiry": {
82-
"StringValue": str(expiry),
83-
"DataType": "Number",
84-
}
85-
},
86-
MessageBody=message.message.decode("utf-8"),
87-
MessageGroupId=message.task_name,
88-
)
80+
try:
81+
await asyncify(queue.send_message)(
82+
# SQS structured message attributes
83+
MessageAttributes={
84+
"expiry": {
85+
"StringValue": str(expiry),
86+
"DataType": "Number",
87+
}
88+
},
89+
MessageBody=message.message.decode("utf-8"),
90+
MessageGroupId=message.task_name,
91+
)
92+
except Exception as err:
93+
# taskiq supresses the original exception, but it wold be good to know about
94+
logger.exception("Unhandled exception in SQSBroker")
95+
raise err
8996

9097
async def listen(self) -> AsyncGenerator[Union[bytes, AckableMessage], None]:
9198
"""

0 commit comments

Comments
 (0)