MCPcopy Index your code
hub / github.com/O365/python-o365 / save_draft

Method save_draft

O365/message.py:978–1056  ·  view source on GitHub ↗

Save this message as a draft on the cloud :param target_folder: name of the drafts folder :return: Success / Failure :rtype: bool

(self, target_folder=OutlookWellKnowFolderNames.DRAFTS)

Source from the content-addressed store, hash-verified

976 return self.save_draft()
977
978 def save_draft(self, target_folder=OutlookWellKnowFolderNames.DRAFTS):
979 """ Save this message as a draft on the cloud
980
981 :param target_folder: name of the drafts folder
982 :return: Success / Failure
983 :rtype: bool
984 """
985
986 if self.object_id:
987 # update message. Attachments are NOT included nor saved.
988 if not self.__is_draft:
989 raise RuntimeError('Only draft messages can be updated')
990 if not self._track_changes:
991 return True # there's nothing to update
992 url = self.build_url(
993 self._endpoints.get('get_message').format(id=self.object_id))
994 method = self.con.patch
995 data = self.to_api_data(restrict_keys=self._track_changes)
996
997 data.pop(self._cc('attachments'),
998 None) # attachments are handled by the next method call
999 # noinspection PyProtectedMember
1000 self.attachments._update_attachments_to_cloud()
1001 else:
1002 # new message. Attachments are included and saved.
1003 if not self.__is_draft:
1004 raise RuntimeError('Only draft messages can be saved as drafts')
1005
1006 target_folder = target_folder or OutlookWellKnowFolderNames.DRAFTS
1007 if isinstance(target_folder, OutlookWellKnowFolderNames):
1008 target_folder = target_folder.value
1009 elif not isinstance(target_folder, str):
1010 # a Folder instance
1011 target_folder = getattr(target_folder, 'folder_id',
1012 OutlookWellKnowFolderNames.DRAFTS.value)
1013
1014 url = self.build_url(
1015 self._endpoints.get('create_draft_folder').format(
1016 id=target_folder))
1017 method = self.con.post
1018 data = self.to_api_data()
1019
1020 if not data:
1021 return True
1022
1023 response = method(url, data=data)
1024 if not response:
1025 return False
1026
1027 self._track_changes.clear() # reset the tracked changes as they are all saved
1028
1029 if not self.object_id:
1030 # new message
1031 message = response.json()
1032
1033 self.object_id = message.get(self._cc('id'), None)
1034 self.folder_id = message.get(self._cc('parentFolderId'), None)
1035

Calls 7

to_api_dataMethod · 0.95
build_urlMethod · 0.80
_ccMethod · 0.80
jsonMethod · 0.80
getMethod · 0.45
clearMethod · 0.45