@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,203 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import collections
|
|
4
|
+
import contextlib
|
|
5
|
+
import itertools
|
|
6
|
+
import pathlib
|
|
7
|
+
import operator
|
|
8
|
+
import re
|
|
9
|
+
import warnings
|
|
10
|
+
import zipfile
|
|
11
|
+
from collections.abc import Iterator
|
|
12
|
+
|
|
13
|
+
from . import abc
|
|
14
|
+
|
|
15
|
+
from ._itertools import only
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def remove_duplicates(items):
|
|
19
|
+
return iter(collections.OrderedDict.fromkeys(items))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class FileReader(abc.TraversableResources):
|
|
23
|
+
def __init__(self, loader):
|
|
24
|
+
self.path = pathlib.Path(loader.path).parent
|
|
25
|
+
|
|
26
|
+
def resource_path(self, resource):
|
|
27
|
+
"""
|
|
28
|
+
Return the file system path to prevent
|
|
29
|
+
`resources.path()` from creating a temporary
|
|
30
|
+
copy.
|
|
31
|
+
"""
|
|
32
|
+
return str(self.path.joinpath(resource))
|
|
33
|
+
|
|
34
|
+
def files(self):
|
|
35
|
+
return self.path
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class ZipReader(abc.TraversableResources):
|
|
39
|
+
def __init__(self, loader, module):
|
|
40
|
+
self.prefix = loader.prefix.replace('\\', '/')
|
|
41
|
+
if loader.is_package(module):
|
|
42
|
+
_, _, name = module.rpartition('.')
|
|
43
|
+
self.prefix += name + '/'
|
|
44
|
+
self.archive = loader.archive
|
|
45
|
+
|
|
46
|
+
def open_resource(self, resource):
|
|
47
|
+
try:
|
|
48
|
+
return super().open_resource(resource)
|
|
49
|
+
except KeyError as exc:
|
|
50
|
+
raise FileNotFoundError(exc.args[0])
|
|
51
|
+
|
|
52
|
+
def is_resource(self, path):
|
|
53
|
+
"""
|
|
54
|
+
Workaround for `zipfile.Path.is_file` returning true
|
|
55
|
+
for non-existent paths.
|
|
56
|
+
"""
|
|
57
|
+
target = self.files().joinpath(path)
|
|
58
|
+
return target.is_file() and target.exists()
|
|
59
|
+
|
|
60
|
+
def files(self):
|
|
61
|
+
return zipfile.Path(self.archive, self.prefix)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class MultiplexedPath(abc.Traversable):
|
|
65
|
+
"""
|
|
66
|
+
Given a series of Traversable objects, implement a merged
|
|
67
|
+
version of the interface across all objects. Useful for
|
|
68
|
+
namespace packages which may be multihomed at a single
|
|
69
|
+
name.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
def __init__(self, *paths):
|
|
73
|
+
self._paths = list(map(_ensure_traversable, remove_duplicates(paths)))
|
|
74
|
+
if not self._paths:
|
|
75
|
+
message = 'MultiplexedPath must contain at least one path'
|
|
76
|
+
raise FileNotFoundError(message)
|
|
77
|
+
if not all(path.is_dir() for path in self._paths):
|
|
78
|
+
raise NotADirectoryError('MultiplexedPath only supports directories')
|
|
79
|
+
|
|
80
|
+
def iterdir(self):
|
|
81
|
+
children = (child for path in self._paths for child in path.iterdir())
|
|
82
|
+
by_name = operator.attrgetter('name')
|
|
83
|
+
groups = itertools.groupby(sorted(children, key=by_name), key=by_name)
|
|
84
|
+
return map(self._follow, (locs for name, locs in groups))
|
|
85
|
+
|
|
86
|
+
def read_bytes(self):
|
|
87
|
+
raise FileNotFoundError(f'{self} is not a file')
|
|
88
|
+
|
|
89
|
+
def read_text(self, *args, **kwargs):
|
|
90
|
+
raise FileNotFoundError(f'{self} is not a file')
|
|
91
|
+
|
|
92
|
+
def is_dir(self):
|
|
93
|
+
return True
|
|
94
|
+
|
|
95
|
+
def is_file(self):
|
|
96
|
+
return False
|
|
97
|
+
|
|
98
|
+
def joinpath(self, *descendants):
|
|
99
|
+
try:
|
|
100
|
+
return super().joinpath(*descendants)
|
|
101
|
+
except abc.TraversalError:
|
|
102
|
+
# One of the paths did not resolve (a directory does not exist).
|
|
103
|
+
# Just return something that will not exist.
|
|
104
|
+
return self._paths[0].joinpath(*descendants)
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def _follow(cls, children):
|
|
108
|
+
"""
|
|
109
|
+
Construct a MultiplexedPath if needed.
|
|
110
|
+
|
|
111
|
+
If children contains a sole element, return it.
|
|
112
|
+
Otherwise, return a MultiplexedPath of the items.
|
|
113
|
+
Unless one of the items is not a Directory, then return the first.
|
|
114
|
+
"""
|
|
115
|
+
subdirs, one_dir, one_file = itertools.tee(children, 3)
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
return only(one_dir)
|
|
119
|
+
except ValueError:
|
|
120
|
+
try:
|
|
121
|
+
return cls(*subdirs)
|
|
122
|
+
except NotADirectoryError:
|
|
123
|
+
return next(one_file)
|
|
124
|
+
|
|
125
|
+
def open(self, *args, **kwargs):
|
|
126
|
+
raise FileNotFoundError(f'{self} is not a file')
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def name(self):
|
|
130
|
+
return self._paths[0].name
|
|
131
|
+
|
|
132
|
+
def __repr__(self):
|
|
133
|
+
paths = ', '.join(f"'{path}'" for path in self._paths)
|
|
134
|
+
return f'MultiplexedPath({paths})'
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class NamespaceReader(abc.TraversableResources):
|
|
138
|
+
def __init__(self, namespace_path):
|
|
139
|
+
if 'NamespacePath' not in str(namespace_path):
|
|
140
|
+
raise ValueError('Invalid path')
|
|
141
|
+
self.path = MultiplexedPath(*filter(bool, map(self._resolve, namespace_path)))
|
|
142
|
+
|
|
143
|
+
@classmethod
|
|
144
|
+
def _resolve(cls, path_str) -> abc.Traversable | None:
|
|
145
|
+
r"""
|
|
146
|
+
Given an item from a namespace path, resolve it to a Traversable.
|
|
147
|
+
|
|
148
|
+
path_str might be a directory on the filesystem or a path to a
|
|
149
|
+
zipfile plus the path within the zipfile, e.g. ``/foo/bar`` or
|
|
150
|
+
``/foo/baz.zip/inner_dir`` or ``foo\baz.zip\inner_dir\sub``.
|
|
151
|
+
|
|
152
|
+
path_str might also be a sentinel used by editable packages to
|
|
153
|
+
trigger other behaviors (see python/importlib_resources#311).
|
|
154
|
+
In that case, return None.
|
|
155
|
+
"""
|
|
156
|
+
dirs = (cand for cand in cls._candidate_paths(path_str) if cand.is_dir())
|
|
157
|
+
return next(dirs, None)
|
|
158
|
+
|
|
159
|
+
@classmethod
|
|
160
|
+
def _candidate_paths(cls, path_str: str) -> Iterator[abc.Traversable]:
|
|
161
|
+
yield pathlib.Path(path_str)
|
|
162
|
+
yield from cls._resolve_zip_path(path_str)
|
|
163
|
+
|
|
164
|
+
@staticmethod
|
|
165
|
+
def _resolve_zip_path(path_str: str):
|
|
166
|
+
for match in reversed(list(re.finditer(r'[\\/]', path_str))):
|
|
167
|
+
with contextlib.suppress(
|
|
168
|
+
FileNotFoundError,
|
|
169
|
+
IsADirectoryError,
|
|
170
|
+
NotADirectoryError,
|
|
171
|
+
PermissionError,
|
|
172
|
+
):
|
|
173
|
+
inner = path_str[match.end() :].replace('\\', '/') + '/'
|
|
174
|
+
yield zipfile.Path(path_str[: match.start()], inner.lstrip('/'))
|
|
175
|
+
|
|
176
|
+
def resource_path(self, resource):
|
|
177
|
+
"""
|
|
178
|
+
Return the file system path to prevent
|
|
179
|
+
`resources.path()` from creating a temporary
|
|
180
|
+
copy.
|
|
181
|
+
"""
|
|
182
|
+
return str(self.path.joinpath(resource))
|
|
183
|
+
|
|
184
|
+
def files(self):
|
|
185
|
+
return self.path
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def _ensure_traversable(path):
|
|
189
|
+
"""
|
|
190
|
+
Convert deprecated string arguments to traversables (pathlib.Path).
|
|
191
|
+
|
|
192
|
+
Remove with Python 3.15.
|
|
193
|
+
"""
|
|
194
|
+
if not isinstance(path, str):
|
|
195
|
+
return path
|
|
196
|
+
|
|
197
|
+
warnings.warn(
|
|
198
|
+
"String arguments are deprecated. Pass a Traversable instead.",
|
|
199
|
+
DeprecationWarning,
|
|
200
|
+
stacklevel=3,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
return pathlib.Path(path)
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Interface adapters for low-level readers.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import abc
|
|
6
|
+
import io
|
|
7
|
+
import itertools
|
|
8
|
+
from typing import BinaryIO, List
|
|
9
|
+
|
|
10
|
+
from .abc import Traversable, TraversableResources
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SimpleReader(abc.ABC):
|
|
14
|
+
"""
|
|
15
|
+
The minimum, low-level interface required from a resource
|
|
16
|
+
provider.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
@abc.abstractmethod
|
|
21
|
+
def package(self) -> str:
|
|
22
|
+
"""
|
|
23
|
+
The name of the package for which this reader loads resources.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
@abc.abstractmethod
|
|
27
|
+
def children(self) -> List['SimpleReader']:
|
|
28
|
+
"""
|
|
29
|
+
Obtain an iterable of SimpleReader for available
|
|
30
|
+
child containers (e.g. directories).
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
@abc.abstractmethod
|
|
34
|
+
def resources(self) -> List[str]:
|
|
35
|
+
"""
|
|
36
|
+
Obtain available named resources for this virtual package.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
@abc.abstractmethod
|
|
40
|
+
def open_binary(self, resource: str) -> BinaryIO:
|
|
41
|
+
"""
|
|
42
|
+
Obtain a File-like for a named resource.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def name(self):
|
|
47
|
+
return self.package.split('.')[-1]
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class ResourceContainer(Traversable):
|
|
51
|
+
"""
|
|
52
|
+
Traversable container for a package's resources via its reader.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, reader: SimpleReader):
|
|
56
|
+
self.reader = reader
|
|
57
|
+
|
|
58
|
+
def is_dir(self):
|
|
59
|
+
return True
|
|
60
|
+
|
|
61
|
+
def is_file(self):
|
|
62
|
+
return False
|
|
63
|
+
|
|
64
|
+
def iterdir(self):
|
|
65
|
+
files = (ResourceHandle(self, name) for name in self.reader.resources)
|
|
66
|
+
dirs = map(ResourceContainer, self.reader.children())
|
|
67
|
+
return itertools.chain(files, dirs)
|
|
68
|
+
|
|
69
|
+
def open(self, *args, **kwargs):
|
|
70
|
+
raise IsADirectoryError()
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class ResourceHandle(Traversable):
|
|
74
|
+
"""
|
|
75
|
+
Handle to a named resource in a ResourceReader.
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
def __init__(self, parent: ResourceContainer, name: str):
|
|
79
|
+
self.parent = parent
|
|
80
|
+
self.name = name # type: ignore[misc]
|
|
81
|
+
|
|
82
|
+
def is_file(self):
|
|
83
|
+
return True
|
|
84
|
+
|
|
85
|
+
def is_dir(self):
|
|
86
|
+
return False
|
|
87
|
+
|
|
88
|
+
def open(self, mode='r', *args, **kwargs):
|
|
89
|
+
stream = self.parent.reader.open_binary(self.name)
|
|
90
|
+
if 'b' not in mode:
|
|
91
|
+
stream = io.TextIOWrapper(stream, *args, **kwargs)
|
|
92
|
+
return stream
|
|
93
|
+
|
|
94
|
+
def joinpath(self, name):
|
|
95
|
+
raise RuntimeError("Cannot traverse into a resource")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class TraversableReader(TraversableResources, SimpleReader):
|
|
99
|
+
"""
|
|
100
|
+
A TraversableResources based on SimpleReader. Resource providers
|
|
101
|
+
may derive from this class to provide the TraversableResources
|
|
102
|
+
interface by supplying the SimpleReader interface.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
def files(self):
|
|
106
|
+
return ResourceContainer(self)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Compatibility shim for .resources.simple as found on Python 3.10.
|
|
3
|
+
|
|
4
|
+
Consumers that can rely on Python 3.11 should use the other
|
|
5
|
+
module directly.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .resources.simple import (
|
|
9
|
+
SimpleReader, ResourceHandle, ResourceContainer, TraversableReader,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
'SimpleReader', 'ResourceHandle', 'ResourceContainer', 'TraversableReader',
|
|
14
|
+
]
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"""Utility code for constructing importers, etc."""
|
|
2
|
+
from ._abc import Loader
|
|
3
|
+
from ._bootstrap import module_from_spec
|
|
4
|
+
from ._bootstrap import _resolve_name
|
|
5
|
+
from ._bootstrap import spec_from_loader
|
|
6
|
+
from ._bootstrap import _find_spec
|
|
7
|
+
from ._bootstrap_external import MAGIC_NUMBER
|
|
8
|
+
from ._bootstrap_external import _RAW_MAGIC_NUMBER
|
|
9
|
+
from ._bootstrap_external import cache_from_source
|
|
10
|
+
from ._bootstrap_external import decode_source
|
|
11
|
+
from ._bootstrap_external import source_from_cache
|
|
12
|
+
from ._bootstrap_external import spec_from_file_location
|
|
13
|
+
|
|
14
|
+
import _imp
|
|
15
|
+
import sys
|
|
16
|
+
import types
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def source_hash(source_bytes):
|
|
20
|
+
"Return the hash of *source_bytes* as used in hash-based pyc files."
|
|
21
|
+
return _imp.source_hash(_RAW_MAGIC_NUMBER, source_bytes)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def resolve_name(name, package):
|
|
25
|
+
"""Resolve a relative module name to an absolute one."""
|
|
26
|
+
if not name.startswith('.'):
|
|
27
|
+
return name
|
|
28
|
+
elif not package:
|
|
29
|
+
raise ImportError(f'no package specified for {repr(name)} '
|
|
30
|
+
'(required for relative module names)')
|
|
31
|
+
level = 0
|
|
32
|
+
for character in name:
|
|
33
|
+
if character != '.':
|
|
34
|
+
break
|
|
35
|
+
level += 1
|
|
36
|
+
return _resolve_name(name[level:], package, level)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _find_spec_from_path(name, path=None):
|
|
40
|
+
"""Return the spec for the specified module.
|
|
41
|
+
|
|
42
|
+
First, sys.modules is checked to see if the module was already imported. If
|
|
43
|
+
so, then sys.modules[name].__spec__ is returned. If that happens to be
|
|
44
|
+
set to None, then ValueError is raised. If the module is not in
|
|
45
|
+
sys.modules, then sys.meta_path is searched for a suitable spec with the
|
|
46
|
+
value of 'path' given to the finders. None is returned if no spec could
|
|
47
|
+
be found.
|
|
48
|
+
|
|
49
|
+
Dotted names do not have their parent packages implicitly imported. You will
|
|
50
|
+
most likely need to explicitly import all parent packages in the proper
|
|
51
|
+
order for a submodule to get the correct spec.
|
|
52
|
+
|
|
53
|
+
"""
|
|
54
|
+
if name not in sys.modules:
|
|
55
|
+
return _find_spec(name, path)
|
|
56
|
+
else:
|
|
57
|
+
module = sys.modules[name]
|
|
58
|
+
if module is None:
|
|
59
|
+
return None
|
|
60
|
+
try:
|
|
61
|
+
spec = module.__spec__
|
|
62
|
+
except AttributeError:
|
|
63
|
+
raise ValueError(f'{name}.__spec__ is not set') from None
|
|
64
|
+
else:
|
|
65
|
+
if spec is None:
|
|
66
|
+
raise ValueError(f'{name}.__spec__ is None')
|
|
67
|
+
return spec
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def find_spec(name, package=None):
|
|
71
|
+
"""Return the spec for the specified module.
|
|
72
|
+
|
|
73
|
+
First, sys.modules is checked to see if the module was already imported. If
|
|
74
|
+
so, then sys.modules[name].__spec__ is returned. If that happens to be
|
|
75
|
+
set to None, then ValueError is raised. If the module is not in
|
|
76
|
+
sys.modules, then sys.meta_path is searched for a suitable spec with the
|
|
77
|
+
value of 'path' given to the finders. None is returned if no spec could
|
|
78
|
+
be found.
|
|
79
|
+
|
|
80
|
+
If the name is for submodule (contains a dot), the parent module is
|
|
81
|
+
automatically imported.
|
|
82
|
+
|
|
83
|
+
The name and package arguments work the same as importlib.import_module().
|
|
84
|
+
In other words, relative module names (with leading dots) work.
|
|
85
|
+
|
|
86
|
+
"""
|
|
87
|
+
fullname = resolve_name(name, package) if name.startswith('.') else name
|
|
88
|
+
if fullname not in sys.modules:
|
|
89
|
+
parent_name = fullname.rpartition('.')[0]
|
|
90
|
+
if parent_name:
|
|
91
|
+
parent = __import__(parent_name, fromlist=['__path__'])
|
|
92
|
+
try:
|
|
93
|
+
parent_path = parent.__path__
|
|
94
|
+
except AttributeError as e:
|
|
95
|
+
raise ModuleNotFoundError(
|
|
96
|
+
f"__path__ attribute not found on {parent_name!r} "
|
|
97
|
+
f"while trying to find {fullname!r}", name=fullname) from e
|
|
98
|
+
else:
|
|
99
|
+
parent_path = None
|
|
100
|
+
return _find_spec(fullname, parent_path)
|
|
101
|
+
else:
|
|
102
|
+
module = sys.modules[fullname]
|
|
103
|
+
if module is None:
|
|
104
|
+
return None
|
|
105
|
+
try:
|
|
106
|
+
spec = module.__spec__
|
|
107
|
+
except AttributeError:
|
|
108
|
+
raise ValueError(f'{name}.__spec__ is not set') from None
|
|
109
|
+
else:
|
|
110
|
+
if spec is None:
|
|
111
|
+
raise ValueError(f'{name}.__spec__ is None')
|
|
112
|
+
return spec
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
# Normally we would use contextlib.contextmanager. However, this module
|
|
116
|
+
# is imported by runpy, which means we want to avoid any unnecessary
|
|
117
|
+
# dependencies. Thus we use a class.
|
|
118
|
+
|
|
119
|
+
class _incompatible_extension_module_restrictions:
|
|
120
|
+
"""A context manager that can temporarily skip the compatibility check.
|
|
121
|
+
|
|
122
|
+
NOTE: This function is meant to accommodate an unusual case; one
|
|
123
|
+
which is likely to eventually go away. There's is a pretty good
|
|
124
|
+
chance this is not what you were looking for.
|
|
125
|
+
|
|
126
|
+
WARNING: Using this function to disable the check can lead to
|
|
127
|
+
unexpected behavior and even crashes. It should only be used during
|
|
128
|
+
extension module development.
|
|
129
|
+
|
|
130
|
+
If "disable_check" is True then the compatibility check will not
|
|
131
|
+
happen while the context manager is active. Otherwise the check
|
|
132
|
+
*will* happen.
|
|
133
|
+
|
|
134
|
+
Normally, extensions that do not support multiple interpreters
|
|
135
|
+
may not be imported in a subinterpreter. That implies modules
|
|
136
|
+
that do not implement multi-phase init or that explicitly of out.
|
|
137
|
+
|
|
138
|
+
Likewise for modules import in a subinterpreter with its own GIL
|
|
139
|
+
when the extension does not support a per-interpreter GIL. This
|
|
140
|
+
implies the module does not have a Py_mod_multiple_interpreters slot
|
|
141
|
+
set to Py_MOD_PER_INTERPRETER_GIL_SUPPORTED.
|
|
142
|
+
|
|
143
|
+
In both cases, this context manager may be used to temporarily
|
|
144
|
+
disable the check for compatible extension modules.
|
|
145
|
+
|
|
146
|
+
You can get the same effect as this function by implementing the
|
|
147
|
+
basic interface of multi-phase init (PEP 489) and lying about
|
|
148
|
+
support for multiple interpreters (or per-interpreter GIL).
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
def __init__(self, *, disable_check):
|
|
152
|
+
self.disable_check = bool(disable_check)
|
|
153
|
+
|
|
154
|
+
def __enter__(self):
|
|
155
|
+
self.old = _imp._override_multi_interp_extensions_check(self.override)
|
|
156
|
+
return self
|
|
157
|
+
|
|
158
|
+
def __exit__(self, *args):
|
|
159
|
+
old = self.old
|
|
160
|
+
del self.old
|
|
161
|
+
_imp._override_multi_interp_extensions_check(old)
|
|
162
|
+
|
|
163
|
+
@property
|
|
164
|
+
def override(self):
|
|
165
|
+
return -1 if self.disable_check else 1
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class _LazyModule(types.ModuleType):
|
|
169
|
+
|
|
170
|
+
"""A subclass of the module type which triggers loading upon attribute access."""
|
|
171
|
+
|
|
172
|
+
def __getattribute__(self, attr):
|
|
173
|
+
"""Trigger the load of the module and return the attribute."""
|
|
174
|
+
__spec__ = object.__getattribute__(self, '__spec__')
|
|
175
|
+
loader_state = __spec__.loader_state
|
|
176
|
+
with loader_state['lock']:
|
|
177
|
+
# Only the first thread to get the lock should trigger the load
|
|
178
|
+
# and reset the module's class. The rest can now getattr().
|
|
179
|
+
if object.__getattribute__(self, '__class__') is _LazyModule:
|
|
180
|
+
__class__ = loader_state['__class__']
|
|
181
|
+
|
|
182
|
+
# Reentrant calls from the same thread must be allowed to proceed without
|
|
183
|
+
# triggering the load again.
|
|
184
|
+
# exec_module() and self-referential imports are the primary ways this can
|
|
185
|
+
# happen, but in any case we must return something to avoid deadlock.
|
|
186
|
+
if loader_state['is_loading']:
|
|
187
|
+
return __class__.__getattribute__(self, attr)
|
|
188
|
+
loader_state['is_loading'] = True
|
|
189
|
+
|
|
190
|
+
__dict__ = __class__.__getattribute__(self, '__dict__')
|
|
191
|
+
|
|
192
|
+
# All module metadata must be gathered from __spec__ in order to avoid
|
|
193
|
+
# using mutated values.
|
|
194
|
+
# Get the original name to make sure no object substitution occurred
|
|
195
|
+
# in sys.modules.
|
|
196
|
+
original_name = __spec__.name
|
|
197
|
+
# Figure out exactly what attributes were mutated between the creation
|
|
198
|
+
# of the module and now.
|
|
199
|
+
attrs_then = loader_state['__dict__']
|
|
200
|
+
attrs_now = __dict__
|
|
201
|
+
attrs_updated = {}
|
|
202
|
+
for key, value in attrs_now.items():
|
|
203
|
+
# Code that set an attribute may have kept a reference to the
|
|
204
|
+
# assigned object, making identity more important than equality.
|
|
205
|
+
if key not in attrs_then:
|
|
206
|
+
attrs_updated[key] = value
|
|
207
|
+
elif id(attrs_now[key]) != id(attrs_then[key]):
|
|
208
|
+
attrs_updated[key] = value
|
|
209
|
+
__spec__.loader.exec_module(self)
|
|
210
|
+
# If exec_module() was used directly there is no guarantee the module
|
|
211
|
+
# object was put into sys.modules.
|
|
212
|
+
if original_name in sys.modules:
|
|
213
|
+
if id(self) != id(sys.modules[original_name]):
|
|
214
|
+
raise ValueError(f"module object for {original_name!r} "
|
|
215
|
+
"substituted in sys.modules during a lazy "
|
|
216
|
+
"load")
|
|
217
|
+
# Update after loading since that's what would happen in an eager
|
|
218
|
+
# loading situation.
|
|
219
|
+
__dict__.update(attrs_updated)
|
|
220
|
+
# Finally, stop triggering this method, if the module did not
|
|
221
|
+
# already update its own __class__.
|
|
222
|
+
if isinstance(self, _LazyModule):
|
|
223
|
+
object.__setattr__(self, '__class__', __class__)
|
|
224
|
+
|
|
225
|
+
return getattr(self, attr)
|
|
226
|
+
|
|
227
|
+
def __delattr__(self, attr):
|
|
228
|
+
"""Trigger the load and then perform the deletion."""
|
|
229
|
+
# To trigger the load and raise an exception if the attribute
|
|
230
|
+
# doesn't exist.
|
|
231
|
+
self.__getattribute__(attr)
|
|
232
|
+
delattr(self, attr)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class LazyLoader(Loader):
|
|
236
|
+
|
|
237
|
+
"""A loader that creates a module which defers loading until attribute access."""
|
|
238
|
+
|
|
239
|
+
@staticmethod
|
|
240
|
+
def __check_eager_loader(loader):
|
|
241
|
+
if not hasattr(loader, 'exec_module'):
|
|
242
|
+
raise TypeError('loader must define exec_module()')
|
|
243
|
+
|
|
244
|
+
@classmethod
|
|
245
|
+
def factory(cls, loader):
|
|
246
|
+
"""Construct a callable which returns the eager loader made lazy."""
|
|
247
|
+
cls.__check_eager_loader(loader)
|
|
248
|
+
return lambda *args, **kwargs: cls(loader(*args, **kwargs))
|
|
249
|
+
|
|
250
|
+
def __init__(self, loader):
|
|
251
|
+
self.__check_eager_loader(loader)
|
|
252
|
+
self.loader = loader
|
|
253
|
+
|
|
254
|
+
def create_module(self, spec):
|
|
255
|
+
return self.loader.create_module(spec)
|
|
256
|
+
|
|
257
|
+
def exec_module(self, module):
|
|
258
|
+
"""Make the module load lazily."""
|
|
259
|
+
# Threading is only needed for lazy loading, and importlib.util can
|
|
260
|
+
# be pulled in at interpreter startup, so defer until needed.
|
|
261
|
+
import threading
|
|
262
|
+
module.__spec__.loader = self.loader
|
|
263
|
+
module.__loader__ = self.loader
|
|
264
|
+
# Don't need to worry about deep-copying as trying to set an attribute
|
|
265
|
+
# on an object would have triggered the load,
|
|
266
|
+
# e.g. ``module.__spec__.loader = None`` would trigger a load from
|
|
267
|
+
# trying to access module.__spec__.
|
|
268
|
+
loader_state = {}
|
|
269
|
+
loader_state['__dict__'] = module.__dict__.copy()
|
|
270
|
+
loader_state['__class__'] = module.__class__
|
|
271
|
+
loader_state['lock'] = threading.RLock()
|
|
272
|
+
loader_state['is_loading'] = False
|
|
273
|
+
module.__spec__.loader_state = loader_state
|
|
274
|
+
module.__class__ = _LazyModule
|