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

1from collections.abc import Iterable 

2from typing import Any, cast 

3 

4import boto3 

5from boto3.resources.base import ServiceResource 

6from extratools_core.crudl import CRUDLDict 

7 

8default_service_resource: ServiceResource = boto3.resource('sqs') 

9 

10type Queue = Any 

11 

12 

13def get_resource_dict( 

14 *, 

15 service_resource: ServiceResource | None = None, 

16) -> CRUDLDict[str, Queue]: 

17 service_resource = service_resource or default_service_resource 

18 

19 # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs/service-resource/index.html 

20 

21 def create_func(queue_name: str | None, attributes: dict[str, str]) -> None: 

22 if queue_name is None: 

23 raise ValueError 

24 

25 service_resource.create_queue( 

26 QueueName=queue_name, 

27 Attributes={ 

28 "FifoQueue": queue_name.endswith(".fifo"), 

29 **attributes, 

30 }, 

31 ) 

32 

33 def read_func(queue_name: str) -> Queue: 

34 return service_resource.get_queue_by_name( 

35 QueueName=queue_name, 

36 ) 

37 

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 ) 

46 

47 def delete_func(queue_name: str) -> None: 

48 service_resource.get_queue_by_name( 

49 QueueName=queue_name, 

50 ).delete() 

51 

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 

62 

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 )