@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,216 @@
|
|
|
1
|
+
"""Abstract Protocol base classes."""
|
|
2
|
+
|
|
3
|
+
__all__ = (
|
|
4
|
+
'BaseProtocol', 'Protocol', 'DatagramProtocol',
|
|
5
|
+
'SubprocessProtocol', 'BufferedProtocol',
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class BaseProtocol:
|
|
10
|
+
"""Common base class for protocol interfaces.
|
|
11
|
+
|
|
12
|
+
Usually user implements protocols that derived from BaseProtocol
|
|
13
|
+
like Protocol or ProcessProtocol.
|
|
14
|
+
|
|
15
|
+
The only case when BaseProtocol should be implemented directly is
|
|
16
|
+
write-only transport like write pipe
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
__slots__ = ()
|
|
20
|
+
|
|
21
|
+
def connection_made(self, transport):
|
|
22
|
+
"""Called when a connection is made.
|
|
23
|
+
|
|
24
|
+
The argument is the transport representing the pipe connection.
|
|
25
|
+
To receive data, wait for data_received() calls.
|
|
26
|
+
When the connection is closed, connection_lost() is called.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def connection_lost(self, exc):
|
|
30
|
+
"""Called when the connection is lost or closed.
|
|
31
|
+
|
|
32
|
+
The argument is an exception object or None (the latter
|
|
33
|
+
meaning a regular EOF is received or the connection was
|
|
34
|
+
aborted or closed).
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
def pause_writing(self):
|
|
38
|
+
"""Called when the transport's buffer goes over the high-water mark.
|
|
39
|
+
|
|
40
|
+
Pause and resume calls are paired -- pause_writing() is called
|
|
41
|
+
once when the buffer goes strictly over the high-water mark
|
|
42
|
+
(even if subsequent writes increases the buffer size even
|
|
43
|
+
more), and eventually resume_writing() is called once when the
|
|
44
|
+
buffer size reaches the low-water mark.
|
|
45
|
+
|
|
46
|
+
Note that if the buffer size equals the high-water mark,
|
|
47
|
+
pause_writing() is not called -- it must go strictly over.
|
|
48
|
+
Conversely, resume_writing() is called when the buffer size is
|
|
49
|
+
equal or lower than the low-water mark. These end conditions
|
|
50
|
+
are important to ensure that things go as expected when either
|
|
51
|
+
mark is zero.
|
|
52
|
+
|
|
53
|
+
NOTE: This is the only Protocol callback that is not called
|
|
54
|
+
through EventLoop.call_soon() -- if it were, it would have no
|
|
55
|
+
effect when it's most needed (when the app keeps writing
|
|
56
|
+
without yielding until pause_writing() is called).
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
def resume_writing(self):
|
|
60
|
+
"""Called when the transport's buffer drains below the low-water mark.
|
|
61
|
+
|
|
62
|
+
See pause_writing() for details.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class Protocol(BaseProtocol):
|
|
67
|
+
"""Interface for stream protocol.
|
|
68
|
+
|
|
69
|
+
The user should implement this interface. They can inherit from
|
|
70
|
+
this class but don't need to. The implementations here do
|
|
71
|
+
nothing (they don't raise exceptions).
|
|
72
|
+
|
|
73
|
+
When the user wants to requests a transport, they pass a protocol
|
|
74
|
+
factory to a utility function (e.g., EventLoop.create_connection()).
|
|
75
|
+
|
|
76
|
+
When the connection is made successfully, connection_made() is
|
|
77
|
+
called with a suitable transport object. Then data_received()
|
|
78
|
+
will be called 0 or more times with data (bytes) received from the
|
|
79
|
+
transport; finally, connection_lost() will be called exactly once
|
|
80
|
+
with either an exception object or None as an argument.
|
|
81
|
+
|
|
82
|
+
State machine of calls:
|
|
83
|
+
|
|
84
|
+
start -> CM [-> DR*] [-> ER?] -> CL -> end
|
|
85
|
+
|
|
86
|
+
* CM: connection_made()
|
|
87
|
+
* DR: data_received()
|
|
88
|
+
* ER: eof_received()
|
|
89
|
+
* CL: connection_lost()
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
__slots__ = ()
|
|
93
|
+
|
|
94
|
+
def data_received(self, data):
|
|
95
|
+
"""Called when some data is received.
|
|
96
|
+
|
|
97
|
+
The argument is a bytes object.
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
def eof_received(self):
|
|
101
|
+
"""Called when the other end calls write_eof() or equivalent.
|
|
102
|
+
|
|
103
|
+
If this returns a false value (including None), the transport
|
|
104
|
+
will close itself. If it returns a true value, closing the
|
|
105
|
+
transport is up to the protocol.
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class BufferedProtocol(BaseProtocol):
|
|
110
|
+
"""Interface for stream protocol with manual buffer control.
|
|
111
|
+
|
|
112
|
+
Event methods, such as `create_server` and `create_connection`,
|
|
113
|
+
accept factories that return protocols that implement this interface.
|
|
114
|
+
|
|
115
|
+
The idea of BufferedProtocol is that it allows to manually allocate
|
|
116
|
+
and control the receive buffer. Event loops can then use the buffer
|
|
117
|
+
provided by the protocol to avoid unnecessary data copies. This
|
|
118
|
+
can result in noticeable performance improvement for protocols that
|
|
119
|
+
receive big amounts of data. Sophisticated protocols can allocate
|
|
120
|
+
the buffer only once at creation time.
|
|
121
|
+
|
|
122
|
+
State machine of calls:
|
|
123
|
+
|
|
124
|
+
start -> CM [-> GB [-> BU?]]* [-> ER?] -> CL -> end
|
|
125
|
+
|
|
126
|
+
* CM: connection_made()
|
|
127
|
+
* GB: get_buffer()
|
|
128
|
+
* BU: buffer_updated()
|
|
129
|
+
* ER: eof_received()
|
|
130
|
+
* CL: connection_lost()
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
__slots__ = ()
|
|
134
|
+
|
|
135
|
+
def get_buffer(self, sizehint):
|
|
136
|
+
"""Called to allocate a new receive buffer.
|
|
137
|
+
|
|
138
|
+
*sizehint* is a recommended minimal size for the returned
|
|
139
|
+
buffer. When set to -1, the buffer size can be arbitrary.
|
|
140
|
+
|
|
141
|
+
Must return an object that implements the
|
|
142
|
+
:ref:`buffer protocol <bufferobjects>`.
|
|
143
|
+
It is an error to return a zero-sized buffer.
|
|
144
|
+
"""
|
|
145
|
+
|
|
146
|
+
def buffer_updated(self, nbytes):
|
|
147
|
+
"""Called when the buffer was updated with the received data.
|
|
148
|
+
|
|
149
|
+
*nbytes* is the total number of bytes that were written to
|
|
150
|
+
the buffer.
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
def eof_received(self):
|
|
154
|
+
"""Called when the other end calls write_eof() or equivalent.
|
|
155
|
+
|
|
156
|
+
If this returns a false value (including None), the transport
|
|
157
|
+
will close itself. If it returns a true value, closing the
|
|
158
|
+
transport is up to the protocol.
|
|
159
|
+
"""
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class DatagramProtocol(BaseProtocol):
|
|
163
|
+
"""Interface for datagram protocol."""
|
|
164
|
+
|
|
165
|
+
__slots__ = ()
|
|
166
|
+
|
|
167
|
+
def datagram_received(self, data, addr):
|
|
168
|
+
"""Called when some datagram is received."""
|
|
169
|
+
|
|
170
|
+
def error_received(self, exc):
|
|
171
|
+
"""Called when a send or receive operation raises an OSError.
|
|
172
|
+
|
|
173
|
+
(Other than BlockingIOError or InterruptedError.)
|
|
174
|
+
"""
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class SubprocessProtocol(BaseProtocol):
|
|
178
|
+
"""Interface for protocol for subprocess calls."""
|
|
179
|
+
|
|
180
|
+
__slots__ = ()
|
|
181
|
+
|
|
182
|
+
def pipe_data_received(self, fd, data):
|
|
183
|
+
"""Called when the subprocess writes data into stdout/stderr pipe.
|
|
184
|
+
|
|
185
|
+
fd is int file descriptor.
|
|
186
|
+
data is bytes object.
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
def pipe_connection_lost(self, fd, exc):
|
|
190
|
+
"""Called when a file descriptor associated with the child process is
|
|
191
|
+
closed.
|
|
192
|
+
|
|
193
|
+
fd is the int file descriptor that was closed.
|
|
194
|
+
"""
|
|
195
|
+
|
|
196
|
+
def process_exited(self):
|
|
197
|
+
"""Called when subprocess has exited."""
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def _feed_data_to_buffered_proto(proto, data):
|
|
201
|
+
data_len = len(data)
|
|
202
|
+
while data_len:
|
|
203
|
+
buf = proto.get_buffer(data_len)
|
|
204
|
+
buf_len = len(buf)
|
|
205
|
+
if not buf_len:
|
|
206
|
+
raise RuntimeError('get_buffer() returned an empty buffer')
|
|
207
|
+
|
|
208
|
+
if buf_len >= data_len:
|
|
209
|
+
buf[:data_len] = data
|
|
210
|
+
proto.buffer_updated(data_len)
|
|
211
|
+
return
|
|
212
|
+
else:
|
|
213
|
+
buf[:buf_len] = data[:buf_len]
|
|
214
|
+
proto.buffer_updated(buf_len)
|
|
215
|
+
data = data[buf_len:]
|
|
216
|
+
data_len = len(data)
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
__all__ = (
|
|
2
|
+
'Queue',
|
|
3
|
+
'PriorityQueue',
|
|
4
|
+
'LifoQueue',
|
|
5
|
+
'QueueFull',
|
|
6
|
+
'QueueEmpty',
|
|
7
|
+
'QueueShutDown',
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
import collections
|
|
11
|
+
import heapq
|
|
12
|
+
from types import GenericAlias
|
|
13
|
+
|
|
14
|
+
from . import locks
|
|
15
|
+
from . import mixins
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class QueueEmpty(Exception):
|
|
19
|
+
"""Raised when Queue.get_nowait() is called on an empty Queue."""
|
|
20
|
+
pass
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class QueueFull(Exception):
|
|
24
|
+
"""Raised when the Queue.put_nowait() method is called on a full Queue."""
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class QueueShutDown(Exception):
|
|
29
|
+
"""Raised when putting on to or getting from a shut-down Queue."""
|
|
30
|
+
pass
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Queue(mixins._LoopBoundMixin):
|
|
34
|
+
"""A queue, useful for coordinating producer and consumer coroutines.
|
|
35
|
+
|
|
36
|
+
If maxsize is less than or equal to zero, the queue size is infinite.
|
|
37
|
+
If it is an integer greater than 0, then "await put()" will block when
|
|
38
|
+
the queue reaches maxsize, until an item is removed by get().
|
|
39
|
+
|
|
40
|
+
Unlike queue.Queue, you can reliably know this Queue's size
|
|
41
|
+
with qsize(), since your single-threaded asyncio application won't be
|
|
42
|
+
interrupted between calling qsize() and doing an operation on the Queue.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(self, maxsize=0):
|
|
46
|
+
self._maxsize = maxsize
|
|
47
|
+
|
|
48
|
+
# Futures.
|
|
49
|
+
self._getters = collections.deque()
|
|
50
|
+
# Futures.
|
|
51
|
+
self._putters = collections.deque()
|
|
52
|
+
self._unfinished_tasks = 0
|
|
53
|
+
self._finished = locks.Event()
|
|
54
|
+
self._finished.set()
|
|
55
|
+
self._init(maxsize)
|
|
56
|
+
self._is_shutdown = False
|
|
57
|
+
|
|
58
|
+
# These three are overridable in subclasses.
|
|
59
|
+
|
|
60
|
+
def _init(self, maxsize):
|
|
61
|
+
self._queue = collections.deque()
|
|
62
|
+
|
|
63
|
+
def _get(self):
|
|
64
|
+
return self._queue.popleft()
|
|
65
|
+
|
|
66
|
+
def _put(self, item):
|
|
67
|
+
self._queue.append(item)
|
|
68
|
+
|
|
69
|
+
# End of the overridable methods.
|
|
70
|
+
|
|
71
|
+
def _wakeup_next(self, waiters):
|
|
72
|
+
# Wake up the next waiter (if any) that isn't cancelled.
|
|
73
|
+
while waiters:
|
|
74
|
+
waiter = waiters.popleft()
|
|
75
|
+
if not waiter.done():
|
|
76
|
+
waiter.set_result(None)
|
|
77
|
+
break
|
|
78
|
+
|
|
79
|
+
def __repr__(self):
|
|
80
|
+
return f'<{type(self).__name__} at {id(self):#x} {self._format()}>'
|
|
81
|
+
|
|
82
|
+
def __str__(self):
|
|
83
|
+
return f'<{type(self).__name__} {self._format()}>'
|
|
84
|
+
|
|
85
|
+
__class_getitem__ = classmethod(GenericAlias)
|
|
86
|
+
|
|
87
|
+
def _format(self):
|
|
88
|
+
result = f'maxsize={self._maxsize!r}'
|
|
89
|
+
if getattr(self, '_queue', None):
|
|
90
|
+
result += f' _queue={list(self._queue)!r}'
|
|
91
|
+
if self._getters:
|
|
92
|
+
result += f' _getters[{len(self._getters)}]'
|
|
93
|
+
if self._putters:
|
|
94
|
+
result += f' _putters[{len(self._putters)}]'
|
|
95
|
+
if self._unfinished_tasks:
|
|
96
|
+
result += f' tasks={self._unfinished_tasks}'
|
|
97
|
+
if self._is_shutdown:
|
|
98
|
+
result += ' shutdown'
|
|
99
|
+
return result
|
|
100
|
+
|
|
101
|
+
def qsize(self):
|
|
102
|
+
"""Number of items in the queue."""
|
|
103
|
+
return len(self._queue)
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def maxsize(self):
|
|
107
|
+
"""Number of items allowed in the queue."""
|
|
108
|
+
return self._maxsize
|
|
109
|
+
|
|
110
|
+
def empty(self):
|
|
111
|
+
"""Return True if the queue is empty, False otherwise."""
|
|
112
|
+
return not self._queue
|
|
113
|
+
|
|
114
|
+
def full(self):
|
|
115
|
+
"""Return True if there are maxsize items in the queue.
|
|
116
|
+
|
|
117
|
+
Note: if the Queue was initialized with maxsize=0 (the default),
|
|
118
|
+
then full() is never True.
|
|
119
|
+
"""
|
|
120
|
+
if self._maxsize <= 0:
|
|
121
|
+
return False
|
|
122
|
+
else:
|
|
123
|
+
return self.qsize() >= self._maxsize
|
|
124
|
+
|
|
125
|
+
async def put(self, item):
|
|
126
|
+
"""Put an item into the queue.
|
|
127
|
+
|
|
128
|
+
Put an item into the queue. If the queue is full, wait until a free
|
|
129
|
+
slot is available before adding item.
|
|
130
|
+
|
|
131
|
+
Raises QueueShutDown if the queue has been shut down.
|
|
132
|
+
"""
|
|
133
|
+
while self.full():
|
|
134
|
+
if self._is_shutdown:
|
|
135
|
+
raise QueueShutDown
|
|
136
|
+
putter = self._get_loop().create_future()
|
|
137
|
+
self._putters.append(putter)
|
|
138
|
+
try:
|
|
139
|
+
await putter
|
|
140
|
+
except:
|
|
141
|
+
putter.cancel() # Just in case putter is not done yet.
|
|
142
|
+
try:
|
|
143
|
+
# Clean self._putters from canceled putters.
|
|
144
|
+
self._putters.remove(putter)
|
|
145
|
+
except ValueError:
|
|
146
|
+
# The putter could be removed from self._putters by a
|
|
147
|
+
# previous get_nowait call or a shutdown call.
|
|
148
|
+
pass
|
|
149
|
+
if not self.full() and not putter.cancelled():
|
|
150
|
+
# We were woken up by get_nowait(), but can't take
|
|
151
|
+
# the call. Wake up the next in line.
|
|
152
|
+
self._wakeup_next(self._putters)
|
|
153
|
+
raise
|
|
154
|
+
return self.put_nowait(item)
|
|
155
|
+
|
|
156
|
+
def put_nowait(self, item):
|
|
157
|
+
"""Put an item into the queue without blocking.
|
|
158
|
+
|
|
159
|
+
If no free slot is immediately available, raise QueueFull.
|
|
160
|
+
|
|
161
|
+
Raises QueueShutDown if the queue has been shut down.
|
|
162
|
+
"""
|
|
163
|
+
if self._is_shutdown:
|
|
164
|
+
raise QueueShutDown
|
|
165
|
+
if self.full():
|
|
166
|
+
raise QueueFull
|
|
167
|
+
self._put(item)
|
|
168
|
+
self._unfinished_tasks += 1
|
|
169
|
+
self._finished.clear()
|
|
170
|
+
self._wakeup_next(self._getters)
|
|
171
|
+
|
|
172
|
+
async def get(self):
|
|
173
|
+
"""Remove and return an item from the queue.
|
|
174
|
+
|
|
175
|
+
If queue is empty, wait until an item is available.
|
|
176
|
+
|
|
177
|
+
Raises QueueShutDown if the queue has been shut down and is empty,
|
|
178
|
+
or if the queue has been shut down immediately.
|
|
179
|
+
"""
|
|
180
|
+
while self.empty():
|
|
181
|
+
if self._is_shutdown and self.empty():
|
|
182
|
+
raise QueueShutDown
|
|
183
|
+
getter = self._get_loop().create_future()
|
|
184
|
+
self._getters.append(getter)
|
|
185
|
+
try:
|
|
186
|
+
await getter
|
|
187
|
+
except:
|
|
188
|
+
getter.cancel() # Just in case getter is not done yet.
|
|
189
|
+
try:
|
|
190
|
+
# Clean self._getters from canceled getters.
|
|
191
|
+
self._getters.remove(getter)
|
|
192
|
+
except ValueError:
|
|
193
|
+
# The getter could be removed from self._getters by a
|
|
194
|
+
# previous put_nowait call, or a shutdown call.
|
|
195
|
+
pass
|
|
196
|
+
if not self.empty() and not getter.cancelled():
|
|
197
|
+
# We were woken up by put_nowait(), but can't take
|
|
198
|
+
# the call. Wake up the next in line.
|
|
199
|
+
self._wakeup_next(self._getters)
|
|
200
|
+
raise
|
|
201
|
+
return self.get_nowait()
|
|
202
|
+
|
|
203
|
+
def get_nowait(self):
|
|
204
|
+
"""Remove and return an item from the queue.
|
|
205
|
+
|
|
206
|
+
Return an item if one is immediately available, else raise
|
|
207
|
+
QueueEmpty.
|
|
208
|
+
|
|
209
|
+
Raises QueueShutDown if the queue has been shut down and is empty,
|
|
210
|
+
or if the queue has been shut down immediately.
|
|
211
|
+
"""
|
|
212
|
+
if self.empty():
|
|
213
|
+
if self._is_shutdown:
|
|
214
|
+
raise QueueShutDown
|
|
215
|
+
raise QueueEmpty
|
|
216
|
+
item = self._get()
|
|
217
|
+
self._wakeup_next(self._putters)
|
|
218
|
+
return item
|
|
219
|
+
|
|
220
|
+
def task_done(self):
|
|
221
|
+
"""Indicate that a formerly enqueued task is complete.
|
|
222
|
+
|
|
223
|
+
Used by queue consumers. For each get() used to fetch a task,
|
|
224
|
+
a subsequent call to task_done() tells the queue that the processing
|
|
225
|
+
on the task is complete.
|
|
226
|
+
|
|
227
|
+
If a join() is currently blocking, it will resume when all items
|
|
228
|
+
have been processed (meaning that a task_done() call was received
|
|
229
|
+
for every item that had been put() into the queue).
|
|
230
|
+
|
|
231
|
+
Raises ValueError if called more times than there were items placed
|
|
232
|
+
in the queue.
|
|
233
|
+
"""
|
|
234
|
+
if self._unfinished_tasks <= 0:
|
|
235
|
+
raise ValueError('task_done() called too many times')
|
|
236
|
+
self._unfinished_tasks -= 1
|
|
237
|
+
if self._unfinished_tasks == 0:
|
|
238
|
+
self._finished.set()
|
|
239
|
+
|
|
240
|
+
async def join(self):
|
|
241
|
+
"""Block until all items in the queue have been gotten and processed.
|
|
242
|
+
|
|
243
|
+
The count of unfinished tasks goes up whenever an item is added to
|
|
244
|
+
the queue. The count goes down whenever a consumer calls
|
|
245
|
+
task_done() to indicate that the item was retrieved and all work on
|
|
246
|
+
it is complete. When the count of unfinished tasks drops to zero,
|
|
247
|
+
join() unblocks.
|
|
248
|
+
"""
|
|
249
|
+
if self._unfinished_tasks > 0:
|
|
250
|
+
await self._finished.wait()
|
|
251
|
+
|
|
252
|
+
def shutdown(self, immediate=False):
|
|
253
|
+
"""Shut-down the queue, making queue gets and puts raise QueueShutDown.
|
|
254
|
+
|
|
255
|
+
By default, gets will only raise once the queue is empty. Set
|
|
256
|
+
'immediate' to True to make gets raise immediately instead.
|
|
257
|
+
|
|
258
|
+
All blocked callers of put() and get() will be unblocked.
|
|
259
|
+
|
|
260
|
+
If 'immediate', the queue is drained and unfinished tasks
|
|
261
|
+
is reduced by the number of drained tasks. If unfinished tasks
|
|
262
|
+
is reduced to zero, callers of Queue.join are unblocked.
|
|
263
|
+
"""
|
|
264
|
+
self._is_shutdown = True
|
|
265
|
+
if immediate:
|
|
266
|
+
while not self.empty():
|
|
267
|
+
self._get()
|
|
268
|
+
if self._unfinished_tasks > 0:
|
|
269
|
+
self._unfinished_tasks -= 1
|
|
270
|
+
if self._unfinished_tasks == 0:
|
|
271
|
+
self._finished.set()
|
|
272
|
+
# All getters need to re-check queue-empty to raise ShutDown
|
|
273
|
+
while self._getters:
|
|
274
|
+
getter = self._getters.popleft()
|
|
275
|
+
if not getter.done():
|
|
276
|
+
getter.set_result(None)
|
|
277
|
+
while self._putters:
|
|
278
|
+
putter = self._putters.popleft()
|
|
279
|
+
if not putter.done():
|
|
280
|
+
putter.set_result(None)
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
class PriorityQueue(Queue):
|
|
284
|
+
"""A subclass of Queue; retrieves entries in priority order (lowest first).
|
|
285
|
+
|
|
286
|
+
Entries are typically tuples of the form: (priority number, data).
|
|
287
|
+
"""
|
|
288
|
+
|
|
289
|
+
def _init(self, maxsize):
|
|
290
|
+
self._queue = []
|
|
291
|
+
|
|
292
|
+
def _put(self, item, heappush=heapq.heappush):
|
|
293
|
+
heappush(self._queue, item)
|
|
294
|
+
|
|
295
|
+
def _get(self, heappop=heapq.heappop):
|
|
296
|
+
return heappop(self._queue)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
class LifoQueue(Queue):
|
|
300
|
+
"""A subclass of Queue that retrieves most recently added entries first."""
|
|
301
|
+
|
|
302
|
+
def _init(self, maxsize):
|
|
303
|
+
self._queue = []
|
|
304
|
+
|
|
305
|
+
def _put(self, item):
|
|
306
|
+
self._queue.append(item)
|
|
307
|
+
|
|
308
|
+
def _get(self):
|
|
309
|
+
return self._queue.pop()
|