@rowstile/cli-linux-x64 0.1.0-alpha.2
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/LICENSE +202 -0
- package/README.md +5 -0
- package/package.json +26 -0
- package/python/bin/python3.13 +0 -0
- package/python/bin/python3.13-config +122 -0
- package/python/lib/libpython3.13.so.1.0 +0 -0
- package/python/lib/libpython3.so +0 -0
- package/python/lib/python3.13/LICENSE.txt +277 -0
- package/python/lib/python3.13/__future__.py +147 -0
- package/python/lib/python3.13/__hello__.py +16 -0
- package/python/lib/python3.13/_aix_support.py +108 -0
- package/python/lib/python3.13/_android_support.py +192 -0
- package/python/lib/python3.13/_apple_support.py +66 -0
- package/python/lib/python3.13/_collections_abc.py +1187 -0
- package/python/lib/python3.13/_colorize.py +119 -0
- package/python/lib/python3.13/_compat_pickle.py +251 -0
- package/python/lib/python3.13/_compression.py +162 -0
- package/python/lib/python3.13/_ios_support.py +71 -0
- package/python/lib/python3.13/_markupbase.py +396 -0
- package/python/lib/python3.13/_opcode_metadata.py +343 -0
- package/python/lib/python3.13/_osx_support.py +579 -0
- package/python/lib/python3.13/_py_abc.py +147 -0
- package/python/lib/python3.13/_pydatetime.py +2640 -0
- package/python/lib/python3.13/_pydecimal.py +6356 -0
- package/python/lib/python3.13/_pyio.py +2714 -0
- package/python/lib/python3.13/_pylong.py +363 -0
- package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
- package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
- package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
- package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
- package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
- package/python/lib/python3.13/_pyrepl/commands.py +492 -0
- package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
- package/python/lib/python3.13/_pyrepl/console.py +229 -0
- package/python/lib/python3.13/_pyrepl/curses.py +33 -0
- package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
- package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
- package/python/lib/python3.13/_pyrepl/input.py +114 -0
- package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
- package/python/lib/python3.13/_pyrepl/main.py +59 -0
- package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
- package/python/lib/python3.13/_pyrepl/pager.py +175 -0
- package/python/lib/python3.13/_pyrepl/reader.py +764 -0
- package/python/lib/python3.13/_pyrepl/readline.py +599 -0
- package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
- package/python/lib/python3.13/_pyrepl/trace.py +21 -0
- package/python/lib/python3.13/_pyrepl/types.py +10 -0
- package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
- package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
- package/python/lib/python3.13/_pyrepl/utils.py +83 -0
- package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
- package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
- package/python/lib/python3.13/_sitebuiltins.py +91 -0
- package/python/lib/python3.13/_strptime.py +800 -0
- package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
- package/python/lib/python3.13/_threading_local.py +120 -0
- package/python/lib/python3.13/_weakrefset.py +205 -0
- package/python/lib/python3.13/abc.py +188 -0
- package/python/lib/python3.13/antigravity.py +17 -0
- package/python/lib/python3.13/argparse.py +2690 -0
- package/python/lib/python3.13/ast.py +1865 -0
- package/python/lib/python3.13/asyncio/__init__.py +47 -0
- package/python/lib/python3.13/asyncio/__main__.py +211 -0
- package/python/lib/python3.13/asyncio/base_events.py +2086 -0
- package/python/lib/python3.13/asyncio/base_futures.py +67 -0
- package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
- package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
- package/python/lib/python3.13/asyncio/constants.py +41 -0
- package/python/lib/python3.13/asyncio/coroutines.py +109 -0
- package/python/lib/python3.13/asyncio/events.py +885 -0
- package/python/lib/python3.13/asyncio/exceptions.py +62 -0
- package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
- package/python/lib/python3.13/asyncio/futures.py +425 -0
- package/python/lib/python3.13/asyncio/locks.py +617 -0
- package/python/lib/python3.13/asyncio/log.py +7 -0
- package/python/lib/python3.13/asyncio/mixins.py +21 -0
- package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
- package/python/lib/python3.13/asyncio/protocols.py +216 -0
- package/python/lib/python3.13/asyncio/queues.py +309 -0
- package/python/lib/python3.13/asyncio/runners.py +217 -0
- package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
- package/python/lib/python3.13/asyncio/sslproto.py +929 -0
- package/python/lib/python3.13/asyncio/staggered.py +174 -0
- package/python/lib/python3.13/asyncio/streams.py +787 -0
- package/python/lib/python3.13/asyncio/subprocess.py +229 -0
- package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
- package/python/lib/python3.13/asyncio/tasks.py +1121 -0
- package/python/lib/python3.13/asyncio/threads.py +26 -0
- package/python/lib/python3.13/asyncio/timeouts.py +185 -0
- package/python/lib/python3.13/asyncio/transports.py +337 -0
- package/python/lib/python3.13/asyncio/trsock.py +98 -0
- package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
- package/python/lib/python3.13/asyncio/windows_events.py +906 -0
- package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
- package/python/lib/python3.13/base64.py +628 -0
- package/python/lib/python3.13/bdb.py +973 -0
- package/python/lib/python3.13/bisect.py +118 -0
- package/python/lib/python3.13/bz2.py +352 -0
- package/python/lib/python3.13/cProfile.py +197 -0
- package/python/lib/python3.13/calendar.py +813 -0
- package/python/lib/python3.13/cmd.py +409 -0
- package/python/lib/python3.13/code.py +386 -0
- package/python/lib/python3.13/codecs.py +1132 -0
- package/python/lib/python3.13/codeop.py +155 -0
- package/python/lib/python3.13/collections/__init__.py +1603 -0
- package/python/lib/python3.13/colorsys.py +166 -0
- package/python/lib/python3.13/compileall.py +470 -0
- package/python/lib/python3.13/concurrent/__init__.py +1 -0
- package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
- package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
- package/python/lib/python3.13/concurrent/futures/process.py +892 -0
- package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
- package/python/lib/python3.13/configparser.py +1396 -0
- package/python/lib/python3.13/contextlib.py +814 -0
- package/python/lib/python3.13/contextvars.py +4 -0
- package/python/lib/python3.13/copy.py +306 -0
- package/python/lib/python3.13/copyreg.py +217 -0
- package/python/lib/python3.13/csv.py +527 -0
- package/python/lib/python3.13/ctypes/__init__.py +605 -0
- package/python/lib/python3.13/ctypes/_aix.py +327 -0
- package/python/lib/python3.13/ctypes/_endian.py +78 -0
- package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
- package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
- package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
- package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
- package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
- package/python/lib/python3.13/ctypes/util.py +387 -0
- package/python/lib/python3.13/ctypes/wintypes.py +202 -0
- package/python/lib/python3.13/curses/__init__.py +101 -0
- package/python/lib/python3.13/curses/ascii.py +99 -0
- package/python/lib/python3.13/curses/has_key.py +192 -0
- package/python/lib/python3.13/curses/panel.py +6 -0
- package/python/lib/python3.13/curses/textpad.py +236 -0
- package/python/lib/python3.13/dataclasses.py +1679 -0
- package/python/lib/python3.13/datetime.py +9 -0
- package/python/lib/python3.13/dbm/__init__.py +194 -0
- package/python/lib/python3.13/dbm/dumb.py +319 -0
- package/python/lib/python3.13/dbm/gnu.py +3 -0
- package/python/lib/python3.13/dbm/ndbm.py +3 -0
- package/python/lib/python3.13/dbm/sqlite3.py +144 -0
- package/python/lib/python3.13/decimal.py +109 -0
- package/python/lib/python3.13/difflib.py +2058 -0
- package/python/lib/python3.13/dis.py +1075 -0
- package/python/lib/python3.13/doctest.py +2919 -0
- package/python/lib/python3.13/email/__init__.py +61 -0
- package/python/lib/python3.13/email/_encoded_words.py +233 -0
- package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
- package/python/lib/python3.13/email/_parseaddr.py +563 -0
- package/python/lib/python3.13/email/_policybase.py +382 -0
- package/python/lib/python3.13/email/architecture.rst +216 -0
- package/python/lib/python3.13/email/base64mime.py +115 -0
- package/python/lib/python3.13/email/charset.py +396 -0
- package/python/lib/python3.13/email/contentmanager.py +254 -0
- package/python/lib/python3.13/email/encoders.py +65 -0
- package/python/lib/python3.13/email/errors.py +117 -0
- package/python/lib/python3.13/email/feedparser.py +536 -0
- package/python/lib/python3.13/email/generator.py +530 -0
- package/python/lib/python3.13/email/header.py +582 -0
- package/python/lib/python3.13/email/headerregistry.py +618 -0
- package/python/lib/python3.13/email/iterators.py +68 -0
- package/python/lib/python3.13/email/message.py +1217 -0
- package/python/lib/python3.13/email/mime/__init__.py +0 -0
- package/python/lib/python3.13/email/mime/application.py +37 -0
- package/python/lib/python3.13/email/mime/audio.py +97 -0
- package/python/lib/python3.13/email/mime/base.py +29 -0
- package/python/lib/python3.13/email/mime/image.py +152 -0
- package/python/lib/python3.13/email/mime/message.py +33 -0
- package/python/lib/python3.13/email/mime/multipart.py +47 -0
- package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
- package/python/lib/python3.13/email/mime/text.py +40 -0
- package/python/lib/python3.13/email/parser.py +127 -0
- package/python/lib/python3.13/email/policy.py +232 -0
- package/python/lib/python3.13/email/quoprimime.py +300 -0
- package/python/lib/python3.13/email/utils.py +497 -0
- package/python/lib/python3.13/encodings/__init__.py +179 -0
- package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/aliases.py +560 -0
- package/python/lib/python3.13/encodings/ascii.py +50 -0
- package/python/lib/python3.13/encodings/base64_codec.py +55 -0
- package/python/lib/python3.13/encodings/big5.py +39 -0
- package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
- package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
- package/python/lib/python3.13/encodings/charmap.py +69 -0
- package/python/lib/python3.13/encodings/cp037.py +307 -0
- package/python/lib/python3.13/encodings/cp1006.py +307 -0
- package/python/lib/python3.13/encodings/cp1026.py +307 -0
- package/python/lib/python3.13/encodings/cp1125.py +698 -0
- package/python/lib/python3.13/encodings/cp1140.py +307 -0
- package/python/lib/python3.13/encodings/cp1250.py +307 -0
- package/python/lib/python3.13/encodings/cp1251.py +307 -0
- package/python/lib/python3.13/encodings/cp1252.py +307 -0
- package/python/lib/python3.13/encodings/cp1253.py +307 -0
- package/python/lib/python3.13/encodings/cp1254.py +307 -0
- package/python/lib/python3.13/encodings/cp1255.py +307 -0
- package/python/lib/python3.13/encodings/cp1256.py +307 -0
- package/python/lib/python3.13/encodings/cp1257.py +307 -0
- package/python/lib/python3.13/encodings/cp1258.py +307 -0
- package/python/lib/python3.13/encodings/cp273.py +307 -0
- package/python/lib/python3.13/encodings/cp424.py +307 -0
- package/python/lib/python3.13/encodings/cp437.py +698 -0
- package/python/lib/python3.13/encodings/cp500.py +307 -0
- package/python/lib/python3.13/encodings/cp720.py +309 -0
- package/python/lib/python3.13/encodings/cp737.py +698 -0
- package/python/lib/python3.13/encodings/cp775.py +697 -0
- package/python/lib/python3.13/encodings/cp850.py +698 -0
- package/python/lib/python3.13/encodings/cp852.py +698 -0
- package/python/lib/python3.13/encodings/cp855.py +698 -0
- package/python/lib/python3.13/encodings/cp856.py +307 -0
- package/python/lib/python3.13/encodings/cp857.py +694 -0
- package/python/lib/python3.13/encodings/cp858.py +698 -0
- package/python/lib/python3.13/encodings/cp860.py +698 -0
- package/python/lib/python3.13/encodings/cp861.py +698 -0
- package/python/lib/python3.13/encodings/cp862.py +698 -0
- package/python/lib/python3.13/encodings/cp863.py +698 -0
- package/python/lib/python3.13/encodings/cp864.py +690 -0
- package/python/lib/python3.13/encodings/cp865.py +698 -0
- package/python/lib/python3.13/encodings/cp866.py +698 -0
- package/python/lib/python3.13/encodings/cp869.py +689 -0
- package/python/lib/python3.13/encodings/cp874.py +307 -0
- package/python/lib/python3.13/encodings/cp875.py +307 -0
- package/python/lib/python3.13/encodings/cp932.py +39 -0
- package/python/lib/python3.13/encodings/cp949.py +39 -0
- package/python/lib/python3.13/encodings/cp950.py +39 -0
- package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/euc_jp.py +39 -0
- package/python/lib/python3.13/encodings/euc_kr.py +39 -0
- package/python/lib/python3.13/encodings/gb18030.py +39 -0
- package/python/lib/python3.13/encodings/gb2312.py +39 -0
- package/python/lib/python3.13/encodings/gbk.py +39 -0
- package/python/lib/python3.13/encodings/hex_codec.py +55 -0
- package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
- package/python/lib/python3.13/encodings/hz.py +39 -0
- package/python/lib/python3.13/encodings/idna.py +387 -0
- package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
- package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
- package/python/lib/python3.13/encodings/johab.py +39 -0
- package/python/lib/python3.13/encodings/koi8_r.py +307 -0
- package/python/lib/python3.13/encodings/koi8_t.py +308 -0
- package/python/lib/python3.13/encodings/koi8_u.py +307 -0
- package/python/lib/python3.13/encodings/kz1048.py +307 -0
- package/python/lib/python3.13/encodings/latin_1.py +50 -0
- package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
- package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
- package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
- package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
- package/python/lib/python3.13/encodings/mac_greek.py +307 -0
- package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
- package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
- package/python/lib/python3.13/encodings/mac_roman.py +307 -0
- package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
- package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
- package/python/lib/python3.13/encodings/mbcs.py +47 -0
- package/python/lib/python3.13/encodings/oem.py +41 -0
- package/python/lib/python3.13/encodings/palmos.py +308 -0
- package/python/lib/python3.13/encodings/ptcp154.py +312 -0
- package/python/lib/python3.13/encodings/punycode.py +253 -0
- package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
- package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/rot_13.py +113 -0
- package/python/lib/python3.13/encodings/shift_jis.py +39 -0
- package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/tis_620.py +307 -0
- package/python/lib/python3.13/encodings/undefined.py +49 -0
- package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/utf_16.py +155 -0
- package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
- package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
- package/python/lib/python3.13/encodings/utf_32.py +150 -0
- package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
- package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
- package/python/lib/python3.13/encodings/utf_7.py +38 -0
- package/python/lib/python3.13/encodings/utf_8.py +42 -0
- package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
- package/python/lib/python3.13/encodings/uu_codec.py +103 -0
- package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
- package/python/lib/python3.13/enum.py +2183 -0
- package/python/lib/python3.13/filecmp.py +320 -0
- package/python/lib/python3.13/fileinput.py +442 -0
- package/python/lib/python3.13/fnmatch.py +192 -0
- package/python/lib/python3.13/fractions.py +1043 -0
- package/python/lib/python3.13/ftplib.py +975 -0
- package/python/lib/python3.13/functools.py +1036 -0
- package/python/lib/python3.13/genericpath.py +200 -0
- package/python/lib/python3.13/getopt.py +215 -0
- package/python/lib/python3.13/getpass.py +192 -0
- package/python/lib/python3.13/gettext.py +657 -0
- package/python/lib/python3.13/glob.py +572 -0
- package/python/lib/python3.13/graphlib.py +250 -0
- package/python/lib/python3.13/gzip.py +693 -0
- package/python/lib/python3.13/hashlib.py +255 -0
- package/python/lib/python3.13/heapq.py +603 -0
- package/python/lib/python3.13/hmac.py +220 -0
- package/python/lib/python3.13/html/__init__.py +132 -0
- package/python/lib/python3.13/html/entities.py +2513 -0
- package/python/lib/python3.13/html/parser.py +583 -0
- package/python/lib/python3.13/http/__init__.py +202 -0
- package/python/lib/python3.13/http/client.py +1598 -0
- package/python/lib/python3.13/http/cookiejar.py +2122 -0
- package/python/lib/python3.13/http/cookies.py +635 -0
- package/python/lib/python3.13/http/server.py +1355 -0
- package/python/lib/python3.13/imaplib.py +1769 -0
- package/python/lib/python3.13/importlib/__init__.py +136 -0
- package/python/lib/python3.13/importlib/_abc.py +39 -0
- package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
- package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
- package/python/lib/python3.13/importlib/abc.py +243 -0
- package/python/lib/python3.13/importlib/machinery.py +21 -0
- package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
- package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
- package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
- package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
- package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
- package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
- package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
- package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
- package/python/lib/python3.13/importlib/readers.py +12 -0
- package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
- package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
- package/python/lib/python3.13/importlib/resources/_common.py +211 -0
- package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
- package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
- package/python/lib/python3.13/importlib/resources/abc.py +173 -0
- package/python/lib/python3.13/importlib/resources/readers.py +203 -0
- package/python/lib/python3.13/importlib/resources/simple.py +106 -0
- package/python/lib/python3.13/importlib/simple.py +14 -0
- package/python/lib/python3.13/importlib/util.py +274 -0
- package/python/lib/python3.13/inspect.py +3479 -0
- package/python/lib/python3.13/io.py +99 -0
- package/python/lib/python3.13/ipaddress.py +2440 -0
- package/python/lib/python3.13/json/__init__.py +365 -0
- package/python/lib/python3.13/json/decoder.py +364 -0
- package/python/lib/python3.13/json/encoder.py +446 -0
- package/python/lib/python3.13/json/scanner.py +73 -0
- package/python/lib/python3.13/json/tool.py +90 -0
- package/python/lib/python3.13/keyword.py +64 -0
- package/python/lib/python3.13/lib-dynload/.empty +0 -0
- package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
- package/python/lib/python3.13/linecache.py +236 -0
- package/python/lib/python3.13/locale.py +1987 -0
- package/python/lib/python3.13/logging/__init__.py +2330 -0
- package/python/lib/python3.13/logging/config.py +1080 -0
- package/python/lib/python3.13/logging/handlers.py +1629 -0
- package/python/lib/python3.13/lzma.py +364 -0
- package/python/lib/python3.13/mailbox.py +2219 -0
- package/python/lib/python3.13/mimetypes.py +679 -0
- package/python/lib/python3.13/modulefinder.py +671 -0
- package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
- package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
- package/python/lib/python3.13/multiprocessing/context.py +383 -0
- package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
- package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
- package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
- package/python/lib/python3.13/multiprocessing/heap.py +337 -0
- package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
- package/python/lib/python3.13/multiprocessing/pool.py +957 -0
- package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
- package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
- package/python/lib/python3.13/multiprocessing/process.py +436 -0
- package/python/lib/python3.13/multiprocessing/queues.py +399 -0
- package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
- package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
- package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
- package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
- package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
- package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
- package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
- package/python/lib/python3.13/multiprocessing/util.py +562 -0
- package/python/lib/python3.13/netrc.py +199 -0
- package/python/lib/python3.13/ntpath.py +872 -0
- package/python/lib/python3.13/nturl2path.py +69 -0
- package/python/lib/python3.13/numbers.py +427 -0
- package/python/lib/python3.13/opcode.py +115 -0
- package/python/lib/python3.13/operator.py +467 -0
- package/python/lib/python3.13/optparse.py +1681 -0
- package/python/lib/python3.13/os.py +1184 -0
- package/python/lib/python3.13/pathlib/__init__.py +12 -0
- package/python/lib/python3.13/pathlib/_abc.py +930 -0
- package/python/lib/python3.13/pathlib/_local.py +861 -0
- package/python/lib/python3.13/pdb.py +2550 -0
- package/python/lib/python3.13/pickle.py +1860 -0
- package/python/lib/python3.13/pickletools.py +2904 -0
- package/python/lib/python3.13/pkgutil.py +529 -0
- package/python/lib/python3.13/platform.py +1454 -0
- package/python/lib/python3.13/plistlib.py +948 -0
- package/python/lib/python3.13/poplib.py +477 -0
- package/python/lib/python3.13/posixpath.py +578 -0
- package/python/lib/python3.13/pprint.py +658 -0
- package/python/lib/python3.13/profile.py +616 -0
- package/python/lib/python3.13/pstats.py +778 -0
- package/python/lib/python3.13/pty.py +211 -0
- package/python/lib/python3.13/py_compile.py +212 -0
- package/python/lib/python3.13/pyclbr.py +314 -0
- package/python/lib/python3.13/pydoc.py +2861 -0
- package/python/lib/python3.13/queue.py +383 -0
- package/python/lib/python3.13/quopri.py +237 -0
- package/python/lib/python3.13/random.py +1078 -0
- package/python/lib/python3.13/re/__init__.py +428 -0
- package/python/lib/python3.13/re/_casefix.py +106 -0
- package/python/lib/python3.13/re/_compiler.py +768 -0
- package/python/lib/python3.13/re/_constants.py +222 -0
- package/python/lib/python3.13/re/_parser.py +1081 -0
- package/python/lib/python3.13/reprlib.py +230 -0
- package/python/lib/python3.13/rlcompleter.py +222 -0
- package/python/lib/python3.13/runpy.py +326 -0
- package/python/lib/python3.13/sched.py +167 -0
- package/python/lib/python3.13/secrets.py +71 -0
- package/python/lib/python3.13/selectors.py +603 -0
- package/python/lib/python3.13/shelve.py +250 -0
- package/python/lib/python3.13/shlex.py +345 -0
- package/python/lib/python3.13/shutil.py +1569 -0
- package/python/lib/python3.13/signal.py +94 -0
- package/python/lib/python3.13/site.py +773 -0
- package/python/lib/python3.13/smtplib.py +1123 -0
- package/python/lib/python3.13/socket.py +988 -0
- package/python/lib/python3.13/socketserver.py +863 -0
- package/python/lib/python3.13/sqlite3/__init__.py +70 -0
- package/python/lib/python3.13/sqlite3/__main__.py +139 -0
- package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
- package/python/lib/python3.13/sqlite3/dump.py +118 -0
- package/python/lib/python3.13/sre_compile.py +7 -0
- package/python/lib/python3.13/sre_constants.py +7 -0
- package/python/lib/python3.13/sre_parse.py +7 -0
- package/python/lib/python3.13/ssl.py +1541 -0
- package/python/lib/python3.13/stat.py +212 -0
- package/python/lib/python3.13/statistics.py +1817 -0
- package/python/lib/python3.13/string.py +314 -0
- package/python/lib/python3.13/stringprep.py +272 -0
- package/python/lib/python3.13/struct.py +15 -0
- package/python/lib/python3.13/subprocess.py +2258 -0
- package/python/lib/python3.13/symtable.py +414 -0
- package/python/lib/python3.13/sysconfig/__init__.py +734 -0
- package/python/lib/python3.13/sysconfig/__main__.py +248 -0
- package/python/lib/python3.13/tabnanny.py +340 -0
- package/python/lib/python3.13/tarfile.py +3136 -0
- package/python/lib/python3.13/tempfile.py +958 -0
- package/python/lib/python3.13/textwrap.py +497 -0
- package/python/lib/python3.13/this.py +28 -0
- package/python/lib/python3.13/threading.py +1602 -0
- package/python/lib/python3.13/timeit.py +381 -0
- package/python/lib/python3.13/token.py +141 -0
- package/python/lib/python3.13/tokenize.py +592 -0
- package/python/lib/python3.13/tomllib/__init__.py +10 -0
- package/python/lib/python3.13/tomllib/_parser.py +703 -0
- package/python/lib/python3.13/tomllib/_re.py +107 -0
- package/python/lib/python3.13/tomllib/_types.py +10 -0
- package/python/lib/python3.13/tomllib/mypy.ini +15 -0
- package/python/lib/python3.13/trace.py +754 -0
- package/python/lib/python3.13/traceback.py +1639 -0
- package/python/lib/python3.13/tracemalloc.py +560 -0
- package/python/lib/python3.13/tty.py +73 -0
- package/python/lib/python3.13/types.py +346 -0
- package/python/lib/python3.13/typing.py +3846 -0
- package/python/lib/python3.13/unittest/__init__.py +80 -0
- package/python/lib/python3.13/unittest/__main__.py +18 -0
- package/python/lib/python3.13/unittest/_log.py +86 -0
- package/python/lib/python3.13/unittest/async_case.py +146 -0
- package/python/lib/python3.13/unittest/case.py +1478 -0
- package/python/lib/python3.13/unittest/loader.py +460 -0
- package/python/lib/python3.13/unittest/main.py +280 -0
- package/python/lib/python3.13/unittest/mock.py +3189 -0
- package/python/lib/python3.13/unittest/result.py +256 -0
- package/python/lib/python3.13/unittest/runner.py +292 -0
- package/python/lib/python3.13/unittest/signals.py +71 -0
- package/python/lib/python3.13/unittest/suite.py +379 -0
- package/python/lib/python3.13/unittest/util.py +170 -0
- package/python/lib/python3.13/urllib/__init__.py +0 -0
- package/python/lib/python3.13/urllib/error.py +74 -0
- package/python/lib/python3.13/urllib/parse.py +1264 -0
- package/python/lib/python3.13/urllib/request.py +2796 -0
- package/python/lib/python3.13/urllib/response.py +84 -0
- package/python/lib/python3.13/urllib/robotparser.py +363 -0
- package/python/lib/python3.13/uuid.py +784 -0
- package/python/lib/python3.13/warnings.py +735 -0
- package/python/lib/python3.13/wave.py +665 -0
- package/python/lib/python3.13/weakref.py +674 -0
- package/python/lib/python3.13/webbrowser.py +724 -0
- package/python/lib/python3.13/wsgiref/__init__.py +25 -0
- package/python/lib/python3.13/wsgiref/handlers.py +575 -0
- package/python/lib/python3.13/wsgiref/headers.py +192 -0
- package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
- package/python/lib/python3.13/wsgiref/types.py +54 -0
- package/python/lib/python3.13/wsgiref/util.py +159 -0
- package/python/lib/python3.13/wsgiref/validate.py +438 -0
- package/python/lib/python3.13/xml/__init__.py +20 -0
- package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
- package/python/lib/python3.13/xml/dom/__init__.py +140 -0
- package/python/lib/python3.13/xml/dom/domreg.py +99 -0
- package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
- package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
- package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
- package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
- package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
- package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
- package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
- package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
- package/python/lib/python3.13/xml/etree/__init__.py +33 -0
- package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
- package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
- package/python/lib/python3.13/xml/parsers/expat.py +8 -0
- package/python/lib/python3.13/xml/sax/__init__.py +94 -0
- package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
- package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
- package/python/lib/python3.13/xml/sax/handler.py +387 -0
- package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
- package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
- package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
- package/python/lib/python3.13/xmlrpc/client.py +1503 -0
- package/python/lib/python3.13/xmlrpc/server.py +1002 -0
- package/python/lib/python3.13/zipapp.py +229 -0
- package/python/lib/python3.13/zipfile/__init__.py +2391 -0
- package/python/lib/python3.13/zipfile/__main__.py +4 -0
- package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
- package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
- package/python/lib/python3.13/zipimport.py +803 -0
- package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
- package/python/lib/python3.13/zoneinfo/_common.py +172 -0
- package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
- package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
- package/python/licenses/LICENSE.bdb.txt +126 -0
- package/python/licenses/LICENSE.bzip2.txt +37 -0
- package/python/licenses/LICENSE.cpython.txt +771 -0
- package/python/licenses/LICENSE.expat.txt +21 -0
- package/python/licenses/LICENSE.libX11.txt +942 -0
- package/python/licenses/LICENSE.libXau.txt +21 -0
- package/python/licenses/LICENSE.libedit.txt +29 -0
- package/python/licenses/LICENSE.libffi.txt +21 -0
- package/python/licenses/LICENSE.liblzma.txt +13 -0
- package/python/licenses/LICENSE.libuuid.txt +27 -0
- package/python/licenses/LICENSE.libxcb.txt +30 -0
- package/python/licenses/LICENSE.mpdecimal.txt +24 -0
- package/python/licenses/LICENSE.ncurses.txt +29 -0
- package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
- package/python/licenses/LICENSE.openssl-3.txt +177 -0
- package/python/licenses/LICENSE.sqlite.txt +23 -0
- package/python/licenses/LICENSE.tcl.txt +40 -0
- package/python/licenses/LICENSE.tix.txt +54 -0
- package/python/licenses/LICENSE.zlib.txt +21 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
__all__ = [
|
|
2
|
+
"ZoneInfo",
|
|
3
|
+
"reset_tzpath",
|
|
4
|
+
"available_timezones",
|
|
5
|
+
"TZPATH",
|
|
6
|
+
"ZoneInfoNotFoundError",
|
|
7
|
+
"InvalidTZPathWarning",
|
|
8
|
+
]
|
|
9
|
+
|
|
10
|
+
from . import _tzpath
|
|
11
|
+
from ._common import ZoneInfoNotFoundError
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
from _zoneinfo import ZoneInfo
|
|
15
|
+
except (ImportError, AttributeError): # pragma: nocover
|
|
16
|
+
# AttributeError: module 'datetime' has no attribute 'datetime_CAPI'.
|
|
17
|
+
# This happens when the '_datetime' module is not available and the
|
|
18
|
+
# pure Python implementation is used instead.
|
|
19
|
+
from ._zoneinfo import ZoneInfo
|
|
20
|
+
|
|
21
|
+
reset_tzpath = _tzpath.reset_tzpath
|
|
22
|
+
available_timezones = _tzpath.available_timezones
|
|
23
|
+
InvalidTZPathWarning = _tzpath.InvalidTZPathWarning
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def __getattr__(name):
|
|
27
|
+
if name == "TZPATH":
|
|
28
|
+
return _tzpath.TZPATH
|
|
29
|
+
else:
|
|
30
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def __dir__():
|
|
34
|
+
return sorted(list(globals()) + ["TZPATH"])
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import struct
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def load_tzdata(key):
|
|
5
|
+
from importlib import resources
|
|
6
|
+
|
|
7
|
+
components = key.split("/")
|
|
8
|
+
package_name = ".".join(["tzdata.zoneinfo"] + components[:-1])
|
|
9
|
+
resource_name = components[-1]
|
|
10
|
+
|
|
11
|
+
try:
|
|
12
|
+
path = resources.files(package_name).joinpath(resource_name)
|
|
13
|
+
# gh-85702: Prevent PermissionError on Windows
|
|
14
|
+
if path.is_dir():
|
|
15
|
+
raise IsADirectoryError
|
|
16
|
+
return path.open("rb")
|
|
17
|
+
except (ImportError, FileNotFoundError, UnicodeEncodeError, IsADirectoryError):
|
|
18
|
+
# There are four types of exception that can be raised that all amount
|
|
19
|
+
# to "we cannot find this key":
|
|
20
|
+
#
|
|
21
|
+
# ImportError: If package_name doesn't exist (e.g. if tzdata is not
|
|
22
|
+
# installed, or if there's an error in the folder name like
|
|
23
|
+
# Amrica/New_York)
|
|
24
|
+
# FileNotFoundError: If resource_name doesn't exist in the package
|
|
25
|
+
# (e.g. Europe/Krasnoy)
|
|
26
|
+
# UnicodeEncodeError: If package_name or resource_name are not UTF-8,
|
|
27
|
+
# such as keys containing a surrogate character.
|
|
28
|
+
# IsADirectoryError: If package_name without a resource_name specified.
|
|
29
|
+
raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def load_data(fobj):
|
|
33
|
+
header = _TZifHeader.from_file(fobj)
|
|
34
|
+
|
|
35
|
+
if header.version == 1:
|
|
36
|
+
time_size = 4
|
|
37
|
+
time_type = "l"
|
|
38
|
+
else:
|
|
39
|
+
# Version 2+ has 64-bit integer transition times
|
|
40
|
+
time_size = 8
|
|
41
|
+
time_type = "q"
|
|
42
|
+
|
|
43
|
+
# Version 2+ also starts with a Version 1 header and data, which
|
|
44
|
+
# we need to skip now
|
|
45
|
+
skip_bytes = (
|
|
46
|
+
header.timecnt * 5 # Transition times and types
|
|
47
|
+
+ header.typecnt * 6 # Local time type records
|
|
48
|
+
+ header.charcnt # Time zone designations
|
|
49
|
+
+ header.leapcnt * 8 # Leap second records
|
|
50
|
+
+ header.isstdcnt # Standard/wall indicators
|
|
51
|
+
+ header.isutcnt # UT/local indicators
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
fobj.seek(skip_bytes, 1)
|
|
55
|
+
|
|
56
|
+
# Now we need to read the second header, which is not the same
|
|
57
|
+
# as the first
|
|
58
|
+
header = _TZifHeader.from_file(fobj)
|
|
59
|
+
|
|
60
|
+
typecnt = header.typecnt
|
|
61
|
+
timecnt = header.timecnt
|
|
62
|
+
charcnt = header.charcnt
|
|
63
|
+
|
|
64
|
+
# The data portion starts with timecnt transitions and indices
|
|
65
|
+
if timecnt:
|
|
66
|
+
trans_list_utc = struct.unpack(
|
|
67
|
+
f">{timecnt}{time_type}", fobj.read(timecnt * time_size)
|
|
68
|
+
)
|
|
69
|
+
trans_idx = struct.unpack(f">{timecnt}B", fobj.read(timecnt))
|
|
70
|
+
|
|
71
|
+
if max(trans_idx) >= typecnt:
|
|
72
|
+
raise ValueError("Invalid transition index found while reading TZif: "
|
|
73
|
+
f"{max(trans_idx)}")
|
|
74
|
+
else:
|
|
75
|
+
trans_list_utc = ()
|
|
76
|
+
trans_idx = ()
|
|
77
|
+
|
|
78
|
+
# Read the ttinfo struct, (utoff, isdst, abbrind)
|
|
79
|
+
if typecnt:
|
|
80
|
+
utcoff, isdst, abbrind = zip(
|
|
81
|
+
*(struct.unpack(">lbb", fobj.read(6)) for i in range(typecnt))
|
|
82
|
+
)
|
|
83
|
+
else:
|
|
84
|
+
utcoff = ()
|
|
85
|
+
isdst = ()
|
|
86
|
+
abbrind = ()
|
|
87
|
+
|
|
88
|
+
# Now read the abbreviations. They are null-terminated strings, indexed
|
|
89
|
+
# not by position in the array but by position in the unsplit
|
|
90
|
+
# abbreviation string. I suppose this makes more sense in C, which uses
|
|
91
|
+
# null to terminate the strings, but it's inconvenient here...
|
|
92
|
+
abbr_vals = {}
|
|
93
|
+
abbr_chars = fobj.read(charcnt)
|
|
94
|
+
|
|
95
|
+
def get_abbr(idx):
|
|
96
|
+
# Gets a string starting at idx and running until the next \x00
|
|
97
|
+
#
|
|
98
|
+
# We cannot pre-populate abbr_vals by splitting on \x00 because there
|
|
99
|
+
# are some zones that use subsets of longer abbreviations, like so:
|
|
100
|
+
#
|
|
101
|
+
# LMT\x00AHST\x00HDT\x00
|
|
102
|
+
#
|
|
103
|
+
# Where the idx to abbr mapping should be:
|
|
104
|
+
#
|
|
105
|
+
# {0: "LMT", 4: "AHST", 5: "HST", 9: "HDT"}
|
|
106
|
+
if idx not in abbr_vals:
|
|
107
|
+
span_end = abbr_chars.find(b"\x00", idx)
|
|
108
|
+
abbr_vals[idx] = abbr_chars[idx:span_end].decode()
|
|
109
|
+
|
|
110
|
+
return abbr_vals[idx]
|
|
111
|
+
|
|
112
|
+
abbr = tuple(get_abbr(idx) for idx in abbrind)
|
|
113
|
+
|
|
114
|
+
# The remainder of the file consists of leap seconds (currently unused) and
|
|
115
|
+
# the standard/wall and ut/local indicators, which are metadata we don't need.
|
|
116
|
+
# In version 2 files, we need to skip the unnecessary data to get at the TZ string:
|
|
117
|
+
if header.version >= 2:
|
|
118
|
+
# Each leap second record has size (time_size + 4)
|
|
119
|
+
skip_bytes = header.isutcnt + header.isstdcnt + header.leapcnt * 12
|
|
120
|
+
fobj.seek(skip_bytes, 1)
|
|
121
|
+
|
|
122
|
+
c = fobj.read(1) # Should be \n
|
|
123
|
+
assert c == b"\n", c
|
|
124
|
+
|
|
125
|
+
line = fobj.readline()
|
|
126
|
+
if not line.endswith(b"\n"):
|
|
127
|
+
raise ValueError("Invalid TZif file: unexpected end of file")
|
|
128
|
+
tz_str = line.rstrip(b"\n")
|
|
129
|
+
else:
|
|
130
|
+
tz_str = None
|
|
131
|
+
|
|
132
|
+
return trans_idx, trans_list_utc, utcoff, isdst, abbr, tz_str
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class _TZifHeader:
|
|
136
|
+
__slots__ = [
|
|
137
|
+
"version",
|
|
138
|
+
"isutcnt",
|
|
139
|
+
"isstdcnt",
|
|
140
|
+
"leapcnt",
|
|
141
|
+
"timecnt",
|
|
142
|
+
"typecnt",
|
|
143
|
+
"charcnt",
|
|
144
|
+
]
|
|
145
|
+
|
|
146
|
+
def __init__(self, *args):
|
|
147
|
+
for attr, val in zip(self.__slots__, args, strict=True):
|
|
148
|
+
setattr(self, attr, val)
|
|
149
|
+
|
|
150
|
+
@classmethod
|
|
151
|
+
def from_file(cls, stream):
|
|
152
|
+
# The header starts with a 4-byte "magic" value
|
|
153
|
+
if stream.read(4) != b"TZif":
|
|
154
|
+
raise ValueError("Invalid TZif file: magic not found")
|
|
155
|
+
|
|
156
|
+
_version = stream.read(1)
|
|
157
|
+
if _version == b"\x00":
|
|
158
|
+
version = 1
|
|
159
|
+
else:
|
|
160
|
+
version = int(_version)
|
|
161
|
+
stream.read(15)
|
|
162
|
+
|
|
163
|
+
args = (version,)
|
|
164
|
+
|
|
165
|
+
# Slots are defined in the order that the bytes are arranged
|
|
166
|
+
args = args + struct.unpack(">6l", stream.read(24))
|
|
167
|
+
|
|
168
|
+
return cls(*args)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class ZoneInfoNotFoundError(KeyError):
|
|
172
|
+
"""Exception raised when a ZoneInfo key is not found."""
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sysconfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def _reset_tzpath(to=None, stacklevel=4):
|
|
6
|
+
global TZPATH
|
|
7
|
+
|
|
8
|
+
tzpaths = to
|
|
9
|
+
if tzpaths is not None:
|
|
10
|
+
if isinstance(tzpaths, (str, bytes)):
|
|
11
|
+
raise TypeError(
|
|
12
|
+
f"tzpaths must be a list or tuple, "
|
|
13
|
+
+ f"not {type(tzpaths)}: {tzpaths!r}"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
tzpaths = [os.fspath(p) for p in tzpaths]
|
|
17
|
+
if not all(isinstance(p, str) for p in tzpaths):
|
|
18
|
+
raise TypeError(
|
|
19
|
+
"All elements of a tzpath sequence must be strings or "
|
|
20
|
+
"os.PathLike objects which convert to strings."
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
if not all(map(os.path.isabs, tzpaths)):
|
|
24
|
+
raise ValueError(_get_invalid_paths_message(tzpaths))
|
|
25
|
+
base_tzpath = tzpaths
|
|
26
|
+
else:
|
|
27
|
+
env_var = os.environ.get("PYTHONTZPATH", None)
|
|
28
|
+
if env_var is None:
|
|
29
|
+
env_var = sysconfig.get_config_var("TZPATH")
|
|
30
|
+
base_tzpath = _parse_python_tzpath(env_var, stacklevel)
|
|
31
|
+
|
|
32
|
+
TZPATH = tuple(base_tzpath)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def reset_tzpath(to=None):
|
|
36
|
+
"""Reset global TZPATH."""
|
|
37
|
+
# We need `_reset_tzpath` helper function because it produces a warning,
|
|
38
|
+
# it is used as both a module-level call and a public API.
|
|
39
|
+
# This is how we equalize the stacklevel for both calls.
|
|
40
|
+
_reset_tzpath(to)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _parse_python_tzpath(env_var, stacklevel):
|
|
44
|
+
if not env_var:
|
|
45
|
+
return ()
|
|
46
|
+
|
|
47
|
+
raw_tzpath = env_var.split(os.pathsep)
|
|
48
|
+
new_tzpath = tuple(filter(os.path.isabs, raw_tzpath))
|
|
49
|
+
|
|
50
|
+
# If anything has been filtered out, we will warn about it
|
|
51
|
+
if len(new_tzpath) != len(raw_tzpath):
|
|
52
|
+
import warnings
|
|
53
|
+
|
|
54
|
+
msg = _get_invalid_paths_message(raw_tzpath)
|
|
55
|
+
|
|
56
|
+
warnings.warn(
|
|
57
|
+
"Invalid paths specified in PYTHONTZPATH environment variable. "
|
|
58
|
+
+ msg,
|
|
59
|
+
InvalidTZPathWarning,
|
|
60
|
+
stacklevel=stacklevel,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
return new_tzpath
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _get_invalid_paths_message(tzpaths):
|
|
67
|
+
invalid_paths = (path for path in tzpaths if not os.path.isabs(path))
|
|
68
|
+
|
|
69
|
+
prefix = "\n "
|
|
70
|
+
indented_str = prefix + prefix.join(invalid_paths)
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
"Paths should be absolute but found the following relative paths:"
|
|
74
|
+
+ indented_str
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def find_tzfile(key):
|
|
79
|
+
"""Retrieve the path to a TZif file from a key."""
|
|
80
|
+
_validate_tzfile_path(key)
|
|
81
|
+
for search_path in TZPATH:
|
|
82
|
+
filepath = os.path.join(search_path, key)
|
|
83
|
+
if os.path.isfile(filepath):
|
|
84
|
+
return filepath
|
|
85
|
+
|
|
86
|
+
return None
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
_TEST_PATH = os.path.normpath(os.path.join("_", "_"))[:-1]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _validate_tzfile_path(path, _base=_TEST_PATH):
|
|
93
|
+
if os.path.isabs(path):
|
|
94
|
+
raise ValueError(
|
|
95
|
+
f"ZoneInfo keys may not be absolute paths, got: {path}"
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
# We only care about the kinds of path normalizations that would change the
|
|
99
|
+
# length of the key - e.g. a/../b -> a/b, or a/b/ -> a/b. On Windows,
|
|
100
|
+
# normpath will also change from a/b to a\b, but that would still preserve
|
|
101
|
+
# the length.
|
|
102
|
+
new_path = os.path.normpath(path)
|
|
103
|
+
if len(new_path) != len(path):
|
|
104
|
+
raise ValueError(
|
|
105
|
+
f"ZoneInfo keys must be normalized relative paths, got: {path}"
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
resolved = os.path.normpath(os.path.join(_base, new_path))
|
|
109
|
+
if not resolved.startswith(_base):
|
|
110
|
+
raise ValueError(
|
|
111
|
+
f"ZoneInfo keys must refer to subdirectories of TZPATH, got: {path}"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
del _TEST_PATH
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def available_timezones():
|
|
119
|
+
"""Returns a set containing all available time zones.
|
|
120
|
+
|
|
121
|
+
.. caution::
|
|
122
|
+
|
|
123
|
+
This may attempt to open a large number of files, since the best way to
|
|
124
|
+
determine if a given file on the time zone search path is to open it
|
|
125
|
+
and check for the "magic string" at the beginning.
|
|
126
|
+
"""
|
|
127
|
+
from importlib import resources
|
|
128
|
+
|
|
129
|
+
valid_zones = set()
|
|
130
|
+
|
|
131
|
+
# Start with loading from the tzdata package if it exists: this has a
|
|
132
|
+
# pre-assembled list of zones that only requires opening one file.
|
|
133
|
+
try:
|
|
134
|
+
zones_file = resources.files("tzdata").joinpath("zones")
|
|
135
|
+
with zones_file.open("r", encoding="utf-8") as f:
|
|
136
|
+
for zone in f:
|
|
137
|
+
zone = zone.strip()
|
|
138
|
+
if zone:
|
|
139
|
+
valid_zones.add(zone)
|
|
140
|
+
except (ImportError, FileNotFoundError):
|
|
141
|
+
pass
|
|
142
|
+
|
|
143
|
+
def valid_key(fpath):
|
|
144
|
+
try:
|
|
145
|
+
with open(fpath, "rb") as f:
|
|
146
|
+
return f.read(4) == b"TZif"
|
|
147
|
+
except Exception: # pragma: nocover
|
|
148
|
+
return False
|
|
149
|
+
|
|
150
|
+
for tz_root in TZPATH:
|
|
151
|
+
if not os.path.exists(tz_root):
|
|
152
|
+
continue
|
|
153
|
+
|
|
154
|
+
for root, dirnames, files in os.walk(tz_root):
|
|
155
|
+
if root == tz_root:
|
|
156
|
+
# right/ and posix/ are special directories and shouldn't be
|
|
157
|
+
# included in the output of available zones
|
|
158
|
+
if "right" in dirnames:
|
|
159
|
+
dirnames.remove("right")
|
|
160
|
+
if "posix" in dirnames:
|
|
161
|
+
dirnames.remove("posix")
|
|
162
|
+
|
|
163
|
+
for file in files:
|
|
164
|
+
fpath = os.path.join(root, file)
|
|
165
|
+
|
|
166
|
+
key = os.path.relpath(fpath, start=tz_root)
|
|
167
|
+
if os.sep != "/": # pragma: nocover
|
|
168
|
+
key = key.replace(os.sep, "/")
|
|
169
|
+
|
|
170
|
+
if not key or key in valid_zones:
|
|
171
|
+
continue
|
|
172
|
+
|
|
173
|
+
if valid_key(fpath):
|
|
174
|
+
valid_zones.add(key)
|
|
175
|
+
|
|
176
|
+
if "posixrules" in valid_zones:
|
|
177
|
+
# posixrules is a special symlink-only time zone where it exists, it
|
|
178
|
+
# should not be included in the output
|
|
179
|
+
valid_zones.remove("posixrules")
|
|
180
|
+
|
|
181
|
+
return valid_zones
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class InvalidTZPathWarning(RuntimeWarning):
|
|
185
|
+
"""Warning raised if an invalid path is specified in PYTHONTZPATH."""
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
TZPATH = ()
|
|
189
|
+
_reset_tzpath(stacklevel=5)
|