clear-skies-aws 1.9.4__py3-none-any.whl → 1.9.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {clear_skies_aws-1.9.4.dist-info → clear_skies_aws-1.9.5.dist-info}/METADATA +1 -1
- {clear_skies_aws-1.9.4.dist-info → clear_skies_aws-1.9.5.dist-info}/RECORD +7 -7
- clearskies_aws/actions/__init__.py +2 -0
- clearskies_aws/actions/sqs.py +22 -5
- clearskies_aws/actions/sqs_test.py +52 -0
- {clear_skies_aws-1.9.4.dist-info → clear_skies_aws-1.9.5.dist-info}/LICENSE +0 -0
- {clear_skies_aws-1.9.4.dist-info → clear_skies_aws-1.9.5.dist-info}/WHEEL +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
clearskies_aws/__init__.py,sha256=BZKL4SIyxx4MXpyP5hmwsMo2oJatyv5c2wjJOPzKBQ4,134
|
|
2
|
-
clearskies_aws/actions/__init__.py,sha256=
|
|
2
|
+
clearskies_aws/actions/__init__.py,sha256=gbqt-EsttVDYUIf4CEX6qAzDNNo77MRGs8B8ZrEzvnA,2935
|
|
3
3
|
clearskies_aws/actions/action_aws.py,sha256=hWYnYA0QNegWp2LDMYILs0Dk1TOsFykW5JgSEMwfDE8,3877
|
|
4
4
|
clearskies_aws/actions/assume_role.py,sha256=tZHKMTQaImj_EAWormFZdIPkR_db7yBwOJxYaUyuGdA,4085
|
|
5
5
|
clearskies_aws/actions/assume_role_test.py,sha256=MDMGePZLVyDNTjdAlGBDJzBlfMpGIpA3Q1Ur0qEPl1w,2450
|
|
@@ -7,8 +7,8 @@ clearskies_aws/actions/ses.py,sha256=iSo-dtQoreqOCveGpDAKWkbaa0gZx1xTymHYqlvL7hk
|
|
|
7
7
|
clearskies_aws/actions/ses_test.py,sha256=lyNbqI46Ld_ZUKtWLgSwwfSOFksQ39H4hzPS3eTx7nk,3076
|
|
8
8
|
clearskies_aws/actions/sns.py,sha256=m9LEoogTGGPr-u8oj39PIiOd9rkoF340nFbWefXJREA,2197
|
|
9
9
|
clearskies_aws/actions/sns_test.py,sha256=iqlaZOA-0YHPOu52-XqpCIAgAv1JZodDdlm4YYYhj8U,2306
|
|
10
|
-
clearskies_aws/actions/sqs.py,sha256=
|
|
11
|
-
clearskies_aws/actions/sqs_test.py,sha256=
|
|
10
|
+
clearskies_aws/actions/sqs.py,sha256=3aY9plfYH8P6IkKS39C3t9q4ZIxIlNYsqtPgjdiywYQ,3338
|
|
11
|
+
clearskies_aws/actions/sqs_test.py,sha256=aazVN-bY6E17Pu3hDwLldj6YPirbqXjM6LfYFomUVmQ,4040
|
|
12
12
|
clearskies_aws/actions/step_function.py,sha256=0Sz1CVVeKJi3IohtLnnNmhAbuxR7Gl9ic56ml0K3Qmg,2363
|
|
13
13
|
clearskies_aws/actions/step_function_test.py,sha256=3xrNYFQ8fCe3CqPEnVnJsE0rIUlnnFez4rfPzphYVUU,2742
|
|
14
14
|
clearskies_aws/backends/__init__.py,sha256=kS6pmMKZuWzBefO7qQu1fkFdcXo180t76-a-pPc1YX8,83
|
|
@@ -61,7 +61,7 @@ clearskies_aws/secrets/parameter_store_test.py,sha256=UyqKE4AZYlldj9ww5f0fR15qsV
|
|
|
61
61
|
clearskies_aws/secrets/secrets_manager.py,sha256=jlpfAFC23EeSpm50L8B-yrXg4IROQq-M_90zzXDp_ak,3056
|
|
62
62
|
clearskies_aws/secrets/secrets_manager_test.py,sha256=mlNWtDm1wWS5C8aV0vJAzZVZB82KFR6NGRAPEkLtTyk,786
|
|
63
63
|
clearskies_aws/web_socket_connection_model.py,sha256=d_Au_Pu7YXBfc7_lbuI7zz4MZ8ZOOwGM0oooppEofcI,1776
|
|
64
|
-
clear_skies_aws-1.9.
|
|
65
|
-
clear_skies_aws-1.9.
|
|
66
|
-
clear_skies_aws-1.9.
|
|
67
|
-
clear_skies_aws-1.9.
|
|
64
|
+
clear_skies_aws-1.9.5.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
|
|
65
|
+
clear_skies_aws-1.9.5.dist-info/METADATA,sha256=GOGMPRVyvkrVl5xZV-Xl_FSj9RkJYJPo7KrOQOAMCMc,8480
|
|
66
|
+
clear_skies_aws-1.9.5.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
67
|
+
clear_skies_aws-1.9.5.dist-info/RECORD,,
|
|
@@ -60,6 +60,7 @@ def sqs(
|
|
|
60
60
|
message_callable=None,
|
|
61
61
|
when=None,
|
|
62
62
|
assume_role=None,
|
|
63
|
+
message_group_id=None,
|
|
63
64
|
):
|
|
64
65
|
return clearskies.BindingConfig(
|
|
65
66
|
SQS,
|
|
@@ -69,6 +70,7 @@ def sqs(
|
|
|
69
70
|
message_callable=message_callable,
|
|
70
71
|
when=when,
|
|
71
72
|
assume_role=assume_role,
|
|
73
|
+
message_group_id=message_group_id,
|
|
72
74
|
)
|
|
73
75
|
def step_function(
|
|
74
76
|
arn: str = "",
|
clearskies_aws/actions/sqs.py
CHANGED
|
@@ -8,7 +8,7 @@ from clearskies.model import Model
|
|
|
8
8
|
from collections.abc import Sequence
|
|
9
9
|
from collections import OrderedDict
|
|
10
10
|
from types import ModuleType
|
|
11
|
-
from typing import List, Optional, Callable
|
|
11
|
+
from typing import List, Optional, Callable, Union
|
|
12
12
|
|
|
13
13
|
from ..di import StandardDependencies
|
|
14
14
|
from . import assume_role
|
|
@@ -28,12 +28,14 @@ class SQS(ActionAws):
|
|
|
28
28
|
message_callable: Optional[Callable] = None,
|
|
29
29
|
when: Optional[Callable] = None,
|
|
30
30
|
assume_role: Optional[assume_role.AssumeRole] = None,
|
|
31
|
+
message_group_id: Optional[Union[str, Callable]] = None,
|
|
31
32
|
) -> None:
|
|
32
33
|
super().configure(message_callable=message_callable, when=when, assume_role=assume_role)
|
|
33
34
|
|
|
34
35
|
self.queue_url = queue_url
|
|
35
36
|
self.queue_url_environment_key = queue_url_environment_key
|
|
36
37
|
self.queue_url_callable = queue_url_callable
|
|
38
|
+
self.message_group_id = message_group_id
|
|
37
39
|
|
|
38
40
|
queue_urls = 0
|
|
39
41
|
for value in [queue_url, queue_url_environment_key, queue_url_callable]:
|
|
@@ -47,13 +49,28 @@ class SQS(ActionAws):
|
|
|
47
49
|
raise ValueError(
|
|
48
50
|
"You must provide at least one of 'queue_url', 'queue_url_environment_key', or 'queue_url_callable'."
|
|
49
51
|
)
|
|
52
|
+
if message_group_id and not callable(message_group_id) and not isinstance(message_group_id, str):
|
|
53
|
+
raise ValueError(
|
|
54
|
+
"If provided, 'message_group_id' must be a string or callable, but the provided value was neither."
|
|
55
|
+
)
|
|
50
56
|
|
|
51
57
|
def _execute_action(self, client: ModuleType, model: Model) -> None:
|
|
52
58
|
"""Send a notification as configured."""
|
|
53
|
-
|
|
54
|
-
QueueUrl
|
|
55
|
-
MessageBody
|
|
56
|
-
|
|
59
|
+
params = {
|
|
60
|
+
"QueueUrl": self.get_queue_url(model),
|
|
61
|
+
"MessageBody": self.get_message_body(model),
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if self.message_group_id:
|
|
65
|
+
if callable(self.message_group_id):
|
|
66
|
+
message_group_id = self.di.call_function(self.message_group_id, model=model)
|
|
67
|
+
if not isinstance(message_group_id, str):
|
|
68
|
+
raise ValueError(f"I called the message_group_id function for SQS for model '{model.__class__.__name__}' but the value it returned was not a string. The message group id must be a string.")
|
|
69
|
+
else:
|
|
70
|
+
message_group_id = self.message_group_id
|
|
71
|
+
params["MessageGroupId"] = message_group_id
|
|
72
|
+
|
|
73
|
+
client.send_message(**params)
|
|
57
74
|
|
|
58
75
|
def get_queue_url(self, model: Model):
|
|
59
76
|
if self.queue_url:
|
|
@@ -59,6 +59,58 @@ class SQSTest(unittest.TestCase):
|
|
|
59
59
|
])
|
|
60
60
|
self.assertEqual(id(user), id(self.when))
|
|
61
61
|
|
|
62
|
+
def test_send_message_group_id(self):
|
|
63
|
+
sqs = SQS(self.environment, self.boto3, self.di)
|
|
64
|
+
sqs.configure(
|
|
65
|
+
queue_url='https://queue.example.com',
|
|
66
|
+
when=self.always,
|
|
67
|
+
message_group_id='heysup',
|
|
68
|
+
)
|
|
69
|
+
user = self.users.model({
|
|
70
|
+
"id": "1-2-3-4",
|
|
71
|
+
"name": "Jane",
|
|
72
|
+
"email": "jane@example.com",
|
|
73
|
+
})
|
|
74
|
+
sqs(user)
|
|
75
|
+
self.sqs.send_message.assert_has_calls([
|
|
76
|
+
call(
|
|
77
|
+
QueueUrl='https://queue.example.com',
|
|
78
|
+
MessageGroupId='heysup',
|
|
79
|
+
MessageBody=json.dumps({
|
|
80
|
+
"id": "1-2-3-4",
|
|
81
|
+
"name": "Jane",
|
|
82
|
+
"email": "jane@example.com",
|
|
83
|
+
}),
|
|
84
|
+
),
|
|
85
|
+
])
|
|
86
|
+
self.assertEqual(id(user), id(self.when))
|
|
87
|
+
|
|
88
|
+
def test_send_message_group_id_callable(self):
|
|
89
|
+
sqs = SQS(self.environment, self.boto3, self.di)
|
|
90
|
+
sqs.configure(
|
|
91
|
+
queue_url='https://queue.example.com',
|
|
92
|
+
when=self.always,
|
|
93
|
+
message_group_id=lambda model: model.id,
|
|
94
|
+
)
|
|
95
|
+
user = self.users.model({
|
|
96
|
+
"id": "1-2-3-4",
|
|
97
|
+
"name": "Jane",
|
|
98
|
+
"email": "jane@example.com",
|
|
99
|
+
})
|
|
100
|
+
sqs(user)
|
|
101
|
+
self.sqs.send_message.assert_has_calls([
|
|
102
|
+
call(
|
|
103
|
+
QueueUrl='https://queue.example.com',
|
|
104
|
+
MessageGroupId='1-2-3-4',
|
|
105
|
+
MessageBody=json.dumps({
|
|
106
|
+
"id": "1-2-3-4",
|
|
107
|
+
"name": "Jane",
|
|
108
|
+
"email": "jane@example.com",
|
|
109
|
+
}),
|
|
110
|
+
),
|
|
111
|
+
])
|
|
112
|
+
self.assertEqual(id(user), id(self.when))
|
|
113
|
+
|
|
62
114
|
def test_not_now(self):
|
|
63
115
|
sqs = SQS(self.environment, self.boto3, self.di)
|
|
64
116
|
sqs.configure(
|
|
File without changes
|
|
File without changes
|