fix(mail): guard empty message payload in processor (PR #935 round-6)
- processor.py: raise on an empty mail_message payload (OCS data=null with a <400 meta) so the task dead-letters instead of indexing a near-empty placeholder — mirrors the nc_mail_get_message tool guard. (the round-6 approve-gating item) - server/mail.py: clamp limit once in nc_mail_list_messages and base has_more on the effective (post-clamp) limit, so a caller passing limit<=0 doesn't get a misleading count. - server/mail.py: note in nc_mail_get_message that attachments with id=null are inline body parts and can't be fetched via nc_mail_get_attachment. - tests: add the first-time-missing incremental scanner case (enters the grace period, nothing queued/deleted). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
d006145444
commit
10e768e414
@@ -855,6 +855,13 @@ async def _index_document(
|
||||
if not is_valid_nextcloud_doc_id(doc_task.doc_id):
|
||||
raise ValueError(f"Invalid mail_message doc_id: {doc_task.doc_id!r}")
|
||||
message = await nc_client.mail.get_message(int(doc_task.doc_id))
|
||||
# An empty payload (OCS data=null with a <400 meta) would otherwise
|
||||
# index a useless near-empty placeholder; fail loudly so the task
|
||||
# dead-letters instead of corrupting the index.
|
||||
if not message:
|
||||
raise ValueError(
|
||||
f"mail_message {doc_task.doc_id!r} returned an empty payload"
|
||||
)
|
||||
content = build_mail_content(message)
|
||||
|
||||
subject = message.get("subject") or ""
|
||||
|
||||
Reference in New Issue
Block a user