@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,256 @@
|
|
|
1
|
+
"""Test result object"""
|
|
2
|
+
|
|
3
|
+
import io
|
|
4
|
+
import sys
|
|
5
|
+
import traceback
|
|
6
|
+
|
|
7
|
+
from . import util
|
|
8
|
+
from functools import wraps
|
|
9
|
+
|
|
10
|
+
__unittest = True
|
|
11
|
+
|
|
12
|
+
def failfast(method):
|
|
13
|
+
@wraps(method)
|
|
14
|
+
def inner(self, *args, **kw):
|
|
15
|
+
if getattr(self, 'failfast', False):
|
|
16
|
+
self.stop()
|
|
17
|
+
return method(self, *args, **kw)
|
|
18
|
+
return inner
|
|
19
|
+
|
|
20
|
+
STDOUT_LINE = '\nStdout:\n%s'
|
|
21
|
+
STDERR_LINE = '\nStderr:\n%s'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TestResult(object):
|
|
25
|
+
"""Holder for test result information.
|
|
26
|
+
|
|
27
|
+
Test results are automatically managed by the TestCase and TestSuite
|
|
28
|
+
classes, and do not need to be explicitly manipulated by writers of tests.
|
|
29
|
+
|
|
30
|
+
Each instance holds the total number of tests run, and collections of
|
|
31
|
+
failures and errors that occurred among those test runs. The collections
|
|
32
|
+
contain tuples of (testcase, exceptioninfo), where exceptioninfo is the
|
|
33
|
+
formatted traceback of the error that occurred.
|
|
34
|
+
"""
|
|
35
|
+
_previousTestClass = None
|
|
36
|
+
_testRunEntered = False
|
|
37
|
+
_moduleSetUpFailed = False
|
|
38
|
+
def __init__(self, stream=None, descriptions=None, verbosity=None):
|
|
39
|
+
self.failfast = False
|
|
40
|
+
self.failures = []
|
|
41
|
+
self.errors = []
|
|
42
|
+
self.testsRun = 0
|
|
43
|
+
self.skipped = []
|
|
44
|
+
self.expectedFailures = []
|
|
45
|
+
self.unexpectedSuccesses = []
|
|
46
|
+
self.collectedDurations = []
|
|
47
|
+
self.shouldStop = False
|
|
48
|
+
self.buffer = False
|
|
49
|
+
self.tb_locals = False
|
|
50
|
+
self._stdout_buffer = None
|
|
51
|
+
self._stderr_buffer = None
|
|
52
|
+
self._original_stdout = sys.stdout
|
|
53
|
+
self._original_stderr = sys.stderr
|
|
54
|
+
self._mirrorOutput = False
|
|
55
|
+
|
|
56
|
+
def printErrors(self):
|
|
57
|
+
"Called by TestRunner after test run"
|
|
58
|
+
|
|
59
|
+
def startTest(self, test):
|
|
60
|
+
"Called when the given test is about to be run"
|
|
61
|
+
self.testsRun += 1
|
|
62
|
+
self._mirrorOutput = False
|
|
63
|
+
self._setupStdout()
|
|
64
|
+
|
|
65
|
+
def _setupStdout(self):
|
|
66
|
+
if self.buffer:
|
|
67
|
+
if self._stderr_buffer is None:
|
|
68
|
+
self._stderr_buffer = io.StringIO()
|
|
69
|
+
self._stdout_buffer = io.StringIO()
|
|
70
|
+
sys.stdout = self._stdout_buffer
|
|
71
|
+
sys.stderr = self._stderr_buffer
|
|
72
|
+
|
|
73
|
+
def startTestRun(self):
|
|
74
|
+
"""Called once before any tests are executed.
|
|
75
|
+
|
|
76
|
+
See startTest for a method called before each test.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
def stopTest(self, test):
|
|
80
|
+
"""Called when the given test has been run"""
|
|
81
|
+
self._restoreStdout()
|
|
82
|
+
self._mirrorOutput = False
|
|
83
|
+
|
|
84
|
+
def _restoreStdout(self):
|
|
85
|
+
if self.buffer:
|
|
86
|
+
if self._mirrorOutput:
|
|
87
|
+
output = sys.stdout.getvalue()
|
|
88
|
+
error = sys.stderr.getvalue()
|
|
89
|
+
if output:
|
|
90
|
+
if not output.endswith('\n'):
|
|
91
|
+
output += '\n'
|
|
92
|
+
self._original_stdout.write(STDOUT_LINE % output)
|
|
93
|
+
if error:
|
|
94
|
+
if not error.endswith('\n'):
|
|
95
|
+
error += '\n'
|
|
96
|
+
self._original_stderr.write(STDERR_LINE % error)
|
|
97
|
+
|
|
98
|
+
sys.stdout = self._original_stdout
|
|
99
|
+
sys.stderr = self._original_stderr
|
|
100
|
+
self._stdout_buffer.seek(0)
|
|
101
|
+
self._stdout_buffer.truncate()
|
|
102
|
+
self._stderr_buffer.seek(0)
|
|
103
|
+
self._stderr_buffer.truncate()
|
|
104
|
+
|
|
105
|
+
def stopTestRun(self):
|
|
106
|
+
"""Called once after all tests are executed.
|
|
107
|
+
|
|
108
|
+
See stopTest for a method called after each test.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
@failfast
|
|
112
|
+
def addError(self, test, err):
|
|
113
|
+
"""Called when an error has occurred. 'err' is a tuple of values as
|
|
114
|
+
returned by sys.exc_info().
|
|
115
|
+
"""
|
|
116
|
+
self.errors.append((test, self._exc_info_to_string(err, test)))
|
|
117
|
+
self._mirrorOutput = True
|
|
118
|
+
|
|
119
|
+
@failfast
|
|
120
|
+
def addFailure(self, test, err):
|
|
121
|
+
"""Called when an error has occurred. 'err' is a tuple of values as
|
|
122
|
+
returned by sys.exc_info()."""
|
|
123
|
+
self.failures.append((test, self._exc_info_to_string(err, test)))
|
|
124
|
+
self._mirrorOutput = True
|
|
125
|
+
|
|
126
|
+
def addSubTest(self, test, subtest, err):
|
|
127
|
+
"""Called at the end of a subtest.
|
|
128
|
+
'err' is None if the subtest ended successfully, otherwise it's a
|
|
129
|
+
tuple of values as returned by sys.exc_info().
|
|
130
|
+
"""
|
|
131
|
+
# By default, we don't do anything with successful subtests, but
|
|
132
|
+
# more sophisticated test results might want to record them.
|
|
133
|
+
if err is not None:
|
|
134
|
+
if getattr(self, 'failfast', False):
|
|
135
|
+
self.stop()
|
|
136
|
+
if issubclass(err[0], test.failureException):
|
|
137
|
+
errors = self.failures
|
|
138
|
+
else:
|
|
139
|
+
errors = self.errors
|
|
140
|
+
errors.append((subtest, self._exc_info_to_string(err, test)))
|
|
141
|
+
self._mirrorOutput = True
|
|
142
|
+
|
|
143
|
+
def addSuccess(self, test):
|
|
144
|
+
"Called when a test has completed successfully"
|
|
145
|
+
pass
|
|
146
|
+
|
|
147
|
+
def addSkip(self, test, reason):
|
|
148
|
+
"""Called when a test is skipped."""
|
|
149
|
+
self.skipped.append((test, reason))
|
|
150
|
+
|
|
151
|
+
def addExpectedFailure(self, test, err):
|
|
152
|
+
"""Called when an expected failure/error occurred."""
|
|
153
|
+
self.expectedFailures.append(
|
|
154
|
+
(test, self._exc_info_to_string(err, test)))
|
|
155
|
+
|
|
156
|
+
@failfast
|
|
157
|
+
def addUnexpectedSuccess(self, test):
|
|
158
|
+
"""Called when a test was expected to fail, but succeed."""
|
|
159
|
+
self.unexpectedSuccesses.append(test)
|
|
160
|
+
|
|
161
|
+
def addDuration(self, test, elapsed):
|
|
162
|
+
"""Called when a test finished to run, regardless of its outcome.
|
|
163
|
+
*test* is the test case corresponding to the test method.
|
|
164
|
+
*elapsed* is the time represented in seconds, and it includes the
|
|
165
|
+
execution of cleanup functions.
|
|
166
|
+
"""
|
|
167
|
+
# support for a TextTestRunner using an old TestResult class
|
|
168
|
+
if hasattr(self, "collectedDurations"):
|
|
169
|
+
# Pass test repr and not the test object itself to avoid resources leak
|
|
170
|
+
self.collectedDurations.append((str(test), elapsed))
|
|
171
|
+
|
|
172
|
+
def wasSuccessful(self):
|
|
173
|
+
"""Tells whether or not this result was a success."""
|
|
174
|
+
# The hasattr check is for test_result's OldResult test. That
|
|
175
|
+
# way this method works on objects that lack the attribute.
|
|
176
|
+
# (where would such result instances come from? old stored pickles?)
|
|
177
|
+
return ((len(self.failures) == len(self.errors) == 0) and
|
|
178
|
+
(not hasattr(self, 'unexpectedSuccesses') or
|
|
179
|
+
len(self.unexpectedSuccesses) == 0))
|
|
180
|
+
|
|
181
|
+
def stop(self):
|
|
182
|
+
"""Indicates that the tests should be aborted."""
|
|
183
|
+
self.shouldStop = True
|
|
184
|
+
|
|
185
|
+
def _exc_info_to_string(self, err, test):
|
|
186
|
+
"""Converts a sys.exc_info()-style tuple of values into a string."""
|
|
187
|
+
exctype, value, tb = err
|
|
188
|
+
tb = self._clean_tracebacks(exctype, value, tb, test)
|
|
189
|
+
tb_e = traceback.TracebackException(
|
|
190
|
+
exctype, value, tb,
|
|
191
|
+
capture_locals=self.tb_locals, compact=True)
|
|
192
|
+
msgLines = list(tb_e.format())
|
|
193
|
+
|
|
194
|
+
if self.buffer:
|
|
195
|
+
output = sys.stdout.getvalue()
|
|
196
|
+
error = sys.stderr.getvalue()
|
|
197
|
+
if output:
|
|
198
|
+
if not output.endswith('\n'):
|
|
199
|
+
output += '\n'
|
|
200
|
+
msgLines.append(STDOUT_LINE % output)
|
|
201
|
+
if error:
|
|
202
|
+
if not error.endswith('\n'):
|
|
203
|
+
error += '\n'
|
|
204
|
+
msgLines.append(STDERR_LINE % error)
|
|
205
|
+
return ''.join(msgLines)
|
|
206
|
+
|
|
207
|
+
def _clean_tracebacks(self, exctype, value, tb, test):
|
|
208
|
+
ret = None
|
|
209
|
+
first = True
|
|
210
|
+
excs = [(exctype, value, tb)]
|
|
211
|
+
seen = {id(value)} # Detect loops in chained exceptions.
|
|
212
|
+
while excs:
|
|
213
|
+
(exctype, value, tb) = excs.pop()
|
|
214
|
+
# Skip test runner traceback levels
|
|
215
|
+
while tb and self._is_relevant_tb_level(tb):
|
|
216
|
+
tb = tb.tb_next
|
|
217
|
+
|
|
218
|
+
# Skip assert*() traceback levels
|
|
219
|
+
if exctype is test.failureException:
|
|
220
|
+
self._remove_unittest_tb_frames(tb)
|
|
221
|
+
|
|
222
|
+
if first:
|
|
223
|
+
ret = tb
|
|
224
|
+
first = False
|
|
225
|
+
else:
|
|
226
|
+
value.__traceback__ = tb
|
|
227
|
+
|
|
228
|
+
if value is not None:
|
|
229
|
+
for c in (value.__cause__, value.__context__):
|
|
230
|
+
if c is not None and id(c) not in seen:
|
|
231
|
+
excs.append((type(c), c, c.__traceback__))
|
|
232
|
+
seen.add(id(c))
|
|
233
|
+
return ret
|
|
234
|
+
|
|
235
|
+
def _is_relevant_tb_level(self, tb):
|
|
236
|
+
return '__unittest' in tb.tb_frame.f_globals
|
|
237
|
+
|
|
238
|
+
def _remove_unittest_tb_frames(self, tb):
|
|
239
|
+
'''Truncates usercode tb at the first unittest frame.
|
|
240
|
+
|
|
241
|
+
If the first frame of the traceback is in user code,
|
|
242
|
+
the prefix up to the first unittest frame is returned.
|
|
243
|
+
If the first frame is already in the unittest module,
|
|
244
|
+
the traceback is not modified.
|
|
245
|
+
'''
|
|
246
|
+
prev = None
|
|
247
|
+
while tb and not self._is_relevant_tb_level(tb):
|
|
248
|
+
prev = tb
|
|
249
|
+
tb = tb.tb_next
|
|
250
|
+
if prev is not None:
|
|
251
|
+
prev.tb_next = None
|
|
252
|
+
|
|
253
|
+
def __repr__(self):
|
|
254
|
+
return ("<%s run=%i errors=%i failures=%i>" %
|
|
255
|
+
(util.strclass(self.__class__), self.testsRun, len(self.errors),
|
|
256
|
+
len(self.failures)))
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"""Running tests"""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
import time
|
|
5
|
+
import warnings
|
|
6
|
+
|
|
7
|
+
from . import result
|
|
8
|
+
from .case import _SubTest
|
|
9
|
+
from .signals import registerResult
|
|
10
|
+
|
|
11
|
+
__unittest = True
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class _WritelnDecorator(object):
|
|
15
|
+
"""Used to decorate file-like objects with a handy 'writeln' method"""
|
|
16
|
+
def __init__(self,stream):
|
|
17
|
+
self.stream = stream
|
|
18
|
+
|
|
19
|
+
def __getattr__(self, attr):
|
|
20
|
+
if attr in ('stream', '__getstate__'):
|
|
21
|
+
raise AttributeError(attr)
|
|
22
|
+
return getattr(self.stream,attr)
|
|
23
|
+
|
|
24
|
+
def writeln(self, arg=None):
|
|
25
|
+
if arg:
|
|
26
|
+
self.write(arg)
|
|
27
|
+
self.write('\n') # text-mode streams translate to \r\n if needed
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class TextTestResult(result.TestResult):
|
|
31
|
+
"""A test result class that can print formatted text results to a stream.
|
|
32
|
+
|
|
33
|
+
Used by TextTestRunner.
|
|
34
|
+
"""
|
|
35
|
+
separator1 = '=' * 70
|
|
36
|
+
separator2 = '-' * 70
|
|
37
|
+
|
|
38
|
+
def __init__(self, stream, descriptions, verbosity, *, durations=None):
|
|
39
|
+
"""Construct a TextTestResult. Subclasses should accept **kwargs
|
|
40
|
+
to ensure compatibility as the interface changes."""
|
|
41
|
+
super(TextTestResult, self).__init__(stream, descriptions, verbosity)
|
|
42
|
+
self.stream = stream
|
|
43
|
+
self.showAll = verbosity > 1
|
|
44
|
+
self.dots = verbosity == 1
|
|
45
|
+
self.descriptions = descriptions
|
|
46
|
+
self._newline = True
|
|
47
|
+
self.durations = durations
|
|
48
|
+
|
|
49
|
+
def getDescription(self, test):
|
|
50
|
+
doc_first_line = test.shortDescription()
|
|
51
|
+
if self.descriptions and doc_first_line:
|
|
52
|
+
return '\n'.join((str(test), doc_first_line))
|
|
53
|
+
else:
|
|
54
|
+
return str(test)
|
|
55
|
+
|
|
56
|
+
def startTest(self, test):
|
|
57
|
+
super(TextTestResult, self).startTest(test)
|
|
58
|
+
if self.showAll:
|
|
59
|
+
self.stream.write(self.getDescription(test))
|
|
60
|
+
self.stream.write(" ... ")
|
|
61
|
+
self.stream.flush()
|
|
62
|
+
self._newline = False
|
|
63
|
+
|
|
64
|
+
def _write_status(self, test, status):
|
|
65
|
+
is_subtest = isinstance(test, _SubTest)
|
|
66
|
+
if is_subtest or self._newline:
|
|
67
|
+
if not self._newline:
|
|
68
|
+
self.stream.writeln()
|
|
69
|
+
if is_subtest:
|
|
70
|
+
self.stream.write(" ")
|
|
71
|
+
self.stream.write(self.getDescription(test))
|
|
72
|
+
self.stream.write(" ... ")
|
|
73
|
+
self.stream.writeln(status)
|
|
74
|
+
self.stream.flush()
|
|
75
|
+
self._newline = True
|
|
76
|
+
|
|
77
|
+
def addSubTest(self, test, subtest, err):
|
|
78
|
+
if err is not None:
|
|
79
|
+
if self.showAll:
|
|
80
|
+
if issubclass(err[0], subtest.failureException):
|
|
81
|
+
self._write_status(subtest, "FAIL")
|
|
82
|
+
else:
|
|
83
|
+
self._write_status(subtest, "ERROR")
|
|
84
|
+
elif self.dots:
|
|
85
|
+
if issubclass(err[0], subtest.failureException):
|
|
86
|
+
self.stream.write('F')
|
|
87
|
+
else:
|
|
88
|
+
self.stream.write('E')
|
|
89
|
+
self.stream.flush()
|
|
90
|
+
super(TextTestResult, self).addSubTest(test, subtest, err)
|
|
91
|
+
|
|
92
|
+
def addSuccess(self, test):
|
|
93
|
+
super(TextTestResult, self).addSuccess(test)
|
|
94
|
+
if self.showAll:
|
|
95
|
+
self._write_status(test, "ok")
|
|
96
|
+
elif self.dots:
|
|
97
|
+
self.stream.write('.')
|
|
98
|
+
self.stream.flush()
|
|
99
|
+
|
|
100
|
+
def addError(self, test, err):
|
|
101
|
+
super(TextTestResult, self).addError(test, err)
|
|
102
|
+
if self.showAll:
|
|
103
|
+
self._write_status(test, "ERROR")
|
|
104
|
+
elif self.dots:
|
|
105
|
+
self.stream.write('E')
|
|
106
|
+
self.stream.flush()
|
|
107
|
+
|
|
108
|
+
def addFailure(self, test, err):
|
|
109
|
+
super(TextTestResult, self).addFailure(test, err)
|
|
110
|
+
if self.showAll:
|
|
111
|
+
self._write_status(test, "FAIL")
|
|
112
|
+
elif self.dots:
|
|
113
|
+
self.stream.write('F')
|
|
114
|
+
self.stream.flush()
|
|
115
|
+
|
|
116
|
+
def addSkip(self, test, reason):
|
|
117
|
+
super(TextTestResult, self).addSkip(test, reason)
|
|
118
|
+
if self.showAll:
|
|
119
|
+
self._write_status(test, "skipped {0!r}".format(reason))
|
|
120
|
+
elif self.dots:
|
|
121
|
+
self.stream.write("s")
|
|
122
|
+
self.stream.flush()
|
|
123
|
+
|
|
124
|
+
def addExpectedFailure(self, test, err):
|
|
125
|
+
super(TextTestResult, self).addExpectedFailure(test, err)
|
|
126
|
+
if self.showAll:
|
|
127
|
+
self.stream.writeln("expected failure")
|
|
128
|
+
self.stream.flush()
|
|
129
|
+
elif self.dots:
|
|
130
|
+
self.stream.write("x")
|
|
131
|
+
self.stream.flush()
|
|
132
|
+
|
|
133
|
+
def addUnexpectedSuccess(self, test):
|
|
134
|
+
super(TextTestResult, self).addUnexpectedSuccess(test)
|
|
135
|
+
if self.showAll:
|
|
136
|
+
self.stream.writeln("unexpected success")
|
|
137
|
+
self.stream.flush()
|
|
138
|
+
elif self.dots:
|
|
139
|
+
self.stream.write("u")
|
|
140
|
+
self.stream.flush()
|
|
141
|
+
|
|
142
|
+
def printErrors(self):
|
|
143
|
+
if self.dots or self.showAll:
|
|
144
|
+
self.stream.writeln()
|
|
145
|
+
self.stream.flush()
|
|
146
|
+
self.printErrorList('ERROR', self.errors)
|
|
147
|
+
self.printErrorList('FAIL', self.failures)
|
|
148
|
+
unexpectedSuccesses = getattr(self, 'unexpectedSuccesses', ())
|
|
149
|
+
if unexpectedSuccesses:
|
|
150
|
+
self.stream.writeln(self.separator1)
|
|
151
|
+
for test in unexpectedSuccesses:
|
|
152
|
+
self.stream.writeln(f"UNEXPECTED SUCCESS: {self.getDescription(test)}")
|
|
153
|
+
self.stream.flush()
|
|
154
|
+
|
|
155
|
+
def printErrorList(self, flavour, errors):
|
|
156
|
+
for test, err in errors:
|
|
157
|
+
self.stream.writeln(self.separator1)
|
|
158
|
+
self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))
|
|
159
|
+
self.stream.writeln(self.separator2)
|
|
160
|
+
self.stream.writeln("%s" % err)
|
|
161
|
+
self.stream.flush()
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class TextTestRunner(object):
|
|
165
|
+
"""A test runner class that displays results in textual form.
|
|
166
|
+
|
|
167
|
+
It prints out the names of tests as they are run, errors as they
|
|
168
|
+
occur, and a summary of the results at the end of the test run.
|
|
169
|
+
"""
|
|
170
|
+
resultclass = TextTestResult
|
|
171
|
+
|
|
172
|
+
def __init__(self, stream=None, descriptions=True, verbosity=1,
|
|
173
|
+
failfast=False, buffer=False, resultclass=None, warnings=None,
|
|
174
|
+
*, tb_locals=False, durations=None):
|
|
175
|
+
"""Construct a TextTestRunner.
|
|
176
|
+
|
|
177
|
+
Subclasses should accept **kwargs to ensure compatibility as the
|
|
178
|
+
interface changes.
|
|
179
|
+
"""
|
|
180
|
+
if stream is None:
|
|
181
|
+
stream = sys.stderr
|
|
182
|
+
self.stream = _WritelnDecorator(stream)
|
|
183
|
+
self.descriptions = descriptions
|
|
184
|
+
self.verbosity = verbosity
|
|
185
|
+
self.failfast = failfast
|
|
186
|
+
self.buffer = buffer
|
|
187
|
+
self.tb_locals = tb_locals
|
|
188
|
+
self.durations = durations
|
|
189
|
+
self.warnings = warnings
|
|
190
|
+
if resultclass is not None:
|
|
191
|
+
self.resultclass = resultclass
|
|
192
|
+
|
|
193
|
+
def _makeResult(self):
|
|
194
|
+
try:
|
|
195
|
+
return self.resultclass(self.stream, self.descriptions,
|
|
196
|
+
self.verbosity, durations=self.durations)
|
|
197
|
+
except TypeError:
|
|
198
|
+
# didn't accept the durations argument
|
|
199
|
+
return self.resultclass(self.stream, self.descriptions,
|
|
200
|
+
self.verbosity)
|
|
201
|
+
|
|
202
|
+
def _printDurations(self, result):
|
|
203
|
+
if not result.collectedDurations:
|
|
204
|
+
return
|
|
205
|
+
ls = sorted(result.collectedDurations, key=lambda x: x[1],
|
|
206
|
+
reverse=True)
|
|
207
|
+
if self.durations > 0:
|
|
208
|
+
ls = ls[:self.durations]
|
|
209
|
+
self.stream.writeln("Slowest test durations")
|
|
210
|
+
if hasattr(result, 'separator2'):
|
|
211
|
+
self.stream.writeln(result.separator2)
|
|
212
|
+
hidden = False
|
|
213
|
+
for test, elapsed in ls:
|
|
214
|
+
if self.verbosity < 2 and elapsed < 0.001:
|
|
215
|
+
hidden = True
|
|
216
|
+
continue
|
|
217
|
+
self.stream.writeln("%-10s %s" % ("%.3fs" % elapsed, test))
|
|
218
|
+
if hidden:
|
|
219
|
+
self.stream.writeln("\n(durations < 0.001s were hidden; "
|
|
220
|
+
"use -v to show these durations)")
|
|
221
|
+
else:
|
|
222
|
+
self.stream.writeln("")
|
|
223
|
+
|
|
224
|
+
def run(self, test):
|
|
225
|
+
"Run the given test case or test suite."
|
|
226
|
+
result = self._makeResult()
|
|
227
|
+
registerResult(result)
|
|
228
|
+
result.failfast = self.failfast
|
|
229
|
+
result.buffer = self.buffer
|
|
230
|
+
result.tb_locals = self.tb_locals
|
|
231
|
+
with warnings.catch_warnings():
|
|
232
|
+
if self.warnings:
|
|
233
|
+
# if self.warnings is set, use it to filter all the warnings
|
|
234
|
+
warnings.simplefilter(self.warnings)
|
|
235
|
+
startTime = time.perf_counter()
|
|
236
|
+
startTestRun = getattr(result, 'startTestRun', None)
|
|
237
|
+
if startTestRun is not None:
|
|
238
|
+
startTestRun()
|
|
239
|
+
try:
|
|
240
|
+
test(result)
|
|
241
|
+
finally:
|
|
242
|
+
stopTestRun = getattr(result, 'stopTestRun', None)
|
|
243
|
+
if stopTestRun is not None:
|
|
244
|
+
stopTestRun()
|
|
245
|
+
stopTime = time.perf_counter()
|
|
246
|
+
timeTaken = stopTime - startTime
|
|
247
|
+
result.printErrors()
|
|
248
|
+
if self.durations is not None:
|
|
249
|
+
self._printDurations(result)
|
|
250
|
+
|
|
251
|
+
if hasattr(result, 'separator2'):
|
|
252
|
+
self.stream.writeln(result.separator2)
|
|
253
|
+
|
|
254
|
+
run = result.testsRun
|
|
255
|
+
self.stream.writeln("Ran %d test%s in %.3fs" %
|
|
256
|
+
(run, run != 1 and "s" or "", timeTaken))
|
|
257
|
+
self.stream.writeln()
|
|
258
|
+
|
|
259
|
+
expectedFails = unexpectedSuccesses = skipped = 0
|
|
260
|
+
try:
|
|
261
|
+
results = map(len, (result.expectedFailures,
|
|
262
|
+
result.unexpectedSuccesses,
|
|
263
|
+
result.skipped))
|
|
264
|
+
except AttributeError:
|
|
265
|
+
pass
|
|
266
|
+
else:
|
|
267
|
+
expectedFails, unexpectedSuccesses, skipped = results
|
|
268
|
+
|
|
269
|
+
infos = []
|
|
270
|
+
if not result.wasSuccessful():
|
|
271
|
+
self.stream.write("FAILED")
|
|
272
|
+
failed, errored = len(result.failures), len(result.errors)
|
|
273
|
+
if failed:
|
|
274
|
+
infos.append("failures=%d" % failed)
|
|
275
|
+
if errored:
|
|
276
|
+
infos.append("errors=%d" % errored)
|
|
277
|
+
elif run == 0 and not skipped:
|
|
278
|
+
self.stream.write("NO TESTS RAN")
|
|
279
|
+
else:
|
|
280
|
+
self.stream.write("OK")
|
|
281
|
+
if skipped:
|
|
282
|
+
infos.append("skipped=%d" % skipped)
|
|
283
|
+
if expectedFails:
|
|
284
|
+
infos.append("expected failures=%d" % expectedFails)
|
|
285
|
+
if unexpectedSuccesses:
|
|
286
|
+
infos.append("unexpected successes=%d" % unexpectedSuccesses)
|
|
287
|
+
if infos:
|
|
288
|
+
self.stream.writeln(" (%s)" % (", ".join(infos),))
|
|
289
|
+
else:
|
|
290
|
+
self.stream.write("\n")
|
|
291
|
+
self.stream.flush()
|
|
292
|
+
return result
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import signal
|
|
2
|
+
import weakref
|
|
3
|
+
|
|
4
|
+
from functools import wraps
|
|
5
|
+
|
|
6
|
+
__unittest = True
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class _InterruptHandler(object):
|
|
10
|
+
def __init__(self, default_handler):
|
|
11
|
+
self.called = False
|
|
12
|
+
self.original_handler = default_handler
|
|
13
|
+
if isinstance(default_handler, int):
|
|
14
|
+
if default_handler == signal.SIG_DFL:
|
|
15
|
+
# Pretend it's signal.default_int_handler instead.
|
|
16
|
+
default_handler = signal.default_int_handler
|
|
17
|
+
elif default_handler == signal.SIG_IGN:
|
|
18
|
+
# Not quite the same thing as SIG_IGN, but the closest we
|
|
19
|
+
# can make it: do nothing.
|
|
20
|
+
def default_handler(unused_signum, unused_frame):
|
|
21
|
+
pass
|
|
22
|
+
else:
|
|
23
|
+
raise TypeError("expected SIGINT signal handler to be "
|
|
24
|
+
"signal.SIG_IGN, signal.SIG_DFL, or a "
|
|
25
|
+
"callable object")
|
|
26
|
+
self.default_handler = default_handler
|
|
27
|
+
|
|
28
|
+
def __call__(self, signum, frame):
|
|
29
|
+
installed_handler = signal.getsignal(signal.SIGINT)
|
|
30
|
+
if installed_handler is not self:
|
|
31
|
+
# if we aren't the installed handler, then delegate immediately
|
|
32
|
+
# to the default handler
|
|
33
|
+
self.default_handler(signum, frame)
|
|
34
|
+
|
|
35
|
+
if self.called:
|
|
36
|
+
self.default_handler(signum, frame)
|
|
37
|
+
self.called = True
|
|
38
|
+
for result in _results.keys():
|
|
39
|
+
result.stop()
|
|
40
|
+
|
|
41
|
+
_results = weakref.WeakKeyDictionary()
|
|
42
|
+
def registerResult(result):
|
|
43
|
+
_results[result] = 1
|
|
44
|
+
|
|
45
|
+
def removeResult(result):
|
|
46
|
+
return bool(_results.pop(result, None))
|
|
47
|
+
|
|
48
|
+
_interrupt_handler = None
|
|
49
|
+
def installHandler():
|
|
50
|
+
global _interrupt_handler
|
|
51
|
+
if _interrupt_handler is None:
|
|
52
|
+
default_handler = signal.getsignal(signal.SIGINT)
|
|
53
|
+
_interrupt_handler = _InterruptHandler(default_handler)
|
|
54
|
+
signal.signal(signal.SIGINT, _interrupt_handler)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def removeHandler(method=None):
|
|
58
|
+
if method is not None:
|
|
59
|
+
@wraps(method)
|
|
60
|
+
def inner(*args, **kwargs):
|
|
61
|
+
initial = signal.getsignal(signal.SIGINT)
|
|
62
|
+
removeHandler()
|
|
63
|
+
try:
|
|
64
|
+
return method(*args, **kwargs)
|
|
65
|
+
finally:
|
|
66
|
+
signal.signal(signal.SIGINT, initial)
|
|
67
|
+
return inner
|
|
68
|
+
|
|
69
|
+
global _interrupt_handler
|
|
70
|
+
if _interrupt_handler is not None:
|
|
71
|
+
signal.signal(signal.SIGINT, _interrupt_handler.original_handler)
|