|
5 | 5 | from typing import Any, Literal
|
6 | 6 |
|
7 | 7 |
|
8 |
| -@dataclass |
9 |
| -class MessageAction: |
10 |
| - name: str |
11 |
| - |
12 |
| - # Optional label. This falls back to name. |
13 |
| - label: str | None = None |
| 8 | +@dataclass(kw_only=True) |
| 9 | +class _BaseMessageAction: |
| 10 | + """ |
| 11 | + Base class used to hold the fields for a notification message action. |
| 12 | + TODO(ecosystem): this class seems to only be used for Slack notifications, can we move this? |
| 13 | + """ |
14 | 14 |
|
| 15 | + name: str |
15 | 16 | type: Literal["button", "select"] = "button"
|
16 |
| - |
17 |
| - # If this is a button type, a url is required. |
| 17 | + # If the message action is a button type, the url is required |
18 | 18 | url: str | None = None
|
19 |
| - |
20 |
| - # If this is a select type, the selected value. |
| 19 | + # If the message action is a select type, this is the selected value |
21 | 20 | value: str | None = None
|
22 |
| - |
23 | 21 | # Denotes the type of action
|
24 | 22 | action_id: str | None = None
|
| 23 | + block_id: str | None = None |
| 24 | + selected_options: Sequence[Mapping[str, Any]] | None = None |
25 | 25 |
|
26 |
| - style: Literal["primary", "danger", "default"] | None = None |
27 | 26 |
|
28 |
| - # TODO(mgaeta): Refactor this to be provider-agnostic |
29 |
| - selected_options: Sequence[Mapping[str, Any]] | None = None |
| 27 | +@dataclass |
| 28 | +class MessageAction(_BaseMessageAction): |
| 29 | + # Label is optional, if empty it falls back to name |
| 30 | + label: str | None = None |
| 31 | + style: Literal["primary", "danger", "default"] | None = None |
30 | 32 | option_groups: Sequence[Mapping[str, Any]] | None = None
|
31 |
| - block_id: str | None = None |
32 | 33 | elements: Sequence[Mapping[str, Any]] | None = None
|
33 | 34 |
|
34 | 35 |
|
35 | 36 | @dataclass
|
36 |
| -class BlockKitMessageAction: |
37 |
| - name: str |
| 37 | +class BlockKitMessageAction(_BaseMessageAction): |
38 | 38 | label: str
|
39 |
| - type: Literal["button", "select"] = "button" |
40 |
| - url: str | None = None |
41 |
| - value: str | None = None |
42 |
| - action_id: str | None = None |
43 |
| - block_id: str | None = None |
44 |
| - selected_options: Sequence[Mapping[str, Any]] | None = None |
0 commit comments