|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
3 | | -from typing import List, Optional, Union |
| 3 | +from typing import List, Optional |
4 | 4 |
|
5 | 5 | from pydantic.v1 import AnyUrl, BaseModel |
6 | 6 |
|
@@ -48,7 +48,21 @@ class HeadingBlockValue(BaseModel): |
48 | 48 |
|
49 | 49 | class CalloutBlockValue(BaseModel): |
50 | 50 | rich_text: List[RichTextObject] |
51 | | - icon: Union[FileObject, EmojiObject] |
| 51 | + icon: dict |
| 52 | + color: Optional[str] |
| 53 | + children: Optional[List[Block]] |
| 54 | + |
| 55 | + |
| 56 | +class CalloutEmojiBlockValue(CalloutBlockValue): |
| 57 | + rich_text: List[RichTextObject] |
| 58 | + icon: EmojiObject |
| 59 | + color: Optional[str] |
| 60 | + children: Optional[List[Block]] |
| 61 | + |
| 62 | + |
| 63 | +class CalloutFileBlockValue(CalloutBlockValue): |
| 64 | + rich_text: List[RichTextObject] |
| 65 | + icon: FileObject |
52 | 66 | color: Optional[str] |
53 | 67 | children: Optional[List[Block]] |
54 | 68 |
|
@@ -181,9 +195,25 @@ class Heading3Block(Block): |
181 | 195 |
|
182 | 196 |
|
183 | 197 | class CalloutBlock(Block): |
| 198 | + callout: CalloutBlockValue |
| 199 | + |
| 200 | + _class_map = {"emoji": "EmojiCalloutBlock", "file": "FileCalloutBlock"} |
| 201 | + |
| 202 | + @property |
| 203 | + def _class_key_field(self): |
| 204 | + return self.callout.icon["type"] |
| 205 | + |
| 206 | + |
| 207 | +class EmojiCalloutBlock(CalloutBlock): |
184 | 208 | _class_key_field = None |
185 | 209 |
|
186 | | - callout: CalloutBlockValue |
| 210 | + callout: CalloutEmojiBlockValue |
| 211 | + |
| 212 | + |
| 213 | +class FileCalloutBlock(CalloutBlock): |
| 214 | + _class_key_field = None |
| 215 | + |
| 216 | + callout: CalloutFileBlockValue |
187 | 217 |
|
188 | 218 |
|
189 | 219 | class QuoteBlock(Block): |
|
0 commit comments