Skip to content

Commit 06a217a

Browse files
committed
Rewrite SQS notification sender worker
1 parent 7a14e0a commit 06a217a

File tree

1 file changed

+33
-5
lines changed

1 file changed

+33
-5
lines changed
Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import json
1+
import functools
22
import typing
33

44
import chalice.app
5-
import chalicelib.sender as sender_module
5+
import chalicelib.send_manager as send_manager
6+
import chalicelib.send_manager.__interface__ as send_mgr_interface
7+
import pydantic
68

79
if typing.TYPE_CHECKING:
810
import mypy_boto3_sqs.type_defs
@@ -12,10 +14,36 @@
1214
type RecordType = dict[str, typing.Any]
1315

1416

17+
class WorkerPayload(pydantic.BaseModel):
18+
sender_type: str
19+
sender_payload: dict[str, typing.Any]
20+
21+
@functools.cached_property
22+
def send_manager(self) -> send_mgr_interface.SendManagerInterface:
23+
return send_manager.send_managers[self.sender_type]
24+
25+
@functools.cached_property
26+
def send_request_payload(self) -> send_mgr_interface.SendRequest:
27+
return self.send_manager.send_request_cls.model_validate(self.sender_payload)
28+
29+
@pydantic.field_validator("sender_type", mode="before")
30+
@classmethod
31+
def validate_sender_type(cls, value: str) -> str:
32+
if value not in send_manager.send_managers:
33+
raise ValueError(f"Invalid sender type: {value}")
34+
return value
35+
36+
@pydantic.model_validator(mode="after")
37+
def validate_sender_payload(self) -> typing.Self:
38+
self.send_request_payload
39+
return self
40+
41+
def send(self) -> dict[str, str]:
42+
return self.send_manager.send(self.send_request_payload)
43+
44+
1545
def notification_sender(app: chalice.app.Chalice, record: RecordType) -> dict[str, str]:
16-
worker_payload = json.loads(record["body"])["worker_payload"]
17-
sender = sender_module.senders[worker_payload["sender_type"]]
18-
return sender(worker_payload["sender_payload"])
46+
return WorkerPayload.model_validate_json(record["body"]).send()
1947

2048

2149
workers = [notification_sender]

0 commit comments

Comments
 (0)