Skip to content

Commit aff66cd

Browse files
turianclaude
andcommitted
Fix JSON serialization of Email objects in draft responses
The created/notCreated fields contain Email objects which aren't JSON serializable. Convert them to dicts using to_dict() method. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 192b06b commit aff66cd

1 file changed

Lines changed: 22 additions & 6 deletions

File tree

src/fastmail_cli/jmapc.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,18 @@ def handle_email_draft(args: argparse.Namespace) -> Tuple[int, Dict[str, Any]]:
335335
capabilities_server = session_json.get("capabilities", {}).keys()
336336
meta = meta_block(args.host, account_id, using, capabilities_server)
337337

338-
# Extract created email info
338+
# Extract created email info (convert objects to dicts for JSON serialization)
339+
created = {}
340+
if set_response.created:
341+
for k, v in set_response.created.items():
342+
created[k] = v.to_dict() if hasattr(v, 'to_dict') else v
343+
not_created = {}
344+
if set_response.not_created:
345+
for k, v in set_response.not_created.items():
346+
not_created[k] = v.to_dict() if hasattr(v, 'to_dict') else v
339347
result_data = {
340-
"created": set_response.created,
341-
"notCreated": set_response.not_created,
348+
"created": created,
349+
"notCreated": not_created,
342350
"newState": set_response.new_state,
343351
}
344352

@@ -456,10 +464,18 @@ def handle_email_draft_reply(args: argparse.Namespace) -> Tuple[int, Dict[str, A
456464
capabilities_server = session_json.get("capabilities", {}).keys()
457465
meta = meta_block(args.host, account_id, using, capabilities_server)
458466

459-
# Extract created email info
467+
# Extract created email info (convert objects to dicts for JSON serialization)
468+
created = {}
469+
if set_response.created:
470+
for k, v in set_response.created.items():
471+
created[k] = v.to_dict() if hasattr(v, 'to_dict') else v
472+
not_created = {}
473+
if set_response.not_created:
474+
for k, v in set_response.not_created.items():
475+
not_created[k] = v.to_dict() if hasattr(v, 'to_dict') else v
460476
result_data = {
461-
"created": set_response.created,
462-
"notCreated": set_response.not_created,
477+
"created": created,
478+
"notCreated": not_created,
463479
"newState": set_response.new_state,
464480
"inReplyTo": args.id,
465481
"subject": subject,

0 commit comments

Comments
 (0)