1- from __future__ import (
2- annotations , # Needed for conditional type import support
3- )
4-
51import asyncio
62import logging
73from collections import defaultdict
4+ from collections .abc import AsyncGenerator , Callable , Mapping
85from datetime import datetime , timezone
96from typing import TYPE_CHECKING
107
118import boto3
129from asyncer import asyncify
1310from botocore .exceptions import ClientError
1411from taskiq import AsyncBroker
12+ from taskiq .abc .result_backend import AsyncResultBackend
13+ from taskiq .acks import AckableMessage
14+ from taskiq .message import BrokerMessage
1515
1616from taskiq_sqs .aws import get_container_credentials
1717
1818
1919if TYPE_CHECKING :
20- from collections .abc import AsyncGenerator , Callable , Mapping
21-
2220 from mypy_boto3_sqs .service_resource import Queue , SQSServiceResource
23- from taskiq .abc .result_backend import AsyncResultBackend
24- from taskiq .acks import AckableMessage
25- from taskiq .message import BrokerMessage
21+
2622
2723logger = logging .getLogger (__name__ )
2824
@@ -51,7 +47,7 @@ def __init__( # noqa: D107
5147 super ().__init__ (result_backend , task_id_generator )
5248
5349 if not sqs_queue_url or not sqs_queue_url .startswith ("http" ):
54- raise SQSBrokerError ("A valid SQS Queue URL is required" )
50+ raise SQSBrokerError ("A valid SQS queue url is required" )
5551
5652 # NOTE: This bypasses the normal order of operations for boto3 auth and
5753 # goes straight to using the ECS role creds from the metadata
@@ -62,6 +58,7 @@ def __init__( # noqa: D107
6258 self .sqs_queue_url = sqs_queue_url
6359 self ._sqs : SQSServiceResource | None = None
6460 self ._sqs_queue : Queue | None = None
61+ self ._creds_expiration : datetime | None = None
6562
6663 if max_number_of_messages > 10 : # noqa: PLR2004
6764 raise SQSBrokerError ("MaxNumberOfMessages can be no greater than 10" )
@@ -70,12 +67,10 @@ def __init__( # noqa: D107
7067 self .max_number_of_messages = max (max_number_of_messages , 1 )
7168
7269 @property
73- def _sqs_credentials_expired (self ) -> datetime | bool :
74- return self ._creds_expiration and self ._creds_expiration < datetime .now (
75- tz = timezone .utc ,
76- )
70+ def _sqs_credentials_expired (self ) -> datetime | bool | None :
71+ return self ._creds_expiration and self ._creds_expiration < datetime .now (tz = timezone .utc )
7772
78- async def _sqs_client (self ) -> SQSServiceResource :
73+ async def _sqs_client (self ) -> " SQSServiceResource" :
7974 if self ._sqs and not self ._sqs_credentials_expired :
8075 return self ._sqs
8176
@@ -95,7 +90,7 @@ async def _sqs_client(self) -> SQSServiceResource:
9590 aws_session_token = creds .get ("Token" ),
9691 )
9792
98- async def _get_queue (self ) -> Queue :
93+ async def _get_queue (self ) -> " Queue" :
9994 if self ._sqs_queue and not self ._sqs_credentials_expired :
10095 return self ._sqs_queue
10196
@@ -105,7 +100,7 @@ async def _get_queue(self) -> Queue:
105100 )
106101
107102 if not self ._sqs_queue :
108- exc_message = "SQS Queue not found"
103+ exc_message = "SQS queue not found"
109104 raise Exception (exc_message ) # noqa: TRY002
110105
111106 return self ._sqs_queue
0 commit comments