@backtomyfuture/exchange-cli-darwin-arm64 0.1.8 → 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.
- package/bin/_internal/Python +0 -0
- package/bin/_internal/Python.framework/Python +0 -0
- package/bin/_internal/Python.framework/Resources/Info.plist +3 -3
- package/bin/_internal/Python.framework/Versions/3.12/Python +0 -0
- package/bin/_internal/Python.framework/Versions/{3.14 → 3.12}/Resources/Info.plist +3 -3
- package/bin/_internal/Python.framework/Versions/Current/Python +0 -0
- package/bin/_internal/Python.framework/Versions/Current/Resources/Info.plist +3 -3
- package/bin/_internal/_cffi_backend.cpython-312-darwin.so +0 -0
- package/bin/_internal/ada92cb5d92a588d1b93__mypyc.cpython-312-darwin.so +0 -0
- package/bin/_internal/base_library.zip +0 -0
- package/bin/_internal/certifi/cacert.pem +0 -631
- package/bin/_internal/charset_normalizer/{md.cpython-314-darwin.so → cd.cpython-312-darwin.so} +0 -0
- package/bin/_internal/charset_normalizer/{cd.cpython-314-darwin.so → md.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/METADATA +1 -1
- package/bin/_internal/click-8.4.2.dist-info/RECORD +40 -0
- package/bin/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
- package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/METADATA +7 -36
- package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/RECORD +137 -122
- package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/WHEEL +1 -1
- package/bin/_internal/cryptography-48.0.1.dist-info/sboms/cryptography-rust.cyclonedx.json +1362 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/sboms/sbom.json +43 -0
- package/bin/_internal/exchangelib/__init__.py +120 -0
- package/bin/_internal/exchangelib/account.py +896 -0
- package/bin/_internal/exchangelib/attachments.py +268 -0
- package/bin/_internal/exchangelib/autodiscover/__init__.py +24 -0
- package/bin/_internal/exchangelib/autodiscover/cache.py +150 -0
- package/bin/_internal/exchangelib/autodiscover/discovery.py +491 -0
- package/bin/_internal/exchangelib/autodiscover/protocol.py +58 -0
- package/bin/_internal/exchangelib/configuration.py +106 -0
- package/bin/_internal/exchangelib/credentials.py +319 -0
- package/bin/_internal/exchangelib/errors.py +1710 -0
- package/bin/_internal/exchangelib/ewsdatetime.py +309 -0
- package/bin/_internal/exchangelib/extended_properties.py +311 -0
- package/bin/_internal/exchangelib/fields.py +1842 -0
- package/bin/_internal/exchangelib/folders/__init__.py +249 -0
- package/bin/_internal/exchangelib/folders/base.py +954 -0
- package/bin/_internal/exchangelib/folders/collections.py +576 -0
- package/bin/_internal/exchangelib/folders/known_folders.py +856 -0
- package/bin/_internal/exchangelib/folders/queryset.py +187 -0
- package/bin/_internal/exchangelib/folders/roots.py +390 -0
- package/bin/_internal/exchangelib/indexed_properties.py +96 -0
- package/bin/_internal/exchangelib/items/__init__.py +147 -0
- package/bin/_internal/exchangelib/items/base.py +241 -0
- package/bin/_internal/exchangelib/items/calendar_item.py +466 -0
- package/bin/_internal/exchangelib/items/contact.py +263 -0
- package/bin/_internal/exchangelib/items/item.py +413 -0
- package/bin/_internal/exchangelib/items/message.py +201 -0
- package/bin/_internal/exchangelib/items/post.py +38 -0
- package/bin/_internal/exchangelib/items/task.py +139 -0
- package/bin/_internal/exchangelib/properties.py +2364 -0
- package/bin/_internal/exchangelib/protocol.py +823 -0
- package/bin/_internal/exchangelib/queryset.py +691 -0
- package/bin/_internal/exchangelib/recurrence.py +349 -0
- package/bin/_internal/exchangelib/restriction.py +568 -0
- package/bin/_internal/exchangelib/services/__init__.py +117 -0
- package/bin/_internal/exchangelib/services/archive_item.py +33 -0
- package/bin/_internal/exchangelib/services/common.py +983 -0
- package/bin/_internal/exchangelib/services/convert_id.py +45 -0
- package/bin/_internal/exchangelib/services/copy_item.py +7 -0
- package/bin/_internal/exchangelib/services/create_attachment.py +34 -0
- package/bin/_internal/exchangelib/services/create_folder.py +45 -0
- package/bin/_internal/exchangelib/services/create_item.py +97 -0
- package/bin/_internal/exchangelib/services/create_user_configuration.py +19 -0
- package/bin/_internal/exchangelib/services/delete_attachment.py +28 -0
- package/bin/_internal/exchangelib/services/delete_folder.py +21 -0
- package/bin/_internal/exchangelib/services/delete_item.py +51 -0
- package/bin/_internal/exchangelib/services/delete_user_configuration.py +19 -0
- package/bin/_internal/exchangelib/services/empty_folder.py +25 -0
- package/bin/_internal/exchangelib/services/expand_dl.py +21 -0
- package/bin/_internal/exchangelib/services/export_items.py +27 -0
- package/bin/_internal/exchangelib/services/find_folder.py +80 -0
- package/bin/_internal/exchangelib/services/find_item.py +112 -0
- package/bin/_internal/exchangelib/services/find_people.py +106 -0
- package/bin/_internal/exchangelib/services/get_attachment.py +117 -0
- package/bin/_internal/exchangelib/services/get_delegate.py +45 -0
- package/bin/_internal/exchangelib/services/get_events.py +39 -0
- package/bin/_internal/exchangelib/services/get_folder.py +65 -0
- package/bin/_internal/exchangelib/services/get_item.py +41 -0
- package/bin/_internal/exchangelib/services/get_mail_tips.py +43 -0
- package/bin/_internal/exchangelib/services/get_persona.py +31 -0
- package/bin/_internal/exchangelib/services/get_room_lists.py +21 -0
- package/bin/_internal/exchangelib/services/get_rooms.py +21 -0
- package/bin/_internal/exchangelib/services/get_searchable_mailboxes.py +48 -0
- package/bin/_internal/exchangelib/services/get_server_time_zones.py +39 -0
- package/bin/_internal/exchangelib/services/get_streaming_events.py +102 -0
- package/bin/_internal/exchangelib/services/get_user_availability.py +67 -0
- package/bin/_internal/exchangelib/services/get_user_configuration.py +43 -0
- package/bin/_internal/exchangelib/services/get_user_oof_settings.py +40 -0
- package/bin/_internal/exchangelib/services/get_user_settings.py +87 -0
- package/bin/_internal/exchangelib/services/inbox_rules.py +104 -0
- package/bin/_internal/exchangelib/services/mark_as_junk.py +27 -0
- package/bin/_internal/exchangelib/services/move_folder.py +27 -0
- package/bin/_internal/exchangelib/services/move_item.py +28 -0
- package/bin/_internal/exchangelib/services/resolve_names.py +104 -0
- package/bin/_internal/exchangelib/services/send_item.py +26 -0
- package/bin/_internal/exchangelib/services/send_notification.py +43 -0
- package/bin/_internal/exchangelib/services/set_user_oof_settings.py +34 -0
- package/bin/_internal/exchangelib/services/subscribe.py +125 -0
- package/bin/_internal/exchangelib/services/sync_folder_hierarchy.py +95 -0
- package/bin/_internal/exchangelib/services/sync_folder_items.py +77 -0
- package/bin/_internal/exchangelib/services/unsubscribe.py +21 -0
- package/bin/_internal/exchangelib/services/update_folder.py +158 -0
- package/bin/_internal/exchangelib/services/update_item.py +113 -0
- package/bin/_internal/exchangelib/services/update_user_configuration.py +17 -0
- package/bin/_internal/exchangelib/services/upload_items.py +47 -0
- package/bin/_internal/exchangelib/settings.py +88 -0
- package/bin/_internal/exchangelib/transport.py +214 -0
- package/bin/_internal/exchangelib/util.py +894 -0
- package/bin/_internal/exchangelib/version.py +320 -0
- package/bin/_internal/exchangelib/winzone.py +662 -0
- package/bin/_internal/exchangelib-5.6.0.dist-info/INSTALLER +1 -0
- package/bin/_internal/exchangelib-5.6.0.dist-info/METADATA +77 -0
- package/bin/_internal/exchangelib-5.6.0.dist-info/RECORD +184 -0
- package/bin/_internal/exchangelib-5.6.0.dist-info/licenses/LICENSE +21 -0
- package/bin/_internal/exchangelib-5.6.0.dist-info/top_level.txt +1 -0
- package/bin/_internal/libcrypto.3.dylib +0 -0
- package/bin/_internal/libssl.3.dylib +0 -0
- package/bin/_internal/lxml/_elementpath.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/builder.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/{etree.cpython-314-darwin.so → etree.cpython-312-darwin.so} +0 -0
- package/bin/_internal/lxml/html/_difflib.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/html/diff.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/{objectify.cpython-314-darwin.so → objectify.cpython-312-darwin.so} +0 -0
- package/bin/_internal/lxml/sax.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_asyncio.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/termios.cpython-314-darwin.so → python3.12/lib-dynload/_bisect.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_sha2.cpython-314-darwin.so → python3.12/lib-dynload/_blake2.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_bz2.cpython-314-darwin.so → python3.12/lib-dynload/_bz2.cpython-312-darwin.so} +0 -0
- 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
- 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
- package/bin/_internal/{python3.14/lib-dynload/_interpqueues.cpython-314-darwin.so → python3.12/lib-dynload/_codecs_iso2022.cpython-312-darwin.so} +0 -0
- 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
- 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
- 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
- package/bin/_internal/{python3.14/lib-dynload/_statistics.cpython-314-darwin.so → python3.12/lib-dynload/_contextvars.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_csv.cpython-314-darwin.so → python3.12/lib-dynload/_csv.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ctypes.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_datetime.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_dbm.cpython-314-darwin.so → python3.12/lib-dynload/_dbm.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_decimal.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_elementtree.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_hashlib.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_heapq.cpython-314-darwin.so → python3.12/lib-dynload/_heapq.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_json.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_lzma.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_md5.cpython-314-darwin.so → python3.12/lib-dynload/_md5.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_multibytecodec.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_multiprocessing.cpython-314-darwin.so → python3.12/lib-dynload/_multiprocessing.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_opcode.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_pickle.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_bisect.cpython-314-darwin.so → python3.12/lib-dynload/_posixshmem.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_posixsubprocess.cpython-314-darwin.so → python3.12/lib-dynload/_posixsubprocess.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_queue.cpython-314-darwin.so → python3.12/lib-dynload/_queue.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_random.cpython-314-darwin.so → python3.12/lib-dynload/_random.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_scproxy.cpython-314-darwin.so → python3.12/lib-dynload/_scproxy.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_sha1.cpython-314-darwin.so → python3.12/lib-dynload/_sha1.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha2.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_blake2.cpython-314-darwin.so → python3.12/lib-dynload/_sha3.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_socket.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ssl.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_posixshmem.cpython-314-darwin.so → python3.12/lib-dynload/_statistics.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/_struct.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_uuid.cpython-314-darwin.so → python3.12/lib-dynload/_uuid.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_zoneinfo.cpython-314-darwin.so → python3.12/lib-dynload/_zoneinfo.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/array.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/binascii.cpython-314-darwin.so → python3.12/lib-dynload/binascii.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/fcntl.cpython-314-darwin.so → python3.12/lib-dynload/fcntl.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/grp.cpython-314-darwin.so → python3.12/lib-dynload/grp.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/math.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/_sha3.cpython-314-darwin.so → python3.12/lib-dynload/mmap.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/pyexpat.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/readline.cpython-312-darwin.so +0 -0
- package/bin/_internal/{python3.14/lib-dynload/resource.cpython-314-darwin.so → python3.12/lib-dynload/resource.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/select.cpython-314-darwin.so → python3.12/lib-dynload/select.cpython-312-darwin.so} +0 -0
- package/bin/_internal/{python3.14/lib-dynload/syslog.cpython-314-darwin.so → python3.12/lib-dynload/syslog.cpython-312-darwin.so} +0 -0
- package/bin/_internal/python3.12/lib-dynload/termios.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/unicodedata.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/zlib.cpython-312-darwin.so +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Casablanca +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/El_Aaiun +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Edmonton +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Vancouver +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Yellowknife +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Saigon +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Mountain +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Pacific +0 -0
- package/bin/_internal/tzdata/zoneinfo/leapseconds +4 -4
- package/bin/_internal/tzdata/zoneinfo/tzdata.zi +11 -131
- package/bin/_internal/tzdata/zoneinfo/zone.tab +2 -2
- package/bin/_internal/tzdata/zoneinfo/zone1970.tab +2 -2
- package/bin/_internal/tzdata/zoneinfo/zonenow.tab +8 -2
- package/bin/exchange-cli +0 -0
- package/package.json +10 -7
- package/bin/_internal/81d243bd2c585b0f4821__mypyc.cpython-314-darwin.so +0 -0
- package/bin/_internal/Python.framework/Versions/3.14/Python +0 -0
- package/bin/_internal/_cffi_backend.cpython-314-darwin.so +0 -0
- package/bin/_internal/click-8.3.2.dist-info/RECORD +0 -40
- package/bin/_internal/liblzma.5.dylib +0 -0
- package/bin/_internal/libmpdec.4.dylib +0 -0
- package/bin/_internal/libzstd.1.dylib +0 -0
- package/bin/_internal/lxml/_elementpath.cpython-314-darwin.so +0 -0
- package/bin/_internal/lxml/builder.cpython-314-darwin.so +0 -0
- package/bin/_internal/lxml/html/_difflib.cpython-314-darwin.so +0 -0
- package/bin/_internal/lxml/html/diff.cpython-314-darwin.so +0 -0
- package/bin/_internal/lxml/sax.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_asyncio.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_codecs_iso2022.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_ctypes.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_decimal.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_elementtree.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_hashlib.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_hmac.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_interpreters.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_json.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_lzma.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_multibytecodec.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_pickle.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_socket.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_ssl.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_struct.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/_zstd.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/array.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/math.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/mmap.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/pyexpat.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/readline.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/unicodedata.cpython-314-darwin.so +0 -0
- package/bin/_internal/python3.14/lib-dynload/zlib.cpython-314-darwin.so +0 -0
- package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER +0 -1
- package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA +0 -133
- package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD +0 -21
- package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED +0 -0
- package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE +0 -73
- package/bin/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt +0 -1
- /package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/INSTALLER +0 -0
- /package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/WHEEL +0 -0
- /package/bin/_internal/{click-8.3.2.dist-info → click-8.4.2.dist-info}/licenses/LICENSE.txt +0 -0
- /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/INSTALLER +0 -0
- /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/licenses/LICENSE +0 -0
- /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/licenses/LICENSE.APACHE +0 -0
- /package/bin/_internal/{cryptography-46.0.7.dist-info → cryptography-48.0.1.dist-info}/licenses/LICENSE.BSD +0 -0
- /package/bin/_internal/{setuptools/_vendor/importlib_metadata-8.7.1.dist-info → exchangelib-5.6.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from .fields import (
|
|
4
|
+
MONTHS,
|
|
5
|
+
WEEK_NUMBERS,
|
|
6
|
+
WEEKDAY_NAMES,
|
|
7
|
+
WEEKDAYS,
|
|
8
|
+
DateOrDateTimeField,
|
|
9
|
+
DateTimeField,
|
|
10
|
+
EnumField,
|
|
11
|
+
EWSElementField,
|
|
12
|
+
IdElementField,
|
|
13
|
+
IntegerField,
|
|
14
|
+
WeekdaysField,
|
|
15
|
+
)
|
|
16
|
+
from .properties import EWSElement, EWSMeta, IdChangeKeyMixIn, ItemId
|
|
17
|
+
|
|
18
|
+
log = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _month_to_str(month):
|
|
22
|
+
return MONTHS[month - 1] if isinstance(month, int) else month
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _weekday_to_str(weekday):
|
|
26
|
+
return WEEKDAYS[weekday - 1] if isinstance(weekday, int) else weekday
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _week_number_to_str(week_number):
|
|
30
|
+
return WEEK_NUMBERS[week_number - 1] if isinstance(week_number, int) else week_number
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Pattern(EWSElement, metaclass=EWSMeta):
|
|
34
|
+
"""Base class for all classes implementing recurring pattern elements."""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class Regeneration(Pattern, metaclass=EWSMeta):
|
|
38
|
+
"""Base class for all classes implementing recurring regeneration elements."""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class AbsoluteYearlyPattern(Pattern):
|
|
42
|
+
"""MSDN:
|
|
43
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/absoluteyearlyrecurrence
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
ELEMENT_NAME = "AbsoluteYearlyRecurrence"
|
|
47
|
+
|
|
48
|
+
# The day of month of an occurrence, in range 1 -> 31. If a particular month has fewer days than the day_of_month
|
|
49
|
+
# value, the last day in the month is assumed
|
|
50
|
+
day_of_month = IntegerField(field_uri="DayOfMonth", min=1, max=31, is_required=True)
|
|
51
|
+
# The month of the year, from 1 to 12
|
|
52
|
+
month = EnumField(field_uri="Month", enum=MONTHS, is_required=True)
|
|
53
|
+
|
|
54
|
+
def __str__(self):
|
|
55
|
+
return f"Occurs on day {self.day_of_month} of {_month_to_str(self.month)}"
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class RelativeYearlyPattern(Pattern):
|
|
59
|
+
"""MSDN:
|
|
60
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/relativeyearlyrecurrence
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
ELEMENT_NAME = "RelativeYearlyRecurrence"
|
|
64
|
+
|
|
65
|
+
# Valid ISO 8601 weekday, as a number in range 1 -> 7 (1 being Monday). The value can also be one of the DAY
|
|
66
|
+
# (or 8), WEEK_DAY (or 9) or WEEKEND_DAY (or 10) consts which is interpreted as the first day, weekday, or weekend
|
|
67
|
+
# day of the year. Despite the field name in EWS, this is not a list.
|
|
68
|
+
weekday = EnumField(field_uri="DaysOfWeek", enum=WEEKDAYS, is_required=True)
|
|
69
|
+
# Week number of the month, in range 1 -> 5. If 5 is specified, this assumes the last week of the month for
|
|
70
|
+
# months that have only 4 weeks
|
|
71
|
+
week_number = EnumField(field_uri="DayOfWeekIndex", enum=WEEK_NUMBERS, is_required=True)
|
|
72
|
+
# The month of the year, from 1 to 12
|
|
73
|
+
month = EnumField(field_uri="Month", enum=MONTHS, is_required=True)
|
|
74
|
+
|
|
75
|
+
def __str__(self):
|
|
76
|
+
return (
|
|
77
|
+
f"Occurs on weekday {_weekday_to_str(self.weekday)} in the {_week_number_to_str(self.week_number)} "
|
|
78
|
+
f"week of {_month_to_str(self.month)}"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class AbsoluteMonthlyPattern(Pattern):
|
|
83
|
+
"""MSDN:
|
|
84
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/absolutemonthlyrecurrence
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
ELEMENT_NAME = "AbsoluteMonthlyRecurrence"
|
|
88
|
+
|
|
89
|
+
# Interval, in months, in range 1 -> 99
|
|
90
|
+
interval = IntegerField(field_uri="Interval", min=1, max=99, is_required=True)
|
|
91
|
+
# The day of month of an occurrence, in range 1 -> 31. If a particular month has fewer days than the day_of_month
|
|
92
|
+
# value, the last day in the month is assumed
|
|
93
|
+
day_of_month = IntegerField(field_uri="DayOfMonth", min=1, max=31, is_required=True)
|
|
94
|
+
|
|
95
|
+
def __str__(self):
|
|
96
|
+
return f"Occurs on day {self.day_of_month} of every {self.interval} month(s)"
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class RelativeMonthlyPattern(Pattern):
|
|
100
|
+
"""MSDN:
|
|
101
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/relativemonthlyrecurrence
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
ELEMENT_NAME = "RelativeMonthlyRecurrence"
|
|
105
|
+
|
|
106
|
+
# Interval, in months, in range 1 -> 99
|
|
107
|
+
interval = IntegerField(field_uri="Interval", min=1, max=99, is_required=True)
|
|
108
|
+
# Valid ISO 8601 weekday, as a number in range 1 -> 7 (1 being Monday). The value can also be one of the DAY
|
|
109
|
+
# (or 8), WEEK_DAY (or 9) or WEEKEND_DAY (or 10) consts which is interpreted as the first day, weekday, or weekend
|
|
110
|
+
# day of the month. Despite the field name in EWS, this is not a list.
|
|
111
|
+
weekday = EnumField(field_uri="DaysOfWeek", enum=WEEKDAYS, is_required=True)
|
|
112
|
+
# Week number of the month, in range 1 -> 5. If 5 is specified, this assumes the last week of the month for
|
|
113
|
+
# months that have only 4 weeks.
|
|
114
|
+
week_number = EnumField(field_uri="DayOfWeekIndex", enum=WEEK_NUMBERS, is_required=True)
|
|
115
|
+
|
|
116
|
+
def __str__(self):
|
|
117
|
+
return (
|
|
118
|
+
f"Occurs on weekday {_weekday_to_str(self.weekday)} in the {_week_number_to_str(self.week_number)} "
|
|
119
|
+
f"week of every {self.interval} month(s)"
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class WeeklyPattern(Pattern):
|
|
124
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/weeklyrecurrence"""
|
|
125
|
+
|
|
126
|
+
ELEMENT_NAME = "WeeklyRecurrence"
|
|
127
|
+
|
|
128
|
+
# Interval, in weeks, in range 1 -> 99
|
|
129
|
+
interval = IntegerField(field_uri="Interval", min=1, max=99, is_required=True)
|
|
130
|
+
# List of valid ISO 8601 weekdays, as list of numbers in range 1 -> 7 (1 being Monday)
|
|
131
|
+
weekdays = WeekdaysField(field_uri="DaysOfWeek", enum=WEEKDAY_NAMES, is_required=True)
|
|
132
|
+
# The first day of the week. Defaults to Monday
|
|
133
|
+
first_day_of_week = EnumField(field_uri="FirstDayOfWeek", enum=WEEKDAY_NAMES, default=1, is_required=True)
|
|
134
|
+
|
|
135
|
+
def __str__(self):
|
|
136
|
+
weekdays = [_weekday_to_str(i) for i in self.get_field_by_fieldname("weekdays").clean(self.weekdays)]
|
|
137
|
+
return (
|
|
138
|
+
f'Occurs on weekdays {", ".join(weekdays)} of every {self.interval} week(s) where the first day of '
|
|
139
|
+
f"the week is {_weekday_to_str(self.first_day_of_week)}"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class DailyPattern(Pattern):
|
|
144
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/dailyrecurrence"""
|
|
145
|
+
|
|
146
|
+
ELEMENT_NAME = "DailyRecurrence"
|
|
147
|
+
|
|
148
|
+
# Interval, in days, in range 1 -> 999
|
|
149
|
+
interval = IntegerField(field_uri="Interval", min=1, max=999, is_required=True)
|
|
150
|
+
|
|
151
|
+
def __str__(self):
|
|
152
|
+
return f"Occurs every {self.interval} day(s)"
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class YearlyRegeneration(Regeneration):
|
|
156
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/yearlyregeneration"""
|
|
157
|
+
|
|
158
|
+
ELEMENT_NAME = "YearlyRegeneration"
|
|
159
|
+
|
|
160
|
+
# Interval, in years
|
|
161
|
+
interval = IntegerField(field_uri="Interval", min=1, is_required=True)
|
|
162
|
+
|
|
163
|
+
def __str__(self):
|
|
164
|
+
return f"Regenerates every {self.interval} year(s)"
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class MonthlyRegeneration(Regeneration):
|
|
168
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/monthlyregeneration"""
|
|
169
|
+
|
|
170
|
+
ELEMENT_NAME = "MonthlyRegeneration"
|
|
171
|
+
|
|
172
|
+
# Interval, in months
|
|
173
|
+
interval = IntegerField(field_uri="Interval", min=1, is_required=True)
|
|
174
|
+
|
|
175
|
+
def __str__(self):
|
|
176
|
+
return f"Regenerates every {self.interval} month(s)"
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class WeeklyRegeneration(Regeneration):
|
|
180
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/weeklyregeneration"""
|
|
181
|
+
|
|
182
|
+
ELEMENT_NAME = "WeeklyRegeneration"
|
|
183
|
+
|
|
184
|
+
# Interval, in weeks
|
|
185
|
+
interval = IntegerField(field_uri="Interval", min=1, is_required=True)
|
|
186
|
+
|
|
187
|
+
def __str__(self):
|
|
188
|
+
return f"Regenerates every {self.interval} week(s)"
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class DailyRegeneration(Regeneration):
|
|
192
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/dailyregeneration"""
|
|
193
|
+
|
|
194
|
+
ELEMENT_NAME = "DailyRegeneration"
|
|
195
|
+
|
|
196
|
+
# Interval, in days
|
|
197
|
+
interval = IntegerField(field_uri="Interval", min=1, is_required=True)
|
|
198
|
+
|
|
199
|
+
def __str__(self):
|
|
200
|
+
return f"Regenerates every {self.interval} day(s)"
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class Boundary(EWSElement, metaclass=EWSMeta):
|
|
204
|
+
"""Base class for all classes implementing recurring boundary elements."""
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
class NoEndPattern(Boundary):
|
|
208
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/noendrecurrence"""
|
|
209
|
+
|
|
210
|
+
ELEMENT_NAME = "NoEndRecurrence"
|
|
211
|
+
|
|
212
|
+
# Start date, as EWSDate or EWSDateTime
|
|
213
|
+
start = DateOrDateTimeField(field_uri="StartDate", is_required=True)
|
|
214
|
+
|
|
215
|
+
def __str__(self):
|
|
216
|
+
return f"Starts on {self.start}"
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class EndDatePattern(Boundary):
|
|
220
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/enddaterecurrence"""
|
|
221
|
+
|
|
222
|
+
ELEMENT_NAME = "EndDateRecurrence"
|
|
223
|
+
|
|
224
|
+
# Start date, as EWSDate or EWSDateTime
|
|
225
|
+
start = DateOrDateTimeField(field_uri="StartDate", is_required=True)
|
|
226
|
+
# End date, as EWSDate
|
|
227
|
+
end = DateOrDateTimeField(field_uri="EndDate", is_required=True)
|
|
228
|
+
|
|
229
|
+
def __str__(self):
|
|
230
|
+
return f"Starts on {self.start}, ends on {self.end}"
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
class NumberedPattern(Boundary):
|
|
234
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/numberedrecurrence"""
|
|
235
|
+
|
|
236
|
+
ELEMENT_NAME = "NumberedRecurrence"
|
|
237
|
+
|
|
238
|
+
# Start date, as EWSDate or EWSDateTime
|
|
239
|
+
start = DateOrDateTimeField(field_uri="StartDate", is_required=True)
|
|
240
|
+
# The number of occurrences in this pattern, in range 1 -> 999
|
|
241
|
+
number = IntegerField(field_uri="NumberOfOccurrences", min=1, max=999, is_required=True)
|
|
242
|
+
|
|
243
|
+
def __str__(self):
|
|
244
|
+
return f"Starts on {self.start} and occurs {self.number} time(s)"
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
class Occurrence(IdChangeKeyMixIn):
|
|
248
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/occurrence"""
|
|
249
|
+
|
|
250
|
+
ELEMENT_NAME = "Occurrence"
|
|
251
|
+
ID_ELEMENT_CLS = ItemId
|
|
252
|
+
|
|
253
|
+
_id = IdElementField(field_uri="ItemId", value_cls=ID_ELEMENT_CLS)
|
|
254
|
+
# The modified start time of the item, as EWSDateTime
|
|
255
|
+
start = DateTimeField(field_uri="Start")
|
|
256
|
+
# The modified end time of the item, as EWSDateTime
|
|
257
|
+
end = DateTimeField(field_uri="End")
|
|
258
|
+
# The original start time of the item, as EWSDateTime
|
|
259
|
+
original_start = DateTimeField(field_uri="OriginalStart")
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
# Container elements:
|
|
263
|
+
# 'ModifiedOccurrences'
|
|
264
|
+
# 'DeletedOccurrences'
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
class FirstOccurrence(Occurrence):
|
|
268
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/firstoccurrence"""
|
|
269
|
+
|
|
270
|
+
ELEMENT_NAME = "FirstOccurrence"
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
class LastOccurrence(Occurrence):
|
|
274
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/lastoccurrence"""
|
|
275
|
+
|
|
276
|
+
ELEMENT_NAME = "LastOccurrence"
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
class DeletedOccurrence(EWSElement):
|
|
280
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/deletedoccurrence"""
|
|
281
|
+
|
|
282
|
+
ELEMENT_NAME = "DeletedOccurrence"
|
|
283
|
+
|
|
284
|
+
# The modified start time of the item, as EWSDateTime
|
|
285
|
+
start = DateTimeField(field_uri="Start")
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
PATTERN_CLASSES = (
|
|
289
|
+
AbsoluteYearlyPattern,
|
|
290
|
+
RelativeYearlyPattern,
|
|
291
|
+
AbsoluteMonthlyPattern,
|
|
292
|
+
RelativeMonthlyPattern,
|
|
293
|
+
WeeklyPattern,
|
|
294
|
+
DailyPattern,
|
|
295
|
+
)
|
|
296
|
+
REGENERATION_CLASSES = YearlyRegeneration, MonthlyRegeneration, WeeklyRegeneration, DailyRegeneration
|
|
297
|
+
BOUNDARY_CLASSES = NoEndPattern, EndDatePattern, NumberedPattern
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
class Recurrence(EWSElement):
|
|
301
|
+
"""MSDN:
|
|
302
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/recurrence-recurrencetype
|
|
303
|
+
"""
|
|
304
|
+
|
|
305
|
+
ELEMENT_NAME = "Recurrence"
|
|
306
|
+
PATTERN_CLASS_MAP = {cls.response_tag(): cls for cls in PATTERN_CLASSES}
|
|
307
|
+
BOUNDARY_CLASS_MAP = {cls.response_tag(): cls for cls in BOUNDARY_CLASSES}
|
|
308
|
+
|
|
309
|
+
pattern = EWSElementField(value_cls=Pattern)
|
|
310
|
+
boundary = EWSElementField(value_cls=Boundary)
|
|
311
|
+
|
|
312
|
+
def __init__(self, **kwargs):
|
|
313
|
+
# Allow specifying a start, end and/or number as a shortcut to creating a boundary
|
|
314
|
+
start = kwargs.pop("start", None)
|
|
315
|
+
end = kwargs.pop("end", None)
|
|
316
|
+
number = kwargs.pop("number", None)
|
|
317
|
+
if any([start, end, number]):
|
|
318
|
+
if "boundary" in kwargs:
|
|
319
|
+
raise ValueError("'boundary' is not allowed in combination with 'start', 'end' or 'number'")
|
|
320
|
+
if start and not end and not number:
|
|
321
|
+
kwargs["boundary"] = NoEndPattern(start=start)
|
|
322
|
+
elif start and end and not number:
|
|
323
|
+
kwargs["boundary"] = EndDatePattern(start=start, end=end)
|
|
324
|
+
elif start and number and not end:
|
|
325
|
+
kwargs["boundary"] = NumberedPattern(start=start, number=number)
|
|
326
|
+
else:
|
|
327
|
+
raise ValueError("Unsupported 'start', 'end', 'number' combination")
|
|
328
|
+
super().__init__(**kwargs)
|
|
329
|
+
|
|
330
|
+
@classmethod
|
|
331
|
+
def from_xml(cls, elem, account):
|
|
332
|
+
pattern, boundary = None, None
|
|
333
|
+
for child_elem in elem:
|
|
334
|
+
if child_elem.tag in cls.PATTERN_CLASS_MAP:
|
|
335
|
+
pattern = cls.PATTERN_CLASS_MAP[child_elem.tag].from_xml(elem=child_elem, account=account)
|
|
336
|
+
elif child_elem.tag in cls.BOUNDARY_CLASS_MAP:
|
|
337
|
+
boundary = cls.BOUNDARY_CLASS_MAP[child_elem.tag].from_xml(elem=child_elem, account=account)
|
|
338
|
+
return cls(pattern=pattern, boundary=boundary)
|
|
339
|
+
|
|
340
|
+
def __str__(self):
|
|
341
|
+
return f"Pattern: {self.pattern}, Boundary: {self.boundary}"
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
class TaskRecurrence(Recurrence):
|
|
345
|
+
"""MSDN:
|
|
346
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/recurrence-taskrecurrencetype
|
|
347
|
+
"""
|
|
348
|
+
|
|
349
|
+
PATTERN_CLASS_MAP = {cls.response_tag(): cls for cls in PATTERN_CLASSES + REGENERATION_CLASSES}
|