33import enum
44from dataclasses import dataclass
55from datetime import datetime
6- from typing import Optional , List , Dict , Any
6+ from typing import List , Dict , Any
77
88
99@dataclass
@@ -59,10 +59,18 @@ def from_json(cls, data: Dict[str, Any]) -> "EmailAddress":
5959class Attachment :
6060 """Attachment information for an email message."""
6161
62- filename : str
63- content_type : str
62+ id : str
63+ name : str
6464 size : int # Size in bytes
6565
66+ @classmethod
67+ def from_json (cls , data : Dict [str , Any ]) -> "Attachment" :
68+ return cls (
69+ id = data ["id" ],
70+ name = data ["name" ],
71+ size = data ["size" ],
72+ )
73+
6674
6775@dataclass
6876class EmailMessage :
@@ -74,9 +82,9 @@ class EmailMessage:
7482 subject : str
7583 body_text : str
7684 created_at : datetime
77- cc : Optional [ List [str ]] = None
78- body_html : Optional [ str ] = None
79- attachments : Optional [ List [Dict [ str , Any ]]] = None
85+ cc : List [str ]
86+ body_html : str
87+ attachments : List [Attachment ]
8088
8189 @classmethod
8290 def from_json (cls , data : Dict [str , Any ]) -> "EmailMessage" :
@@ -89,9 +97,9 @@ def from_json(cls, data: Dict[str, Any]) -> "EmailMessage":
8997 created_at = datetime .fromisoformat (
9098 data ["created_at" ].replace ("Z" , "+00:00" )
9199 ),
92- cc = data . get ( "cc" , []) ,
93- body_html = data . get ( "body_html" ) ,
94- attachments = data . get ( "attachments" , []) ,
100+ cc = data [ "cc" ] ,
101+ body_html = data [ "body_html" ] ,
102+ attachments = [ Attachment . from_json ( v ) for v in data [ "attachments" ]] ,
95103 )
96104
97105
0 commit comments