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

6 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 12:42 +0000

1from typing import Any, Literal, NotRequired, TypedDict 

2 

3from polar.config import settings 

4 

5 

6class SlackText(TypedDict): 

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

8 text: str 

9 emoji: NotRequired[bool] 

10 verbatim: NotRequired[bool] 

11 

12 

13class SlackPayload(TypedDict): 

14 text: str 

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

16 

17 

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

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 }