@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,67 @@
|
|
|
1
|
+
__all__ = ()
|
|
2
|
+
|
|
3
|
+
import reprlib
|
|
4
|
+
|
|
5
|
+
from . import format_helpers
|
|
6
|
+
|
|
7
|
+
# States for Future.
|
|
8
|
+
_PENDING = 'PENDING'
|
|
9
|
+
_CANCELLED = 'CANCELLED'
|
|
10
|
+
_FINISHED = 'FINISHED'
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def isfuture(obj):
|
|
14
|
+
"""Check for a Future.
|
|
15
|
+
|
|
16
|
+
This returns True when obj is a Future instance or is advertising
|
|
17
|
+
itself as duck-type compatible by setting _asyncio_future_blocking.
|
|
18
|
+
See comment in Future for more details.
|
|
19
|
+
"""
|
|
20
|
+
return (hasattr(obj.__class__, '_asyncio_future_blocking') and
|
|
21
|
+
obj._asyncio_future_blocking is not None)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _format_callbacks(cb):
|
|
25
|
+
"""helper function for Future.__repr__"""
|
|
26
|
+
size = len(cb)
|
|
27
|
+
if not size:
|
|
28
|
+
cb = ''
|
|
29
|
+
|
|
30
|
+
def format_cb(callback):
|
|
31
|
+
return format_helpers._format_callback_source(callback, ())
|
|
32
|
+
|
|
33
|
+
if size == 1:
|
|
34
|
+
cb = format_cb(cb[0][0])
|
|
35
|
+
elif size == 2:
|
|
36
|
+
cb = '{}, {}'.format(format_cb(cb[0][0]), format_cb(cb[1][0]))
|
|
37
|
+
elif size > 2:
|
|
38
|
+
cb = '{}, <{} more>, {}'.format(format_cb(cb[0][0]),
|
|
39
|
+
size - 2,
|
|
40
|
+
format_cb(cb[-1][0]))
|
|
41
|
+
return f'cb=[{cb}]'
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _future_repr_info(future):
|
|
45
|
+
# (Future) -> str
|
|
46
|
+
"""helper function for Future.__repr__"""
|
|
47
|
+
info = [future._state.lower()]
|
|
48
|
+
if future._state == _FINISHED:
|
|
49
|
+
if future._exception is not None:
|
|
50
|
+
info.append(f'exception={future._exception!r}')
|
|
51
|
+
else:
|
|
52
|
+
# use reprlib to limit the length of the output, especially
|
|
53
|
+
# for very long strings
|
|
54
|
+
result = reprlib.repr(future._result)
|
|
55
|
+
info.append(f'result={result}')
|
|
56
|
+
if future._callbacks:
|
|
57
|
+
info.append(_format_callbacks(future._callbacks))
|
|
58
|
+
if future._source_traceback:
|
|
59
|
+
frame = future._source_traceback[-1]
|
|
60
|
+
info.append(f'created at {frame[0]}:{frame[1]}')
|
|
61
|
+
return info
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@reprlib.recursive_repr()
|
|
65
|
+
def _future_repr(future):
|
|
66
|
+
info = ' '.join(_future_repr_info(future))
|
|
67
|
+
return f'<{future.__class__.__name__} {info}>'
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import collections
|
|
2
|
+
import subprocess
|
|
3
|
+
import warnings
|
|
4
|
+
import os
|
|
5
|
+
import signal
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
from . import protocols
|
|
9
|
+
from . import transports
|
|
10
|
+
from .log import logger
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class BaseSubprocessTransport(transports.SubprocessTransport):
|
|
14
|
+
|
|
15
|
+
def __init__(self, loop, protocol, args, shell,
|
|
16
|
+
stdin, stdout, stderr, bufsize,
|
|
17
|
+
waiter=None, extra=None, **kwargs):
|
|
18
|
+
super().__init__(extra)
|
|
19
|
+
self._closed = False
|
|
20
|
+
self._protocol = protocol
|
|
21
|
+
self._loop = loop
|
|
22
|
+
self._proc = None
|
|
23
|
+
self._pid = None
|
|
24
|
+
self._returncode = None
|
|
25
|
+
self._exit_waiters = []
|
|
26
|
+
self._pending_calls = collections.deque()
|
|
27
|
+
self._pipes = {}
|
|
28
|
+
self._finished = False
|
|
29
|
+
|
|
30
|
+
if stdin == subprocess.PIPE:
|
|
31
|
+
self._pipes[0] = None
|
|
32
|
+
if stdout == subprocess.PIPE:
|
|
33
|
+
self._pipes[1] = None
|
|
34
|
+
if stderr == subprocess.PIPE:
|
|
35
|
+
self._pipes[2] = None
|
|
36
|
+
|
|
37
|
+
# Create the child process: set the _proc attribute
|
|
38
|
+
try:
|
|
39
|
+
self._start(args=args, shell=shell, stdin=stdin, stdout=stdout,
|
|
40
|
+
stderr=stderr, bufsize=bufsize, **kwargs)
|
|
41
|
+
except:
|
|
42
|
+
self.close()
|
|
43
|
+
raise
|
|
44
|
+
|
|
45
|
+
self._pid = self._proc.pid
|
|
46
|
+
self._extra['subprocess'] = self._proc
|
|
47
|
+
|
|
48
|
+
if self._loop.get_debug():
|
|
49
|
+
if isinstance(args, (bytes, str)):
|
|
50
|
+
program = args
|
|
51
|
+
else:
|
|
52
|
+
program = args[0]
|
|
53
|
+
logger.debug('process %r created: pid %s',
|
|
54
|
+
program, self._pid)
|
|
55
|
+
|
|
56
|
+
self._loop.create_task(self._connect_pipes(waiter))
|
|
57
|
+
|
|
58
|
+
def __repr__(self):
|
|
59
|
+
info = [self.__class__.__name__]
|
|
60
|
+
if self._closed:
|
|
61
|
+
info.append('closed')
|
|
62
|
+
if self._pid is not None:
|
|
63
|
+
info.append(f'pid={self._pid}')
|
|
64
|
+
if self._returncode is not None:
|
|
65
|
+
info.append(f'returncode={self._returncode}')
|
|
66
|
+
elif self._pid is not None:
|
|
67
|
+
info.append('running')
|
|
68
|
+
else:
|
|
69
|
+
info.append('not started')
|
|
70
|
+
|
|
71
|
+
stdin = self._pipes.get(0)
|
|
72
|
+
if stdin is not None:
|
|
73
|
+
info.append(f'stdin={stdin.pipe}')
|
|
74
|
+
|
|
75
|
+
stdout = self._pipes.get(1)
|
|
76
|
+
stderr = self._pipes.get(2)
|
|
77
|
+
if stdout is not None and stderr is stdout:
|
|
78
|
+
info.append(f'stdout=stderr={stdout.pipe}')
|
|
79
|
+
else:
|
|
80
|
+
if stdout is not None:
|
|
81
|
+
info.append(f'stdout={stdout.pipe}')
|
|
82
|
+
if stderr is not None:
|
|
83
|
+
info.append(f'stderr={stderr.pipe}')
|
|
84
|
+
|
|
85
|
+
return '<{}>'.format(' '.join(info))
|
|
86
|
+
|
|
87
|
+
def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs):
|
|
88
|
+
raise NotImplementedError
|
|
89
|
+
|
|
90
|
+
def set_protocol(self, protocol):
|
|
91
|
+
self._protocol = protocol
|
|
92
|
+
|
|
93
|
+
def get_protocol(self):
|
|
94
|
+
return self._protocol
|
|
95
|
+
|
|
96
|
+
def is_closing(self):
|
|
97
|
+
return self._closed
|
|
98
|
+
|
|
99
|
+
def close(self):
|
|
100
|
+
if self._closed:
|
|
101
|
+
return
|
|
102
|
+
self._closed = True
|
|
103
|
+
|
|
104
|
+
for proto in self._pipes.values():
|
|
105
|
+
if proto is None:
|
|
106
|
+
continue
|
|
107
|
+
# See gh-114177
|
|
108
|
+
# skip closing the pipe if loop is already closed
|
|
109
|
+
# this can happen e.g. when loop is closed immediately after
|
|
110
|
+
# process is killed
|
|
111
|
+
if self._loop and not self._loop.is_closed():
|
|
112
|
+
proto.pipe.close()
|
|
113
|
+
|
|
114
|
+
if (self._proc is not None and
|
|
115
|
+
# has the child process finished?
|
|
116
|
+
self._returncode is None and
|
|
117
|
+
# the child process has finished, but the
|
|
118
|
+
# transport hasn't been notified yet?
|
|
119
|
+
self._proc.poll() is None):
|
|
120
|
+
|
|
121
|
+
if self._loop.get_debug():
|
|
122
|
+
logger.warning('Close running child process: kill %r', self)
|
|
123
|
+
|
|
124
|
+
try:
|
|
125
|
+
self._proc.kill()
|
|
126
|
+
except (ProcessLookupError, PermissionError):
|
|
127
|
+
# the process may have already exited or may be running setuid
|
|
128
|
+
pass
|
|
129
|
+
|
|
130
|
+
# Don't clear the _proc reference yet: _post_init() may still run
|
|
131
|
+
|
|
132
|
+
def __del__(self, _warn=warnings.warn):
|
|
133
|
+
if not self._closed:
|
|
134
|
+
_warn(f"unclosed transport {self!r}", ResourceWarning, source=self)
|
|
135
|
+
self.close()
|
|
136
|
+
|
|
137
|
+
def get_pid(self):
|
|
138
|
+
return self._pid
|
|
139
|
+
|
|
140
|
+
def get_returncode(self):
|
|
141
|
+
return self._returncode
|
|
142
|
+
|
|
143
|
+
def get_pipe_transport(self, fd):
|
|
144
|
+
if fd in self._pipes:
|
|
145
|
+
return self._pipes[fd].pipe
|
|
146
|
+
else:
|
|
147
|
+
return None
|
|
148
|
+
|
|
149
|
+
def _check_proc(self):
|
|
150
|
+
if self._proc is None:
|
|
151
|
+
raise ProcessLookupError()
|
|
152
|
+
|
|
153
|
+
if sys.platform == 'win32':
|
|
154
|
+
def send_signal(self, signal):
|
|
155
|
+
self._check_proc()
|
|
156
|
+
self._proc.send_signal(signal)
|
|
157
|
+
|
|
158
|
+
def terminate(self):
|
|
159
|
+
self._check_proc()
|
|
160
|
+
self._proc.terminate()
|
|
161
|
+
|
|
162
|
+
def kill(self):
|
|
163
|
+
self._check_proc()
|
|
164
|
+
self._proc.kill()
|
|
165
|
+
else:
|
|
166
|
+
def send_signal(self, signal):
|
|
167
|
+
self._check_proc()
|
|
168
|
+
try:
|
|
169
|
+
os.kill(self._proc.pid, signal)
|
|
170
|
+
except ProcessLookupError:
|
|
171
|
+
pass
|
|
172
|
+
|
|
173
|
+
def terminate(self):
|
|
174
|
+
self.send_signal(signal.SIGTERM)
|
|
175
|
+
|
|
176
|
+
def kill(self):
|
|
177
|
+
self.send_signal(signal.SIGKILL)
|
|
178
|
+
|
|
179
|
+
async def _connect_pipes(self, waiter):
|
|
180
|
+
try:
|
|
181
|
+
proc = self._proc
|
|
182
|
+
loop = self._loop
|
|
183
|
+
|
|
184
|
+
if proc.stdin is not None:
|
|
185
|
+
_, pipe = await loop.connect_write_pipe(
|
|
186
|
+
lambda: WriteSubprocessPipeProto(self, 0),
|
|
187
|
+
proc.stdin)
|
|
188
|
+
self._pipes[0] = pipe
|
|
189
|
+
|
|
190
|
+
if proc.stdout is not None:
|
|
191
|
+
_, pipe = await loop.connect_read_pipe(
|
|
192
|
+
lambda: ReadSubprocessPipeProto(self, 1),
|
|
193
|
+
proc.stdout)
|
|
194
|
+
self._pipes[1] = pipe
|
|
195
|
+
|
|
196
|
+
if proc.stderr is not None:
|
|
197
|
+
_, pipe = await loop.connect_read_pipe(
|
|
198
|
+
lambda: ReadSubprocessPipeProto(self, 2),
|
|
199
|
+
proc.stderr)
|
|
200
|
+
self._pipes[2] = pipe
|
|
201
|
+
|
|
202
|
+
assert self._pending_calls is not None
|
|
203
|
+
|
|
204
|
+
loop.call_soon(self._protocol.connection_made, self)
|
|
205
|
+
for callback, data in self._pending_calls:
|
|
206
|
+
loop.call_soon(callback, *data)
|
|
207
|
+
self._pending_calls = None
|
|
208
|
+
except (SystemExit, KeyboardInterrupt):
|
|
209
|
+
raise
|
|
210
|
+
except BaseException as exc:
|
|
211
|
+
if waiter is not None and not waiter.cancelled():
|
|
212
|
+
waiter.set_exception(exc)
|
|
213
|
+
else:
|
|
214
|
+
if waiter is not None and not waiter.cancelled():
|
|
215
|
+
waiter.set_result(None)
|
|
216
|
+
|
|
217
|
+
def _call(self, cb, *data):
|
|
218
|
+
if self._pending_calls is not None:
|
|
219
|
+
self._pending_calls.append((cb, data))
|
|
220
|
+
else:
|
|
221
|
+
self._loop.call_soon(cb, *data)
|
|
222
|
+
|
|
223
|
+
def _pipe_connection_lost(self, fd, exc):
|
|
224
|
+
self._call(self._protocol.pipe_connection_lost, fd, exc)
|
|
225
|
+
self._try_finish()
|
|
226
|
+
|
|
227
|
+
def _pipe_data_received(self, fd, data):
|
|
228
|
+
self._call(self._protocol.pipe_data_received, fd, data)
|
|
229
|
+
|
|
230
|
+
def _process_exited(self, returncode):
|
|
231
|
+
assert returncode is not None, returncode
|
|
232
|
+
assert self._returncode is None, self._returncode
|
|
233
|
+
if self._loop.get_debug():
|
|
234
|
+
logger.info('%r exited with return code %r', self, returncode)
|
|
235
|
+
self._returncode = returncode
|
|
236
|
+
|
|
237
|
+
if self._proc.returncode is None:
|
|
238
|
+
# asyncio uses a child watcher: copy the status into the Popen
|
|
239
|
+
# object. On Python 3.6, it is required to avoid a ResourceWarning.
|
|
240
|
+
self._proc.returncode = returncode
|
|
241
|
+
self._call(self._protocol.process_exited)
|
|
242
|
+
|
|
243
|
+
self._try_finish()
|
|
244
|
+
|
|
245
|
+
# gh-119710: Wake up futures waiting for wait() as soon as the process
|
|
246
|
+
# exits.
|
|
247
|
+
for waiter in self._exit_waiters:
|
|
248
|
+
if not waiter.done():
|
|
249
|
+
waiter.set_result(returncode)
|
|
250
|
+
self._exit_waiters = None
|
|
251
|
+
|
|
252
|
+
async def _wait(self):
|
|
253
|
+
"""Wait until the process exit and return the process return code.
|
|
254
|
+
|
|
255
|
+
This method is a coroutine."""
|
|
256
|
+
if self._returncode is not None:
|
|
257
|
+
return self._returncode
|
|
258
|
+
|
|
259
|
+
waiter = self._loop.create_future()
|
|
260
|
+
self._exit_waiters.append(waiter)
|
|
261
|
+
return await waiter
|
|
262
|
+
|
|
263
|
+
def _try_finish(self):
|
|
264
|
+
assert not self._finished
|
|
265
|
+
if self._returncode is None:
|
|
266
|
+
return
|
|
267
|
+
|
|
268
|
+
if all(p is not None and p.disconnected
|
|
269
|
+
for p in self._pipes.values()):
|
|
270
|
+
self._finished = True
|
|
271
|
+
self._call(self._call_connection_lost, None)
|
|
272
|
+
|
|
273
|
+
def _call_connection_lost(self, exc):
|
|
274
|
+
try:
|
|
275
|
+
self._protocol.connection_lost(exc)
|
|
276
|
+
finally:
|
|
277
|
+
self._loop = None
|
|
278
|
+
self._proc = None
|
|
279
|
+
self._protocol = None
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
class WriteSubprocessPipeProto(protocols.BaseProtocol):
|
|
283
|
+
|
|
284
|
+
def __init__(self, proc, fd):
|
|
285
|
+
self.proc = proc
|
|
286
|
+
self.fd = fd
|
|
287
|
+
self.pipe = None
|
|
288
|
+
self.disconnected = False
|
|
289
|
+
|
|
290
|
+
def connection_made(self, transport):
|
|
291
|
+
self.pipe = transport
|
|
292
|
+
|
|
293
|
+
def __repr__(self):
|
|
294
|
+
return f'<{self.__class__.__name__} fd={self.fd} pipe={self.pipe!r}>'
|
|
295
|
+
|
|
296
|
+
def connection_lost(self, exc):
|
|
297
|
+
self.disconnected = True
|
|
298
|
+
self.proc._pipe_connection_lost(self.fd, exc)
|
|
299
|
+
self.proc = None
|
|
300
|
+
|
|
301
|
+
def pause_writing(self):
|
|
302
|
+
self.proc._protocol.pause_writing()
|
|
303
|
+
|
|
304
|
+
def resume_writing(self):
|
|
305
|
+
self.proc._protocol.resume_writing()
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
class ReadSubprocessPipeProto(WriteSubprocessPipeProto,
|
|
309
|
+
protocols.Protocol):
|
|
310
|
+
|
|
311
|
+
def data_received(self, data):
|
|
312
|
+
self.proc._pipe_data_received(self.fd, data)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import linecache
|
|
2
|
+
import reprlib
|
|
3
|
+
import traceback
|
|
4
|
+
|
|
5
|
+
from . import base_futures
|
|
6
|
+
from . import coroutines
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _task_repr_info(task):
|
|
10
|
+
info = base_futures._future_repr_info(task)
|
|
11
|
+
|
|
12
|
+
if task.cancelling() and not task.done():
|
|
13
|
+
# replace status
|
|
14
|
+
info[0] = 'cancelling'
|
|
15
|
+
|
|
16
|
+
info.insert(1, 'name=%r' % task.get_name())
|
|
17
|
+
|
|
18
|
+
if task._fut_waiter is not None:
|
|
19
|
+
info.insert(2, f'wait_for={task._fut_waiter!r}')
|
|
20
|
+
|
|
21
|
+
if task._coro:
|
|
22
|
+
coro = coroutines._format_coroutine(task._coro)
|
|
23
|
+
info.insert(2, f'coro=<{coro}>')
|
|
24
|
+
|
|
25
|
+
return info
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@reprlib.recursive_repr()
|
|
29
|
+
def _task_repr(task):
|
|
30
|
+
info = ' '.join(_task_repr_info(task))
|
|
31
|
+
return f'<{task.__class__.__name__} {info}>'
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _task_get_stack(task, limit):
|
|
35
|
+
frames = []
|
|
36
|
+
if hasattr(task._coro, 'cr_frame'):
|
|
37
|
+
# case 1: 'async def' coroutines
|
|
38
|
+
f = task._coro.cr_frame
|
|
39
|
+
elif hasattr(task._coro, 'gi_frame'):
|
|
40
|
+
# case 2: legacy coroutines
|
|
41
|
+
f = task._coro.gi_frame
|
|
42
|
+
elif hasattr(task._coro, 'ag_frame'):
|
|
43
|
+
# case 3: async generators
|
|
44
|
+
f = task._coro.ag_frame
|
|
45
|
+
else:
|
|
46
|
+
# case 4: unknown objects
|
|
47
|
+
f = None
|
|
48
|
+
if f is not None:
|
|
49
|
+
while f is not None:
|
|
50
|
+
if limit is not None:
|
|
51
|
+
if limit <= 0:
|
|
52
|
+
break
|
|
53
|
+
limit -= 1
|
|
54
|
+
frames.append(f)
|
|
55
|
+
f = f.f_back
|
|
56
|
+
frames.reverse()
|
|
57
|
+
elif task._exception is not None:
|
|
58
|
+
tb = task._exception.__traceback__
|
|
59
|
+
while tb is not None:
|
|
60
|
+
if limit is not None:
|
|
61
|
+
if limit <= 0:
|
|
62
|
+
break
|
|
63
|
+
limit -= 1
|
|
64
|
+
frames.append(tb.tb_frame)
|
|
65
|
+
tb = tb.tb_next
|
|
66
|
+
return frames
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _task_print_stack(task, limit, file):
|
|
70
|
+
extracted_list = []
|
|
71
|
+
checked = set()
|
|
72
|
+
for f in task.get_stack(limit=limit):
|
|
73
|
+
lineno = f.f_lineno
|
|
74
|
+
co = f.f_code
|
|
75
|
+
filename = co.co_filename
|
|
76
|
+
name = co.co_name
|
|
77
|
+
if filename not in checked:
|
|
78
|
+
checked.add(filename)
|
|
79
|
+
linecache.checkcache(filename)
|
|
80
|
+
line = linecache.getline(filename, lineno, f.f_globals)
|
|
81
|
+
extracted_list.append((filename, lineno, name, line))
|
|
82
|
+
|
|
83
|
+
exc = task._exception
|
|
84
|
+
if not extracted_list:
|
|
85
|
+
print(f'No stack for {task!r}', file=file)
|
|
86
|
+
elif exc is not None:
|
|
87
|
+
print(f'Traceback for {task!r} (most recent call last):', file=file)
|
|
88
|
+
else:
|
|
89
|
+
print(f'Stack for {task!r} (most recent call last):', file=file)
|
|
90
|
+
|
|
91
|
+
traceback.print_list(extracted_list, file=file)
|
|
92
|
+
if exc is not None:
|
|
93
|
+
for line in traceback.format_exception_only(exc.__class__, exc):
|
|
94
|
+
print(line, file=file, end='')
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Contains code from https://github.com/MagicStack/uvloop/tree/v0.16.0
|
|
2
|
+
# SPDX-License-Identifier: PSF-2.0 AND (MIT OR Apache-2.0)
|
|
3
|
+
# SPDX-FileCopyrightText: Copyright (c) 2015-2021 MagicStack Inc. http://magic.io
|
|
4
|
+
|
|
5
|
+
import enum
|
|
6
|
+
|
|
7
|
+
# After the connection is lost, log warnings after this many write()s.
|
|
8
|
+
LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5
|
|
9
|
+
|
|
10
|
+
# Seconds to wait before retrying accept().
|
|
11
|
+
ACCEPT_RETRY_DELAY = 1
|
|
12
|
+
|
|
13
|
+
# Number of stack entries to capture in debug mode.
|
|
14
|
+
# The larger the number, the slower the operation in debug mode
|
|
15
|
+
# (see extract_stack() in format_helpers.py).
|
|
16
|
+
DEBUG_STACK_DEPTH = 10
|
|
17
|
+
|
|
18
|
+
# Number of seconds to wait for SSL handshake to complete
|
|
19
|
+
# The default timeout matches that of Nginx.
|
|
20
|
+
SSL_HANDSHAKE_TIMEOUT = 60.0
|
|
21
|
+
|
|
22
|
+
# Number of seconds to wait for SSL shutdown to complete
|
|
23
|
+
# The default timeout mimics lingering_time
|
|
24
|
+
SSL_SHUTDOWN_TIMEOUT = 30.0
|
|
25
|
+
|
|
26
|
+
# Used in sendfile fallback code. We use fallback for platforms
|
|
27
|
+
# that don't support sendfile, or for TLS connections.
|
|
28
|
+
SENDFILE_FALLBACK_READBUFFER_SIZE = 1024 * 256
|
|
29
|
+
|
|
30
|
+
FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB
|
|
31
|
+
FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB
|
|
32
|
+
|
|
33
|
+
# Default timeout for joining the threads in the threadpool
|
|
34
|
+
THREAD_JOIN_TIMEOUT = 300
|
|
35
|
+
|
|
36
|
+
# The enum should be here to break circular dependencies between
|
|
37
|
+
# base_events and sslproto
|
|
38
|
+
class _SendfileMode(enum.Enum):
|
|
39
|
+
UNSUPPORTED = enum.auto()
|
|
40
|
+
TRY_NATIVE = enum.auto()
|
|
41
|
+
FALLBACK = enum.auto()
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
__all__ = 'iscoroutinefunction', 'iscoroutine'
|
|
2
|
+
|
|
3
|
+
import collections.abc
|
|
4
|
+
import inspect
|
|
5
|
+
import os
|
|
6
|
+
import sys
|
|
7
|
+
import types
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _is_debug_mode():
|
|
11
|
+
# See: https://docs.python.org/3/library/asyncio-dev.html#asyncio-debug-mode.
|
|
12
|
+
return sys.flags.dev_mode or (not sys.flags.ignore_environment and
|
|
13
|
+
bool(os.environ.get('PYTHONASYNCIODEBUG')))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# A marker for iscoroutinefunction.
|
|
17
|
+
_is_coroutine = object()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def iscoroutinefunction(func):
|
|
21
|
+
"""Return True if func is a decorated coroutine function."""
|
|
22
|
+
return (inspect.iscoroutinefunction(func) or
|
|
23
|
+
getattr(func, '_is_coroutine', None) is _is_coroutine)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# Prioritize native coroutine check to speed-up
|
|
27
|
+
# asyncio.iscoroutine.
|
|
28
|
+
_COROUTINE_TYPES = (types.CoroutineType, collections.abc.Coroutine)
|
|
29
|
+
_iscoroutine_typecache = set()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def iscoroutine(obj):
|
|
33
|
+
"""Return True if obj is a coroutine object."""
|
|
34
|
+
if type(obj) in _iscoroutine_typecache:
|
|
35
|
+
return True
|
|
36
|
+
|
|
37
|
+
if isinstance(obj, _COROUTINE_TYPES):
|
|
38
|
+
# Just in case we don't want to cache more than 100
|
|
39
|
+
# positive types. That shouldn't ever happen, unless
|
|
40
|
+
# someone stressing the system on purpose.
|
|
41
|
+
if len(_iscoroutine_typecache) < 100:
|
|
42
|
+
_iscoroutine_typecache.add(type(obj))
|
|
43
|
+
return True
|
|
44
|
+
else:
|
|
45
|
+
return False
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _format_coroutine(coro):
|
|
49
|
+
assert iscoroutine(coro)
|
|
50
|
+
|
|
51
|
+
def get_name(coro):
|
|
52
|
+
# Coroutines compiled with Cython sometimes don't have
|
|
53
|
+
# proper __qualname__ or __name__. While that is a bug
|
|
54
|
+
# in Cython, asyncio shouldn't crash with an AttributeError
|
|
55
|
+
# in its __repr__ functions.
|
|
56
|
+
if hasattr(coro, '__qualname__') and coro.__qualname__:
|
|
57
|
+
coro_name = coro.__qualname__
|
|
58
|
+
elif hasattr(coro, '__name__') and coro.__name__:
|
|
59
|
+
coro_name = coro.__name__
|
|
60
|
+
else:
|
|
61
|
+
# Stop masking Cython bugs, expose them in a friendly way.
|
|
62
|
+
coro_name = f'<{type(coro).__name__} without __name__>'
|
|
63
|
+
return f'{coro_name}()'
|
|
64
|
+
|
|
65
|
+
def is_running(coro):
|
|
66
|
+
try:
|
|
67
|
+
return coro.cr_running
|
|
68
|
+
except AttributeError:
|
|
69
|
+
try:
|
|
70
|
+
return coro.gi_running
|
|
71
|
+
except AttributeError:
|
|
72
|
+
return False
|
|
73
|
+
|
|
74
|
+
coro_code = None
|
|
75
|
+
if hasattr(coro, 'cr_code') and coro.cr_code:
|
|
76
|
+
coro_code = coro.cr_code
|
|
77
|
+
elif hasattr(coro, 'gi_code') and coro.gi_code:
|
|
78
|
+
coro_code = coro.gi_code
|
|
79
|
+
|
|
80
|
+
coro_name = get_name(coro)
|
|
81
|
+
|
|
82
|
+
if not coro_code:
|
|
83
|
+
# Built-in types might not have __qualname__ or __name__.
|
|
84
|
+
if is_running(coro):
|
|
85
|
+
return f'{coro_name} running'
|
|
86
|
+
else:
|
|
87
|
+
return coro_name
|
|
88
|
+
|
|
89
|
+
coro_frame = None
|
|
90
|
+
if hasattr(coro, 'gi_frame') and coro.gi_frame:
|
|
91
|
+
coro_frame = coro.gi_frame
|
|
92
|
+
elif hasattr(coro, 'cr_frame') and coro.cr_frame:
|
|
93
|
+
coro_frame = coro.cr_frame
|
|
94
|
+
|
|
95
|
+
# If Cython's coroutine has a fake code object without proper
|
|
96
|
+
# co_filename -- expose that.
|
|
97
|
+
filename = coro_code.co_filename or '<empty co_filename>'
|
|
98
|
+
|
|
99
|
+
lineno = 0
|
|
100
|
+
|
|
101
|
+
if coro_frame is not None:
|
|
102
|
+
lineno = coro_frame.f_lineno
|
|
103
|
+
coro_repr = f'{coro_name} running at {filename}:{lineno}'
|
|
104
|
+
|
|
105
|
+
else:
|
|
106
|
+
lineno = coro_code.co_firstlineno
|
|
107
|
+
coro_repr = f'{coro_name} done, defined at {filename}:{lineno}'
|
|
108
|
+
|
|
109
|
+
return coro_repr
|