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)
| 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 |