exchangelib
exchangelib copied to clipboard
Cannot fetch calendar folder
Describe the bug
I think the fix to https://github.com/ecederstrand/exchangelib/issues/1301 may introduce another problem. I can no longer retrieve the calendar folder.
To Reproduce
https://github.com/quzhi1/EwsPlayground/blob/main/debugging_find_calendar_folder.py
Expected behavior
The script should run without any error.
Log output
Traceback (most recent call last):
File "/Users/[email protected]/EwsPlayground/debugging_find_calendar_folder.py", line 19, in <module>
).resolve()
^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/folders/queryset.py", line 187, in resolve
return list(self.folder_collection.resolve())[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/folders/collections.py", line 335, in resolve
yield from self.__class__(account=self.account, folders=resolveable_folders).get_folders(
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/folders/collections.py", line 403, in get_folders
yield from GetFolder(account=self.account).call(
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/services/get_folder.py", line 51, in _elems_to_objs
for folder, elem in zip(self.folders, elems):
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/services/common.py", line 278, in _chunked_get_elements
yield from self._get_elements(payload=payload_func(chunk, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/services/get_folder.py", line 64, in get_payload
payload.append(folder_ids_element(folders=folders, version=self.account.version))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/services/common.py", line 961, in folder_ids_element
return _ids_element(folders, FolderId, version, tag)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/services/common.py", line 956, in _ids_element
set_xml_value(item_ids, to_item_id(item, item_cls), version=version)
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/util.py", line 253, in set_xml_value
elem.append(value.to_xml(version=version))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/properties.py", line 321, in to_xml
self.clean(version=version)
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/properties.py", line 766, in clean
raise ValueError(f"DistinguishedFolderId {self.id} must have a mailbox")
ValueError: DistinguishedFolderId calendar must have a mailbox
Additional context My requirements.txt: https://github.com/quzhi1/EwsPlayground/blob/main/requirements.txt
Your script is missing the mailbox
argument to DistinguishedFolderId. Additionally, SingleFolderQuerySet requires a full Folder object:
folder = SingleFolderQuerySet(
account=account,
folder=Folder(
root=account.root,
_distinguished_id=DistinguishedFolderId(
id='calendar',
mailbox=Mailbox(email_address=account.primary_smtp_address),
)
),
).resolve()
print("folder name:", folder.name)
I added mailbox argument here https://github.com/quzhi1/EwsPlayground/blob/main/debugging_find_calendar_folder.py#L19
And this is the new error:
Traceback (most recent call last):
File "/Users/[email protected]/EwsPlayground/debugging_find_calendar_folder.py", line 20, in <module>
).resolve()
^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/folders/queryset.py", line 187, in resolve
return list(self.folder_collection.resolve())[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/folders/collections.py", line 335, in resolve
yield from self.__class__(account=self.account, folders=resolveable_folders).get_folders(
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/folders/collections.py", line 403, in get_folders
yield from GetFolder(account=self.account).call(
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/services/get_folder.py", line 55, in _elems_to_objs
yield parse_folder_elem(elem=elem, folder=folder)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.12/site-packages/exchangelib/services/common.py", line 978, in parse_folder_elem
raise ValueError(f"Unsupported folder class: {folder}")
ValueError: Unsupported folder class: DistinguishedFolderId(id='calendar', mailbox=Mailbox(name=None, email_address='[email protected]', routing_type='SMTP', mailbox_type='Mailbox', item_id=None))
You're missing the Folder(...)
part. Try copying the script exactly as I posted it.
It is working again! Thanks @ecederstrand . I can close this issue.