@backtomyfuture/exchange-cli-darwin-arm64 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/bin/_internal/Python +0 -0
  2. package/bin/_internal/Python.framework/Python +0 -0
  3. package/bin/_internal/Python.framework/Resources/Info.plist +3 -3
  4. package/bin/_internal/Python.framework/Versions/3.12/Python +0 -0
  5. package/bin/_internal/Python.framework/Versions/{3.14 → 3.12}/Resources/Info.plist +3 -3
  6. package/bin/_internal/Python.framework/Versions/Current/Python +0 -0
  7. package/bin/_internal/Python.framework/Versions/Current/Resources/Info.plist +3 -3
  8. package/bin/_internal/_cffi_backend.cpython-312-darwin.so +0 -0
  9. package/bin/_internal/ada92cb5d92a588d1b93__mypyc.cpython-312-darwin.so +0 -0
  10. package/bin/_internal/base_library.zip +0 -0
  11. package/bin/_internal/certifi/cacert.pem +0 -631
  12. package/bin/_internal/charset_normalizer/{md.cpython-314-darwin.so → cd.cpython-312-darwin.so} +0 -0
  13. package/bin/_internal/charset_normalizer/{cd.cpython-314-darwin.so → md.cpython-312-darwin.so} +0 -0
  14. package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/METADATA +1 -1
  15. package/bin/_internal/click-8.4.2.dist-info/RECORD +40 -0
  16. package/bin/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
  17. package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/METADATA +7 -36
  18. package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/RECORD +137 -122
  19. package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/WHEEL +1 -1
  20. package/bin/_internal/cryptography-48.0.1.dist-info/sboms/cryptography-rust.cyclonedx.json +1362 -0
  21. package/bin/_internal/cryptography-48.0.1.dist-info/sboms/sbom.json +43 -0
  22. package/bin/_internal/exchangelib/__init__.py +120 -0
  23. package/bin/_internal/exchangelib/account.py +896 -0
  24. package/bin/_internal/exchangelib/attachments.py +268 -0
  25. package/bin/_internal/exchangelib/autodiscover/__init__.py +24 -0
  26. package/bin/_internal/exchangelib/autodiscover/cache.py +150 -0
  27. package/bin/_internal/exchangelib/autodiscover/discovery.py +491 -0
  28. package/bin/_internal/exchangelib/autodiscover/protocol.py +58 -0
  29. package/bin/_internal/exchangelib/configuration.py +106 -0
  30. package/bin/_internal/exchangelib/credentials.py +319 -0
  31. package/bin/_internal/exchangelib/errors.py +1710 -0
  32. package/bin/_internal/exchangelib/ewsdatetime.py +309 -0
  33. package/bin/_internal/exchangelib/extended_properties.py +311 -0
  34. package/bin/_internal/exchangelib/fields.py +1842 -0
  35. package/bin/_internal/exchangelib/folders/__init__.py +249 -0
  36. package/bin/_internal/exchangelib/folders/base.py +954 -0
  37. package/bin/_internal/exchangelib/folders/collections.py +576 -0
  38. package/bin/_internal/exchangelib/folders/known_folders.py +856 -0
  39. package/bin/_internal/exchangelib/folders/queryset.py +187 -0
  40. package/bin/_internal/exchangelib/folders/roots.py +390 -0
  41. package/bin/_internal/exchangelib/indexed_properties.py +96 -0
  42. package/bin/_internal/exchangelib/items/__init__.py +147 -0
  43. package/bin/_internal/exchangelib/items/base.py +241 -0
  44. package/bin/_internal/exchangelib/items/calendar_item.py +466 -0
  45. package/bin/_internal/exchangelib/items/contact.py +263 -0
  46. package/bin/_internal/exchangelib/items/item.py +413 -0
  47. package/bin/_internal/exchangelib/items/message.py +201 -0
  48. package/bin/_internal/exchangelib/items/post.py +38 -0
  49. package/bin/_internal/exchangelib/items/task.py +139 -0
  50. package/bin/_internal/exchangelib/properties.py +2364 -0
  51. package/bin/_internal/exchangelib/protocol.py +823 -0
  52. package/bin/_internal/exchangelib/queryset.py +691 -0
  53. package/bin/_internal/exchangelib/recurrence.py +349 -0
  54. package/bin/_internal/exchangelib/restriction.py +568 -0
  55. package/bin/_internal/exchangelib/services/__init__.py +117 -0
  56. package/bin/_internal/exchangelib/services/archive_item.py +33 -0
  57. package/bin/_internal/exchangelib/services/common.py +983 -0
  58. package/bin/_internal/exchangelib/services/convert_id.py +45 -0
  59. package/bin/_internal/exchangelib/services/copy_item.py +7 -0
  60. package/bin/_internal/exchangelib/services/create_attachment.py +34 -0
  61. package/bin/_internal/exchangelib/services/create_folder.py +45 -0
  62. package/bin/_internal/exchangelib/services/create_item.py +97 -0
  63. package/bin/_internal/exchangelib/services/create_user_configuration.py +19 -0
  64. package/bin/_internal/exchangelib/services/delete_attachment.py +28 -0
  65. package/bin/_internal/exchangelib/services/delete_folder.py +21 -0
  66. package/bin/_internal/exchangelib/services/delete_item.py +51 -0
  67. package/bin/_internal/exchangelib/services/delete_user_configuration.py +19 -0
  68. package/bin/_internal/exchangelib/services/empty_folder.py +25 -0
  69. package/bin/_internal/exchangelib/services/expand_dl.py +21 -0
  70. package/bin/_internal/exchangelib/services/export_items.py +27 -0
  71. package/bin/_internal/exchangelib/services/find_folder.py +80 -0
  72. package/bin/_internal/exchangelib/services/find_item.py +112 -0
  73. package/bin/_internal/exchangelib/services/find_people.py +106 -0
  74. package/bin/_internal/exchangelib/services/get_attachment.py +117 -0
  75. package/bin/_internal/exchangelib/services/get_delegate.py +45 -0
  76. package/bin/_internal/exchangelib/services/get_events.py +39 -0
  77. package/bin/_internal/exchangelib/services/get_folder.py +65 -0
  78. package/bin/_internal/exchangelib/services/get_item.py +41 -0
  79. package/bin/_internal/exchangelib/services/get_mail_tips.py +43 -0
  80. package/bin/_internal/exchangelib/services/get_persona.py +31 -0
  81. package/bin/_internal/exchangelib/services/get_room_lists.py +21 -0
  82. package/bin/_internal/exchangelib/services/get_rooms.py +21 -0
  83. package/bin/_internal/exchangelib/services/get_searchable_mailboxes.py +48 -0
  84. package/bin/_internal/exchangelib/services/get_server_time_zones.py +39 -0
  85. package/bin/_internal/exchangelib/services/get_streaming_events.py +102 -0
  86. package/bin/_internal/exchangelib/services/get_user_availability.py +67 -0
  87. package/bin/_internal/exchangelib/services/get_user_configuration.py +43 -0
  88. package/bin/_internal/exchangelib/services/get_user_oof_settings.py +40 -0
  89. package/bin/_internal/exchangelib/services/get_user_settings.py +87 -0
  90. package/bin/_internal/exchangelib/services/inbox_rules.py +104 -0
  91. package/bin/_internal/exchangelib/services/mark_as_junk.py +27 -0
  92. package/bin/_internal/exchangelib/services/move_folder.py +27 -0
  93. package/bin/_internal/exchangelib/services/move_item.py +28 -0
  94. package/bin/_internal/exchangelib/services/resolve_names.py +104 -0
  95. package/bin/_internal/exchangelib/services/send_item.py +26 -0
  96. package/bin/_internal/exchangelib/services/send_notification.py +43 -0
  97. package/bin/_internal/exchangelib/services/set_user_oof_settings.py +34 -0
  98. package/bin/_internal/exchangelib/services/subscribe.py +125 -0
  99. package/bin/_internal/exchangelib/services/sync_folder_hierarchy.py +95 -0
  100. package/bin/_internal/exchangelib/services/sync_folder_items.py +77 -0
  101. package/bin/_internal/exchangelib/services/unsubscribe.py +21 -0
  102. package/bin/_internal/exchangelib/services/update_folder.py +158 -0
  103. package/bin/_internal/exchangelib/services/update_item.py +113 -0
  104. package/bin/_internal/exchangelib/services/update_user_configuration.py +17 -0
  105. package/bin/_internal/exchangelib/services/upload_items.py +47 -0
  106. package/bin/_internal/exchangelib/settings.py +88 -0
  107. package/bin/_internal/exchangelib/transport.py +214 -0
  108. package/bin/_internal/exchangelib/util.py +894 -0
  109. package/bin/_internal/exchangelib/version.py +320 -0
  110. package/bin/_internal/exchangelib/winzone.py +662 -0
  111. package/bin/_internal/exchangelib-5.6.0.dist-info/INSTALLER +1 -0
  112. package/bin/_internal/exchangelib-5.6.0.dist-info/METADATA +77 -0
  113. package/bin/_internal/exchangelib-5.6.0.dist-info/RECORD +184 -0
  114. package/bin/_internal/exchangelib-5.6.0.dist-info/licenses/LICENSE +21 -0
  115. package/bin/_internal/exchangelib-5.6.0.dist-info/top_level.txt +1 -0
  116. package/bin/_internal/libcrypto.3.dylib +0 -0
  117. package/bin/_internal/libssl.3.dylib +0 -0
  118. package/bin/_internal/lxml/_elementpath.cpython-312-darwin.so +0 -0
  119. package/bin/_internal/lxml/builder.cpython-312-darwin.so +0 -0
  120. package/bin/_internal/lxml/{etree.cpython-314-darwin.so → etree.cpython-312-darwin.so} +0 -0
  121. package/bin/_internal/lxml/html/_difflib.cpython-312-darwin.so +0 -0
  122. package/bin/_internal/lxml/html/diff.cpython-312-darwin.so +0 -0
  123. package/bin/_internal/lxml/{objectify.cpython-314-darwin.so → objectify.cpython-312-darwin.so} +0 -0
  124. package/bin/_internal/lxml/sax.cpython-312-darwin.so +0 -0
  125. package/bin/_internal/python3.12/lib-dynload/_asyncio.cpython-312-darwin.so +0 -0
  126. package/bin/_internal/{python3.14/lib-dynload/termios.cpython-314-darwin.so → python3.12/lib-dynload/_bisect.cpython-312-darwin.so} +0 -0
  127. package/bin/_internal/{python3.14/lib-dynload/_sha2.cpython-314-darwin.so → python3.12/lib-dynload/_blake2.cpython-312-darwin.so} +0 -0
  128. package/bin/_internal/{python3.14/lib-dynload/_bz2.cpython-314-darwin.so → python3.12/lib-dynload/_bz2.cpython-312-darwin.so} +0 -0
  129. package/bin/_internal/{python3.14/lib-dynload/_codecs_cn.cpython-314-darwin.so → python3.12/lib-dynload/_codecs_cn.cpython-312-darwin.so} +0 -0
  130. package/bin/_internal/{python3.14/lib-dynload/_codecs_hk.cpython-314-darwin.so → python3.12/lib-dynload/_codecs_hk.cpython-312-darwin.so} +0 -0
  131. package/bin/_internal/{python3.14/lib-dynload/_interpqueues.cpython-314-darwin.so → python3.12/lib-dynload/_codecs_iso2022.cpython-312-darwin.so} +0 -0
  132. package/bin/_internal/{python3.14/lib-dynload/_codecs_jp.cpython-314-darwin.so → python3.12/lib-dynload/_codecs_jp.cpython-312-darwin.so} +0 -0
  133. package/bin/_internal/{python3.14/lib-dynload/_codecs_kr.cpython-314-darwin.so → python3.12/lib-dynload/_codecs_kr.cpython-312-darwin.so} +0 -0
  134. package/bin/_internal/{python3.14/lib-dynload/_codecs_tw.cpython-314-darwin.so → python3.12/lib-dynload/_codecs_tw.cpython-312-darwin.so} +0 -0
  135. package/bin/_internal/{python3.14/lib-dynload/_statistics.cpython-314-darwin.so → python3.12/lib-dynload/_contextvars.cpython-312-darwin.so} +0 -0
  136. package/bin/_internal/{python3.14/lib-dynload/_csv.cpython-314-darwin.so → python3.12/lib-dynload/_csv.cpython-312-darwin.so} +0 -0
  137. package/bin/_internal/python3.12/lib-dynload/_ctypes.cpython-312-darwin.so +0 -0
  138. package/bin/_internal/python3.12/lib-dynload/_datetime.cpython-312-darwin.so +0 -0
  139. package/bin/_internal/{python3.14/lib-dynload/_dbm.cpython-314-darwin.so → python3.12/lib-dynload/_dbm.cpython-312-darwin.so} +0 -0
  140. package/bin/_internal/python3.12/lib-dynload/_decimal.cpython-312-darwin.so +0 -0
  141. package/bin/_internal/python3.12/lib-dynload/_elementtree.cpython-312-darwin.so +0 -0
  142. package/bin/_internal/python3.12/lib-dynload/_hashlib.cpython-312-darwin.so +0 -0
  143. package/bin/_internal/{python3.14/lib-dynload/_heapq.cpython-314-darwin.so → python3.12/lib-dynload/_heapq.cpython-312-darwin.so} +0 -0
  144. package/bin/_internal/python3.12/lib-dynload/_json.cpython-312-darwin.so +0 -0
  145. package/bin/_internal/python3.12/lib-dynload/_lzma.cpython-312-darwin.so +0 -0
  146. package/bin/_internal/{python3.14/lib-dynload/_md5.cpython-314-darwin.so → python3.12/lib-dynload/_md5.cpython-312-darwin.so} +0 -0
  147. package/bin/_internal/python3.12/lib-dynload/_multibytecodec.cpython-312-darwin.so +0 -0
  148. package/bin/_internal/{python3.14/lib-dynload/_multiprocessing.cpython-314-darwin.so → python3.12/lib-dynload/_multiprocessing.cpython-312-darwin.so} +0 -0
  149. package/bin/_internal/python3.12/lib-dynload/_opcode.cpython-312-darwin.so +0 -0
  150. package/bin/_internal/python3.12/lib-dynload/_pickle.cpython-312-darwin.so +0 -0
  151. package/bin/_internal/{python3.14/lib-dynload/_bisect.cpython-314-darwin.so → python3.12/lib-dynload/_posixshmem.cpython-312-darwin.so} +0 -0
  152. package/bin/_internal/{python3.14/lib-dynload/_posixsubprocess.cpython-314-darwin.so → python3.12/lib-dynload/_posixsubprocess.cpython-312-darwin.so} +0 -0
  153. package/bin/_internal/{python3.14/lib-dynload/_queue.cpython-314-darwin.so → python3.12/lib-dynload/_queue.cpython-312-darwin.so} +0 -0
  154. package/bin/_internal/{python3.14/lib-dynload/_random.cpython-314-darwin.so → python3.12/lib-dynload/_random.cpython-312-darwin.so} +0 -0
  155. package/bin/_internal/{python3.14/lib-dynload/_scproxy.cpython-314-darwin.so → python3.12/lib-dynload/_scproxy.cpython-312-darwin.so} +0 -0
  156. package/bin/_internal/{python3.14/lib-dynload/_sha1.cpython-314-darwin.so → python3.12/lib-dynload/_sha1.cpython-312-darwin.so} +0 -0
  157. package/bin/_internal/python3.12/lib-dynload/_sha2.cpython-312-darwin.so +0 -0
  158. package/bin/_internal/{python3.14/lib-dynload/_blake2.cpython-314-darwin.so → python3.12/lib-dynload/_sha3.cpython-312-darwin.so} +0 -0
  159. package/bin/_internal/python3.12/lib-dynload/_socket.cpython-312-darwin.so +0 -0
  160. package/bin/_internal/python3.12/lib-dynload/_ssl.cpython-312-darwin.so +0 -0
  161. package/bin/_internal/{python3.14/lib-dynload/_posixshmem.cpython-314-darwin.so → python3.12/lib-dynload/_statistics.cpython-312-darwin.so} +0 -0
  162. package/bin/_internal/python3.12/lib-dynload/_struct.cpython-312-darwin.so +0 -0
  163. package/bin/_internal/{python3.14/lib-dynload/_uuid.cpython-314-darwin.so → python3.12/lib-dynload/_uuid.cpython-312-darwin.so} +0 -0
  164. package/bin/_internal/{python3.14/lib-dynload/_zoneinfo.cpython-314-darwin.so → python3.12/lib-dynload/_zoneinfo.cpython-312-darwin.so} +0 -0
  165. package/bin/_internal/python3.12/lib-dynload/array.cpython-312-darwin.so +0 -0
  166. package/bin/_internal/{python3.14/lib-dynload/binascii.cpython-314-darwin.so → python3.12/lib-dynload/binascii.cpython-312-darwin.so} +0 -0
  167. package/bin/_internal/{python3.14/lib-dynload/fcntl.cpython-314-darwin.so → python3.12/lib-dynload/fcntl.cpython-312-darwin.so} +0 -0
  168. package/bin/_internal/{python3.14/lib-dynload/grp.cpython-314-darwin.so → python3.12/lib-dynload/grp.cpython-312-darwin.so} +0 -0
  169. package/bin/_internal/python3.12/lib-dynload/math.cpython-312-darwin.so +0 -0
  170. package/bin/_internal/{python3.14/lib-dynload/_sha3.cpython-314-darwin.so → python3.12/lib-dynload/mmap.cpython-312-darwin.so} +0 -0
  171. package/bin/_internal/python3.12/lib-dynload/pyexpat.cpython-312-darwin.so +0 -0
  172. package/bin/_internal/python3.12/lib-dynload/readline.cpython-312-darwin.so +0 -0
  173. package/bin/_internal/{python3.14/lib-dynload/resource.cpython-314-darwin.so → python3.12/lib-dynload/resource.cpython-312-darwin.so} +0 -0
  174. package/bin/_internal/{python3.14/lib-dynload/select.cpython-314-darwin.so → python3.12/lib-dynload/select.cpython-312-darwin.so} +0 -0
  175. package/bin/_internal/{python3.14/lib-dynload/syslog.cpython-314-darwin.so → python3.12/lib-dynload/syslog.cpython-312-darwin.so} +0 -0
  176. package/bin/_internal/python3.12/lib-dynload/termios.cpython-312-darwin.so +0 -0
  177. package/bin/_internal/python3.12/lib-dynload/unicodedata.cpython-312-darwin.so +0 -0
  178. package/bin/_internal/python3.12/lib-dynload/zlib.cpython-312-darwin.so +0 -0
  179. package/bin/_internal/tzdata/zoneinfo/Africa/Casablanca +0 -0
  180. package/bin/_internal/tzdata/zoneinfo/Africa/El_Aaiun +0 -0
  181. package/bin/_internal/tzdata/zoneinfo/America/Edmonton +0 -0
  182. package/bin/_internal/tzdata/zoneinfo/America/Vancouver +0 -0
  183. package/bin/_internal/tzdata/zoneinfo/America/Yellowknife +0 -0
  184. package/bin/_internal/tzdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  185. package/bin/_internal/tzdata/zoneinfo/Asia/Saigon +0 -0
  186. package/bin/_internal/tzdata/zoneinfo/Canada/Mountain +0 -0
  187. package/bin/_internal/tzdata/zoneinfo/Canada/Pacific +0 -0
  188. package/bin/_internal/tzdata/zoneinfo/leapseconds +4 -4
  189. package/bin/_internal/tzdata/zoneinfo/tzdata.zi +11 -131
  190. package/bin/_internal/tzdata/zoneinfo/zone.tab +2 -2
  191. package/bin/_internal/tzdata/zoneinfo/zone1970.tab +2 -2
  192. package/bin/_internal/tzdata/zoneinfo/zonenow.tab +8 -2
  193. package/bin/exchange-cli +0 -0
  194. package/package.json +10 -7
  195. package/bin/_internal/81d243bd2c585b0f4821__mypyc.cpython-314-darwin.so +0 -0
  196. package/bin/_internal/Python.framework/Versions/3.14/Python +0 -0
  197. package/bin/_internal/_cffi_backend.cpython-314-darwin.so +0 -0
  198. package/bin/_internal/click-8.3.2.dist-info/RECORD +0 -40
  199. package/bin/_internal/liblzma.5.dylib +0 -0
  200. package/bin/_internal/libmpdec.4.dylib +0 -0
  201. package/bin/_internal/libzstd.1.dylib +0 -0
  202. package/bin/_internal/lxml/_elementpath.cpython-314-darwin.so +0 -0
  203. package/bin/_internal/lxml/builder.cpython-314-darwin.so +0 -0
  204. package/bin/_internal/lxml/html/_difflib.cpython-314-darwin.so +0 -0
  205. package/bin/_internal/lxml/html/diff.cpython-314-darwin.so +0 -0
  206. package/bin/_internal/lxml/sax.cpython-314-darwin.so +0 -0
  207. package/bin/_internal/python3.14/lib-dynload/_asyncio.cpython-314-darwin.so +0 -0
  208. package/bin/_internal/python3.14/lib-dynload/_codecs_iso2022.cpython-314-darwin.so +0 -0
  209. package/bin/_internal/python3.14/lib-dynload/_ctypes.cpython-314-darwin.so +0 -0
  210. package/bin/_internal/python3.14/lib-dynload/_decimal.cpython-314-darwin.so +0 -0
  211. package/bin/_internal/python3.14/lib-dynload/_elementtree.cpython-314-darwin.so +0 -0
  212. package/bin/_internal/python3.14/lib-dynload/_hashlib.cpython-314-darwin.so +0 -0
  213. package/bin/_internal/python3.14/lib-dynload/_hmac.cpython-314-darwin.so +0 -0
  214. package/bin/_internal/python3.14/lib-dynload/_interpreters.cpython-314-darwin.so +0 -0
  215. package/bin/_internal/python3.14/lib-dynload/_json.cpython-314-darwin.so +0 -0
  216. package/bin/_internal/python3.14/lib-dynload/_lzma.cpython-314-darwin.so +0 -0
  217. package/bin/_internal/python3.14/lib-dynload/_multibytecodec.cpython-314-darwin.so +0 -0
  218. package/bin/_internal/python3.14/lib-dynload/_pickle.cpython-314-darwin.so +0 -0
  219. package/bin/_internal/python3.14/lib-dynload/_socket.cpython-314-darwin.so +0 -0
  220. package/bin/_internal/python3.14/lib-dynload/_ssl.cpython-314-darwin.so +0 -0
  221. package/bin/_internal/python3.14/lib-dynload/_struct.cpython-314-darwin.so +0 -0
  222. package/bin/_internal/python3.14/lib-dynload/_zstd.cpython-314-darwin.so +0 -0
  223. package/bin/_internal/python3.14/lib-dynload/array.cpython-314-darwin.so +0 -0
  224. package/bin/_internal/python3.14/lib-dynload/math.cpython-314-darwin.so +0 -0
  225. package/bin/_internal/python3.14/lib-dynload/mmap.cpython-314-darwin.so +0 -0
  226. package/bin/_internal/python3.14/lib-dynload/pyexpat.cpython-314-darwin.so +0 -0
  227. package/bin/_internal/python3.14/lib-dynload/readline.cpython-314-darwin.so +0 -0
  228. package/bin/_internal/python3.14/lib-dynload/unicodedata.cpython-314-darwin.so +0 -0
  229. package/bin/_internal/python3.14/lib-dynload/zlib.cpython-314-darwin.so +0 -0
  230. package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER +0 -1
  231. package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA +0 -133
  232. package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD +0 -21
  233. package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED +0 -0
  234. package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE +0 -73
  235. package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt +0 -1
  236. /package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/INSTALLER +0 -0
  237. /package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/WHEEL +0 -0
  238. /package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/licenses/LICENSE.txt +0 -0
  239. /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/INSTALLER +0 -0
  240. /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/licenses/LICENSE +0 -0
  241. /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/licenses/LICENSE.APACHE +0 -0
  242. /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/licenses/LICENSE.BSD +0 -0
  243. /package/bin/_internal/{setuptools/_vendor/importlib_metadata-8.7.1.dist-info → exchangelib-5.6.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,201 @@
1
+ import logging
2
+
3
+ from ..fields import Base64Field, BooleanField, CharField, EWSElementField, MailboxField, MailboxListField, TextField
4
+ from ..properties import ReferenceItemId, ReminderMessageData
5
+ from ..util import require_account, require_id
6
+ from ..version import EXCHANGE_2013, EXCHANGE_2013_SP1
7
+ from .base import AUTO_RESOLVE, SEND_AND_SAVE_COPY, SEND_ONLY, SEND_TO_NONE, BaseReplyItem
8
+ from .item import Item
9
+
10
+ log = logging.getLogger(__name__)
11
+
12
+
13
+ class Message(Item):
14
+ """MSDN:
15
+ https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/message-ex15websvcsotherref
16
+ """
17
+
18
+ ELEMENT_NAME = "Message"
19
+
20
+ sender = MailboxField(field_uri="message:Sender", is_read_only=True, is_read_only_after_send=True)
21
+ to_recipients = MailboxListField(
22
+ field_uri="message:ToRecipients", is_read_only_after_send=True, is_searchable=False
23
+ )
24
+ cc_recipients = MailboxListField(
25
+ field_uri="message:CcRecipients", is_read_only_after_send=True, is_searchable=False
26
+ )
27
+ bcc_recipients = MailboxListField(
28
+ field_uri="message:BccRecipients", is_read_only_after_send=True, is_searchable=False
29
+ )
30
+ is_read_receipt_requested = BooleanField(
31
+ field_uri="message:IsReadReceiptRequested", is_required=True, default=False, is_read_only_after_send=True
32
+ )
33
+ is_delivery_receipt_requested = BooleanField(
34
+ field_uri="message:IsDeliveryReceiptRequested", is_required=True, default=False, is_read_only_after_send=True
35
+ )
36
+ conversation_index = Base64Field(field_uri="message:ConversationIndex", is_read_only=True)
37
+ conversation_topic = CharField(field_uri="message:ConversationTopic", is_read_only=True)
38
+ # Rename 'From' to 'author'. We can't use field name 'from' since it's a Python keyword.
39
+ author = MailboxField(field_uri="message:From", is_read_only_after_send=True)
40
+ message_id = TextField(field_uri="message:InternetMessageId", is_read_only_after_send=True)
41
+ is_read = BooleanField(field_uri="message:IsRead", is_required=True, default=False)
42
+ is_response_requested = BooleanField(field_uri="message:IsResponseRequested", default=False, is_required=True)
43
+ references = TextField(field_uri="message:References")
44
+ reply_to = MailboxListField(field_uri="message:ReplyTo", is_read_only_after_send=True, is_searchable=False)
45
+ received_by = MailboxField(field_uri="message:ReceivedBy", is_read_only=True)
46
+ received_representing = MailboxField(field_uri="message:ReceivedRepresenting", is_read_only=True)
47
+ reminder_message_data = EWSElementField(
48
+ field_uri="message:ReminderMessageData",
49
+ value_cls=ReminderMessageData,
50
+ supported_from=EXCHANGE_2013_SP1,
51
+ is_read_only=True,
52
+ )
53
+
54
+ @require_account
55
+ def send(
56
+ self,
57
+ save_copy=True,
58
+ copy_to_folder=None,
59
+ conflict_resolution=AUTO_RESOLVE,
60
+ send_meeting_invitations=SEND_TO_NONE,
61
+ ):
62
+ from ..services import SendItem
63
+
64
+ # Only sends a message. The message can either be an existing draft stored in EWS or a new message that does
65
+ # not yet exist in EWS.
66
+ if copy_to_folder and not save_copy:
67
+ raise AttributeError("'save_copy' must be True when 'copy_to_folder' is set")
68
+ if save_copy and not copy_to_folder:
69
+ copy_to_folder = self.account.sent # 'Sent' is default EWS behaviour
70
+ if self.id:
71
+ SendItem(account=self.account).get(items=[self], saved_item_folder=copy_to_folder)
72
+ # The item will be deleted from the original folder
73
+ self._id = None
74
+ self.folder = copy_to_folder
75
+ return None
76
+
77
+ # New message
78
+ if copy_to_folder:
79
+ # This would better be done via send_and_save() but let's just support it here
80
+ self.folder = copy_to_folder
81
+ return self.send_and_save(
82
+ conflict_resolution=conflict_resolution, send_meeting_invitations=send_meeting_invitations
83
+ )
84
+
85
+ if self.account.version.build < EXCHANGE_2013 and self.attachments:
86
+ # At least some versions prior to Exchange 2013 can't send attachments immediately. You need to first save,
87
+ # then attach, then send. This is done in send_and_save(). send() will delete the item again.
88
+ self.send_and_save(
89
+ conflict_resolution=conflict_resolution, send_meeting_invitations=send_meeting_invitations
90
+ )
91
+ return None
92
+
93
+ self._create(message_disposition=SEND_ONLY, send_meeting_invitations=send_meeting_invitations)
94
+ return None
95
+
96
+ def send_and_save(
97
+ self, update_fields=None, conflict_resolution=AUTO_RESOLVE, send_meeting_invitations=SEND_TO_NONE
98
+ ):
99
+ # Sends Message and saves a copy in the parent folder. Does not return an ItemId.
100
+ if self.id:
101
+ return self._update(
102
+ update_fieldnames=update_fields,
103
+ message_disposition=SEND_AND_SAVE_COPY,
104
+ conflict_resolution=conflict_resolution,
105
+ send_meeting_invitations=send_meeting_invitations,
106
+ )
107
+ if self.account.version.build < EXCHANGE_2013 and self.attachments:
108
+ # At least some versions prior to Exchange 2013 can't send-and-save attachments immediately. You need
109
+ # to first save, then attach, then send. This is done in save().
110
+ self.save(
111
+ update_fields=update_fields,
112
+ conflict_resolution=conflict_resolution,
113
+ send_meeting_invitations=send_meeting_invitations,
114
+ )
115
+ return self.send(
116
+ save_copy=False,
117
+ conflict_resolution=conflict_resolution,
118
+ send_meeting_invitations=send_meeting_invitations,
119
+ )
120
+ return self._create(message_disposition=SEND_AND_SAVE_COPY, send_meeting_invitations=send_meeting_invitations)
121
+
122
+ @require_id
123
+ def create_reply(self, subject, body, to_recipients=None, cc_recipients=None, bcc_recipients=None, author=None):
124
+ if not to_recipients:
125
+ if not self.author:
126
+ raise ValueError("'to_recipients' must be set when message has no 'author'")
127
+ to_recipients = [self.author]
128
+ return ReplyToItem(
129
+ account=self.account,
130
+ reference_item_id=ReferenceItemId(id=self.id, changekey=self.changekey),
131
+ subject=subject,
132
+ new_body=body,
133
+ to_recipients=to_recipients,
134
+ cc_recipients=cc_recipients,
135
+ bcc_recipients=bcc_recipients,
136
+ author=author,
137
+ )
138
+
139
+ def reply(self, subject, body, to_recipients=None, cc_recipients=None, bcc_recipients=None, author=None):
140
+ return self.create_reply(subject, body, to_recipients, cc_recipients, bcc_recipients, author).send()
141
+
142
+ @require_id
143
+ def create_reply_all(self, subject, body, author=None):
144
+ me = MailboxField().clean(self.account.primary_smtp_address.lower())
145
+ to_recipients = set(self.to_recipients or [])
146
+ to_recipients.discard(me)
147
+ cc_recipients = set(self.cc_recipients or [])
148
+ cc_recipients.discard(me)
149
+ bcc_recipients = set(self.bcc_recipients or [])
150
+ bcc_recipients.discard(me)
151
+ if self.author:
152
+ to_recipients.add(self.author)
153
+ return ReplyAllToItem(
154
+ account=self.account,
155
+ reference_item_id=ReferenceItemId(id=self.id, changekey=self.changekey),
156
+ subject=subject,
157
+ new_body=body,
158
+ to_recipients=list(to_recipients),
159
+ cc_recipients=list(cc_recipients),
160
+ bcc_recipients=list(bcc_recipients),
161
+ author=author,
162
+ )
163
+
164
+ def reply_all(self, subject, body, author=None):
165
+ return self.create_reply_all(subject, body, author).send()
166
+
167
+ def mark_as_junk(self, is_junk=True, move_item=True):
168
+ """Mark or un-marks items as junk email.
169
+
170
+ :param is_junk: If True, the sender will be added from the blocked sender list. Otherwise, the sender will be
171
+ removed.
172
+ :param move_item: If true, the item will be moved to the junk folder.
173
+ :return:
174
+ """
175
+ from ..services import MarkAsJunk
176
+
177
+ res = MarkAsJunk(account=self.account).get(
178
+ items=[self], is_junk=is_junk, move_item=move_item, expect_result=None
179
+ )
180
+ if res is None:
181
+ return
182
+ self.folder = self.account.junk if is_junk else self.account.inbox
183
+ self.id, self.changekey = res
184
+
185
+
186
+ class ReplyToItem(BaseReplyItem):
187
+ """MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/replytoitem"""
188
+
189
+ ELEMENT_NAME = "ReplyToItem"
190
+
191
+
192
+ class ReplyAllToItem(BaseReplyItem):
193
+ """MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/replyalltoitem"""
194
+
195
+ ELEMENT_NAME = "ReplyAllToItem"
196
+
197
+
198
+ class ForwardItem(BaseReplyItem):
199
+ """MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/forwarditem"""
200
+
201
+ ELEMENT_NAME = "ForwardItem"
@@ -0,0 +1,38 @@
1
+ import logging
2
+
3
+ from ..fields import BodyField, DateTimeField, MailboxField, TextField
4
+ from .item import Item
5
+ from .message import Message
6
+
7
+ log = logging.getLogger(__name__)
8
+
9
+
10
+ class PostItem(Item):
11
+ """MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/postitem"""
12
+
13
+ ELEMENT_NAME = "PostItem"
14
+
15
+ conversation_index = Message.FIELDS["conversation_index"]
16
+ conversation_topic = Message.FIELDS["conversation_topic"]
17
+
18
+ author = Message.FIELDS["author"]
19
+ message_id = Message.FIELDS["message_id"]
20
+ is_read = Message.FIELDS["is_read"]
21
+
22
+ posted_time = DateTimeField(field_uri="postitem:PostedTime", is_read_only=True)
23
+ references = TextField(field_uri="message:References")
24
+ sender = MailboxField(field_uri="message:Sender", is_read_only=True, is_read_only_after_send=True)
25
+
26
+
27
+ class PostReplyItem(Item):
28
+ """MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/postreplyitem"""
29
+
30
+ ELEMENT_NAME = "PostReplyItem"
31
+
32
+ # This element only has Item fields up to, and including, 'culture'
33
+ # TDO: Plus all message fields
34
+ new_body = BodyField(field_uri="NewBodyContent") # Accepts and returns Body or HTMLBody instances
35
+
36
+ culture_idx = Item.FIELDS.index_by_name("culture")
37
+ sender_idx = Message.FIELDS.index_by_name("sender")
38
+ FIELDS = Item.FIELDS[: culture_idx + 1] + Message.FIELDS[sender_idx:]
@@ -0,0 +1,139 @@
1
+ import datetime
2
+ import logging
3
+ from decimal import Decimal
4
+
5
+ from ..ewsdatetime import UTC, EWSDateTime
6
+ from ..fields import (
7
+ BooleanField,
8
+ CharField,
9
+ Choice,
10
+ ChoiceField,
11
+ DateTimeBackedDateField,
12
+ DateTimeField,
13
+ DecimalField,
14
+ IntegerField,
15
+ TaskRecurrenceField,
16
+ TextField,
17
+ TextListField,
18
+ )
19
+ from .item import Item
20
+
21
+ log = logging.getLogger(__name__)
22
+
23
+
24
+ class Task(Item):
25
+ """MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/task"""
26
+
27
+ ELEMENT_NAME = "Task"
28
+ NOT_STARTED = "NotStarted"
29
+ COMPLETED = "Completed"
30
+
31
+ actual_work = IntegerField(field_uri="task:ActualWork", min=0)
32
+ assigned_time = DateTimeField(field_uri="task:AssignedTime", is_read_only=True)
33
+ billing_information = TextField(field_uri="task:BillingInformation")
34
+ change_count = IntegerField(field_uri="task:ChangeCount", is_read_only=True, min=0)
35
+ companies = TextListField(field_uri="task:Companies")
36
+ # 'complete_date' can be set, but is ignored by the server, which sets it to now()
37
+ complete_date = DateTimeField(field_uri="task:CompleteDate", is_read_only=True)
38
+ contacts = TextListField(field_uri="task:Contacts")
39
+ delegation_state = ChoiceField(
40
+ field_uri="task:DelegationState",
41
+ choices={
42
+ Choice("NoMatch"),
43
+ Choice("OwnNew"),
44
+ Choice("Owned"),
45
+ Choice("Accepted"),
46
+ Choice("Declined"),
47
+ Choice("Max"),
48
+ },
49
+ is_read_only=True,
50
+ )
51
+ delegator = CharField(field_uri="task:Delegator", is_read_only=True)
52
+ due_date = DateTimeBackedDateField(field_uri="task:DueDate")
53
+ is_editable = BooleanField(field_uri="task:IsAssignmentEditable", is_read_only=True)
54
+ is_complete = BooleanField(field_uri="task:IsComplete", is_read_only=True)
55
+ is_recurring = BooleanField(field_uri="task:IsRecurring", is_read_only=True)
56
+ is_team_task = BooleanField(field_uri="task:IsTeamTask", is_read_only=True)
57
+ mileage = TextField(field_uri="task:Mileage")
58
+ owner = CharField(field_uri="task:Owner", is_read_only=True)
59
+ percent_complete = DecimalField(
60
+ field_uri="task:PercentComplete",
61
+ is_required=True,
62
+ default=Decimal(0.0),
63
+ min=Decimal(0),
64
+ max=Decimal(100),
65
+ is_searchable=False,
66
+ )
67
+ recurrence = TaskRecurrenceField(field_uri="task:Recurrence", is_searchable=False)
68
+ start_date = DateTimeBackedDateField(field_uri="task:StartDate")
69
+ status = ChoiceField(
70
+ field_uri="task:Status",
71
+ choices={
72
+ Choice(NOT_STARTED),
73
+ Choice("InProgress"),
74
+ Choice(COMPLETED),
75
+ Choice("WaitingOnOthers"),
76
+ Choice("Deferred"),
77
+ },
78
+ is_required=True,
79
+ is_searchable=False,
80
+ default=NOT_STARTED,
81
+ )
82
+ status_description = CharField(field_uri="task:StatusDescription", is_read_only=True)
83
+ total_work = IntegerField(field_uri="task:TotalWork", min=0)
84
+
85
+ # O365 throws ErrorInternalServerError "[0x004f0102] MapiReplyToBlob" if UniqueBody is requested
86
+ unique_body_idx = Item.FIELDS.index_by_name("unique_body")
87
+ FIELDS = Item.FIELDS[:unique_body_idx] + Item.FIELDS[unique_body_idx + 1 :]
88
+
89
+ def clean(self, version=None):
90
+ super().clean(version=version)
91
+ if self.due_date and self.start_date and self.due_date < self.start_date:
92
+ log.warning(
93
+ "'due_date' must be greater than 'start_date' (%s vs %s). Resetting 'due_date'",
94
+ self.due_date,
95
+ self.start_date,
96
+ )
97
+ self.due_date = self.start_date
98
+ if self.complete_date:
99
+ if self.status != self.COMPLETED:
100
+ log.warning(
101
+ "'status' must be '%s' when 'complete_date' is set (%s). Resetting", self.COMPLETED, self.status
102
+ )
103
+ self.status = self.COMPLETED
104
+ now = datetime.datetime.now(tz=UTC)
105
+ if (self.complete_date - now).total_seconds() > 120:
106
+ # Reset complete_date values that are in the future
107
+ # 'complete_date' can be set automatically by the server. Allow some grace between local and server time
108
+ log.warning("'complete_date' must be in the past (%s vs %s). Resetting", self.complete_date, now)
109
+ self.complete_date = now
110
+ if self.start_date and self.complete_date.date() < self.start_date:
111
+ log.warning(
112
+ "'complete_date' must be greater than 'start_date' (%s vs %s). Resetting",
113
+ self.complete_date,
114
+ self.start_date,
115
+ )
116
+ self.complete_date = EWSDateTime.combine(self.start_date, datetime.time(0, 0)).replace(tzinfo=UTC)
117
+ if self.percent_complete is not None:
118
+ if self.status == self.COMPLETED and self.percent_complete != Decimal(100):
119
+ # percent_complete must be 100% if task is complete
120
+ log.warning(
121
+ "'percent_complete' must be 100 when 'status' is '%s' (%s). Resetting",
122
+ self.COMPLETED,
123
+ self.percent_complete,
124
+ )
125
+ self.percent_complete = Decimal(100)
126
+ elif self.status == self.NOT_STARTED and self.percent_complete != Decimal(0):
127
+ # percent_complete must be 0% if task is not started
128
+ log.warning(
129
+ "'percent_complete' must be 0 when 'status' is '%s' (%s). Resetting",
130
+ self.NOT_STARTED,
131
+ self.percent_complete,
132
+ )
133
+ self.percent_complete = Decimal(0)
134
+
135
+ def complete(self):
136
+ # A helper method to mark a task as complete on the server
137
+ self.status = Task.COMPLETED
138
+ self.percent_complete = Decimal(100)
139
+ self.save()