@backtomyfuture/exchange-cli-darwin-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/Python +0 -0
- package/bin/_internal/Python.framework/Python +0 -0
- package/bin/_internal/Python.framework/Resources/Info.plist +30 -0
- package/bin/_internal/Python.framework/Versions/3.12/Python +0 -0
- package/bin/_internal/Python.framework/Versions/3.12/Resources/Info.plist +30 -0
- package/bin/_internal/Python.framework/Versions/Current/Python +0 -0
- package/bin/_internal/Python.framework/Versions/Current/Resources/Info.plist +30 -0
- package/bin/_internal/_cffi_backend.cpython-312-darwin.so +0 -0
- package/bin/_internal/ada92cb5d92a588d1b93__mypyc.cpython-312-darwin.so +0 -0
- package/bin/_internal/base_library.zip +0 -0
- package/bin/_internal/certifi/cacert.pem +3863 -0
- package/bin/_internal/certifi/py.typed +0 -0
- package/bin/_internal/charset_normalizer/cd.cpython-312-darwin.so +0 -0
- package/bin/_internal/charset_normalizer/md.cpython-312-darwin.so +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.abi3.so +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.dylib +0 -0
- package/bin/_internal/libssl.3.dylib +0 -0
- package/bin/_internal/lxml/_elementpath.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/builder.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/etree.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/html/_difflib.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/html/diff.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/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.cpython-312-darwin.so +0 -0
- package/bin/_internal/lxml/sax.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_asyncio.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_bisect.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_blake2.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_bz2.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_cn.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_hk.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_iso2022.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_jp.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_kr.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_tw.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_contextvars.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_csv.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ctypes.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_datetime.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_dbm.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_decimal.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_elementtree.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_hashlib.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_heapq.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_json.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_lzma.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_md5.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_multibytecodec.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_multiprocessing.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_opcode.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_pickle.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_posixshmem.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_posixsubprocess.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_queue.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_random.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_scproxy.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha1.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha2.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha3.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_socket.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ssl.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_statistics.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_struct.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_uuid.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_zoneinfo.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/array.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/binascii.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/fcntl.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/grp.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/math.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/mmap.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/pyexpat.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/readline.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/resource.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/select.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/syslog.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/termios.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/unicodedata.cpython-312-darwin.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/zlib.cpython-312-darwin.so +0 -0
- package/bin/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt +2 -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/exchange-cli +0 -0
- package/package.json +20 -0
|
@@ -0,0 +1,691 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
import logging
|
|
3
|
+
from contextlib import suppress
|
|
4
|
+
from copy import deepcopy
|
|
5
|
+
from itertools import islice
|
|
6
|
+
|
|
7
|
+
from .errors import DoesNotExist, ErrorItemNotFound, InvalidEnumValue, InvalidTypeError, MultipleObjectsReturned
|
|
8
|
+
from .fields import FieldOrder, FieldPath
|
|
9
|
+
from .items import ID_ONLY, CalendarItem
|
|
10
|
+
from .properties import InvalidField
|
|
11
|
+
from .restriction import Q
|
|
12
|
+
from .version import EXCHANGE_2010
|
|
13
|
+
|
|
14
|
+
log = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
MISSING_ITEM_ERRORS = (ErrorItemNotFound,)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class SearchableMixIn:
|
|
20
|
+
"""Implement a search API for inheritance."""
|
|
21
|
+
|
|
22
|
+
@abc.abstractmethod
|
|
23
|
+
def get(self, *args, **kwargs):
|
|
24
|
+
"""Return a single object"""
|
|
25
|
+
|
|
26
|
+
@abc.abstractmethod
|
|
27
|
+
def all(self):
|
|
28
|
+
"""Return all objects, unfiltered"""
|
|
29
|
+
|
|
30
|
+
@abc.abstractmethod
|
|
31
|
+
def none(self):
|
|
32
|
+
"""Return an empty result"""
|
|
33
|
+
|
|
34
|
+
@abc.abstractmethod
|
|
35
|
+
def filter(self, *args, **kwargs):
|
|
36
|
+
"""Apply filters to a query"""
|
|
37
|
+
|
|
38
|
+
@abc.abstractmethod
|
|
39
|
+
def exclude(self, *args, **kwargs):
|
|
40
|
+
"""Apply filters to a query"""
|
|
41
|
+
|
|
42
|
+
@abc.abstractmethod
|
|
43
|
+
def people(self):
|
|
44
|
+
"""Search for personas"""
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class QuerySet(SearchableMixIn):
|
|
48
|
+
"""A Django QuerySet-like class for querying items. Defers query until the QuerySet is consumed. Supports
|
|
49
|
+
chaining to build up complex queries.
|
|
50
|
+
|
|
51
|
+
Django QuerySet documentation: https://docs.djangoproject.com/en/dev/ref/models/querysets/
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
VALUES = "values"
|
|
55
|
+
VALUES_LIST = "values_list"
|
|
56
|
+
FLAT = "flat"
|
|
57
|
+
NONE = "none"
|
|
58
|
+
RETURN_TYPES = (VALUES, VALUES_LIST, FLAT, NONE)
|
|
59
|
+
|
|
60
|
+
ITEM = "item"
|
|
61
|
+
PERSONA = "persona"
|
|
62
|
+
REQUEST_TYPES = (ITEM, PERSONA)
|
|
63
|
+
|
|
64
|
+
def __init__(self, folder_collection, request_type=ITEM):
|
|
65
|
+
from .folders import FolderCollection
|
|
66
|
+
|
|
67
|
+
if not isinstance(folder_collection, FolderCollection):
|
|
68
|
+
raise InvalidTypeError("folder_collection", folder_collection, FolderCollection)
|
|
69
|
+
self.folder_collection = folder_collection # A FolderCollection instance
|
|
70
|
+
if request_type not in self.REQUEST_TYPES:
|
|
71
|
+
raise InvalidEnumValue("request_type", request_type, self.REQUEST_TYPES)
|
|
72
|
+
self.request_type = request_type
|
|
73
|
+
self.q = Q() # Default to no restrictions
|
|
74
|
+
self.only_fields = None
|
|
75
|
+
self.order_fields = None
|
|
76
|
+
self.return_format = self.NONE
|
|
77
|
+
self.calendar_view = None
|
|
78
|
+
self.page_size = None
|
|
79
|
+
self.chunk_size = None
|
|
80
|
+
self.max_items = None
|
|
81
|
+
self.offset = 0
|
|
82
|
+
self._depth = None
|
|
83
|
+
|
|
84
|
+
def _copy_self(self):
|
|
85
|
+
# When we copy a queryset where the cache has already been filled, we don't copy the cache. Thus, a copied
|
|
86
|
+
# queryset will fetch results from the server again.
|
|
87
|
+
#
|
|
88
|
+
# All other behaviour would be awkward:
|
|
89
|
+
#
|
|
90
|
+
# qs = QuerySet(f).filter(foo='bar')
|
|
91
|
+
# items = list(qs)
|
|
92
|
+
# new_qs = qs.exclude(bar='baz') # This should work, and should fetch from the server
|
|
93
|
+
#
|
|
94
|
+
# Only mutable objects need to be deepcopied. Folder should be the same object
|
|
95
|
+
new_qs = self.__class__(self.folder_collection, request_type=self.request_type)
|
|
96
|
+
new_qs.q = deepcopy(self.q)
|
|
97
|
+
new_qs.only_fields = self.only_fields
|
|
98
|
+
new_qs.order_fields = None if self.order_fields is None else deepcopy(self.order_fields)
|
|
99
|
+
new_qs.return_format = self.return_format
|
|
100
|
+
new_qs.calendar_view = self.calendar_view
|
|
101
|
+
new_qs.page_size = self.page_size
|
|
102
|
+
new_qs.chunk_size = self.chunk_size
|
|
103
|
+
new_qs.max_items = self.max_items
|
|
104
|
+
new_qs.offset = self.offset
|
|
105
|
+
new_qs._depth = self._depth
|
|
106
|
+
return new_qs
|
|
107
|
+
|
|
108
|
+
def _get_field_path(self, field_path):
|
|
109
|
+
from .items import Persona
|
|
110
|
+
|
|
111
|
+
if self.request_type == self.PERSONA:
|
|
112
|
+
return FieldPath(field=Persona.get_field_by_fieldname(field_path))
|
|
113
|
+
for folder in self.folder_collection:
|
|
114
|
+
with suppress(InvalidField):
|
|
115
|
+
return FieldPath.from_string(field_path=field_path, folder=folder)
|
|
116
|
+
raise InvalidField(f"Unknown field path {field_path!r} on folders {self.folder_collection.folders}")
|
|
117
|
+
|
|
118
|
+
def _get_field_order(self, field_path):
|
|
119
|
+
from .items import Persona
|
|
120
|
+
|
|
121
|
+
if self.request_type == self.PERSONA:
|
|
122
|
+
return FieldOrder(
|
|
123
|
+
field_path=FieldPath(field=Persona.get_field_by_fieldname(field_path.lstrip("-"))),
|
|
124
|
+
reverse=field_path.startswith("-"),
|
|
125
|
+
)
|
|
126
|
+
for folder in self.folder_collection:
|
|
127
|
+
with suppress(InvalidField):
|
|
128
|
+
return FieldOrder.from_string(field_path=field_path, folder=folder)
|
|
129
|
+
raise InvalidField(f"Unknown field path {field_path!r} on folders {self.folder_collection.folders}")
|
|
130
|
+
|
|
131
|
+
@property
|
|
132
|
+
def _id_field(self):
|
|
133
|
+
return self._get_field_path("id")
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def _changekey_field(self):
|
|
137
|
+
return self._get_field_path("changekey")
|
|
138
|
+
|
|
139
|
+
def _additional_fields(self):
|
|
140
|
+
if not isinstance(self.only_fields, tuple):
|
|
141
|
+
raise InvalidTypeError("only_fields", self.only_fields, tuple)
|
|
142
|
+
# Remove ItemId and ChangeKey. We get them unconditionally
|
|
143
|
+
additional_fields = {f for f in self.only_fields if not f.field.is_attribute}
|
|
144
|
+
if self.request_type != self.ITEM:
|
|
145
|
+
return additional_fields
|
|
146
|
+
|
|
147
|
+
# For CalendarItem items, we want to inject internal timezone fields into the requested fields.
|
|
148
|
+
has_start = "start" in {f.field.name for f in additional_fields}
|
|
149
|
+
has_end = "end" in {f.field.name for f in additional_fields}
|
|
150
|
+
meeting_tz_field, start_tz_field, end_tz_field = CalendarItem.timezone_fields()
|
|
151
|
+
if self.folder_collection.account.version.build < EXCHANGE_2010:
|
|
152
|
+
if has_start or has_end:
|
|
153
|
+
additional_fields.add(FieldPath(field=meeting_tz_field))
|
|
154
|
+
else:
|
|
155
|
+
if has_start:
|
|
156
|
+
additional_fields.add(FieldPath(field=start_tz_field))
|
|
157
|
+
if has_end:
|
|
158
|
+
additional_fields.add(FieldPath(field=end_tz_field))
|
|
159
|
+
return additional_fields
|
|
160
|
+
|
|
161
|
+
def _format_items(self, items, return_format):
|
|
162
|
+
return {
|
|
163
|
+
self.VALUES: self._as_values,
|
|
164
|
+
self.VALUES_LIST: self._as_values_list,
|
|
165
|
+
self.FLAT: self._as_flat_values_list,
|
|
166
|
+
self.NONE: self._as_items,
|
|
167
|
+
}[return_format](items)
|
|
168
|
+
|
|
169
|
+
def _query(self):
|
|
170
|
+
if self.only_fields is None:
|
|
171
|
+
# We didn't restrict list of field paths. Get all fields from the server, including extended properties.
|
|
172
|
+
if self.request_type == self.PERSONA:
|
|
173
|
+
additional_fields = {} # GetPersona doesn't take explicit fields. Don't bother calculating the list
|
|
174
|
+
complex_fields_requested = True
|
|
175
|
+
else:
|
|
176
|
+
additional_fields = {FieldPath(field=f) for f in self.folder_collection.allowed_item_fields()}
|
|
177
|
+
complex_fields_requested = True
|
|
178
|
+
else:
|
|
179
|
+
additional_fields = self._additional_fields()
|
|
180
|
+
complex_fields_requested = any(f.field.is_complex for f in additional_fields)
|
|
181
|
+
|
|
182
|
+
# EWS can do server-side sorting on multiple fields. A caveat is that server-side sorting is not supported
|
|
183
|
+
# for calendar views. In this case, we do all the sorting client-side.
|
|
184
|
+
if self.calendar_view:
|
|
185
|
+
must_sort_clientside = bool(self.order_fields)
|
|
186
|
+
order_fields = None
|
|
187
|
+
else:
|
|
188
|
+
must_sort_clientside = False
|
|
189
|
+
order_fields = self.order_fields
|
|
190
|
+
|
|
191
|
+
if must_sort_clientside:
|
|
192
|
+
# Also fetch order_by fields that we only need for client-side sorting.
|
|
193
|
+
extra_order_fields = {f.field_path for f in self.order_fields} - additional_fields
|
|
194
|
+
if extra_order_fields:
|
|
195
|
+
additional_fields.update(extra_order_fields)
|
|
196
|
+
else:
|
|
197
|
+
extra_order_fields = set()
|
|
198
|
+
|
|
199
|
+
find_kwargs = dict(
|
|
200
|
+
shape=ID_ONLY, # Always use IdOnly here, because AllProperties doesn't actually get *all* properties
|
|
201
|
+
depth=self._depth,
|
|
202
|
+
additional_fields=additional_fields,
|
|
203
|
+
order_fields=order_fields,
|
|
204
|
+
page_size=self.page_size,
|
|
205
|
+
max_items=self.max_items,
|
|
206
|
+
offset=self.offset,
|
|
207
|
+
)
|
|
208
|
+
if self.request_type == self.PERSONA:
|
|
209
|
+
if complex_fields_requested:
|
|
210
|
+
find_kwargs["additional_fields"] = None
|
|
211
|
+
items = self.folder_collection.account.fetch_personas(
|
|
212
|
+
ids=self.folder_collection.find_people(self.q, **find_kwargs)
|
|
213
|
+
)
|
|
214
|
+
else:
|
|
215
|
+
if not additional_fields:
|
|
216
|
+
find_kwargs["additional_fields"] = None
|
|
217
|
+
items = self.folder_collection.find_people(self.q, **find_kwargs)
|
|
218
|
+
else:
|
|
219
|
+
find_kwargs["calendar_view"] = self.calendar_view
|
|
220
|
+
if complex_fields_requested:
|
|
221
|
+
# The FindItem service does not support complex field types. Tell find_items() to return
|
|
222
|
+
# (id, changekey) tuples, and pass that to fetch().
|
|
223
|
+
find_kwargs["additional_fields"] = None
|
|
224
|
+
unfiltered_items = self.folder_collection.account.fetch(
|
|
225
|
+
ids=self.folder_collection.find_items(self.q, **find_kwargs),
|
|
226
|
+
only_fields=additional_fields,
|
|
227
|
+
chunk_size=self.chunk_size,
|
|
228
|
+
)
|
|
229
|
+
# We may be unlucky that the item disappeared between the FindItem and the GetItem calls
|
|
230
|
+
items = filter(lambda i: not isinstance(i, MISSING_ITEM_ERRORS), unfiltered_items)
|
|
231
|
+
else:
|
|
232
|
+
if not additional_fields:
|
|
233
|
+
# If additional_fields is the empty set, we only requested ID and changekey fields. We can then
|
|
234
|
+
# take a shortcut by using (shape=ID_ONLY, additional_fields=None) to tell find_items() to return
|
|
235
|
+
# (id, changekey) tuples. We'll post-process those later.
|
|
236
|
+
find_kwargs["additional_fields"] = None
|
|
237
|
+
items = self.folder_collection.find_items(self.q, **find_kwargs)
|
|
238
|
+
|
|
239
|
+
if not must_sort_clientside:
|
|
240
|
+
return items
|
|
241
|
+
|
|
242
|
+
# Resort to client-side sorting of the order_by fields. This is greedy. Sorting in Python is stable, so when
|
|
243
|
+
# sorting on multiple fields, we can just do a sort on each of the requested fields in reverse order. Reverse
|
|
244
|
+
# each sort operation if the field was marked as such.
|
|
245
|
+
for f in reversed(self.order_fields):
|
|
246
|
+
try:
|
|
247
|
+
items = sorted(items, key=lambda i: _get_sort_value_or_default(i, f), reverse=f.reverse)
|
|
248
|
+
except TypeError as e:
|
|
249
|
+
if "unorderable types" not in e.args[0]:
|
|
250
|
+
raise
|
|
251
|
+
raise ValueError(
|
|
252
|
+
f"Cannot sort on field {f.field_path!r}. The field has no default value defined, and there are "
|
|
253
|
+
f"either items with None values for this field, or the query contains exception instances "
|
|
254
|
+
f"(original error: {e})."
|
|
255
|
+
)
|
|
256
|
+
if not extra_order_fields:
|
|
257
|
+
return items
|
|
258
|
+
|
|
259
|
+
# Nullify the fields we only needed for sorting before returning
|
|
260
|
+
return (_rinse_item(i, extra_order_fields) for i in items)
|
|
261
|
+
|
|
262
|
+
def __iter__(self):
|
|
263
|
+
# Fill cache if this is the first iteration. Return an iterator over the results. Make this non-greedy by
|
|
264
|
+
# filling the cache while we are iterating.
|
|
265
|
+
#
|
|
266
|
+
if self.q.is_never():
|
|
267
|
+
return
|
|
268
|
+
|
|
269
|
+
log.debug("Initializing cache")
|
|
270
|
+
yield from self._format_items(items=self._query(), return_format=self.return_format)
|
|
271
|
+
|
|
272
|
+
# Do not implement __len__. The implementation of list() tries to preallocate memory by calling __len__ on the
|
|
273
|
+
# given sequence, before calling __iter__. If we implemented __len__, we would end up calling FindItems twice, once
|
|
274
|
+
# to get the result of self.count(), and once to return the actual result.
|
|
275
|
+
#
|
|
276
|
+
# Also, according to https://stackoverflow.com/questions/37189968/how-to-have-list-consume-iter-without-calling-len,
|
|
277
|
+
# a __len__ implementation should be cheap. That does not hold for self.count().
|
|
278
|
+
#
|
|
279
|
+
# def __len__(self):
|
|
280
|
+
# return self.count()
|
|
281
|
+
|
|
282
|
+
def __getitem__(self, idx_or_slice):
|
|
283
|
+
# Support indexing and slicing. This is non-greedy when possible (slicing start, stop and step are not negative,
|
|
284
|
+
# and we're ordering on at most one field), and will only fill the cache if the entire query is iterated.
|
|
285
|
+
if isinstance(idx_or_slice, int):
|
|
286
|
+
return self._getitem_idx(idx_or_slice)
|
|
287
|
+
return self._getitem_slice(idx_or_slice)
|
|
288
|
+
|
|
289
|
+
def _getitem_idx(self, idx):
|
|
290
|
+
if idx < 0:
|
|
291
|
+
# Support negative indexes by reversing the queryset and negating the index value
|
|
292
|
+
reverse_idx = -(idx + 1)
|
|
293
|
+
return self.reverse()[reverse_idx]
|
|
294
|
+
# Optimize by setting an exact offset and fetching only 1 item
|
|
295
|
+
new_qs = self._copy_self()
|
|
296
|
+
new_qs.max_items = 1
|
|
297
|
+
new_qs.page_size = 1
|
|
298
|
+
new_qs.offset = idx
|
|
299
|
+
# The iterator will return at most 1 item
|
|
300
|
+
for item in new_qs.__iter__():
|
|
301
|
+
return item
|
|
302
|
+
raise IndexError()
|
|
303
|
+
|
|
304
|
+
def _getitem_slice(self, s):
|
|
305
|
+
from .services import FindItem
|
|
306
|
+
|
|
307
|
+
if ((s.start or 0) < 0) or ((s.stop or 0) < 0) or ((s.step or 0) < 0):
|
|
308
|
+
# islice() does not support negative start, stop and step. Make sure cache is full by iterating the full
|
|
309
|
+
# query result, and then slice on the cache.
|
|
310
|
+
return list(self.__iter__())[s]
|
|
311
|
+
# Optimize by setting an exact offset and max_items value
|
|
312
|
+
new_qs = self._copy_self()
|
|
313
|
+
if s.start is not None and s.stop is not None:
|
|
314
|
+
new_qs.offset = s.start
|
|
315
|
+
new_qs.max_items = s.stop - s.start
|
|
316
|
+
elif s.start is not None:
|
|
317
|
+
new_qs.offset = s.start
|
|
318
|
+
elif s.stop is not None:
|
|
319
|
+
new_qs.max_items = s.stop
|
|
320
|
+
if new_qs.page_size is None and new_qs.max_items is not None and new_qs.max_items < FindItem.PAGE_SIZE:
|
|
321
|
+
new_qs.page_size = new_qs.max_items
|
|
322
|
+
return islice(new_qs.__iter__(), None, None, s.step)
|
|
323
|
+
|
|
324
|
+
def _item_yielder(self, iterable, item_func, id_only_func, changekey_only_func, id_and_changekey_func):
|
|
325
|
+
# Transforms results from the server according to the given transform functions. Makes sure to pass on
|
|
326
|
+
# Exception instances unaltered.
|
|
327
|
+
if self.only_fields:
|
|
328
|
+
has_non_attribute_fields = bool({f for f in self.only_fields if not f.field.is_attribute})
|
|
329
|
+
else:
|
|
330
|
+
has_non_attribute_fields = True
|
|
331
|
+
if not has_non_attribute_fields:
|
|
332
|
+
# _query() will return an iterator of (id, changekey) tuples
|
|
333
|
+
if self._changekey_field not in self.only_fields:
|
|
334
|
+
transform_func = id_only_func
|
|
335
|
+
elif self._id_field not in self.only_fields:
|
|
336
|
+
transform_func = changekey_only_func
|
|
337
|
+
else:
|
|
338
|
+
transform_func = id_and_changekey_func
|
|
339
|
+
for i in iterable:
|
|
340
|
+
if isinstance(i, Exception):
|
|
341
|
+
yield i
|
|
342
|
+
continue
|
|
343
|
+
yield transform_func(*i)
|
|
344
|
+
return
|
|
345
|
+
for i in iterable:
|
|
346
|
+
if isinstance(i, Exception):
|
|
347
|
+
yield i
|
|
348
|
+
continue
|
|
349
|
+
yield item_func(i)
|
|
350
|
+
|
|
351
|
+
def _as_items(self, iterable):
|
|
352
|
+
from .items import Item
|
|
353
|
+
|
|
354
|
+
return self._item_yielder(
|
|
355
|
+
iterable=iterable,
|
|
356
|
+
item_func=lambda i: i,
|
|
357
|
+
id_only_func=lambda item_id, changekey: Item(id=item_id),
|
|
358
|
+
changekey_only_func=lambda item_id, changekey: Item(changekey=changekey),
|
|
359
|
+
id_and_changekey_func=lambda item_id, changekey: Item(id=item_id, changekey=changekey),
|
|
360
|
+
)
|
|
361
|
+
|
|
362
|
+
def _as_values(self, iterable):
|
|
363
|
+
if not self.only_fields:
|
|
364
|
+
raise ValueError("values() requires at least one field name")
|
|
365
|
+
return self._item_yielder(
|
|
366
|
+
iterable=iterable,
|
|
367
|
+
item_func=lambda i: {f.path: _get_value_or_default(f, i) for f in self.only_fields},
|
|
368
|
+
id_only_func=lambda item_id, changekey: {"id": item_id},
|
|
369
|
+
changekey_only_func=lambda item_id, changekey: {"changekey": changekey},
|
|
370
|
+
id_and_changekey_func=lambda item_id, changekey: {"id": item_id, "changekey": changekey},
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
def _as_values_list(self, iterable):
|
|
374
|
+
if not self.only_fields:
|
|
375
|
+
raise ValueError("values_list() requires at least one field name")
|
|
376
|
+
return self._item_yielder(
|
|
377
|
+
iterable=iterable,
|
|
378
|
+
item_func=lambda i: tuple(_get_value_or_default(f, i) for f in self.only_fields),
|
|
379
|
+
id_only_func=lambda item_id, changekey: (item_id,),
|
|
380
|
+
changekey_only_func=lambda item_id, changekey: (changekey,),
|
|
381
|
+
id_and_changekey_func=lambda item_id, changekey: (item_id, changekey),
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
def _as_flat_values_list(self, iterable):
|
|
385
|
+
if not self.only_fields or len(self.only_fields) != 1:
|
|
386
|
+
raise ValueError("flat=True requires exactly one field name")
|
|
387
|
+
return self._item_yielder(
|
|
388
|
+
iterable=iterable,
|
|
389
|
+
item_func=lambda i: _get_value_or_default(self.only_fields[0], i),
|
|
390
|
+
id_only_func=lambda item_id, changekey: item_id,
|
|
391
|
+
changekey_only_func=lambda item_id, changekey: changekey,
|
|
392
|
+
id_and_changekey_func=None, # Can never be called
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
###############################
|
|
396
|
+
#
|
|
397
|
+
# Methods that support chaining
|
|
398
|
+
#
|
|
399
|
+
###############################
|
|
400
|
+
# Return copies of self, so this works as expected:
|
|
401
|
+
#
|
|
402
|
+
# foo_qs = my_folder.filter(...)
|
|
403
|
+
# foo_qs.filter(foo='bar')
|
|
404
|
+
# foo_qs.filter(foo='baz') # Should not be affected by the previous statement
|
|
405
|
+
#
|
|
406
|
+
def all(self):
|
|
407
|
+
""" """
|
|
408
|
+
new_qs = self._copy_self()
|
|
409
|
+
return new_qs
|
|
410
|
+
|
|
411
|
+
def none(self):
|
|
412
|
+
""" """
|
|
413
|
+
new_qs = self._copy_self()
|
|
414
|
+
new_qs.q = Q(conn_type=Q.NEVER)
|
|
415
|
+
return new_qs
|
|
416
|
+
|
|
417
|
+
def filter(self, *args, **kwargs):
|
|
418
|
+
new_qs = self._copy_self()
|
|
419
|
+
q = Q(*args, **kwargs)
|
|
420
|
+
new_qs.q = new_qs.q & q
|
|
421
|
+
return new_qs
|
|
422
|
+
|
|
423
|
+
def exclude(self, *args, **kwargs):
|
|
424
|
+
new_qs = self._copy_self()
|
|
425
|
+
q = ~Q(*args, **kwargs)
|
|
426
|
+
new_qs.q = new_qs.q & q
|
|
427
|
+
return new_qs
|
|
428
|
+
|
|
429
|
+
def people(self):
|
|
430
|
+
"""Change the queryset to search the folder for Personas instead of Items."""
|
|
431
|
+
new_qs = self._copy_self()
|
|
432
|
+
new_qs.request_type = self.PERSONA
|
|
433
|
+
return new_qs
|
|
434
|
+
|
|
435
|
+
def only(self, *args):
|
|
436
|
+
"""Fetch only the specified field names. All other item fields will be 'None'."""
|
|
437
|
+
try:
|
|
438
|
+
only_fields = tuple(self._get_field_path(arg) for arg in args)
|
|
439
|
+
except ValueError as e:
|
|
440
|
+
raise ValueError(f"{e.args[0]} in only()")
|
|
441
|
+
new_qs = self._copy_self()
|
|
442
|
+
new_qs.only_fields = only_fields
|
|
443
|
+
return new_qs
|
|
444
|
+
|
|
445
|
+
def order_by(self, *args):
|
|
446
|
+
"""
|
|
447
|
+
|
|
448
|
+
:return: The QuerySet in reverse order. EWS only supports server-side sorting on a single field. Sorting on
|
|
449
|
+
multiple fields is implemented client-side and will therefore make the query greedy.
|
|
450
|
+
"""
|
|
451
|
+
try:
|
|
452
|
+
order_fields = tuple(self._get_field_order(arg) for arg in args)
|
|
453
|
+
except ValueError as e:
|
|
454
|
+
raise ValueError(f"{e.args[0]} in order_by()")
|
|
455
|
+
new_qs = self._copy_self()
|
|
456
|
+
new_qs.order_fields = order_fields
|
|
457
|
+
return new_qs
|
|
458
|
+
|
|
459
|
+
def reverse(self):
|
|
460
|
+
"""Reverses the ordering of the queryset."""
|
|
461
|
+
if not self.order_fields:
|
|
462
|
+
raise ValueError("Reversing only makes sense if there are order_by fields")
|
|
463
|
+
new_qs = self._copy_self()
|
|
464
|
+
for f in new_qs.order_fields:
|
|
465
|
+
f.reverse = not f.reverse
|
|
466
|
+
return new_qs
|
|
467
|
+
|
|
468
|
+
def values(self, *args):
|
|
469
|
+
try:
|
|
470
|
+
only_fields = tuple(self._get_field_path(arg) for arg in args)
|
|
471
|
+
except ValueError as e:
|
|
472
|
+
raise ValueError(f"{e.args[0]} in values()")
|
|
473
|
+
new_qs = self._copy_self()
|
|
474
|
+
new_qs.only_fields = only_fields
|
|
475
|
+
new_qs.return_format = self.VALUES
|
|
476
|
+
return new_qs
|
|
477
|
+
|
|
478
|
+
def values_list(self, *args, **kwargs):
|
|
479
|
+
"""Return the values of the specified field names as a list of lists. If called with flat=True and only one
|
|
480
|
+
field name, returns a list of values.
|
|
481
|
+
"""
|
|
482
|
+
flat = kwargs.pop("flat", False)
|
|
483
|
+
if kwargs:
|
|
484
|
+
raise AttributeError(f"Unknown kwargs: {kwargs}")
|
|
485
|
+
if flat and len(args) != 1:
|
|
486
|
+
raise ValueError("flat=True requires exactly one field name")
|
|
487
|
+
try:
|
|
488
|
+
only_fields = tuple(self._get_field_path(arg) for arg in args)
|
|
489
|
+
except ValueError as e:
|
|
490
|
+
raise ValueError(f"{e.args[0]} in values_list()")
|
|
491
|
+
new_qs = self._copy_self()
|
|
492
|
+
new_qs.only_fields = only_fields
|
|
493
|
+
new_qs.return_format = self.FLAT if flat else self.VALUES_LIST
|
|
494
|
+
return new_qs
|
|
495
|
+
|
|
496
|
+
def depth(self, depth):
|
|
497
|
+
"""Specify the search depth. Possible values are: SHALLOW, ASSOCIATED or DEEP.
|
|
498
|
+
|
|
499
|
+
:param depth:
|
|
500
|
+
"""
|
|
501
|
+
new_qs = self._copy_self()
|
|
502
|
+
new_qs._depth = depth
|
|
503
|
+
return new_qs
|
|
504
|
+
|
|
505
|
+
###########################
|
|
506
|
+
#
|
|
507
|
+
# Methods that end chaining
|
|
508
|
+
#
|
|
509
|
+
###########################
|
|
510
|
+
|
|
511
|
+
def get(self, *args, **kwargs):
|
|
512
|
+
"""Assume the query will return exactly one item. Return that item."""
|
|
513
|
+
if not args and set(kwargs) in ({"id"}, {"id", "changekey"}):
|
|
514
|
+
# We allow calling get(id=..., changekey=...) to get a single item, but only if exactly these two
|
|
515
|
+
# kwargs are present.
|
|
516
|
+
account = self.folder_collection.account
|
|
517
|
+
item_id = self._id_field.field.clean(kwargs["id"], version=account.version)
|
|
518
|
+
changekey = self._changekey_field.field.clean(kwargs.get("changekey"), version=account.version)
|
|
519
|
+
# The folders we're querying may not support all fields
|
|
520
|
+
if self.only_fields is None:
|
|
521
|
+
only_fields = {FieldPath(field=f) for f in self.folder_collection.allowed_item_fields()}
|
|
522
|
+
else:
|
|
523
|
+
only_fields = self.only_fields
|
|
524
|
+
items = list(account.fetch(ids=[(item_id, changekey)], only_fields=only_fields))
|
|
525
|
+
else:
|
|
526
|
+
new_qs = self.filter(*args, **kwargs)
|
|
527
|
+
items = list(new_qs.__iter__())
|
|
528
|
+
if not items:
|
|
529
|
+
raise DoesNotExist()
|
|
530
|
+
if len(items) != 1:
|
|
531
|
+
raise MultipleObjectsReturned()
|
|
532
|
+
item = items[0]
|
|
533
|
+
if isinstance(item, Exception):
|
|
534
|
+
raise item
|
|
535
|
+
return item
|
|
536
|
+
|
|
537
|
+
def count(self, page_size=1000):
|
|
538
|
+
"""Get the query count, with as little effort as possible
|
|
539
|
+
|
|
540
|
+
:param page_size: The number of items to fetch per request. We're only fetching the IDs, so keep it high.
|
|
541
|
+
(Default value = 1000)
|
|
542
|
+
"""
|
|
543
|
+
new_qs = self._copy_self()
|
|
544
|
+
new_qs.only_fields = ()
|
|
545
|
+
new_qs.order_fields = None
|
|
546
|
+
new_qs.return_format = self.NONE
|
|
547
|
+
new_qs.page_size = page_size
|
|
548
|
+
# 'chunk_size' not needed since we never need to call GetItem
|
|
549
|
+
return len(list(new_qs.__iter__()))
|
|
550
|
+
|
|
551
|
+
def exists(self):
|
|
552
|
+
"""Find out if the query contains any hits, with as little effort as possible."""
|
|
553
|
+
new_qs = self._copy_self()
|
|
554
|
+
new_qs.max_items = 1
|
|
555
|
+
return new_qs.count(page_size=1) > 0
|
|
556
|
+
|
|
557
|
+
def _id_only_copy_self(self):
|
|
558
|
+
new_qs = self._copy_self()
|
|
559
|
+
new_qs.only_fields = ()
|
|
560
|
+
new_qs.order_fields = None
|
|
561
|
+
new_qs.return_format = self.NONE
|
|
562
|
+
return new_qs
|
|
563
|
+
|
|
564
|
+
def delete(self, page_size=1000, chunk_size=100, **delete_kwargs):
|
|
565
|
+
"""Delete the items matching the query, with as little effort as possible
|
|
566
|
+
|
|
567
|
+
:param page_size: The number of items to fetch per request. We're only fetching the IDs, so keep it high.
|
|
568
|
+
(Default value = 1000)
|
|
569
|
+
:param chunk_size: The number of items to delete per request. (Default value = 100)
|
|
570
|
+
:param delete_kwargs:
|
|
571
|
+
"""
|
|
572
|
+
ids = self._id_only_copy_self()
|
|
573
|
+
ids.page_size = page_size
|
|
574
|
+
return self.folder_collection.account.bulk_delete(ids=ids, chunk_size=chunk_size, **delete_kwargs)
|
|
575
|
+
|
|
576
|
+
def send(self, page_size=1000, chunk_size=100, **send_kwargs):
|
|
577
|
+
"""Send the items matching the query, with as little effort as possible
|
|
578
|
+
|
|
579
|
+
:param page_size: The number of items to fetch per request. We're only fetching the IDs, so keep it high.
|
|
580
|
+
(Default value = 1000)
|
|
581
|
+
:param chunk_size: The number of items to send per request. (Default value = 100)
|
|
582
|
+
:param send_kwargs:
|
|
583
|
+
"""
|
|
584
|
+
ids = self._id_only_copy_self()
|
|
585
|
+
ids.page_size = page_size
|
|
586
|
+
return self.folder_collection.account.bulk_send(ids=ids, chunk_size=chunk_size, **send_kwargs)
|
|
587
|
+
|
|
588
|
+
def copy(self, to_folder, page_size=1000, chunk_size=100, **copy_kwargs):
|
|
589
|
+
"""Copy the items matching the query, with as little effort as possible
|
|
590
|
+
|
|
591
|
+
:param to_folder:
|
|
592
|
+
:param page_size: The number of items to fetch per request. We're only fetching the IDs, so keep it high.
|
|
593
|
+
(Default value = 1000)
|
|
594
|
+
:param chunk_size: The number of items to copy per request. (Default value = 100)
|
|
595
|
+
:param copy_kwargs:
|
|
596
|
+
"""
|
|
597
|
+
ids = self._id_only_copy_self()
|
|
598
|
+
ids.page_size = page_size
|
|
599
|
+
return self.folder_collection.account.bulk_copy(
|
|
600
|
+
ids=ids, to_folder=to_folder, chunk_size=chunk_size, **copy_kwargs
|
|
601
|
+
)
|
|
602
|
+
|
|
603
|
+
def move(self, to_folder, page_size=1000, chunk_size=100):
|
|
604
|
+
"""Move the items matching the query, with as little effort as possible. 'page_size' is the number of items
|
|
605
|
+
to fetch and move per request. We're only fetching the IDs, so keep it high.
|
|
606
|
+
|
|
607
|
+
:param to_folder:
|
|
608
|
+
:param page_size: The number of items to fetch per request. We're only fetching the IDs, so keep it high.
|
|
609
|
+
(Default value = 1000)
|
|
610
|
+
:param chunk_size: The number of items to move per request. (Default value = 100)
|
|
611
|
+
"""
|
|
612
|
+
ids = self._id_only_copy_self()
|
|
613
|
+
ids.page_size = page_size
|
|
614
|
+
return self.folder_collection.account.bulk_move(
|
|
615
|
+
ids=ids,
|
|
616
|
+
to_folder=to_folder,
|
|
617
|
+
chunk_size=chunk_size,
|
|
618
|
+
)
|
|
619
|
+
|
|
620
|
+
def archive(self, to_folder, page_size=1000, chunk_size=100):
|
|
621
|
+
"""Archive the items matching the query, with as little effort as possible. 'page_size' is the number of items
|
|
622
|
+
to fetch and move per request. We're only fetching the IDs, so keep it high.
|
|
623
|
+
|
|
624
|
+
:param to_folder:
|
|
625
|
+
:param page_size: The number of items to fetch per request. We're only fetching the IDs, so keep it high.
|
|
626
|
+
(Default value = 1000)
|
|
627
|
+
:param chunk_size: The number of items to archive per request. (Default value = 100)
|
|
628
|
+
"""
|
|
629
|
+
ids = self._id_only_copy_self()
|
|
630
|
+
ids.page_size = page_size
|
|
631
|
+
return self.folder_collection.account.bulk_archive(
|
|
632
|
+
ids=ids,
|
|
633
|
+
to_folder=to_folder,
|
|
634
|
+
chunk_size=chunk_size,
|
|
635
|
+
)
|
|
636
|
+
|
|
637
|
+
def mark_as_junk(self, page_size=1000, chunk_size=1000, **mark_as_junk_kwargs):
|
|
638
|
+
"""Mark the items matching the query as junk, with as little effort as possible. 'page_size' is the number of
|
|
639
|
+
items to fetch and mark per request. We're only fetching the IDs, so keep it high.
|
|
640
|
+
|
|
641
|
+
:param page_size: The number of items to fetch per request. We're only fetching the IDs, so keep it high.
|
|
642
|
+
(Default value = 1000)
|
|
643
|
+
:param chunk_size: The number of items to mark as junk per request. (Default value = 100)
|
|
644
|
+
:param mark_as_junk_kwargs:
|
|
645
|
+
"""
|
|
646
|
+
ids = self._id_only_copy_self()
|
|
647
|
+
ids.page_size = page_size
|
|
648
|
+
return self.folder_collection.account.bulk_mark_as_junk(ids=ids, chunk_size=chunk_size, **mark_as_junk_kwargs)
|
|
649
|
+
|
|
650
|
+
def __str__(self):
|
|
651
|
+
fmt_args = [("q", str(self.q)), ("folders", f"[{', '.join(str(f) for f in self.folder_collection.folders)}]")]
|
|
652
|
+
args_str = ", ".join(f"{k}={v}" for k, v in fmt_args)
|
|
653
|
+
return f"{self.__class__.__name__}({args_str})"
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
def _get_value_or_default(field, item):
|
|
657
|
+
# When we request specific fields using .values() or .values_list(), the incoming item type may not have the field
|
|
658
|
+
# we are requesting. Return None when this happens instead of raising an AttributeError.
|
|
659
|
+
try:
|
|
660
|
+
return field.get_value(item)
|
|
661
|
+
except AttributeError:
|
|
662
|
+
return None
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
def _get_sort_value_or_default(item, field_order):
|
|
666
|
+
# Python can only sort values when <, > and = are implemented for the two types. Try as best we can to sort
|
|
667
|
+
# items, even when the item may have a None value for the field in question, or when the item is an
|
|
668
|
+
# Exception. In that case, we calculate a default value and sort all None values and exceptions as the default
|
|
669
|
+
# value.
|
|
670
|
+
if isinstance(item, Exception):
|
|
671
|
+
return _default_field_value(field_order.field_path.field)
|
|
672
|
+
val = field_order.field_path.get_sort_value(item)
|
|
673
|
+
if val is None:
|
|
674
|
+
return _default_field_value(field_order.field_path.field)
|
|
675
|
+
return val
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
def _default_field_value(field):
|
|
679
|
+
"""Return the default value of a field. If the field does not have a default value, try creating an empty instance
|
|
680
|
+
of the field value class. If that doesn't work, there's really nothing we can do about it; we'll raise an error.
|
|
681
|
+
"""
|
|
682
|
+
return field.default or ([field.value_cls()] if field.is_list else field.value_cls())
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
def _rinse_item(i, fields_to_nullify):
|
|
686
|
+
"""Set fields in fields_to_nullify to None. Make sure to accept exceptions."""
|
|
687
|
+
if isinstance(i, Exception):
|
|
688
|
+
return i
|
|
689
|
+
for f in fields_to_nullify:
|
|
690
|
+
setattr(i, f.field.name, None)
|
|
691
|
+
return i
|