@backtomyfuture/exchange-cli-win32-x64 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/VCRUNTIME140.dll +0 -0
- package/bin/_internal/VCRUNTIME140_1.dll +0 -0
- package/bin/_internal/_asyncio.pyd +0 -0
- package/bin/_internal/_bz2.pyd +0 -0
- package/bin/_internal/_cffi_backend.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/_ctypes.pyd +0 -0
- package/bin/_internal/_decimal.pyd +0 -0
- package/bin/_internal/_elementtree.pyd +0 -0
- package/bin/_internal/_hashlib.pyd +0 -0
- package/bin/_internal/_lzma.pyd +0 -0
- package/bin/_internal/_multiprocessing.pyd +0 -0
- package/bin/_internal/_overlapped.pyd +0 -0
- package/bin/_internal/_queue.pyd +0 -0
- package/bin/_internal/_socket.pyd +0 -0
- package/bin/_internal/_ssl.pyd +0 -0
- package/bin/_internal/_uuid.pyd +0 -0
- package/bin/_internal/_wmi.pyd +0 -0
- package/bin/_internal/_zoneinfo.pyd +0 -0
- package/bin/_internal/ada92cb5d92a588d1b93__mypyc.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/api-ms-win-core-console-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-datetime-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-debug-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-fibers-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-fibers-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l2-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-handle-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-heap-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-localization-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-memory-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-profile-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-string-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-synch-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-synch-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-sysinfo-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-timezone-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-util-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-conio-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-convert-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-environment-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-heap-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-locale-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-math-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-process-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-string-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-time-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-utility-l1-1-0.dll +0 -0
- package/bin/_internal/base_library.zip +0 -0
- package/bin/_internal/certifi/cacert.pem +3959 -0
- package/bin/_internal/certifi/py.typed +0 -0
- package/bin/_internal/charset_normalizer/cd.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/charset_normalizer/md.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/click-8.4.2.dist-info/INSTALLER +1 -0
- package/bin/_internal/click-8.4.2.dist-info/METADATA +84 -0
- package/bin/_internal/click-8.4.2.dist-info/RECORD +40 -0
- package/bin/_internal/click-8.4.2.dist-info/WHEEL +4 -0
- package/bin/_internal/click-8.4.2.dist-info/licenses/LICENSE.txt +28 -0
- package/bin/_internal/cryptography/hazmat/bindings/_rust.pyd +0 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/INSTALLER +1 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/METADATA +110 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/RECORD +195 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/WHEEL +4 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/licenses/LICENSE +3 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/licenses/LICENSE.APACHE +202 -0
- package/bin/_internal/cryptography-48.0.1.dist-info/licenses/LICENSE.BSD +27 -0
- 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/WHEEL +5 -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.dll +0 -0
- package/bin/_internal/libffi-8.dll +0 -0
- package/bin/_internal/libssl-3.dll +0 -0
- package/bin/_internal/lxml/_elementpath.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/lxml/builder.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/lxml/etree.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/lxml/html/_difflib.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/lxml/html/diff.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/lxml/isoschematron/resources/rng/iso-schematron.rng +709 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl +75 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl +77 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl +313 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl +1160 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl +55 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl +1796 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl +588 -0
- package/bin/_internal/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt +84 -0
- package/bin/_internal/lxml/objectify.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/lxml/sax.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/pyexpat.pyd +0 -0
- package/bin/_internal/python3.dll +0 -0
- package/bin/_internal/python312.dll +0 -0
- package/bin/_internal/select.pyd +0 -0
- package/bin/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt +2 -0
- package/bin/_internal/sspilib/raw/_context_attributes.pyd +0 -0
- package/bin/_internal/sspilib/raw/_credential.pyd +0 -0
- package/bin/_internal/sspilib/raw/_credential_attributes.pyd +0 -0
- package/bin/_internal/sspilib/raw/_message.pyd +0 -0
- package/bin/_internal/sspilib/raw/_ntstatus.pyd +0 -0
- package/bin/_internal/sspilib/raw/_security_buffer.pyd +0 -0
- package/bin/_internal/sspilib/raw/_security_context.pyd +0 -0
- package/bin/_internal/sspilib/raw/_security_package.pyd +0 -0
- package/bin/_internal/sspilib/raw/_text.pyd +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Abidjan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Accra +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Addis_Ababa +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Algiers +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Asmara +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Asmera +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Bamako +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Bangui +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Banjul +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Bissau +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Blantyre +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Brazzaville +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Bujumbura +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Cairo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Casablanca +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Ceuta +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Conakry +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Dakar +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Dar_es_Salaam +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Djibouti +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Douala +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/El_Aaiun +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Freetown +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Gaborone +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Harare +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Johannesburg +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Juba +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Kampala +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Khartoum +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Kigali +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Kinshasa +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Lagos +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Libreville +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Lome +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Luanda +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Lubumbashi +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Lusaka +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Malabo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Maputo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Maseru +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Mbabane +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Mogadishu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Monrovia +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Nairobi +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Ndjamena +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Niamey +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Nouakchott +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Ouagadougou +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Porto-Novo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Sao_Tome +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Timbuktu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Tripoli +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Tunis +0 -0
- package/bin/_internal/tzdata/zoneinfo/Africa/Windhoek +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Adak +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Anchorage +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Anguilla +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Antigua +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Araguaina +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Buenos_Aires +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Catamarca +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/ComodRivadavia +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Cordoba +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Jujuy +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/La_Rioja +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Mendoza +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Rio_Gallegos +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Salta +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/San_Juan +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/San_Luis +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Tucuman +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Argentina/Ushuaia +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Aruba +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Asuncion +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Atikokan +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Atka +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Bahia +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Bahia_Banderas +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Barbados +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Belem +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Belize +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Blanc-Sablon +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Boa_Vista +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Bogota +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Boise +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Buenos_Aires +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Cambridge_Bay +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Campo_Grande +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Cancun +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Caracas +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Catamarca +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Cayenne +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Cayman +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Chicago +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Chihuahua +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Ciudad_Juarez +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Coral_Harbour +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Cordoba +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Costa_Rica +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Coyhaique +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Creston +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Cuiaba +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Curacao +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Danmarkshavn +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Dawson +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Dawson_Creek +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Denver +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Detroit +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Dominica +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Edmonton +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Eirunepe +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/El_Salvador +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Ensenada +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Fort_Nelson +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Fort_Wayne +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Fortaleza +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Glace_Bay +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Godthab +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Goose_Bay +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Grand_Turk +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Grenada +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Guadeloupe +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Guatemala +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Guayaquil +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Guyana +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Halifax +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Havana +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Hermosillo +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Indianapolis +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Knox +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Marengo +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Petersburg +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Tell_City +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Vevay +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Vincennes +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indiana/Winamac +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Indianapolis +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Inuvik +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Iqaluit +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Jamaica +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Jujuy +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Juneau +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Kentucky/Louisville +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Kentucky/Monticello +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Knox_IN +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Kralendijk +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/La_Paz +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Lima +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Los_Angeles +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Louisville +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Lower_Princes +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Maceio +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Managua +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Manaus +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Marigot +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Martinique +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Matamoros +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Mazatlan +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Mendoza +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Menominee +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Merida +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Metlakatla +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Mexico_City +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Miquelon +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Moncton +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Monterrey +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Montevideo +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Montreal +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Montserrat +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Nassau +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/New_York +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Nipigon +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Nome +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Noronha +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/North_Dakota/Beulah +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/North_Dakota/Center +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/North_Dakota/New_Salem +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Nuuk +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Ojinaga +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Panama +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Pangnirtung +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Paramaribo +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Phoenix +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Port-au-Prince +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Port_of_Spain +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Porto_Acre +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Porto_Velho +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Puerto_Rico +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Punta_Arenas +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Rainy_River +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Rankin_Inlet +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Recife +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Regina +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Resolute +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Rio_Branco +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Rosario +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Santa_Isabel +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Santarem +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Santiago +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Santo_Domingo +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Sao_Paulo +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Scoresbysund +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Shiprock +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Sitka +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/St_Barthelemy +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/St_Johns +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/St_Kitts +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/St_Lucia +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/St_Thomas +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/St_Vincent +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Swift_Current +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Tegucigalpa +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Thule +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Thunder_Bay +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Tijuana +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Toronto +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Tortola +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Vancouver +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Virgin +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Whitehorse +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Winnipeg +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Yakutat +0 -0
- package/bin/_internal/tzdata/zoneinfo/America/Yellowknife +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Casey +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Davis +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/DumontDUrville +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Macquarie +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Mawson +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/McMurdo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Palmer +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Rothera +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/South_Pole +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Syowa +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Troll +0 -0
- package/bin/_internal/tzdata/zoneinfo/Antarctica/Vostok +0 -0
- package/bin/_internal/tzdata/zoneinfo/Arctic/Longyearbyen +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Aden +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Almaty +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Amman +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Anadyr +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Aqtau +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Aqtobe +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ashgabat +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ashkhabad +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Atyrau +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Baghdad +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Bahrain +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Baku +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Bangkok +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Barnaul +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Beirut +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Bishkek +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Brunei +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Calcutta +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Chita +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Choibalsan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Chongqing +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Chungking +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Colombo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Dacca +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Damascus +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Dhaka +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Dili +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Dubai +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Dushanbe +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Famagusta +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Gaza +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Harbin +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Hebron +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Hong_Kong +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Hovd +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Irkutsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Istanbul +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Jakarta +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Jayapura +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Jerusalem +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kabul +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kamchatka +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Karachi +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kashgar +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kathmandu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Katmandu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Khandyga +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kolkata +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Krasnoyarsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kuala_Lumpur +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kuching +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Kuwait +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Macao +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Macau +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Magadan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Makassar +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Manila +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Muscat +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Nicosia +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Novokuznetsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Novosibirsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Omsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Oral +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Pontianak +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Pyongyang +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Qatar +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Qostanay +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Qyzylorda +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Rangoon +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Riyadh +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Saigon +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Sakhalin +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Samarkand +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Seoul +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Shanghai +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Singapore +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Srednekolymsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Taipei +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Tashkent +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Tbilisi +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Tehran +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Tel_Aviv +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Thimbu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Thimphu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Tokyo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Tomsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ujung_Pandang +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ulaanbaatar +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ulan_Bator +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Urumqi +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Ust-Nera +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Vientiane +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Vladivostok +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Yakutsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Yangon +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Yekaterinburg +0 -0
- package/bin/_internal/tzdata/zoneinfo/Asia/Yerevan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Azores +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Bermuda +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Canary +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Cape_Verde +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Faeroe +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Faroe +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Jan_Mayen +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Madeira +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Reykjavik +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/South_Georgia +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/St_Helena +0 -0
- package/bin/_internal/tzdata/zoneinfo/Atlantic/Stanley +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/ACT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Adelaide +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Brisbane +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Broken_Hill +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Canberra +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Currie +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Darwin +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Eucla +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Hobart +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/LHI +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Lindeman +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Lord_Howe +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Melbourne +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/NSW +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/North +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Perth +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Queensland +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/South +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Sydney +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Tasmania +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Victoria +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/West +0 -0
- package/bin/_internal/tzdata/zoneinfo/Australia/Yancowinna +0 -0
- package/bin/_internal/tzdata/zoneinfo/Brazil/Acre +0 -0
- package/bin/_internal/tzdata/zoneinfo/Brazil/DeNoronha +0 -0
- package/bin/_internal/tzdata/zoneinfo/Brazil/East +0 -0
- package/bin/_internal/tzdata/zoneinfo/Brazil/West +0 -0
- package/bin/_internal/tzdata/zoneinfo/CET +0 -0
- package/bin/_internal/tzdata/zoneinfo/CST6CDT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Atlantic +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Central +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Eastern +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Mountain +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Newfoundland +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Pacific +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Saskatchewan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Canada/Yukon +0 -0
- package/bin/_internal/tzdata/zoneinfo/Chile/Continental +0 -0
- package/bin/_internal/tzdata/zoneinfo/Chile/EasterIsland +0 -0
- package/bin/_internal/tzdata/zoneinfo/Cuba +0 -0
- package/bin/_internal/tzdata/zoneinfo/EET +0 -0
- package/bin/_internal/tzdata/zoneinfo/EST +0 -0
- package/bin/_internal/tzdata/zoneinfo/EST5EDT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Egypt +0 -0
- package/bin/_internal/tzdata/zoneinfo/Eire +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+0 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+1 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+10 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+11 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+12 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+2 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+3 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+4 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+5 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+6 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+7 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+8 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT+9 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-0 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-1 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-10 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-11 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-12 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-13 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-14 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-2 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-3 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-4 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-5 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-6 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-7 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-8 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT-9 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/GMT0 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/Greenwich +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/UCT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/UTC +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/Universal +0 -0
- package/bin/_internal/tzdata/zoneinfo/Etc/Zulu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Amsterdam +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Andorra +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Astrakhan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Athens +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Belfast +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Belgrade +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Berlin +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Bratislava +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Brussels +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Bucharest +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Budapest +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Busingen +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Chisinau +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Copenhagen +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Dublin +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Gibraltar +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Guernsey +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Helsinki +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Isle_of_Man +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Istanbul +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Jersey +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Kaliningrad +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Kiev +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Kirov +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Kyiv +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Lisbon +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Ljubljana +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/London +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Luxembourg +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Madrid +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Malta +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Mariehamn +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Minsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Monaco +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Moscow +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Nicosia +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Oslo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Paris +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Podgorica +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Prague +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Riga +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Rome +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Samara +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/San_Marino +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Sarajevo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Saratov +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Simferopol +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Skopje +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Sofia +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Stockholm +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Tallinn +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Tirane +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Tiraspol +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Ulyanovsk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Uzhgorod +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Vaduz +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Vatican +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Vienna +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Vilnius +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Volgograd +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Warsaw +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Zagreb +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Zaporozhye +0 -0
- package/bin/_internal/tzdata/zoneinfo/Europe/Zurich +0 -0
- package/bin/_internal/tzdata/zoneinfo/Factory +0 -0
- package/bin/_internal/tzdata/zoneinfo/GB +0 -0
- package/bin/_internal/tzdata/zoneinfo/GB-Eire +0 -0
- package/bin/_internal/tzdata/zoneinfo/GMT +0 -0
- package/bin/_internal/tzdata/zoneinfo/GMT+0 +0 -0
- package/bin/_internal/tzdata/zoneinfo/GMT-0 +0 -0
- package/bin/_internal/tzdata/zoneinfo/GMT0 +0 -0
- package/bin/_internal/tzdata/zoneinfo/Greenwich +0 -0
- package/bin/_internal/tzdata/zoneinfo/HST +0 -0
- package/bin/_internal/tzdata/zoneinfo/Hongkong +0 -0
- package/bin/_internal/tzdata/zoneinfo/Iceland +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Antananarivo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Chagos +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Christmas +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Cocos +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Comoro +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Kerguelen +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Mahe +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Maldives +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Mauritius +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Mayotte +0 -0
- package/bin/_internal/tzdata/zoneinfo/Indian/Reunion +0 -0
- package/bin/_internal/tzdata/zoneinfo/Iran +0 -0
- package/bin/_internal/tzdata/zoneinfo/Israel +0 -0
- package/bin/_internal/tzdata/zoneinfo/Jamaica +0 -0
- package/bin/_internal/tzdata/zoneinfo/Japan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Kwajalein +0 -0
- package/bin/_internal/tzdata/zoneinfo/Libya +0 -0
- package/bin/_internal/tzdata/zoneinfo/MET +0 -0
- package/bin/_internal/tzdata/zoneinfo/MST +0 -0
- package/bin/_internal/tzdata/zoneinfo/MST7MDT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Mexico/BajaNorte +0 -0
- package/bin/_internal/tzdata/zoneinfo/Mexico/BajaSur +0 -0
- package/bin/_internal/tzdata/zoneinfo/Mexico/General +0 -0
- package/bin/_internal/tzdata/zoneinfo/NZ +0 -0
- package/bin/_internal/tzdata/zoneinfo/NZ-CHAT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Navajo +0 -0
- package/bin/_internal/tzdata/zoneinfo/PRC +0 -0
- package/bin/_internal/tzdata/zoneinfo/PST8PDT +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Apia +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Auckland +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Bougainville +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Chatham +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Chuuk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Easter +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Efate +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Enderbury +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Fakaofo +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Fiji +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Funafuti +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Galapagos +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Gambier +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Guadalcanal +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Guam +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Honolulu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Johnston +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Kanton +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Kiritimati +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Kosrae +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Kwajalein +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Majuro +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Marquesas +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Midway +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Nauru +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Niue +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Norfolk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Noumea +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Pago_Pago +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Palau +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Pitcairn +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Pohnpei +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Ponape +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Port_Moresby +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Rarotonga +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Saipan +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Samoa +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Tahiti +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Tarawa +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Tongatapu +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Truk +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Wake +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Wallis +0 -0
- package/bin/_internal/tzdata/zoneinfo/Pacific/Yap +0 -0
- package/bin/_internal/tzdata/zoneinfo/Poland +0 -0
- package/bin/_internal/tzdata/zoneinfo/Portugal +0 -0
- package/bin/_internal/tzdata/zoneinfo/ROC +0 -0
- package/bin/_internal/tzdata/zoneinfo/ROK +0 -0
- package/bin/_internal/tzdata/zoneinfo/Singapore +0 -0
- package/bin/_internal/tzdata/zoneinfo/Turkey +0 -0
- package/bin/_internal/tzdata/zoneinfo/UCT +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Alaska +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Aleutian +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Arizona +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Central +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/East-Indiana +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Eastern +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Hawaii +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Indiana-Starke +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Michigan +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Mountain +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Pacific +0 -0
- package/bin/_internal/tzdata/zoneinfo/US/Samoa +0 -0
- package/bin/_internal/tzdata/zoneinfo/UTC +0 -0
- package/bin/_internal/tzdata/zoneinfo/Universal +0 -0
- package/bin/_internal/tzdata/zoneinfo/W-SU +0 -0
- package/bin/_internal/tzdata/zoneinfo/WET +0 -0
- package/bin/_internal/tzdata/zoneinfo/Zulu +0 -0
- package/bin/_internal/tzdata/zoneinfo/iso3166.tab +279 -0
- package/bin/_internal/tzdata/zoneinfo/leapseconds +86 -0
- package/bin/_internal/tzdata/zoneinfo/tzdata.zi +4180 -0
- package/bin/_internal/tzdata/zoneinfo/zone.tab +448 -0
- package/bin/_internal/tzdata/zoneinfo/zone1970.tab +375 -0
- package/bin/_internal/tzdata/zoneinfo/zonenow.tab +299 -0
- package/bin/_internal/tzdata/zones +598 -0
- package/bin/_internal/ucrtbase.dll +0 -0
- package/bin/_internal/unicodedata.pyd +0 -0
- package/bin/exchange-cli.exe +0 -0
- package/package.json +20 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
import logging
|
|
3
|
+
import zoneinfo
|
|
4
|
+
|
|
5
|
+
import tzlocal
|
|
6
|
+
|
|
7
|
+
from .errors import InvalidTypeError, NaiveDateTimeNotAllowed, UnknownTimeZone
|
|
8
|
+
from .winzone import IANA_TO_MS_TIMEZONE_MAP, MS_TIMEZONE_TO_IANA_MAP
|
|
9
|
+
|
|
10
|
+
log = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class EWSDate(datetime.date):
|
|
14
|
+
"""Extends the normal date implementation to satisfy EWS."""
|
|
15
|
+
|
|
16
|
+
__slots__ = "_year", "_month", "_day", "_hashcode"
|
|
17
|
+
|
|
18
|
+
def ewsformat(self):
|
|
19
|
+
"""ISO 8601 format to satisfy xs:date as interpreted by EWS. Example: 2009-01-15."""
|
|
20
|
+
return self.isoformat()
|
|
21
|
+
|
|
22
|
+
def __add__(self, other):
|
|
23
|
+
dt = super().__add__(other)
|
|
24
|
+
if isinstance(dt, self.__class__):
|
|
25
|
+
return dt
|
|
26
|
+
return self.from_date(dt) # We want to return EWSDate objects
|
|
27
|
+
|
|
28
|
+
def __iadd__(self, other):
|
|
29
|
+
return self + other
|
|
30
|
+
|
|
31
|
+
def __sub__(self, other):
|
|
32
|
+
dt = super().__sub__(other)
|
|
33
|
+
if isinstance(dt, datetime.timedelta):
|
|
34
|
+
return dt
|
|
35
|
+
if isinstance(dt, self.__class__):
|
|
36
|
+
return dt
|
|
37
|
+
return self.from_date(dt) # We want to return EWSDate objects
|
|
38
|
+
|
|
39
|
+
def __isub__(self, other):
|
|
40
|
+
return self - other
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def fromordinal(cls, n):
|
|
44
|
+
dt = super().fromordinal(n)
|
|
45
|
+
if isinstance(dt, cls):
|
|
46
|
+
return dt
|
|
47
|
+
return cls.from_date(dt) # We want to return EWSDate objects
|
|
48
|
+
|
|
49
|
+
@classmethod
|
|
50
|
+
def from_date(cls, d):
|
|
51
|
+
if type(d) is not datetime.date:
|
|
52
|
+
raise InvalidTypeError("d", d, datetime.date)
|
|
53
|
+
return cls(d.year, d.month, d.day)
|
|
54
|
+
|
|
55
|
+
@classmethod
|
|
56
|
+
def from_string(cls, date_string):
|
|
57
|
+
# Sometimes, we'll receive a date string with time zone information. Not very useful.
|
|
58
|
+
if date_string.endswith("Z"):
|
|
59
|
+
date_fmt = "%Y-%m-%dZ"
|
|
60
|
+
elif ":" in date_string:
|
|
61
|
+
if "+" in date_string:
|
|
62
|
+
date_fmt = "%Y-%m-%d+%H:%M"
|
|
63
|
+
else:
|
|
64
|
+
date_fmt = "%Y-%m-%d-%H:%M"
|
|
65
|
+
else:
|
|
66
|
+
date_fmt = "%Y-%m-%d"
|
|
67
|
+
d = datetime.datetime.strptime(date_string, date_fmt).date()
|
|
68
|
+
if isinstance(d, cls):
|
|
69
|
+
return d
|
|
70
|
+
return cls.from_date(d) # We want to return EWSDate objects
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class EWSDateTime(datetime.datetime):
|
|
74
|
+
"""Extends the normal datetime implementation to satisfy EWS."""
|
|
75
|
+
|
|
76
|
+
__slots__ = "_year", "_month", "_day", "_hour", "_minute", "_second", "_microsecond", "_tzinfo", "_hashcode"
|
|
77
|
+
|
|
78
|
+
def __new__(cls, *args, **kwargs):
|
|
79
|
+
# pylint: disable=arguments-differ
|
|
80
|
+
|
|
81
|
+
if len(args) == 8:
|
|
82
|
+
tzinfo = args[7]
|
|
83
|
+
else:
|
|
84
|
+
tzinfo = kwargs.get("tzinfo")
|
|
85
|
+
if isinstance(tzinfo, zoneinfo.ZoneInfo):
|
|
86
|
+
# Don't allow pytz or dateutil timezones here. They are not safe to use as direct input for datetime()
|
|
87
|
+
tzinfo = EWSTimeZone.from_timezone(tzinfo)
|
|
88
|
+
if not isinstance(tzinfo, (EWSTimeZone, type(None))):
|
|
89
|
+
raise InvalidTypeError("tzinfo", tzinfo, EWSTimeZone)
|
|
90
|
+
if len(args) == 8:
|
|
91
|
+
args = args[:7] + (tzinfo,)
|
|
92
|
+
else:
|
|
93
|
+
kwargs["tzinfo"] = tzinfo
|
|
94
|
+
return super().__new__(cls, *args, **kwargs)
|
|
95
|
+
|
|
96
|
+
def ewsformat(self):
|
|
97
|
+
"""ISO 8601 format to satisfy xs:datetime as interpreted by EWS. Examples:
|
|
98
|
+
* 2009-01-15T13:45:56Z
|
|
99
|
+
* 2009-01-15T13:45:56+01:00
|
|
100
|
+
"""
|
|
101
|
+
if not self.tzinfo:
|
|
102
|
+
raise ValueError(f"{self!r} must be timezone-aware")
|
|
103
|
+
if self.tzinfo.key == "UTC":
|
|
104
|
+
if self.microsecond:
|
|
105
|
+
return self.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
|
106
|
+
return self.strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
107
|
+
return self.isoformat()
|
|
108
|
+
|
|
109
|
+
@classmethod
|
|
110
|
+
def from_datetime(cls, d):
|
|
111
|
+
if type(d) is not datetime.datetime:
|
|
112
|
+
raise InvalidTypeError("d", d, datetime.datetime)
|
|
113
|
+
if d.tzinfo is None:
|
|
114
|
+
tz = None
|
|
115
|
+
elif isinstance(d.tzinfo, EWSTimeZone):
|
|
116
|
+
tz = d.tzinfo
|
|
117
|
+
else:
|
|
118
|
+
tz = EWSTimeZone.from_timezone(d.tzinfo)
|
|
119
|
+
return cls(d.year, d.month, d.day, d.hour, d.minute, d.second, d.microsecond, tzinfo=tz)
|
|
120
|
+
|
|
121
|
+
def astimezone(self, tz=None):
|
|
122
|
+
if tz is None:
|
|
123
|
+
tz = EWSTimeZone.localzone()
|
|
124
|
+
t = super().astimezone(tz=tz).replace(tzinfo=tz)
|
|
125
|
+
if isinstance(t, self.__class__):
|
|
126
|
+
return t
|
|
127
|
+
return self.from_datetime(t) # We want to return EWSDateTime objects
|
|
128
|
+
|
|
129
|
+
@classmethod
|
|
130
|
+
def fromisoformat(cls, date_string):
|
|
131
|
+
return cls.from_string(date_string)
|
|
132
|
+
|
|
133
|
+
def __add__(self, other):
|
|
134
|
+
t = super().__add__(other)
|
|
135
|
+
if isinstance(t, self.__class__):
|
|
136
|
+
return t
|
|
137
|
+
return self.from_datetime(t) # We want to return EWSDateTime objects
|
|
138
|
+
|
|
139
|
+
def __iadd__(self, other):
|
|
140
|
+
return self + other
|
|
141
|
+
|
|
142
|
+
def __sub__(self, other):
|
|
143
|
+
t = super().__sub__(other)
|
|
144
|
+
if isinstance(t, datetime.timedelta):
|
|
145
|
+
return t
|
|
146
|
+
if isinstance(t, self.__class__):
|
|
147
|
+
return t
|
|
148
|
+
return self.from_datetime(t) # We want to return EWSDateTime objects
|
|
149
|
+
|
|
150
|
+
def __isub__(self, other):
|
|
151
|
+
return self - other
|
|
152
|
+
|
|
153
|
+
@classmethod
|
|
154
|
+
def from_string(cls, date_string):
|
|
155
|
+
# Parses several common datetime formats and returns time zone aware EWSDateTime objects
|
|
156
|
+
if date_string.endswith("Z"):
|
|
157
|
+
# UTC datetime
|
|
158
|
+
return super().strptime(date_string, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=UTC)
|
|
159
|
+
if len(date_string) == 19:
|
|
160
|
+
# This is probably a naive datetime. Don't allow this, but signal caller with an appropriate error
|
|
161
|
+
local_dt = super().strptime(date_string, "%Y-%m-%dT%H:%M:%S")
|
|
162
|
+
raise NaiveDateTimeNotAllowed(local_dt)
|
|
163
|
+
# This is probably a datetime value with time zone information. This comes in the form '+/-HH:MM'.
|
|
164
|
+
aware_dt = datetime.datetime.fromisoformat(date_string).astimezone(UTC).replace(tzinfo=UTC)
|
|
165
|
+
if isinstance(aware_dt, cls):
|
|
166
|
+
return aware_dt
|
|
167
|
+
return cls.from_datetime(aware_dt)
|
|
168
|
+
|
|
169
|
+
@classmethod
|
|
170
|
+
def fromtimestamp(cls, t, tz=None):
|
|
171
|
+
dt = super().fromtimestamp(t, tz=tz)
|
|
172
|
+
if isinstance(dt, cls):
|
|
173
|
+
return dt
|
|
174
|
+
return cls.from_datetime(dt) # We want to return EWSDateTime objects
|
|
175
|
+
|
|
176
|
+
@classmethod
|
|
177
|
+
def utcfromtimestamp(cls, t):
|
|
178
|
+
dt = super().utcfromtimestamp(t)
|
|
179
|
+
if isinstance(dt, cls):
|
|
180
|
+
return dt
|
|
181
|
+
return cls.from_datetime(dt) # We want to return EWSDateTime objects
|
|
182
|
+
|
|
183
|
+
@classmethod
|
|
184
|
+
def now(cls, tz=None):
|
|
185
|
+
t = super().now(tz=tz)
|
|
186
|
+
if isinstance(t, cls):
|
|
187
|
+
return t
|
|
188
|
+
return cls.from_datetime(t) # We want to return EWSDateTime objects
|
|
189
|
+
|
|
190
|
+
@classmethod
|
|
191
|
+
def utcnow(cls):
|
|
192
|
+
t = super().utcnow()
|
|
193
|
+
if isinstance(t, cls):
|
|
194
|
+
return t
|
|
195
|
+
return cls.from_datetime(t) # We want to return EWSDateTime objects
|
|
196
|
+
|
|
197
|
+
def date(self):
|
|
198
|
+
d = super().date()
|
|
199
|
+
if isinstance(d, EWSDate):
|
|
200
|
+
return d
|
|
201
|
+
return EWSDate.from_date(d) # We want to return EWSDate objects
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class EWSTimeZone(zoneinfo.ZoneInfo):
|
|
205
|
+
"""Represents a time zone as expected by the EWS TimezoneContext / TimezoneDefinition XML element, and returned by
|
|
206
|
+
services.GetServerTimeZones.
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
IANA_TO_MS_MAP = IANA_TO_MS_TIMEZONE_MAP
|
|
210
|
+
MS_TO_IANA_MAP = MS_TIMEZONE_TO_IANA_MAP
|
|
211
|
+
|
|
212
|
+
def __new__(cls, *args, **kwargs):
|
|
213
|
+
try:
|
|
214
|
+
instance = super().__new__(cls, *args, **kwargs)
|
|
215
|
+
except zoneinfo.ZoneInfoNotFoundError as e:
|
|
216
|
+
raise UnknownTimeZone(e.args[0])
|
|
217
|
+
try:
|
|
218
|
+
instance.ms_id = cls.IANA_TO_MS_MAP[instance.key][0]
|
|
219
|
+
except KeyError:
|
|
220
|
+
raise UnknownTimeZone(f"No Windows timezone name found for timezone {instance.key!r}")
|
|
221
|
+
|
|
222
|
+
# We don't need the Windows long-format time zone name in long format. It's used in time zone XML elements, but
|
|
223
|
+
# EWS happily accepts empty strings. For a full list of time zones supported by the target server, including
|
|
224
|
+
# long-format names, see output of services.GetServerTimeZones(account.protocol).call()
|
|
225
|
+
instance.ms_name = ""
|
|
226
|
+
return instance
|
|
227
|
+
|
|
228
|
+
def __hash__(self):
|
|
229
|
+
return hash(self.key)
|
|
230
|
+
|
|
231
|
+
def __eq__(self, other):
|
|
232
|
+
# Microsoft time zones are less granular than IANA, so an EWSTimeZone created from 'Europe/Copenhagen' may
|
|
233
|
+
# return from the server as 'Europe/Copenhagen'. We're catering for Microsoft here, so base equality on the
|
|
234
|
+
# Microsoft time zone ID.
|
|
235
|
+
if not isinstance(other, self.__class__):
|
|
236
|
+
return NotImplemented
|
|
237
|
+
return self.ms_id == other.ms_id
|
|
238
|
+
|
|
239
|
+
@classmethod
|
|
240
|
+
def from_ms_id(cls, ms_id):
|
|
241
|
+
# Create a time zone instance from a Microsoft time zone ID. This is lossy because there is not a 1:1
|
|
242
|
+
# translation from MS time zone ID to IANA time zone.
|
|
243
|
+
try:
|
|
244
|
+
return cls(cls.MS_TO_IANA_MAP[ms_id])
|
|
245
|
+
except KeyError:
|
|
246
|
+
if "/" in ms_id:
|
|
247
|
+
# EWS sometimes returns an ID that has a region/location format, e.g. 'Europe/Copenhagen'. Try the
|
|
248
|
+
# string unaltered.
|
|
249
|
+
return cls(ms_id)
|
|
250
|
+
raise UnknownTimeZone(f"Windows timezone ID {ms_id!r} is unknown by CLDR")
|
|
251
|
+
|
|
252
|
+
@classmethod
|
|
253
|
+
def from_pytz(cls, tz):
|
|
254
|
+
return cls(tz.zone)
|
|
255
|
+
|
|
256
|
+
@classmethod
|
|
257
|
+
def from_datetime(cls, tz):
|
|
258
|
+
"""Convert from a standard library `datetime.timezone` instance."""
|
|
259
|
+
return cls(tz.tzname(None))
|
|
260
|
+
|
|
261
|
+
@classmethod
|
|
262
|
+
def from_dateutil(cls, tz):
|
|
263
|
+
# Objects returned by dateutil.tz.tzlocal() and dateutil.tz.gettz() are not supported. They
|
|
264
|
+
# don't contain enough information to reliably match them with a CLDR time zone.
|
|
265
|
+
if hasattr(tz, "_filename"):
|
|
266
|
+
key = "/".join(tz._filename.split("/")[-2:])
|
|
267
|
+
return cls(key)
|
|
268
|
+
return cls(tz.tzname(datetime.datetime.now()))
|
|
269
|
+
|
|
270
|
+
@classmethod
|
|
271
|
+
def from_zoneinfo(cls, tz):
|
|
272
|
+
return cls(tz.key)
|
|
273
|
+
|
|
274
|
+
@classmethod
|
|
275
|
+
def from_timezone(cls, tz):
|
|
276
|
+
# Support multiple tzinfo implementations. We could use isinstance(), but then we'd have to have pytz
|
|
277
|
+
# and dateutil as dependencies for this package.
|
|
278
|
+
tz_module = tz.__class__.__module__.split(".")[0]
|
|
279
|
+
try:
|
|
280
|
+
return {
|
|
281
|
+
cls.__module__.split(".")[0]: lambda z: z,
|
|
282
|
+
"datetime": cls.from_datetime,
|
|
283
|
+
"dateutil": cls.from_dateutil,
|
|
284
|
+
"pytz": cls.from_pytz,
|
|
285
|
+
"zoneinfo": cls.from_zoneinfo,
|
|
286
|
+
"pytz_deprecation_shim": lambda z: cls.from_timezone(z.unwrap_shim()),
|
|
287
|
+
}[tz_module](tz)
|
|
288
|
+
except KeyError:
|
|
289
|
+
raise TypeError(f"Unsupported tzinfo type: {tz!r}")
|
|
290
|
+
|
|
291
|
+
@classmethod
|
|
292
|
+
def localzone(cls):
|
|
293
|
+
try:
|
|
294
|
+
tz = tzlocal.get_localzone()
|
|
295
|
+
except zoneinfo.ZoneInfoNotFoundError:
|
|
296
|
+
# Older versions of tzlocal will raise a pytz exception. Let's not depend on pytz just for that.
|
|
297
|
+
raise UnknownTimeZone("Failed to guess local timezone")
|
|
298
|
+
# Handle both old and new versions of tzlocal that may return pytz or zoneinfo objects, respectively
|
|
299
|
+
return cls.from_timezone(tz)
|
|
300
|
+
|
|
301
|
+
def fromutc(self, dt):
|
|
302
|
+
t = super().fromutc(dt)
|
|
303
|
+
if isinstance(t, EWSDateTime):
|
|
304
|
+
return t
|
|
305
|
+
return EWSDateTime.from_datetime(t) # We want to return EWSDateTime objects
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
UTC = EWSTimeZone("UTC")
|
|
309
|
+
UTC_NOW = lambda: EWSDateTime.now(tz=UTC) # noqa: E731
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from contextlib import suppress
|
|
3
|
+
from decimal import Decimal
|
|
4
|
+
|
|
5
|
+
from .errors import InvalidEnumValue
|
|
6
|
+
from .ewsdatetime import EWSDateTime
|
|
7
|
+
from .properties import EWSElement, ExtendedFieldURI
|
|
8
|
+
from .util import (
|
|
9
|
+
TNS,
|
|
10
|
+
add_xml_child,
|
|
11
|
+
create_element,
|
|
12
|
+
get_xml_attr,
|
|
13
|
+
get_xml_attrs,
|
|
14
|
+
is_iterable,
|
|
15
|
+
set_xml_value,
|
|
16
|
+
value_to_xml_text,
|
|
17
|
+
xml_text_to_value,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
log = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ExtendedProperty(EWSElement):
|
|
24
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/extendedproperty"""
|
|
25
|
+
|
|
26
|
+
ELEMENT_NAME = "ExtendedProperty"
|
|
27
|
+
|
|
28
|
+
# Enum values: https://docs.microsoft.com/en-us/dotnet/api/exchangewebservices.distinguishedpropertysettype
|
|
29
|
+
DISTINGUISHED_SETS = {
|
|
30
|
+
"Address",
|
|
31
|
+
"Appointment",
|
|
32
|
+
"CalendarAssistant",
|
|
33
|
+
"Common",
|
|
34
|
+
"InternetHeaders",
|
|
35
|
+
"Meeting",
|
|
36
|
+
"PublicStrings",
|
|
37
|
+
"Sharing",
|
|
38
|
+
"Task",
|
|
39
|
+
"UnifiedMessaging",
|
|
40
|
+
}
|
|
41
|
+
# Enum values: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/extendedfielduri
|
|
42
|
+
# The following types cannot be used for setting or getting (see docs) and are thus not very useful here:
|
|
43
|
+
# 'Error'
|
|
44
|
+
# 'Null'
|
|
45
|
+
# 'Object'
|
|
46
|
+
# 'ObjectArray'
|
|
47
|
+
PROPERTY_TYPES = {
|
|
48
|
+
"ApplicationTime",
|
|
49
|
+
"Binary",
|
|
50
|
+
"BinaryArray",
|
|
51
|
+
"Boolean",
|
|
52
|
+
"CLSID",
|
|
53
|
+
"CLSIDArray",
|
|
54
|
+
"Currency",
|
|
55
|
+
"CurrencyArray",
|
|
56
|
+
"Double",
|
|
57
|
+
"DoubleArray",
|
|
58
|
+
"Float",
|
|
59
|
+
"FloatArray",
|
|
60
|
+
"Integer",
|
|
61
|
+
"IntegerArray",
|
|
62
|
+
"Long",
|
|
63
|
+
"LongArray",
|
|
64
|
+
"Short",
|
|
65
|
+
"ShortArray",
|
|
66
|
+
"SystemTime",
|
|
67
|
+
"SystemTimeArray",
|
|
68
|
+
"String",
|
|
69
|
+
"StringArray",
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# Translation table between common distinguished_property_set_id and property_set_id values. See
|
|
73
|
+
# https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/commonly-used-property-sets
|
|
74
|
+
# ID values must be lowercase.
|
|
75
|
+
DISTINGUISHED_SET_NAME_TO_ID_MAP = {
|
|
76
|
+
"Address": "00062004-0000-0000-c000-000000000046",
|
|
77
|
+
"AirSync": "71035549-0739-4dcb-9163-00f0580dbbdf",
|
|
78
|
+
"Appointment": "00062002-0000-0000-c000-000000000046",
|
|
79
|
+
"Common": "00062008-0000-0000-c000-000000000046",
|
|
80
|
+
"InternetHeaders": "00020386-0000-0000-c000-000000000046",
|
|
81
|
+
"Log": "0006200a-0000-0000-c000-000000000046",
|
|
82
|
+
"Mapi": "00020328-0000-0000-c000-000000000046",
|
|
83
|
+
"Meeting": "6ed8da90-450b-101b-98da-00aa003f1305",
|
|
84
|
+
"Messaging": "41f28f13-83f4-4114-a584-eedb5a6b0bff",
|
|
85
|
+
"Note": "0006200e-0000-0000-c000-000000000046",
|
|
86
|
+
"PostRss": "00062041-0000-0000-c000-000000000046",
|
|
87
|
+
"PublicStrings": "00020329-0000-0000-c000-000000000046",
|
|
88
|
+
"Remote": "00062014-0000-0000-c000-000000000046",
|
|
89
|
+
"Report": "00062013-0000-0000-c000-000000000046",
|
|
90
|
+
"Sharing": "00062040-0000-0000-c000-000000000046",
|
|
91
|
+
"Task": "00062003-0000-0000-c000-000000000046",
|
|
92
|
+
"UnifiedMessaging": "4442858e-a9e3-4e80-b900-317a210cc15b",
|
|
93
|
+
}
|
|
94
|
+
DISTINGUISHED_SET_ID_TO_NAME_MAP = {v: k for k, v in DISTINGUISHED_SET_NAME_TO_ID_MAP.items()}
|
|
95
|
+
|
|
96
|
+
distinguished_property_set_id = None
|
|
97
|
+
property_set_id = None
|
|
98
|
+
property_tag = None # hex integer (e.g. 0x8000) or string ('0x8000')
|
|
99
|
+
property_name = None
|
|
100
|
+
property_id = None # integer as hex-formatted int (e.g. 0x8000) or normal int (32768)
|
|
101
|
+
property_type = ""
|
|
102
|
+
|
|
103
|
+
__slots__ = ("value",)
|
|
104
|
+
|
|
105
|
+
def __init__(self, *args, **kwargs):
|
|
106
|
+
if not kwargs:
|
|
107
|
+
# Allow to set attributes without keyword
|
|
108
|
+
kwargs = dict(zip(self._slots_keys, args))
|
|
109
|
+
self.value = kwargs.pop("value")
|
|
110
|
+
super().__init__(**kwargs)
|
|
111
|
+
|
|
112
|
+
@classmethod
|
|
113
|
+
def validate_cls(cls):
|
|
114
|
+
# Validate values of class attributes and their interdependencies
|
|
115
|
+
cls._validate_distinguished_property_set_id()
|
|
116
|
+
cls._validate_property_set_id()
|
|
117
|
+
cls._validate_property_tag()
|
|
118
|
+
cls._validate_property_name()
|
|
119
|
+
cls._validate_property_id()
|
|
120
|
+
cls._validate_property_type()
|
|
121
|
+
|
|
122
|
+
@classmethod
|
|
123
|
+
def _validate_distinguished_property_set_id(cls):
|
|
124
|
+
if cls.distinguished_property_set_id:
|
|
125
|
+
if any([cls.property_set_id, cls.property_tag]):
|
|
126
|
+
raise ValueError(
|
|
127
|
+
"When 'distinguished_property_set_id' is set, 'property_set_id' and 'property_tag' must be None"
|
|
128
|
+
)
|
|
129
|
+
if not any([cls.property_id, cls.property_name]):
|
|
130
|
+
raise ValueError(
|
|
131
|
+
"When 'distinguished_property_set_id' is set, 'property_id' or 'property_name' must also be set"
|
|
132
|
+
)
|
|
133
|
+
if cls.distinguished_property_set_id not in cls.DISTINGUISHED_SETS:
|
|
134
|
+
raise InvalidEnumValue(
|
|
135
|
+
"distinguished_property_set_id", cls.distinguished_property_set_id, cls.DISTINGUISHED_SETS
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
@classmethod
|
|
139
|
+
def _validate_property_set_id(cls):
|
|
140
|
+
if cls.property_set_id:
|
|
141
|
+
if any([cls.distinguished_property_set_id, cls.property_tag]):
|
|
142
|
+
raise ValueError(
|
|
143
|
+
"When 'property_set_id' is set, 'distinguished_property_set_id' and 'property_tag' must be None"
|
|
144
|
+
)
|
|
145
|
+
if not any([cls.property_id, cls.property_name]):
|
|
146
|
+
raise ValueError("When 'property_set_id' is set, 'property_id' or 'property_name' must also be set")
|
|
147
|
+
|
|
148
|
+
@classmethod
|
|
149
|
+
def _validate_property_tag(cls):
|
|
150
|
+
if cls.property_tag:
|
|
151
|
+
if any([cls.distinguished_property_set_id, cls.property_set_id, cls.property_name, cls.property_id]):
|
|
152
|
+
raise ValueError("When 'property_tag' is set, only 'property_type' must be set")
|
|
153
|
+
if 0x8000 <= cls.property_tag_as_int() <= 0xFFFE:
|
|
154
|
+
raise ValueError(
|
|
155
|
+
f"'property_tag' value {cls.property_tag_as_hex()!r} is reserved for custom properties"
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
@classmethod
|
|
159
|
+
def _validate_property_name(cls):
|
|
160
|
+
if cls.property_name:
|
|
161
|
+
if any([cls.property_id, cls.property_tag]):
|
|
162
|
+
raise ValueError("When 'property_name' is set, 'property_id' and 'property_tag' must be None")
|
|
163
|
+
if not any([cls.distinguished_property_set_id, cls.property_set_id]):
|
|
164
|
+
raise ValueError(
|
|
165
|
+
"When 'property_name' is set, 'distinguished_property_set_id' or 'property_set_id' must also be set"
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
@classmethod
|
|
169
|
+
def _validate_property_id(cls):
|
|
170
|
+
if cls.property_id:
|
|
171
|
+
if any([cls.property_name, cls.property_tag]):
|
|
172
|
+
raise ValueError("When 'property_id' is set, 'property_name' and 'property_tag' must be None")
|
|
173
|
+
if not any([cls.distinguished_property_set_id, cls.property_set_id]):
|
|
174
|
+
raise ValueError(
|
|
175
|
+
"When 'property_id' is set, 'distinguished_property_set_id' or 'property_set_id' must also be set"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
@classmethod
|
|
179
|
+
def _validate_property_type(cls):
|
|
180
|
+
if cls.property_type not in cls.PROPERTY_TYPES:
|
|
181
|
+
raise InvalidEnumValue("property_type", cls.property_type, cls.PROPERTY_TYPES)
|
|
182
|
+
|
|
183
|
+
def clean(self, version=None):
|
|
184
|
+
self.validate_cls()
|
|
185
|
+
python_type = self.python_type()
|
|
186
|
+
if self.is_array_type():
|
|
187
|
+
if not is_iterable(self.value):
|
|
188
|
+
raise TypeError(f"Field {self.__class__.__name__!r} value {self.value!r} must be of type {list}")
|
|
189
|
+
for v in self.value:
|
|
190
|
+
if not isinstance(v, python_type):
|
|
191
|
+
raise TypeError(f"Field {self.__class__.__name__!r} list value {v!r} must be of type {python_type}")
|
|
192
|
+
else:
|
|
193
|
+
if not isinstance(self.value, python_type):
|
|
194
|
+
raise TypeError(f"Field {self.__class__.__name__!r} value {self.value!r} must be of type {python_type}")
|
|
195
|
+
|
|
196
|
+
@classmethod
|
|
197
|
+
def _normalize_obj(cls, obj):
|
|
198
|
+
# Sometimes, EWS will helpfully translate a 'distinguished_property_set_id' value to a 'property_set_id' value
|
|
199
|
+
# and vice versa. Align these values on an ExtendedFieldURI instance.
|
|
200
|
+
try:
|
|
201
|
+
obj.property_set_id = cls.DISTINGUISHED_SET_NAME_TO_ID_MAP[obj.distinguished_property_set_id]
|
|
202
|
+
except KeyError:
|
|
203
|
+
with suppress(KeyError):
|
|
204
|
+
obj.distinguished_property_set_id = cls.DISTINGUISHED_SET_ID_TO_NAME_MAP[obj.property_set_id]
|
|
205
|
+
return obj
|
|
206
|
+
|
|
207
|
+
@classmethod
|
|
208
|
+
def is_property_instance(cls, elem):
|
|
209
|
+
"""Return whether an 'ExtendedProperty' element matches the definition for this class. Extended property fields
|
|
210
|
+
do not have a name, so we must match on the cls.property_* attributes to match a field in the request with a
|
|
211
|
+
field in the response.
|
|
212
|
+
"""
|
|
213
|
+
# We can't use ExtendedFieldURI.from_xml(). It clears the XML element, but we may not want to consume it here.
|
|
214
|
+
kwargs = {
|
|
215
|
+
f.name: f.from_xml(elem=elem.find(ExtendedFieldURI.response_tag()), account=None)
|
|
216
|
+
for f in ExtendedFieldURI.FIELDS
|
|
217
|
+
}
|
|
218
|
+
xml_obj = ExtendedFieldURI(**kwargs)
|
|
219
|
+
cls_obj = cls.as_object()
|
|
220
|
+
return cls._normalize_obj(cls_obj) == cls._normalize_obj(xml_obj)
|
|
221
|
+
|
|
222
|
+
@classmethod
|
|
223
|
+
def from_xml(cls, elem, account):
|
|
224
|
+
# Gets value of this specific ExtendedProperty from a list of 'ExtendedProperty' XML elements
|
|
225
|
+
python_type = cls.python_type()
|
|
226
|
+
if cls.is_array_type():
|
|
227
|
+
values = elem.find(f"{{{TNS}}}Values")
|
|
228
|
+
return [
|
|
229
|
+
xml_text_to_value(value=val, value_type=python_type) for val in get_xml_attrs(values, f"{{{TNS}}}Value")
|
|
230
|
+
]
|
|
231
|
+
extended_field_value = xml_text_to_value(value=get_xml_attr(elem, f"{{{TNS}}}Value"), value_type=python_type)
|
|
232
|
+
if python_type == str and not extended_field_value:
|
|
233
|
+
# For string types, we want to return the empty string instead of None if the element was
|
|
234
|
+
# actually found, but there was no XML value. For other types, it would be more problematic
|
|
235
|
+
# to make that distinction, e.g. return False for bool, 0 for int, etc.
|
|
236
|
+
return ""
|
|
237
|
+
return extended_field_value
|
|
238
|
+
|
|
239
|
+
def to_xml(self, version):
|
|
240
|
+
if self.is_array_type():
|
|
241
|
+
values = create_element("t:Values")
|
|
242
|
+
for v in self.value:
|
|
243
|
+
add_xml_child(values, "t:Value", v)
|
|
244
|
+
return values
|
|
245
|
+
return set_xml_value(create_element("t:Value"), self.value, version=version)
|
|
246
|
+
|
|
247
|
+
@classmethod
|
|
248
|
+
def is_array_type(cls):
|
|
249
|
+
return cls.property_type.endswith("Array")
|
|
250
|
+
|
|
251
|
+
@classmethod
|
|
252
|
+
def property_tag_as_int(cls):
|
|
253
|
+
if isinstance(cls.property_tag, str):
|
|
254
|
+
return int(cls.property_tag, base=16)
|
|
255
|
+
return cls.property_tag
|
|
256
|
+
|
|
257
|
+
@classmethod
|
|
258
|
+
def property_tag_as_hex(cls):
|
|
259
|
+
return hex(cls.property_tag) if isinstance(cls.property_tag, int) else cls.property_tag
|
|
260
|
+
|
|
261
|
+
@classmethod
|
|
262
|
+
def python_type(cls):
|
|
263
|
+
# Return the best equivalent for a Python type for the property type of this class
|
|
264
|
+
base_type = cls.property_type[:-5] if cls.is_array_type() else cls.property_type
|
|
265
|
+
return {
|
|
266
|
+
"ApplicationTime": Decimal,
|
|
267
|
+
"Binary": bytes,
|
|
268
|
+
"Boolean": bool,
|
|
269
|
+
"CLSID": str,
|
|
270
|
+
"Currency": int,
|
|
271
|
+
"Double": Decimal,
|
|
272
|
+
"Float": Decimal,
|
|
273
|
+
"Integer": int,
|
|
274
|
+
"Long": int,
|
|
275
|
+
"Short": int,
|
|
276
|
+
"SystemTime": EWSDateTime,
|
|
277
|
+
"String": str,
|
|
278
|
+
}[base_type]
|
|
279
|
+
|
|
280
|
+
@classmethod
|
|
281
|
+
def as_object(cls):
|
|
282
|
+
# Return an object we can use to match with the incoming object from XML
|
|
283
|
+
return ExtendedFieldURI(
|
|
284
|
+
distinguished_property_set_id=cls.distinguished_property_set_id,
|
|
285
|
+
property_set_id=cls.property_set_id.lower() if cls.property_set_id else None,
|
|
286
|
+
property_tag=cls.property_tag_as_hex(),
|
|
287
|
+
property_name=cls.property_name,
|
|
288
|
+
property_id=value_to_xml_text(cls.property_id) if cls.property_id else None,
|
|
289
|
+
property_type=cls.property_type,
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
class ExternId(ExtendedProperty):
|
|
294
|
+
"""This is a custom extended property defined by us. It's useful for synchronization purposes, to attach a unique ID
|
|
295
|
+
from an external system.
|
|
296
|
+
"""
|
|
297
|
+
|
|
298
|
+
property_set_id = "c11ff724-aa03-4555-9952-8fa248a11c3e" # This is arbitrary. We just want a unique UUID.
|
|
299
|
+
property_name = "External ID"
|
|
300
|
+
property_type = "String"
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
class Flag(ExtendedProperty):
|
|
304
|
+
"""This property returns None for Not Flagged messages, 1 for Completed messages and 2 for Flagged messages.
|
|
305
|
+
|
|
306
|
+
For a description of each status, see:
|
|
307
|
+
https://docs.microsoft.com/en-us/openspecs/exchange_server_protocols/ms-oxoflag/eda9fd25-6407-4cec-9e62-26e4f9d6a098
|
|
308
|
+
"""
|
|
309
|
+
|
|
310
|
+
property_tag = 0x1090
|
|
311
|
+
property_type = "Integer"
|