Coverage for polar/webhook/slack.py: 92%

12 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-12-05 16:17 +0000

1from typing import Any, Literal, NotRequired, TypedDict 1a

2 

3from polar.config import settings 1a

4 

5 

6class SlackText(TypedDict): 1a

7 type: Literal["mrkdwn", "plain_text"] 1a

8 text: str 1a

9 emoji: NotRequired[bool] 1a

10 verbatim: NotRequired[bool] 1a

11 

12 

13class SlackPayload(TypedDict): 1a

14 text: str 1a

15 blocks: NotRequired[list[dict[str, Any]]] 1a

16 

17 

18def get_branded_slack_payload(payload: SlackPayload) -> SlackPayload: 1a

19 return { 

20 **payload, 

21 "blocks": [ 

22 *payload.get("blocks", []), 

23 { 

24 "type": "context", 

25 "elements": [ 

26 { 

27 "type": "image", 

28 "image_url": settings.FAVICON_URL, 

29 "alt_text": "Polar", 

30 }, 

31 {"type": "mrkdwn", "text": "Powered by Polar.sh"}, 

32 ], 

33 }, 

34 ], 

35 }