@backtomyfuture/exchange-cli-win32-ia32 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/_asyncio.pyd +0 -0
- package/bin/_internal/_bz2.pyd +0 -0
- package/bin/_internal/_cffi_backend.cp312-win32.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-win32.pyd +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-win32.pyd +0 -0
- package/bin/_internal/charset_normalizer/md.cp312-win32.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 +1332 -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-win32.pyd +0 -0
- package/bin/_internal/lxml/builder.cp312-win32.pyd +0 -0
- package/bin/_internal/lxml/etree.cp312-win32.pyd +0 -0
- package/bin/_internal/lxml/html/_difflib.cp312-win32.pyd +0 -0
- package/bin/_internal/lxml/html/diff.cp312-win32.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-win32.pyd +0 -0
- package/bin/_internal/lxml/sax.cp312-win32.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/unicodedata.pyd +0 -0
- package/bin/exchange-cli.exe +0 -0
- package/package.json +20 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from ..errors import EWSError, InvalidTypeError
|
|
4
|
+
from ..properties import Notification
|
|
5
|
+
from ..util import MNS, DocumentYielder, DummyResponse, create_element, get_xml_attr, get_xml_attrs
|
|
6
|
+
from .common import EWSAccountService, add_xml_child
|
|
7
|
+
|
|
8
|
+
log = logging.getLogger(__name__)
|
|
9
|
+
xml_log = logging.getLogger(f"{__name__}.xml")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class GetStreamingEvents(EWSAccountService):
|
|
13
|
+
"""MSDN:
|
|
14
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/getstreamingevents-operation
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
SERVICE_NAME = "GetStreamingEvents"
|
|
18
|
+
element_container_name = f"{{{MNS}}}Notifications"
|
|
19
|
+
prefer_affinity = True
|
|
20
|
+
|
|
21
|
+
# Connection status values
|
|
22
|
+
OK = "OK"
|
|
23
|
+
CLOSED = "Closed"
|
|
24
|
+
|
|
25
|
+
def __init__(self, *args, **kwargs):
|
|
26
|
+
# These values are set each time call() is consumed
|
|
27
|
+
self.connection_status = None
|
|
28
|
+
super().__init__(*args, **kwargs)
|
|
29
|
+
self.streaming = True
|
|
30
|
+
|
|
31
|
+
def call(self, subscription_ids, connection_timeout):
|
|
32
|
+
if not isinstance(connection_timeout, int):
|
|
33
|
+
raise InvalidTypeError("connection_timeout", connection_timeout, int)
|
|
34
|
+
if connection_timeout < 1:
|
|
35
|
+
raise ValueError(f"'connection_timeout' {connection_timeout} must be a positive integer")
|
|
36
|
+
# Add 60 seconds to the timeout, to allow us to always get the final message containing ConnectionStatus=Closed
|
|
37
|
+
self.timeout = connection_timeout * 60 + 60
|
|
38
|
+
return self._elems_to_objs(
|
|
39
|
+
self._get_elements(
|
|
40
|
+
payload=self.get_payload(
|
|
41
|
+
subscription_ids=subscription_ids,
|
|
42
|
+
connection_timeout=connection_timeout,
|
|
43
|
+
)
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
def _elem_to_obj(self, elem):
|
|
48
|
+
return Notification.from_xml(elem=elem, account=None)
|
|
49
|
+
|
|
50
|
+
@classmethod
|
|
51
|
+
def _get_soap_parts(cls, response):
|
|
52
|
+
# Pass the response unaltered. We want to use our custom document yielder
|
|
53
|
+
return None, response
|
|
54
|
+
|
|
55
|
+
def _get_soap_messages(self, body):
|
|
56
|
+
# 'body' is actually the raw response passed on by '_get_soap_parts'. We want to continuously read the content,
|
|
57
|
+
# looking for complete XML documents. When we have a full document, we want to parse it as if it was a normal
|
|
58
|
+
# XML response.
|
|
59
|
+
r = body
|
|
60
|
+
for i, doc in enumerate(DocumentYielder(r.iter_content()), start=1):
|
|
61
|
+
xml_log.debug("Response XML (docs counter: %(i)s): %(xml_response)s", dict(i=i, xml_response=doc))
|
|
62
|
+
response = DummyResponse(content=doc)
|
|
63
|
+
try:
|
|
64
|
+
_, body = super()._get_soap_parts(response=response)
|
|
65
|
+
except Exception:
|
|
66
|
+
r.close() # Release memory
|
|
67
|
+
raise
|
|
68
|
+
# TODO: We're skipping ._update_api_version() here because we don't have access to the 'api_version' used.
|
|
69
|
+
# TODO: We should be doing a lot of error handling for ._get_soap_messages().
|
|
70
|
+
yield from super()._get_soap_messages(body=body)
|
|
71
|
+
if self.connection_status == self.CLOSED:
|
|
72
|
+
# Don't wait for the TCP connection to timeout
|
|
73
|
+
break
|
|
74
|
+
|
|
75
|
+
def _get_element_container(self, message, name=None):
|
|
76
|
+
error_ids_elem = message.find(f"{{{MNS}}}ErrorSubscriptionIds")
|
|
77
|
+
error_ids = [] if error_ids_elem is None else get_xml_attrs(error_ids_elem, f"{{{MNS}}}SubscriptionId")
|
|
78
|
+
self.connection_status = get_xml_attr(message, f"{{{MNS}}}ConnectionStatus") # Either 'OK' or 'Closed'
|
|
79
|
+
log.debug("Connection status is: %s", self.connection_status)
|
|
80
|
+
# Upstream normally expects to find a 'name' tag but our response does not always have it. We still want to
|
|
81
|
+
# call upstream, to have exceptions raised. Return an empty list if there is no 'name' tag and no errors.
|
|
82
|
+
if message.find(name) is None:
|
|
83
|
+
name = None
|
|
84
|
+
try:
|
|
85
|
+
res = super()._get_element_container(message=message, name=name)
|
|
86
|
+
except EWSError as e:
|
|
87
|
+
# When the request contains a combination of good and failing subscription IDs, notifications for the good
|
|
88
|
+
# subscriptions seem to never be returned even though the XML spec allows it. This means there's no point in
|
|
89
|
+
# trying to collect any notifications here and delivering a combination of errors and return values.
|
|
90
|
+
if error_ids:
|
|
91
|
+
e.value += f" (subscription IDs: {error_ids})"
|
|
92
|
+
raise e
|
|
93
|
+
return [] if name is None else res
|
|
94
|
+
|
|
95
|
+
def get_payload(self, subscription_ids, connection_timeout):
|
|
96
|
+
payload = create_element(f"m:{self.SERVICE_NAME}")
|
|
97
|
+
subscriptions_elem = create_element("m:SubscriptionIds")
|
|
98
|
+
for subscription_id in subscription_ids:
|
|
99
|
+
add_xml_child(subscriptions_elem, "t:SubscriptionId", subscription_id)
|
|
100
|
+
payload.append(subscriptions_elem)
|
|
101
|
+
add_xml_child(payload, "m:ConnectionTimeout", connection_timeout)
|
|
102
|
+
return payload
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from collections import namedtuple
|
|
2
|
+
|
|
3
|
+
from ..properties import FreeBusyView
|
|
4
|
+
from ..util import MNS, create_element, set_xml_value
|
|
5
|
+
from .common import EWSService
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class GetUserAvailability(EWSService):
|
|
9
|
+
"""Get detailed availability information for a list of users.
|
|
10
|
+
MSDN:
|
|
11
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/getuseravailability-operation
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
SERVICE_NAME = "GetUserAvailability"
|
|
15
|
+
|
|
16
|
+
def __init__(self, *args, **kwargs):
|
|
17
|
+
super().__init__(*args, **kwargs)
|
|
18
|
+
self.tzinfo = None
|
|
19
|
+
|
|
20
|
+
def call(self, tzinfo, mailbox_data, timezone, free_busy_view_options):
|
|
21
|
+
# TODO: Also supports SuggestionsViewOptions, see
|
|
22
|
+
# https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/suggestionsviewoptions
|
|
23
|
+
self.tzinfo = tzinfo
|
|
24
|
+
return self._elems_to_objs(
|
|
25
|
+
self._chunked_get_elements(
|
|
26
|
+
self.get_payload,
|
|
27
|
+
items=mailbox_data,
|
|
28
|
+
timezone=timezone,
|
|
29
|
+
free_busy_view_options=free_busy_view_options,
|
|
30
|
+
)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def _timezone(self):
|
|
35
|
+
return self.tzinfo
|
|
36
|
+
|
|
37
|
+
def _elem_to_obj(self, elem):
|
|
38
|
+
fake_account = namedtuple("Account", ["default_timezone"])(default_timezone=self.tzinfo)
|
|
39
|
+
return FreeBusyView.from_xml(elem=elem, account=fake_account)
|
|
40
|
+
|
|
41
|
+
def get_payload(self, mailbox_data, timezone, free_busy_view_options):
|
|
42
|
+
payload = create_element(f"m:{self.SERVICE_NAME}Request")
|
|
43
|
+
set_xml_value(payload, timezone, version=self.protocol.version)
|
|
44
|
+
mailbox_data_array = create_element("m:MailboxDataArray")
|
|
45
|
+
set_xml_value(mailbox_data_array, mailbox_data, version=self.protocol.version)
|
|
46
|
+
payload.append(mailbox_data_array)
|
|
47
|
+
return set_xml_value(payload, free_busy_view_options, version=self.protocol.version)
|
|
48
|
+
|
|
49
|
+
@staticmethod
|
|
50
|
+
def _response_messages_tag():
|
|
51
|
+
return f"{{{MNS}}}FreeBusyResponseArray"
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def _response_message_tag(cls):
|
|
55
|
+
return f"{{{MNS}}}FreeBusyResponse"
|
|
56
|
+
|
|
57
|
+
def _get_elements_in_response(self, response):
|
|
58
|
+
for msg in response:
|
|
59
|
+
container_or_exc = self._get_element_container(message=msg.find(f"{{{MNS}}}ResponseMessage"))
|
|
60
|
+
if isinstance(container_or_exc, Exception):
|
|
61
|
+
yield container_or_exc
|
|
62
|
+
else:
|
|
63
|
+
yield from self._get_elements_in_container(container=msg)
|
|
64
|
+
|
|
65
|
+
@classmethod
|
|
66
|
+
def _get_elements_in_container(cls, container):
|
|
67
|
+
return [container.find(f"{{{MNS}}}FreeBusyView")]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from ..errors import InvalidEnumValue
|
|
2
|
+
from ..properties import UserConfiguration
|
|
3
|
+
from ..util import create_element, set_xml_value
|
|
4
|
+
from .common import EWSAccountService
|
|
5
|
+
|
|
6
|
+
ID = "Id"
|
|
7
|
+
DICTIONARY = "Dictionary"
|
|
8
|
+
XML_DATA = "XmlData"
|
|
9
|
+
BINARY_DATA = "BinaryData"
|
|
10
|
+
ALL = "All"
|
|
11
|
+
PROPERTIES_CHOICES = (ID, DICTIONARY, XML_DATA, BINARY_DATA, ALL)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class GetUserConfiguration(EWSAccountService):
|
|
15
|
+
"""MSDN:
|
|
16
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/getuserconfiguration-operation
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
SERVICE_NAME = "GetUserConfiguration"
|
|
20
|
+
|
|
21
|
+
def call(self, user_configuration_name, properties):
|
|
22
|
+
if properties not in PROPERTIES_CHOICES:
|
|
23
|
+
raise InvalidEnumValue("properties", properties, PROPERTIES_CHOICES)
|
|
24
|
+
return self._elems_to_objs(
|
|
25
|
+
self._get_elements(
|
|
26
|
+
payload=self.get_payload(user_configuration_name=user_configuration_name, properties=properties)
|
|
27
|
+
)
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
def _elem_to_obj(self, elem):
|
|
31
|
+
return UserConfiguration.from_xml(elem=elem, account=self.account)
|
|
32
|
+
|
|
33
|
+
@classmethod
|
|
34
|
+
def _get_elements_in_container(cls, container):
|
|
35
|
+
return container.findall(UserConfiguration.response_tag())
|
|
36
|
+
|
|
37
|
+
def get_payload(self, user_configuration_name, properties):
|
|
38
|
+
payload = create_element(f"m:{self.SERVICE_NAME}")
|
|
39
|
+
set_xml_value(payload, user_configuration_name, version=self.account.version)
|
|
40
|
+
payload.append(
|
|
41
|
+
set_xml_value(create_element("m:UserConfigurationProperties"), properties, version=self.account.version)
|
|
42
|
+
)
|
|
43
|
+
return payload
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from ..properties import AvailabilityMailbox
|
|
2
|
+
from ..settings import OofSettings
|
|
3
|
+
from ..util import MNS, TNS, create_element, set_xml_value
|
|
4
|
+
from .common import EWSAccountService
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class GetUserOofSettings(EWSAccountService):
|
|
8
|
+
"""Get automatic reply settings for the specified mailbox.
|
|
9
|
+
MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/getuseroofsettings-operation
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
SERVICE_NAME = "GetUserOofSettings"
|
|
13
|
+
element_container_name = f"{{{TNS}}}OofSettings"
|
|
14
|
+
|
|
15
|
+
def call(self, mailbox):
|
|
16
|
+
return self._elems_to_objs(self._get_elements(payload=self.get_payload(mailbox=mailbox)))
|
|
17
|
+
|
|
18
|
+
def _elem_to_obj(self, elem):
|
|
19
|
+
return OofSettings.from_xml(elem=elem, account=self.account)
|
|
20
|
+
|
|
21
|
+
def get_payload(self, mailbox):
|
|
22
|
+
return set_xml_value(
|
|
23
|
+
create_element(f"m:{self.SERVICE_NAME}Request"),
|
|
24
|
+
AvailabilityMailbox.from_mailbox(mailbox),
|
|
25
|
+
version=self.account.version,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
@classmethod
|
|
29
|
+
def _get_elements_in_container(cls, container):
|
|
30
|
+
# This service only returns one result, directly in 'container'
|
|
31
|
+
return [container]
|
|
32
|
+
|
|
33
|
+
def _get_element_container(self, message, name=None):
|
|
34
|
+
# This service returns the result container outside the response message
|
|
35
|
+
super()._get_element_container(message=message.find(self._response_message_tag()), name=None)
|
|
36
|
+
return message.find(name)
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def _response_message_tag(cls):
|
|
40
|
+
return f"{{{MNS}}}ResponseMessage"
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from ..errors import MalformedResponseError
|
|
4
|
+
from ..properties import UserResponse
|
|
5
|
+
from ..transport import DEFAULT_ENCODING
|
|
6
|
+
from ..util import ANS, add_xml_child, create_element, ns_translation, set_xml_value, xml_to_str
|
|
7
|
+
from ..version import EXCHANGE_2010
|
|
8
|
+
from .common import EWSService
|
|
9
|
+
|
|
10
|
+
log = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class GetUserSettings(EWSService):
|
|
14
|
+
"""Take a list of users and requested Autodiscover settings for these users. Returns the requested settings values.
|
|
15
|
+
|
|
16
|
+
MSDN:
|
|
17
|
+
https://learn.microsoft.com/en-us/exchange/client-developer/web-service-reference/getusersettings-operation-soap
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
SERVICE_NAME = "GetUserSettings"
|
|
21
|
+
NS_MAP = {k: v for k, v in ns_translation.items() if k in ("s", "t", "a", "wsa", "xsi")}
|
|
22
|
+
element_container_name = f"{{{ANS}}}UserResponses"
|
|
23
|
+
supported_from = EXCHANGE_2010
|
|
24
|
+
|
|
25
|
+
def call(self, users, settings):
|
|
26
|
+
return self._elems_to_objs(self._get_elements(self.get_payload(users=users, settings=settings)))
|
|
27
|
+
|
|
28
|
+
def wrap(self, content, api_version=None):
|
|
29
|
+
envelope = create_element("s:Envelope", nsmap=self.NS_MAP)
|
|
30
|
+
header = create_element("s:Header")
|
|
31
|
+
if api_version:
|
|
32
|
+
add_xml_child(header, "a:RequestedServerVersion", api_version)
|
|
33
|
+
action = f"http://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/{self.SERVICE_NAME}"
|
|
34
|
+
add_xml_child(header, "wsa:Action", action)
|
|
35
|
+
add_xml_child(header, "wsa:To", self.protocol.service_endpoint)
|
|
36
|
+
identity = self._account_to_impersonate
|
|
37
|
+
if identity:
|
|
38
|
+
add_xml_child(header, "t:ExchangeImpersonation", identity)
|
|
39
|
+
envelope.append(header)
|
|
40
|
+
body = create_element("s:Body")
|
|
41
|
+
body.append(content)
|
|
42
|
+
envelope.append(body)
|
|
43
|
+
return xml_to_str(envelope, encoding=DEFAULT_ENCODING, xml_declaration=True)
|
|
44
|
+
|
|
45
|
+
def _elem_to_obj(self, elem):
|
|
46
|
+
return UserResponse.from_xml(elem=elem, account=None)
|
|
47
|
+
|
|
48
|
+
def get_payload(self, users, settings):
|
|
49
|
+
payload = create_element(f"a:{self.SERVICE_NAME}RequestMessage")
|
|
50
|
+
request = create_element("a:Request")
|
|
51
|
+
users_elem = create_element("a:Users")
|
|
52
|
+
for user in users:
|
|
53
|
+
mailbox = create_element("a:Mailbox")
|
|
54
|
+
set_xml_value(mailbox, user)
|
|
55
|
+
add_xml_child(users_elem, "a:User", mailbox)
|
|
56
|
+
request.append(users_elem)
|
|
57
|
+
requested_settings = create_element("a:RequestedSettings")
|
|
58
|
+
for setting in settings:
|
|
59
|
+
add_xml_child(requested_settings, "a:Setting", UserResponse.SETTINGS_MAP[setting])
|
|
60
|
+
request.append(requested_settings)
|
|
61
|
+
payload.append(request)
|
|
62
|
+
return payload
|
|
63
|
+
|
|
64
|
+
@classmethod
|
|
65
|
+
def _response_tag(cls):
|
|
66
|
+
"""Return the name of the element containing the service response."""
|
|
67
|
+
return f"{{{ANS}}}{cls.SERVICE_NAME}ResponseMessage"
|
|
68
|
+
|
|
69
|
+
def _get_element_container(self, message, name=None):
|
|
70
|
+
response = message.find(f"{{{ANS}}}Response")
|
|
71
|
+
# ErrorCode: See
|
|
72
|
+
# https://learn.microsoft.com/en-us/exchange/client-developer/web-service-reference/errorcode-soap
|
|
73
|
+
# There are two 'ErrorCode' elements in the response; one is a child of the 'Response' element, the other is a
|
|
74
|
+
# child of the 'UserResponse' element. Let's handle both with the same code.
|
|
75
|
+
res = UserResponse.parse_elem(response)
|
|
76
|
+
if isinstance(res, Exception):
|
|
77
|
+
raise res
|
|
78
|
+
if res.error_code == "NoError":
|
|
79
|
+
container = response.find(name)
|
|
80
|
+
if container is None:
|
|
81
|
+
raise MalformedResponseError(f"No {name} elements in ResponseMessage ({xml_to_str(response)})")
|
|
82
|
+
return container
|
|
83
|
+
# Raise any non-acceptable errors in the container, or return the acceptable exception instance
|
|
84
|
+
try:
|
|
85
|
+
raise self._get_exception(code=res.error_code, text=res.error_message)
|
|
86
|
+
except self.ERRORS_TO_CATCH_IN_RESPONSE as e:
|
|
87
|
+
return e
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
from typing import Any, Generator, Optional, Union
|
|
2
|
+
|
|
3
|
+
from ..errors import ErrorInvalidOperation
|
|
4
|
+
from ..properties import CreateRuleOperation, DeleteRuleOperation, InboxRules, Operations, Rule, SetRuleOperation
|
|
5
|
+
from ..util import MNS, add_xml_child, create_element, get_xml_attr, set_xml_value
|
|
6
|
+
from .common import EWSAccountService
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class GetInboxRules(EWSAccountService):
|
|
10
|
+
"""
|
|
11
|
+
MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/getinboxrules-operation
|
|
12
|
+
|
|
13
|
+
The GetInboxRules operation uses Exchange Web Services to retrieve Inbox rules in the identified user's mailbox.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
SERVICE_NAME = "GetInboxRules"
|
|
17
|
+
element_container_name = InboxRules.response_tag()
|
|
18
|
+
ERRORS_TO_CATCH_IN_RESPONSE = EWSAccountService.ERRORS_TO_CATCH_IN_RESPONSE + (ErrorInvalidOperation,)
|
|
19
|
+
|
|
20
|
+
def call(self, mailbox: Optional[str] = None) -> Generator[Union[Rule, Exception, None], Any, None]:
|
|
21
|
+
if not mailbox:
|
|
22
|
+
mailbox = self.account.primary_smtp_address
|
|
23
|
+
payload = self.get_payload(mailbox=mailbox)
|
|
24
|
+
elements = self._get_elements(payload=payload)
|
|
25
|
+
return self._elems_to_objs(elements)
|
|
26
|
+
|
|
27
|
+
def _elem_to_obj(self, elem):
|
|
28
|
+
return Rule.from_xml(elem=elem, account=self.account)
|
|
29
|
+
|
|
30
|
+
def get_payload(self, mailbox):
|
|
31
|
+
payload = create_element(f"m:{self.SERVICE_NAME}")
|
|
32
|
+
add_xml_child(payload, "m:MailboxSmtpAddress", mailbox)
|
|
33
|
+
return payload
|
|
34
|
+
|
|
35
|
+
def _get_element_container(self, message, name=None):
|
|
36
|
+
if name:
|
|
37
|
+
response_class = message.get("ResponseClass")
|
|
38
|
+
response_code = get_xml_attr(message, f"{{{MNS}}}ResponseCode")
|
|
39
|
+
if response_class == "Success" and response_code == "NoError" and message.find(name) is None:
|
|
40
|
+
return []
|
|
41
|
+
return super()._get_element_container(message, name)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class UpdateInboxRules(EWSAccountService):
|
|
45
|
+
"""
|
|
46
|
+
MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/updateinboxrules-operation
|
|
47
|
+
|
|
48
|
+
The UpdateInboxRules operation updates the authenticated user's Inbox rules by applying the specified operations.
|
|
49
|
+
UpdateInboxRules is used to create an Inbox rule, to set an Inbox rule, or to delete an Inbox rule.
|
|
50
|
+
|
|
51
|
+
When you use the UpdateInboxRules operation, Exchange Web Services deletes client-side send rules.
|
|
52
|
+
Client-side send rules are stored on the client in the rule Folder Associated Information (FAI) Message and nowhere
|
|
53
|
+
else. EWS deletes this rule FAI message by default, based on the expectation that Outlook will recreate it.
|
|
54
|
+
However, Outlook can't recreate rules that don't also exist as an extended rule, and client-side send rules don't
|
|
55
|
+
exist as extended rules. As a result, these rules are lost. We suggest you consider this when designing your
|
|
56
|
+
solution.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
SERVICE_NAME = "UpdateInboxRules"
|
|
60
|
+
ERRORS_TO_CATCH_IN_RESPONSE = EWSAccountService.ERRORS_TO_CATCH_IN_RESPONSE + (ErrorInvalidOperation,)
|
|
61
|
+
|
|
62
|
+
def call(self, rule: Rule, remove_outlook_rule_blob: bool = True):
|
|
63
|
+
payload = self.get_payload(rule=rule, remove_outlook_rule_blob=remove_outlook_rule_blob)
|
|
64
|
+
return self._get_elements(payload=payload)
|
|
65
|
+
|
|
66
|
+
def _get_operation(self, rule):
|
|
67
|
+
raise NotImplementedError()
|
|
68
|
+
|
|
69
|
+
def get_payload(self, rule: Rule, remove_outlook_rule_blob: bool = True):
|
|
70
|
+
payload = create_element(f"m:{self.SERVICE_NAME}")
|
|
71
|
+
add_xml_child(payload, "m:RemoveOutlookRuleBlob", remove_outlook_rule_blob)
|
|
72
|
+
operations = self._get_operation(rule)
|
|
73
|
+
set_xml_value(payload, operations, version=self.account.version)
|
|
74
|
+
return payload
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class CreateInboxRule(UpdateInboxRules):
|
|
78
|
+
"""
|
|
79
|
+
MSDN:
|
|
80
|
+
https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/updateinboxrules-operation#updateinboxrules-create-rule-request-example
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
def _get_operation(self, rule):
|
|
84
|
+
return Operations(create_rule_operation=CreateRuleOperation(rule=rule))
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class SetInboxRule(UpdateInboxRules):
|
|
88
|
+
"""
|
|
89
|
+
MSDN:
|
|
90
|
+
https://learn.microsoft.com/en-us/exchange/client-developer/web-service-reference/updateinboxrules-operation#updateinboxrules-set-rule-request-example
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
def _get_operation(self, rule):
|
|
94
|
+
return Operations(set_rule_operation=SetRuleOperation(rule=rule))
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class DeleteInboxRule(UpdateInboxRules):
|
|
98
|
+
"""
|
|
99
|
+
MSDN:
|
|
100
|
+
https://learn.microsoft.com/en-us/exchange/client-developer/web-service-reference/updateinboxrules-operation#updateinboxrules-delete-rule-request-example
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
def _get_operation(self, rule):
|
|
104
|
+
return Operations(delete_rule_operation=DeleteRuleOperation(id=rule.id))
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from ..properties import MovedItemId
|
|
2
|
+
from ..util import create_element
|
|
3
|
+
from .common import EWSAccountService, item_ids_element
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MarkAsJunk(EWSAccountService):
|
|
7
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/markasjunk-operation"""
|
|
8
|
+
|
|
9
|
+
SERVICE_NAME = "MarkAsJunk"
|
|
10
|
+
|
|
11
|
+
def call(self, items, is_junk, move_item):
|
|
12
|
+
return self._elems_to_objs(
|
|
13
|
+
self._chunked_get_elements(self.get_payload, items=items, is_junk=is_junk, move_item=move_item)
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
def _elem_to_obj(self, elem):
|
|
17
|
+
return MovedItemId.id_from_xml(elem)
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def _get_elements_in_container(cls, container):
|
|
21
|
+
return container.findall(MovedItemId.response_tag())
|
|
22
|
+
|
|
23
|
+
def get_payload(self, items, is_junk, move_item):
|
|
24
|
+
# Takes a list of items and returns either success or raises an error message
|
|
25
|
+
payload = create_element(f"m:{self.SERVICE_NAME}", attrs=dict(IsJunk=is_junk, MoveItem=move_item))
|
|
26
|
+
payload.append(item_ids_element(items=items, version=self.account.version))
|
|
27
|
+
return payload
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from ..errors import InvalidTypeError
|
|
2
|
+
from ..folders import BaseFolder
|
|
3
|
+
from ..properties import FolderId
|
|
4
|
+
from ..util import MNS, create_element
|
|
5
|
+
from .common import EWSAccountService, folder_ids_element
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class MoveFolder(EWSAccountService):
|
|
9
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/movefolder-operation"""
|
|
10
|
+
|
|
11
|
+
SERVICE_NAME = "MoveFolder"
|
|
12
|
+
element_container_name = f"{{{MNS}}}Folders"
|
|
13
|
+
|
|
14
|
+
def call(self, folders, to_folder):
|
|
15
|
+
if not isinstance(to_folder, (BaseFolder, FolderId)):
|
|
16
|
+
raise InvalidTypeError("to_folder", to_folder, (BaseFolder, FolderId))
|
|
17
|
+
return self._elems_to_objs(self._chunked_get_elements(self.get_payload, items=folders, to_folder=to_folder))
|
|
18
|
+
|
|
19
|
+
def _elem_to_obj(self, elem):
|
|
20
|
+
return FolderId.from_xml(elem=elem.find(FolderId.response_tag()), account=self.account)
|
|
21
|
+
|
|
22
|
+
def get_payload(self, folders, to_folder):
|
|
23
|
+
# Takes a list of folders and returns their new folder IDs
|
|
24
|
+
payload = create_element(f"m:{self.SERVICE_NAME}")
|
|
25
|
+
payload.append(folder_ids_element(folders=[to_folder], version=self.account.version, tag="m:ToFolderId"))
|
|
26
|
+
payload.append(folder_ids_element(folders=folders, version=self.account.version))
|
|
27
|
+
return payload
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from ..errors import InvalidTypeError
|
|
2
|
+
from ..folders import BaseFolder
|
|
3
|
+
from ..items import Item
|
|
4
|
+
from ..properties import FolderId
|
|
5
|
+
from ..util import MNS, create_element
|
|
6
|
+
from .common import EWSAccountService, folder_ids_element, item_ids_element
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class MoveItem(EWSAccountService):
|
|
10
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/moveitem-operation"""
|
|
11
|
+
|
|
12
|
+
SERVICE_NAME = "MoveItem"
|
|
13
|
+
element_container_name = f"{{{MNS}}}Items"
|
|
14
|
+
|
|
15
|
+
def call(self, items, to_folder):
|
|
16
|
+
if not isinstance(to_folder, (BaseFolder, FolderId)):
|
|
17
|
+
raise InvalidTypeError("to_folder", to_folder, (BaseFolder, FolderId))
|
|
18
|
+
return self._elems_to_objs(self._chunked_get_elements(self.get_payload, items=items, to_folder=to_folder))
|
|
19
|
+
|
|
20
|
+
def _elem_to_obj(self, elem):
|
|
21
|
+
return Item.id_from_xml(elem)
|
|
22
|
+
|
|
23
|
+
def get_payload(self, items, to_folder):
|
|
24
|
+
# Takes a list of items and returns their new item IDs
|
|
25
|
+
payload = create_element(f"m:{self.SERVICE_NAME}")
|
|
26
|
+
payload.append(folder_ids_element(folders=[to_folder], version=self.account.version, tag="m:ToFolderId"))
|
|
27
|
+
payload.append(item_ids_element(items=items, version=self.account.version))
|
|
28
|
+
return payload
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import warnings
|
|
3
|
+
|
|
4
|
+
from ..errors import ErrorNameResolutionMultipleResults, ErrorNameResolutionNoResults, InvalidEnumValue
|
|
5
|
+
from ..items import SEARCH_SCOPE_CHOICES, SHAPE_CHOICES, Contact
|
|
6
|
+
from ..properties import Mailbox
|
|
7
|
+
from ..util import MNS, add_xml_child, create_element
|
|
8
|
+
from ..version import EXCHANGE_2010_SP2
|
|
9
|
+
from .common import EWSService, folder_ids_element
|
|
10
|
+
|
|
11
|
+
log = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ResolveNames(EWSService):
|
|
15
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/resolvenames-operation"""
|
|
16
|
+
|
|
17
|
+
SERVICE_NAME = "ResolveNames"
|
|
18
|
+
element_container_name = f"{{{MNS}}}ResolutionSet"
|
|
19
|
+
ERRORS_TO_CATCH_IN_RESPONSE = ErrorNameResolutionNoResults
|
|
20
|
+
WARNINGS_TO_IGNORE_IN_RESPONSE = ErrorNameResolutionMultipleResults
|
|
21
|
+
|
|
22
|
+
# According to the 'Remarks' section of the MSDN documentation referenced above, at most 100 candidates are
|
|
23
|
+
# returned for a lookup.
|
|
24
|
+
# Note: paging information is returned as attrs on the 'ResolutionSet' element, but this service does not
|
|
25
|
+
# support the 'IndexedPageItemView' element, so it's not really a paging service.
|
|
26
|
+
candidates_limit = 100
|
|
27
|
+
|
|
28
|
+
def __init__(self, *args, **kwargs):
|
|
29
|
+
super().__init__(*args, **kwargs)
|
|
30
|
+
self.return_full_contact_data = False # A hack to communicate parsing args to _elems_to_objs()
|
|
31
|
+
|
|
32
|
+
def call(
|
|
33
|
+
self,
|
|
34
|
+
unresolved_entries,
|
|
35
|
+
parent_folders=None,
|
|
36
|
+
return_full_contact_data=False,
|
|
37
|
+
search_scope=None,
|
|
38
|
+
contact_data_shape=None,
|
|
39
|
+
):
|
|
40
|
+
if self.chunk_size > 100:
|
|
41
|
+
raise ValueError(
|
|
42
|
+
f"Chunk size {self.chunk_size} is too high. {self.SERVICE_NAME} supports returning at most 100 "
|
|
43
|
+
f"candidates for a lookup",
|
|
44
|
+
)
|
|
45
|
+
if search_scope and search_scope not in SEARCH_SCOPE_CHOICES:
|
|
46
|
+
raise InvalidEnumValue("search_scope", search_scope, SEARCH_SCOPE_CHOICES)
|
|
47
|
+
if contact_data_shape and contact_data_shape not in SHAPE_CHOICES:
|
|
48
|
+
raise InvalidEnumValue("contact_data_shape", contact_data_shape, SHAPE_CHOICES)
|
|
49
|
+
self.return_full_contact_data = return_full_contact_data
|
|
50
|
+
return self._elems_to_objs(
|
|
51
|
+
self._chunked_get_elements(
|
|
52
|
+
self.get_payload,
|
|
53
|
+
items=unresolved_entries,
|
|
54
|
+
parent_folders=parent_folders,
|
|
55
|
+
return_full_contact_data=return_full_contact_data,
|
|
56
|
+
search_scope=search_scope,
|
|
57
|
+
contact_data_shape=contact_data_shape,
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
def _get_element_container(self, message, name=None):
|
|
62
|
+
container_or_exc = super()._get_element_container(message=message, name=name)
|
|
63
|
+
if isinstance(container_or_exc, Exception):
|
|
64
|
+
return container_or_exc
|
|
65
|
+
is_last_page = container_or_exc.get("IncludesLastItemInRange").lower() in ("true", "0")
|
|
66
|
+
log.debug("Includes last item in range: %s", is_last_page)
|
|
67
|
+
if not is_last_page:
|
|
68
|
+
warnings.warn(
|
|
69
|
+
f"The {self.__class__.__name__} service returns at most {self.candidates_limit} candidates and does "
|
|
70
|
+
f"not support paging. You have reached this limit and have not received the exhaustive list of "
|
|
71
|
+
f"candidates."
|
|
72
|
+
)
|
|
73
|
+
return container_or_exc
|
|
74
|
+
|
|
75
|
+
def _elem_to_obj(self, elem):
|
|
76
|
+
if self.return_full_contact_data:
|
|
77
|
+
mailbox_elem = elem.find(Mailbox.response_tag())
|
|
78
|
+
contact_elem = elem.find(Contact.response_tag())
|
|
79
|
+
return (
|
|
80
|
+
None if mailbox_elem is None else Mailbox.from_xml(elem=mailbox_elem, account=None),
|
|
81
|
+
None if contact_elem is None else Contact.from_xml(elem=contact_elem, account=None),
|
|
82
|
+
)
|
|
83
|
+
return Mailbox.from_xml(elem=elem.find(Mailbox.response_tag()), account=None)
|
|
84
|
+
|
|
85
|
+
def get_payload(
|
|
86
|
+
self, unresolved_entries, parent_folders, return_full_contact_data, search_scope, contact_data_shape
|
|
87
|
+
):
|
|
88
|
+
attrs = dict(ReturnFullContactData=return_full_contact_data)
|
|
89
|
+
if search_scope:
|
|
90
|
+
attrs["SearchScope"] = search_scope
|
|
91
|
+
if contact_data_shape:
|
|
92
|
+
if self.protocol.version.build < EXCHANGE_2010_SP2:
|
|
93
|
+
raise NotImplementedError(
|
|
94
|
+
"'contact_data_shape' is only supported for Exchange 2010 SP2 servers and later"
|
|
95
|
+
)
|
|
96
|
+
attrs["ContactDataShape"] = contact_data_shape
|
|
97
|
+
payload = create_element(f"m:{self.SERVICE_NAME}", attrs=attrs)
|
|
98
|
+
if parent_folders:
|
|
99
|
+
payload.append(
|
|
100
|
+
folder_ids_element(folders=parent_folders, version=self.protocol.version, tag="m:ParentFolderIds")
|
|
101
|
+
)
|
|
102
|
+
for entry in unresolved_entries:
|
|
103
|
+
add_xml_child(payload, "m:UnresolvedEntry", entry)
|
|
104
|
+
return payload
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from ..errors import InvalidTypeError
|
|
2
|
+
from ..folders import BaseFolder
|
|
3
|
+
from ..properties import FolderId
|
|
4
|
+
from ..util import create_element
|
|
5
|
+
from .common import EWSAccountService, folder_ids_element, item_ids_element
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SendItem(EWSAccountService):
|
|
9
|
+
"""MSDN: https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/senditem-operation"""
|
|
10
|
+
|
|
11
|
+
SERVICE_NAME = "SendItem"
|
|
12
|
+
returns_elements = False
|
|
13
|
+
|
|
14
|
+
def call(self, items, saved_item_folder):
|
|
15
|
+
if saved_item_folder and not isinstance(saved_item_folder, (BaseFolder, FolderId)):
|
|
16
|
+
raise InvalidTypeError("saved_item_folder", saved_item_folder, (BaseFolder, FolderId))
|
|
17
|
+
return self._chunked_get_elements(self.get_payload, items=items, saved_item_folder=saved_item_folder)
|
|
18
|
+
|
|
19
|
+
def get_payload(self, items, saved_item_folder):
|
|
20
|
+
payload = create_element(f"m:{self.SERVICE_NAME}", attrs=dict(SaveItemToFolder=bool(saved_item_folder)))
|
|
21
|
+
payload.append(item_ids_element(items=items, version=self.account.version))
|
|
22
|
+
if saved_item_folder:
|
|
23
|
+
payload.append(
|
|
24
|
+
folder_ids_element(folders=[saved_item_folder], version=self.account.version, tag="m:SavedItemFolderId")
|
|
25
|
+
)
|
|
26
|
+
return payload
|