Coverage for src/extratools_cloud/aws/sqs.py: 0%
24 statements
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-11 21:41 -0700
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-11 21:41 -0700
1from collections.abc import Iterable
2from typing import Any, cast
4import boto3
5from boto3.resources.base import ServiceResource
6from extratools_core.crudl import CRUDLDict
8default_service_resource: ServiceResource = boto3.resource('sqs')
10type Queue = Any
13def get_resource_dict(
14 *,
15 service_resource: ServiceResource | None = None,
16) -> CRUDLDict[str, Queue]:
17 service_resource = service_resource or default_service_resource
19 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/service-resource/index.html
21 def create_func(queue_name: str | None, attributes: dict[str, str]) -> None:
22 if queue_name is None:
23 raise ValueError
25 service_resource.create_queue(
26 QueueName=queue_name,
27 Attributes={
28 "FifoQueue": queue_name.endswith(".fifo"),
29 **attributes,
30 },
31 )
33 def read_func(queue_name: str) -> Queue:
34 return service_resource.get_queue_by_name(
35 QueueName=queue_name,
36 )
38 def update_func(queue_name: str, attributes: dict[str, str]) -> None:
39 service_resource.get_queue_by_name(
40 QueueName=queue_name,
41 ).set_attributes(
42 Attributes={
43 **attributes,
44 },
45 )
47 def delete_func(queue_name: str) -> None:
48 service_resource.get_queue_by_name(
49 QueueName=queue_name,
50 ).delete()
52 def list_func(queue_name_prefix: str | None = None) -> Iterable[tuple[str, Queue]]:
53 for queue in (
54 service_resource.queues.filter(
55 QueueNamePrefix=queue_name_prefix,
56 )
57 if queue_name_prefix
58 else service_resource.queues.all()
59 ):
60 queue_name = cast('str', queue.url).rsplit('/', maxsplit=1)[-1]
61 yield queue_name, queue
63 return CRUDLDict[str, Queue](
64 create_func=create_func,
65 read_func=read_func,
66 update_func=update_func,
67 delete_func=delete_func,
68 list_func=list_func,
69 )