@rowstile/cli-win32-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 +23 -0
- package/python/DLLs/_asyncio.pyd +0 -0
- package/python/DLLs/_bz2.pyd +0 -0
- package/python/DLLs/_ctypes.pyd +0 -0
- package/python/DLLs/_ctypes_test.pyd +0 -0
- package/python/DLLs/_decimal.pyd +0 -0
- package/python/DLLs/_elementtree.pyd +0 -0
- package/python/DLLs/_hashlib.pyd +0 -0
- package/python/DLLs/_lzma.pyd +0 -0
- package/python/DLLs/_multiprocessing.pyd +0 -0
- package/python/DLLs/_overlapped.pyd +0 -0
- package/python/DLLs/_queue.pyd +0 -0
- package/python/DLLs/_socket.pyd +0 -0
- package/python/DLLs/_sqlite3.pyd +0 -0
- package/python/DLLs/_ssl.pyd +0 -0
- package/python/DLLs/_testbuffer.pyd +0 -0
- package/python/DLLs/_testcapi.pyd +0 -0
- package/python/DLLs/_testclinic.pyd +0 -0
- package/python/DLLs/_testclinic_limited.pyd +0 -0
- package/python/DLLs/_testconsole.pyd +0 -0
- package/python/DLLs/_testimportmultiple.pyd +0 -0
- package/python/DLLs/_testinternalcapi.pyd +0 -0
- package/python/DLLs/_testlimitedcapi.pyd +0 -0
- package/python/DLLs/_testmultiphase.pyd +0 -0
- package/python/DLLs/_testsinglephase.pyd +0 -0
- package/python/DLLs/_uuid.pyd +0 -0
- package/python/DLLs/_wmi.pyd +0 -0
- package/python/DLLs/_zoneinfo.pyd +0 -0
- package/python/DLLs/libcrypto-3-x64.dll +0 -0
- package/python/DLLs/libffi-8.dll +0 -0
- package/python/DLLs/libssl-3-x64.dll +0 -0
- package/python/DLLs/pyexpat.pyd +0 -0
- package/python/DLLs/select.pyd +0 -0
- package/python/DLLs/sqlite3.dll +0 -0
- package/python/DLLs/unicodedata.pyd +0 -0
- package/python/DLLs/winsound.pyd +0 -0
- package/python/DLLs/zlib1.dll +0 -0
- package/python/LICENSE.txt +445 -0
- package/python/Lib/__future__.py +147 -0
- package/python/Lib/__hello__.py +16 -0
- package/python/Lib/__pycache__/__future__.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/_colorize.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/_compat_pickle.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/_compression.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/_markupbase.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/_opcode_metadata.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/_weakrefset.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/ast.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/base64.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/bisect.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/bz2.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/calendar.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/colorsys.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/compileall.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/configparser.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/contextlib.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/copy.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/copyreg.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/csv.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/dataclasses.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/datetime.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/decimal.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/dis.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/enum.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/filecmp.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/fnmatch.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/fractions.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/functools.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/getpass.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/gettext.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/glob.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/gzip.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/hashlib.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/heapq.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/hmac.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/inspect.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/ipaddress.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/keyword.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/linecache.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/locale.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/lzma.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/mimetypes.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/nturl2path.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/numbers.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/opcode.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/operator.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/optparse.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/pickle.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/pkgutil.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/platform.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/py_compile.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/queue.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/quopri.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/random.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/reprlib.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/selectors.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/shlex.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/shutil.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/signal.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/socket.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/socketserver.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/ssl.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/string.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/stringprep.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/struct.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/subprocess.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/tarfile.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/tempfile.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/textwrap.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/threading.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/token.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/tokenize.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/traceback.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/types.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/typing.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/uuid.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/warnings.cpython-313.pyc +0 -0
- package/python/Lib/__pycache__/weakref.cpython-313.pyc +0 -0
- package/python/Lib/_aix_support.py +108 -0
- package/python/Lib/_android_support.py +192 -0
- package/python/Lib/_apple_support.py +66 -0
- package/python/Lib/_collections_abc.py +1187 -0
- package/python/Lib/_colorize.py +119 -0
- package/python/Lib/_compat_pickle.py +251 -0
- package/python/Lib/_compression.py +162 -0
- package/python/Lib/_ios_support.py +71 -0
- package/python/Lib/_markupbase.py +396 -0
- package/python/Lib/_opcode_metadata.py +343 -0
- package/python/Lib/_osx_support.py +579 -0
- package/python/Lib/_py_abc.py +147 -0
- package/python/Lib/_pydatetime.py +2640 -0
- package/python/Lib/_pydecimal.py +6356 -0
- package/python/Lib/_pyio.py +2714 -0
- package/python/Lib/_pylong.py +363 -0
- package/python/Lib/_pyrepl/__init__.py +19 -0
- package/python/Lib/_pyrepl/__main__.py +10 -0
- package/python/Lib/_pyrepl/_minimal_curses.py +68 -0
- package/python/Lib/_pyrepl/_threading_handler.py +74 -0
- package/python/Lib/_pyrepl/base_eventqueue.py +110 -0
- package/python/Lib/_pyrepl/commands.py +492 -0
- package/python/Lib/_pyrepl/completing_reader.py +295 -0
- package/python/Lib/_pyrepl/console.py +229 -0
- package/python/Lib/_pyrepl/curses.py +33 -0
- package/python/Lib/_pyrepl/fancy_termios.py +82 -0
- package/python/Lib/_pyrepl/historical_reader.py +419 -0
- package/python/Lib/_pyrepl/input.py +114 -0
- package/python/Lib/_pyrepl/keymap.py +213 -0
- package/python/Lib/_pyrepl/main.py +59 -0
- package/python/Lib/_pyrepl/mypy.ini +29 -0
- package/python/Lib/_pyrepl/pager.py +175 -0
- package/python/Lib/_pyrepl/reader.py +764 -0
- package/python/Lib/_pyrepl/readline.py +599 -0
- package/python/Lib/_pyrepl/simple_interact.py +180 -0
- package/python/Lib/_pyrepl/trace.py +21 -0
- package/python/Lib/_pyrepl/types.py +10 -0
- package/python/Lib/_pyrepl/unix_console.py +852 -0
- package/python/Lib/_pyrepl/unix_eventqueue.py +76 -0
- package/python/Lib/_pyrepl/utils.py +83 -0
- package/python/Lib/_pyrepl/windows_console.py +687 -0
- package/python/Lib/_pyrepl/windows_eventqueue.py +42 -0
- package/python/Lib/_sitebuiltins.py +91 -0
- package/python/Lib/_strptime.py +800 -0
- package/python/Lib/_threading_local.py +120 -0
- package/python/Lib/_weakrefset.py +205 -0
- package/python/Lib/abc.py +188 -0
- package/python/Lib/antigravity.py +17 -0
- package/python/Lib/argparse.py +2690 -0
- package/python/Lib/ast.py +1865 -0
- package/python/Lib/asyncio/__init__.py +47 -0
- package/python/Lib/asyncio/__main__.py +211 -0
- package/python/Lib/asyncio/base_events.py +2086 -0
- package/python/Lib/asyncio/base_futures.py +67 -0
- package/python/Lib/asyncio/base_subprocess.py +312 -0
- package/python/Lib/asyncio/base_tasks.py +94 -0
- package/python/Lib/asyncio/constants.py +41 -0
- package/python/Lib/asyncio/coroutines.py +109 -0
- package/python/Lib/asyncio/events.py +885 -0
- package/python/Lib/asyncio/exceptions.py +62 -0
- package/python/Lib/asyncio/format_helpers.py +84 -0
- package/python/Lib/asyncio/futures.py +425 -0
- package/python/Lib/asyncio/locks.py +617 -0
- package/python/Lib/asyncio/log.py +7 -0
- package/python/Lib/asyncio/mixins.py +21 -0
- package/python/Lib/asyncio/proactor_events.py +891 -0
- package/python/Lib/asyncio/protocols.py +216 -0
- package/python/Lib/asyncio/queues.py +309 -0
- package/python/Lib/asyncio/runners.py +217 -0
- package/python/Lib/asyncio/selector_events.py +1328 -0
- package/python/Lib/asyncio/sslproto.py +929 -0
- package/python/Lib/asyncio/staggered.py +174 -0
- package/python/Lib/asyncio/streams.py +787 -0
- package/python/Lib/asyncio/subprocess.py +229 -0
- package/python/Lib/asyncio/taskgroups.py +278 -0
- package/python/Lib/asyncio/tasks.py +1121 -0
- package/python/Lib/asyncio/threads.py +26 -0
- package/python/Lib/asyncio/timeouts.py +185 -0
- package/python/Lib/asyncio/transports.py +337 -0
- package/python/Lib/asyncio/trsock.py +98 -0
- package/python/Lib/asyncio/unix_events.py +1550 -0
- package/python/Lib/asyncio/windows_events.py +906 -0
- package/python/Lib/asyncio/windows_utils.py +181 -0
- package/python/Lib/base64.py +628 -0
- package/python/Lib/bdb.py +973 -0
- package/python/Lib/bisect.py +118 -0
- package/python/Lib/bz2.py +352 -0
- package/python/Lib/cProfile.py +197 -0
- package/python/Lib/calendar.py +813 -0
- package/python/Lib/cmd.py +409 -0
- package/python/Lib/code.py +386 -0
- package/python/Lib/codecs.py +1132 -0
- package/python/Lib/codeop.py +155 -0
- package/python/Lib/collections/__init__.py +1603 -0
- package/python/Lib/collections/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/colorsys.py +166 -0
- package/python/Lib/compileall.py +470 -0
- package/python/Lib/concurrent/__init__.py +1 -0
- package/python/Lib/concurrent/futures/__init__.py +54 -0
- package/python/Lib/concurrent/futures/_base.py +660 -0
- package/python/Lib/concurrent/futures/process.py +892 -0
- package/python/Lib/concurrent/futures/thread.py +240 -0
- package/python/Lib/configparser.py +1396 -0
- package/python/Lib/contextlib.py +814 -0
- package/python/Lib/contextvars.py +4 -0
- package/python/Lib/copy.py +306 -0
- package/python/Lib/copyreg.py +217 -0
- package/python/Lib/csv.py +527 -0
- package/python/Lib/ctypes/__init__.py +602 -0
- package/python/Lib/ctypes/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/ctypes/__pycache__/_endian.cpython-313.pyc +0 -0
- package/python/Lib/ctypes/__pycache__/wintypes.cpython-313.pyc +0 -0
- package/python/Lib/ctypes/_aix.py +327 -0
- package/python/Lib/ctypes/_endian.py +78 -0
- package/python/Lib/ctypes/macholib/README.ctypes +7 -0
- package/python/Lib/ctypes/macholib/__init__.py +9 -0
- package/python/Lib/ctypes/macholib/dyld.py +165 -0
- package/python/Lib/ctypes/macholib/dylib.py +42 -0
- package/python/Lib/ctypes/macholib/fetch_macholib +2 -0
- package/python/Lib/ctypes/macholib/fetch_macholib.bat +1 -0
- package/python/Lib/ctypes/macholib/framework.py +42 -0
- package/python/Lib/ctypes/util.py +387 -0
- package/python/Lib/ctypes/wintypes.py +202 -0
- package/python/Lib/curses/__init__.py +101 -0
- package/python/Lib/curses/ascii.py +99 -0
- package/python/Lib/curses/has_key.py +192 -0
- package/python/Lib/curses/panel.py +6 -0
- package/python/Lib/curses/textpad.py +236 -0
- package/python/Lib/dataclasses.py +1679 -0
- package/python/Lib/datetime.py +9 -0
- package/python/Lib/dbm/__init__.py +194 -0
- package/python/Lib/dbm/dumb.py +319 -0
- package/python/Lib/dbm/gnu.py +3 -0
- package/python/Lib/dbm/ndbm.py +3 -0
- package/python/Lib/dbm/sqlite3.py +144 -0
- package/python/Lib/decimal.py +109 -0
- package/python/Lib/difflib.py +2058 -0
- package/python/Lib/dis.py +1075 -0
- package/python/Lib/doctest.py +2919 -0
- package/python/Lib/email/__init__.py +61 -0
- package/python/Lib/email/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/_encoded_words.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/_parseaddr.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/_policybase.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/base64mime.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/charset.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/encoders.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/errors.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/feedparser.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/header.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/iterators.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/message.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/parser.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/quoprimime.cpython-313.pyc +0 -0
- package/python/Lib/email/__pycache__/utils.cpython-313.pyc +0 -0
- package/python/Lib/email/_encoded_words.py +233 -0
- package/python/Lib/email/_header_value_parser.py +3153 -0
- package/python/Lib/email/_parseaddr.py +563 -0
- package/python/Lib/email/_policybase.py +382 -0
- package/python/Lib/email/architecture.rst +216 -0
- package/python/Lib/email/base64mime.py +115 -0
- package/python/Lib/email/charset.py +396 -0
- package/python/Lib/email/contentmanager.py +254 -0
- package/python/Lib/email/encoders.py +65 -0
- package/python/Lib/email/errors.py +117 -0
- package/python/Lib/email/feedparser.py +536 -0
- package/python/Lib/email/generator.py +530 -0
- package/python/Lib/email/header.py +582 -0
- package/python/Lib/email/headerregistry.py +618 -0
- package/python/Lib/email/iterators.py +68 -0
- package/python/Lib/email/message.py +1217 -0
- package/python/Lib/email/mime/__init__.py +0 -0
- package/python/Lib/email/mime/application.py +37 -0
- package/python/Lib/email/mime/audio.py +97 -0
- package/python/Lib/email/mime/base.py +29 -0
- package/python/Lib/email/mime/image.py +152 -0
- package/python/Lib/email/mime/message.py +33 -0
- package/python/Lib/email/mime/multipart.py +47 -0
- package/python/Lib/email/mime/nonmultipart.py +21 -0
- package/python/Lib/email/mime/text.py +40 -0
- package/python/Lib/email/parser.py +127 -0
- package/python/Lib/email/policy.py +232 -0
- package/python/Lib/email/quoprimime.py +300 -0
- package/python/Lib/email/utils.py +497 -0
- package/python/Lib/encodings/__init__.py +179 -0
- package/python/Lib/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
- package/python/Lib/encodings/__pycache__/cp1252.cpython-313.pyc +0 -0
- package/python/Lib/encodings/__pycache__/cp437.cpython-313.pyc +0 -0
- package/python/Lib/encodings/__pycache__/hex_codec.cpython-313.pyc +0 -0
- package/python/Lib/encodings/__pycache__/idna.cpython-313.pyc +0 -0
- package/python/Lib/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
- package/python/Lib/encodings/aliases.py +560 -0
- package/python/Lib/encodings/ascii.py +50 -0
- package/python/Lib/encodings/base64_codec.py +55 -0
- package/python/Lib/encodings/big5.py +39 -0
- package/python/Lib/encodings/big5hkscs.py +39 -0
- package/python/Lib/encodings/bz2_codec.py +78 -0
- package/python/Lib/encodings/charmap.py +69 -0
- package/python/Lib/encodings/cp037.py +307 -0
- package/python/Lib/encodings/cp1006.py +307 -0
- package/python/Lib/encodings/cp1026.py +307 -0
- package/python/Lib/encodings/cp1125.py +698 -0
- package/python/Lib/encodings/cp1140.py +307 -0
- package/python/Lib/encodings/cp1250.py +307 -0
- package/python/Lib/encodings/cp1251.py +307 -0
- package/python/Lib/encodings/cp1252.py +307 -0
- package/python/Lib/encodings/cp1253.py +307 -0
- package/python/Lib/encodings/cp1254.py +307 -0
- package/python/Lib/encodings/cp1255.py +307 -0
- package/python/Lib/encodings/cp1256.py +307 -0
- package/python/Lib/encodings/cp1257.py +307 -0
- package/python/Lib/encodings/cp1258.py +307 -0
- package/python/Lib/encodings/cp273.py +307 -0
- package/python/Lib/encodings/cp424.py +307 -0
- package/python/Lib/encodings/cp437.py +698 -0
- package/python/Lib/encodings/cp500.py +307 -0
- package/python/Lib/encodings/cp720.py +309 -0
- package/python/Lib/encodings/cp737.py +698 -0
- package/python/Lib/encodings/cp775.py +697 -0
- package/python/Lib/encodings/cp850.py +698 -0
- package/python/Lib/encodings/cp852.py +698 -0
- package/python/Lib/encodings/cp855.py +698 -0
- package/python/Lib/encodings/cp856.py +307 -0
- package/python/Lib/encodings/cp857.py +694 -0
- package/python/Lib/encodings/cp858.py +698 -0
- package/python/Lib/encodings/cp860.py +698 -0
- package/python/Lib/encodings/cp861.py +698 -0
- package/python/Lib/encodings/cp862.py +698 -0
- package/python/Lib/encodings/cp863.py +698 -0
- package/python/Lib/encodings/cp864.py +690 -0
- package/python/Lib/encodings/cp865.py +698 -0
- package/python/Lib/encodings/cp866.py +698 -0
- package/python/Lib/encodings/cp869.py +689 -0
- package/python/Lib/encodings/cp874.py +307 -0
- package/python/Lib/encodings/cp875.py +307 -0
- package/python/Lib/encodings/cp932.py +39 -0
- package/python/Lib/encodings/cp949.py +39 -0
- package/python/Lib/encodings/cp950.py +39 -0
- package/python/Lib/encodings/euc_jis_2004.py +39 -0
- package/python/Lib/encodings/euc_jisx0213.py +39 -0
- package/python/Lib/encodings/euc_jp.py +39 -0
- package/python/Lib/encodings/euc_kr.py +39 -0
- package/python/Lib/encodings/gb18030.py +39 -0
- package/python/Lib/encodings/gb2312.py +39 -0
- package/python/Lib/encodings/gbk.py +39 -0
- package/python/Lib/encodings/hex_codec.py +55 -0
- package/python/Lib/encodings/hp_roman8.py +314 -0
- package/python/Lib/encodings/hz.py +39 -0
- package/python/Lib/encodings/idna.py +387 -0
- package/python/Lib/encodings/iso2022_jp.py +39 -0
- package/python/Lib/encodings/iso2022_jp_1.py +39 -0
- package/python/Lib/encodings/iso2022_jp_2.py +39 -0
- package/python/Lib/encodings/iso2022_jp_2004.py +39 -0
- package/python/Lib/encodings/iso2022_jp_3.py +39 -0
- package/python/Lib/encodings/iso2022_jp_ext.py +39 -0
- package/python/Lib/encodings/iso2022_kr.py +39 -0
- package/python/Lib/encodings/iso8859_1.py +307 -0
- package/python/Lib/encodings/iso8859_10.py +307 -0
- package/python/Lib/encodings/iso8859_11.py +307 -0
- package/python/Lib/encodings/iso8859_13.py +307 -0
- package/python/Lib/encodings/iso8859_14.py +307 -0
- package/python/Lib/encodings/iso8859_15.py +307 -0
- package/python/Lib/encodings/iso8859_16.py +307 -0
- package/python/Lib/encodings/iso8859_2.py +307 -0
- package/python/Lib/encodings/iso8859_3.py +307 -0
- package/python/Lib/encodings/iso8859_4.py +307 -0
- package/python/Lib/encodings/iso8859_5.py +307 -0
- package/python/Lib/encodings/iso8859_6.py +307 -0
- package/python/Lib/encodings/iso8859_7.py +307 -0
- package/python/Lib/encodings/iso8859_8.py +307 -0
- package/python/Lib/encodings/iso8859_9.py +307 -0
- package/python/Lib/encodings/johab.py +39 -0
- package/python/Lib/encodings/koi8_r.py +307 -0
- package/python/Lib/encodings/koi8_t.py +308 -0
- package/python/Lib/encodings/koi8_u.py +307 -0
- package/python/Lib/encodings/kz1048.py +307 -0
- package/python/Lib/encodings/latin_1.py +50 -0
- package/python/Lib/encodings/mac_arabic.py +698 -0
- package/python/Lib/encodings/mac_croatian.py +307 -0
- package/python/Lib/encodings/mac_cyrillic.py +307 -0
- package/python/Lib/encodings/mac_farsi.py +307 -0
- package/python/Lib/encodings/mac_greek.py +307 -0
- package/python/Lib/encodings/mac_iceland.py +307 -0
- package/python/Lib/encodings/mac_latin2.py +312 -0
- package/python/Lib/encodings/mac_roman.py +307 -0
- package/python/Lib/encodings/mac_romanian.py +307 -0
- package/python/Lib/encodings/mac_turkish.py +307 -0
- package/python/Lib/encodings/mbcs.py +47 -0
- package/python/Lib/encodings/oem.py +41 -0
- package/python/Lib/encodings/palmos.py +308 -0
- package/python/Lib/encodings/ptcp154.py +312 -0
- package/python/Lib/encodings/punycode.py +253 -0
- package/python/Lib/encodings/quopri_codec.py +56 -0
- package/python/Lib/encodings/raw_unicode_escape.py +46 -0
- package/python/Lib/encodings/rot_13.py +113 -0
- package/python/Lib/encodings/shift_jis.py +39 -0
- package/python/Lib/encodings/shift_jis_2004.py +39 -0
- package/python/Lib/encodings/shift_jisx0213.py +39 -0
- package/python/Lib/encodings/tis_620.py +307 -0
- package/python/Lib/encodings/undefined.py +49 -0
- package/python/Lib/encodings/unicode_escape.py +46 -0
- package/python/Lib/encodings/utf_16.py +155 -0
- package/python/Lib/encodings/utf_16_be.py +42 -0
- package/python/Lib/encodings/utf_16_le.py +42 -0
- package/python/Lib/encodings/utf_32.py +150 -0
- package/python/Lib/encodings/utf_32_be.py +37 -0
- package/python/Lib/encodings/utf_32_le.py +37 -0
- package/python/Lib/encodings/utf_7.py +38 -0
- package/python/Lib/encodings/utf_8.py +42 -0
- package/python/Lib/encodings/utf_8_sig.py +130 -0
- package/python/Lib/encodings/uu_codec.py +103 -0
- package/python/Lib/encodings/zlib_codec.py +77 -0
- package/python/Lib/enum.py +2183 -0
- package/python/Lib/filecmp.py +320 -0
- package/python/Lib/fileinput.py +442 -0
- package/python/Lib/fnmatch.py +192 -0
- package/python/Lib/fractions.py +1043 -0
- package/python/Lib/ftplib.py +975 -0
- package/python/Lib/functools.py +1036 -0
- package/python/Lib/genericpath.py +200 -0
- package/python/Lib/getopt.py +215 -0
- package/python/Lib/getpass.py +192 -0
- package/python/Lib/gettext.py +657 -0
- package/python/Lib/glob.py +572 -0
- package/python/Lib/graphlib.py +250 -0
- package/python/Lib/gzip.py +693 -0
- package/python/Lib/hashlib.py +255 -0
- package/python/Lib/heapq.py +603 -0
- package/python/Lib/hmac.py +220 -0
- package/python/Lib/html/__init__.py +132 -0
- package/python/Lib/html/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/html/__pycache__/entities.cpython-313.pyc +0 -0
- package/python/Lib/html/__pycache__/parser.cpython-313.pyc +0 -0
- package/python/Lib/html/entities.py +2513 -0
- package/python/Lib/html/parser.py +583 -0
- package/python/Lib/http/__init__.py +202 -0
- package/python/Lib/http/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/http/__pycache__/client.cpython-313.pyc +0 -0
- package/python/Lib/http/__pycache__/cookiejar.cpython-313.pyc +0 -0
- package/python/Lib/http/__pycache__/cookies.cpython-313.pyc +0 -0
- package/python/Lib/http/client.py +1598 -0
- package/python/Lib/http/cookiejar.py +2122 -0
- package/python/Lib/http/cookies.py +635 -0
- package/python/Lib/http/server.py +1355 -0
- package/python/Lib/imaplib.py +1769 -0
- package/python/Lib/importlib/__init__.py +136 -0
- package/python/Lib/importlib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/importlib/__pycache__/_abc.cpython-313.pyc +0 -0
- package/python/Lib/importlib/__pycache__/abc.cpython-313.pyc +0 -0
- package/python/Lib/importlib/__pycache__/readers.cpython-313.pyc +0 -0
- package/python/Lib/importlib/_abc.py +39 -0
- package/python/Lib/importlib/_bootstrap.py +1559 -0
- package/python/Lib/importlib/_bootstrap_external.py +1826 -0
- package/python/Lib/importlib/abc.py +243 -0
- package/python/Lib/importlib/machinery.py +21 -0
- package/python/Lib/importlib/metadata/__init__.py +1093 -0
- package/python/Lib/importlib/metadata/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/importlib/metadata/__pycache__/_adapters.cpython-313.pyc +0 -0
- package/python/Lib/importlib/metadata/__pycache__/_collections.cpython-313.pyc +0 -0
- package/python/Lib/importlib/metadata/__pycache__/_functools.cpython-313.pyc +0 -0
- package/python/Lib/importlib/metadata/__pycache__/_itertools.cpython-313.pyc +0 -0
- package/python/Lib/importlib/metadata/__pycache__/_meta.cpython-313.pyc +0 -0
- package/python/Lib/importlib/metadata/__pycache__/_text.cpython-313.pyc +0 -0
- package/python/Lib/importlib/metadata/_adapters.py +89 -0
- package/python/Lib/importlib/metadata/_collections.py +30 -0
- package/python/Lib/importlib/metadata/_functools.py +104 -0
- package/python/Lib/importlib/metadata/_itertools.py +73 -0
- package/python/Lib/importlib/metadata/_meta.py +67 -0
- package/python/Lib/importlib/metadata/_text.py +99 -0
- package/python/Lib/importlib/metadata/diagnose.py +21 -0
- package/python/Lib/importlib/readers.py +12 -0
- package/python/Lib/importlib/resources/__init__.py +43 -0
- package/python/Lib/importlib/resources/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/importlib/resources/__pycache__/_adapters.cpython-313.pyc +0 -0
- package/python/Lib/importlib/resources/__pycache__/_common.cpython-313.pyc +0 -0
- package/python/Lib/importlib/resources/__pycache__/_functional.cpython-313.pyc +0 -0
- package/python/Lib/importlib/resources/__pycache__/_itertools.cpython-313.pyc +0 -0
- package/python/Lib/importlib/resources/__pycache__/abc.cpython-313.pyc +0 -0
- package/python/Lib/importlib/resources/__pycache__/readers.cpython-313.pyc +0 -0
- package/python/Lib/importlib/resources/_adapters.py +168 -0
- package/python/Lib/importlib/resources/_common.py +211 -0
- package/python/Lib/importlib/resources/_functional.py +81 -0
- package/python/Lib/importlib/resources/_itertools.py +38 -0
- package/python/Lib/importlib/resources/abc.py +173 -0
- package/python/Lib/importlib/resources/readers.py +203 -0
- package/python/Lib/importlib/resources/simple.py +106 -0
- package/python/Lib/importlib/simple.py +14 -0
- package/python/Lib/importlib/util.py +274 -0
- package/python/Lib/inspect.py +3479 -0
- package/python/Lib/io.py +99 -0
- package/python/Lib/ipaddress.py +2440 -0
- package/python/Lib/json/__init__.py +365 -0
- package/python/Lib/json/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/json/__pycache__/decoder.cpython-313.pyc +0 -0
- package/python/Lib/json/__pycache__/encoder.cpython-313.pyc +0 -0
- package/python/Lib/json/__pycache__/scanner.cpython-313.pyc +0 -0
- package/python/Lib/json/decoder.py +364 -0
- package/python/Lib/json/encoder.py +446 -0
- package/python/Lib/json/scanner.py +73 -0
- package/python/Lib/json/tool.py +90 -0
- package/python/Lib/keyword.py +64 -0
- package/python/Lib/linecache.py +236 -0
- package/python/Lib/locale.py +1987 -0
- package/python/Lib/logging/__init__.py +2330 -0
- package/python/Lib/logging/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/logging/__pycache__/config.cpython-313.pyc +0 -0
- package/python/Lib/logging/__pycache__/handlers.cpython-313.pyc +0 -0
- package/python/Lib/logging/config.py +1080 -0
- package/python/Lib/logging/handlers.py +1629 -0
- package/python/Lib/lzma.py +364 -0
- package/python/Lib/mailbox.py +2219 -0
- package/python/Lib/mimetypes.py +679 -0
- package/python/Lib/modulefinder.py +671 -0
- package/python/Lib/multiprocessing/__init__.py +37 -0
- package/python/Lib/multiprocessing/connection.py +1216 -0
- package/python/Lib/multiprocessing/context.py +383 -0
- package/python/Lib/multiprocessing/dummy/__init__.py +126 -0
- package/python/Lib/multiprocessing/dummy/connection.py +75 -0
- package/python/Lib/multiprocessing/forkserver.py +373 -0
- package/python/Lib/multiprocessing/heap.py +337 -0
- package/python/Lib/multiprocessing/managers.py +1397 -0
- package/python/Lib/multiprocessing/pool.py +957 -0
- package/python/Lib/multiprocessing/popen_fork.py +97 -0
- package/python/Lib/multiprocessing/popen_forkserver.py +74 -0
- package/python/Lib/multiprocessing/popen_spawn_posix.py +76 -0
- package/python/Lib/multiprocessing/popen_spawn_win32.py +147 -0
- package/python/Lib/multiprocessing/process.py +436 -0
- package/python/Lib/multiprocessing/queues.py +399 -0
- package/python/Lib/multiprocessing/reduction.py +281 -0
- package/python/Lib/multiprocessing/resource_sharer.py +154 -0
- package/python/Lib/multiprocessing/resource_tracker.py +499 -0
- package/python/Lib/multiprocessing/shared_memory.py +544 -0
- package/python/Lib/multiprocessing/sharedctypes.py +240 -0
- package/python/Lib/multiprocessing/spawn.py +307 -0
- package/python/Lib/multiprocessing/synchronize.py +404 -0
- package/python/Lib/multiprocessing/util.py +562 -0
- package/python/Lib/netrc.py +199 -0
- package/python/Lib/ntpath.py +872 -0
- package/python/Lib/nturl2path.py +69 -0
- package/python/Lib/numbers.py +427 -0
- package/python/Lib/opcode.py +115 -0
- package/python/Lib/operator.py +467 -0
- package/python/Lib/optparse.py +1681 -0
- package/python/Lib/os.py +1184 -0
- package/python/Lib/pathlib/__init__.py +12 -0
- package/python/Lib/pathlib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/pathlib/__pycache__/_abc.cpython-313.pyc +0 -0
- package/python/Lib/pathlib/__pycache__/_local.cpython-313.pyc +0 -0
- package/python/Lib/pathlib/_abc.py +930 -0
- package/python/Lib/pathlib/_local.py +861 -0
- package/python/Lib/pdb.py +2550 -0
- package/python/Lib/pickle.py +1860 -0
- package/python/Lib/pickletools.py +2904 -0
- package/python/Lib/pkgutil.py +529 -0
- package/python/Lib/platform.py +1454 -0
- package/python/Lib/plistlib.py +948 -0
- package/python/Lib/poplib.py +477 -0
- package/python/Lib/posixpath.py +578 -0
- package/python/Lib/pprint.py +658 -0
- package/python/Lib/profile.py +616 -0
- package/python/Lib/pstats.py +778 -0
- package/python/Lib/pty.py +211 -0
- package/python/Lib/py_compile.py +212 -0
- package/python/Lib/pyclbr.py +314 -0
- package/python/Lib/pydoc.py +2861 -0
- package/python/Lib/queue.py +383 -0
- package/python/Lib/quopri.py +237 -0
- package/python/Lib/random.py +1078 -0
- package/python/Lib/re/__init__.py +428 -0
- package/python/Lib/re/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/re/__pycache__/_casefix.cpython-313.pyc +0 -0
- package/python/Lib/re/__pycache__/_compiler.cpython-313.pyc +0 -0
- package/python/Lib/re/__pycache__/_constants.cpython-313.pyc +0 -0
- package/python/Lib/re/__pycache__/_parser.cpython-313.pyc +0 -0
- package/python/Lib/re/_casefix.py +106 -0
- package/python/Lib/re/_compiler.py +768 -0
- package/python/Lib/re/_constants.py +222 -0
- package/python/Lib/re/_parser.py +1081 -0
- package/python/Lib/reprlib.py +230 -0
- package/python/Lib/rlcompleter.py +222 -0
- package/python/Lib/runpy.py +326 -0
- package/python/Lib/sched.py +167 -0
- package/python/Lib/secrets.py +71 -0
- package/python/Lib/selectors.py +603 -0
- package/python/Lib/shelve.py +250 -0
- package/python/Lib/shlex.py +345 -0
- package/python/Lib/shutil.py +1569 -0
- package/python/Lib/signal.py +94 -0
- package/python/Lib/site.py +773 -0
- package/python/Lib/smtplib.py +1123 -0
- package/python/Lib/socket.py +988 -0
- package/python/Lib/socketserver.py +863 -0
- package/python/Lib/sqlite3/__init__.py +70 -0
- package/python/Lib/sqlite3/__main__.py +139 -0
- package/python/Lib/sqlite3/dbapi2.py +108 -0
- package/python/Lib/sqlite3/dump.py +118 -0
- package/python/Lib/sre_compile.py +7 -0
- package/python/Lib/sre_constants.py +7 -0
- package/python/Lib/sre_parse.py +7 -0
- package/python/Lib/ssl.py +1529 -0
- package/python/Lib/stat.py +212 -0
- package/python/Lib/statistics.py +1817 -0
- package/python/Lib/string.py +314 -0
- package/python/Lib/stringprep.py +272 -0
- package/python/Lib/struct.py +15 -0
- package/python/Lib/subprocess.py +2258 -0
- package/python/Lib/symtable.py +414 -0
- package/python/Lib/sysconfig/__init__.py +734 -0
- package/python/Lib/sysconfig/__main__.py +248 -0
- package/python/Lib/sysconfig/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/tabnanny.py +340 -0
- package/python/Lib/tarfile.py +3136 -0
- package/python/Lib/tempfile.py +958 -0
- package/python/Lib/textwrap.py +497 -0
- package/python/Lib/this.py +28 -0
- package/python/Lib/threading.py +1602 -0
- package/python/Lib/timeit.py +381 -0
- package/python/Lib/token.py +141 -0
- package/python/Lib/tokenize.py +592 -0
- package/python/Lib/tomllib/__init__.py +10 -0
- package/python/Lib/tomllib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/tomllib/__pycache__/_parser.cpython-313.pyc +0 -0
- package/python/Lib/tomllib/__pycache__/_re.cpython-313.pyc +0 -0
- package/python/Lib/tomllib/__pycache__/_types.cpython-313.pyc +0 -0
- package/python/Lib/tomllib/_parser.py +703 -0
- package/python/Lib/tomllib/_re.py +107 -0
- package/python/Lib/tomllib/_types.py +10 -0
- package/python/Lib/tomllib/mypy.ini +15 -0
- package/python/Lib/trace.py +754 -0
- package/python/Lib/traceback.py +1639 -0
- package/python/Lib/tracemalloc.py +560 -0
- package/python/Lib/tty.py +73 -0
- package/python/Lib/types.py +346 -0
- package/python/Lib/typing.py +3846 -0
- package/python/Lib/unittest/__init__.py +80 -0
- package/python/Lib/unittest/__main__.py +18 -0
- package/python/Lib/unittest/_log.py +86 -0
- package/python/Lib/unittest/async_case.py +146 -0
- package/python/Lib/unittest/case.py +1478 -0
- package/python/Lib/unittest/loader.py +460 -0
- package/python/Lib/unittest/main.py +280 -0
- package/python/Lib/unittest/mock.py +3189 -0
- package/python/Lib/unittest/result.py +256 -0
- package/python/Lib/unittest/runner.py +292 -0
- package/python/Lib/unittest/signals.py +71 -0
- package/python/Lib/unittest/suite.py +379 -0
- package/python/Lib/unittest/util.py +170 -0
- package/python/Lib/urllib/__init__.py +0 -0
- package/python/Lib/urllib/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/urllib/__pycache__/error.cpython-313.pyc +0 -0
- package/python/Lib/urllib/__pycache__/parse.cpython-313.pyc +0 -0
- package/python/Lib/urllib/__pycache__/request.cpython-313.pyc +0 -0
- package/python/Lib/urllib/__pycache__/response.cpython-313.pyc +0 -0
- package/python/Lib/urllib/error.py +74 -0
- package/python/Lib/urllib/parse.py +1264 -0
- package/python/Lib/urllib/request.py +2796 -0
- package/python/Lib/urllib/response.py +84 -0
- package/python/Lib/urllib/robotparser.py +363 -0
- package/python/Lib/uuid.py +784 -0
- package/python/Lib/warnings.py +735 -0
- package/python/Lib/wave.py +665 -0
- package/python/Lib/weakref.py +674 -0
- package/python/Lib/webbrowser.py +724 -0
- package/python/Lib/wsgiref/__init__.py +25 -0
- package/python/Lib/wsgiref/handlers.py +575 -0
- package/python/Lib/wsgiref/headers.py +192 -0
- package/python/Lib/wsgiref/simple_server.py +161 -0
- package/python/Lib/wsgiref/types.py +54 -0
- package/python/Lib/wsgiref/util.py +159 -0
- package/python/Lib/wsgiref/validate.py +438 -0
- package/python/Lib/xml/__init__.py +20 -0
- package/python/Lib/xml/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/xml/dom/NodeFilter.py +27 -0
- package/python/Lib/xml/dom/__init__.py +140 -0
- package/python/Lib/xml/dom/domreg.py +99 -0
- package/python/Lib/xml/dom/expatbuilder.py +962 -0
- package/python/Lib/xml/dom/minicompat.py +109 -0
- package/python/Lib/xml/dom/minidom.py +2024 -0
- package/python/Lib/xml/dom/pulldom.py +336 -0
- package/python/Lib/xml/dom/xmlbuilder.py +389 -0
- package/python/Lib/xml/etree/ElementInclude.py +186 -0
- package/python/Lib/xml/etree/ElementPath.py +430 -0
- package/python/Lib/xml/etree/ElementTree.py +2116 -0
- package/python/Lib/xml/etree/__init__.py +33 -0
- package/python/Lib/xml/etree/cElementTree.py +3 -0
- package/python/Lib/xml/parsers/__init__.py +8 -0
- package/python/Lib/xml/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/xml/parsers/__pycache__/expat.cpython-313.pyc +0 -0
- package/python/Lib/xml/parsers/expat.py +8 -0
- package/python/Lib/xml/sax/__init__.py +94 -0
- package/python/Lib/xml/sax/_exceptions.py +127 -0
- package/python/Lib/xml/sax/expatreader.py +454 -0
- package/python/Lib/xml/sax/handler.py +387 -0
- package/python/Lib/xml/sax/saxutils.py +369 -0
- package/python/Lib/xml/sax/xmlreader.py +378 -0
- package/python/Lib/xmlrpc/__init__.py +1 -0
- package/python/Lib/xmlrpc/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/xmlrpc/__pycache__/client.cpython-313.pyc +0 -0
- package/python/Lib/xmlrpc/client.py +1503 -0
- package/python/Lib/xmlrpc/server.py +1002 -0
- package/python/Lib/zipapp.py +229 -0
- package/python/Lib/zipfile/__init__.py +2391 -0
- package/python/Lib/zipfile/__main__.py +4 -0
- package/python/Lib/zipfile/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/zipfile/_path/__init__.py +452 -0
- package/python/Lib/zipfile/_path/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/Lib/zipfile/_path/__pycache__/glob.cpython-313.pyc +0 -0
- package/python/Lib/zipfile/_path/glob.py +113 -0
- package/python/Lib/zipimport.py +803 -0
- package/python/Lib/zoneinfo/__init__.py +34 -0
- package/python/Lib/zoneinfo/_common.py +172 -0
- package/python/Lib/zoneinfo/_tzpath.py +189 -0
- package/python/Lib/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
- package/python/python.exe +0 -0
- package/python/python3.dll +0 -0
- package/python/python313.dll +0 -0
- package/python/pythonw.exe +0 -0
- package/python/vcruntime140.dll +0 -0
- package/python/vcruntime140_1.dll +0 -0
|
@@ -0,0 +1,735 @@
|
|
|
1
|
+
"""Python part of the warnings subsystem."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
__all__ = ["warn", "warn_explicit", "showwarning",
|
|
7
|
+
"formatwarning", "filterwarnings", "simplefilter",
|
|
8
|
+
"resetwarnings", "catch_warnings", "deprecated"]
|
|
9
|
+
|
|
10
|
+
def showwarning(message, category, filename, lineno, file=None, line=None):
|
|
11
|
+
"""Hook to write a warning to a file; replace if you like."""
|
|
12
|
+
msg = WarningMessage(message, category, filename, lineno, file, line)
|
|
13
|
+
_showwarnmsg_impl(msg)
|
|
14
|
+
|
|
15
|
+
def formatwarning(message, category, filename, lineno, line=None):
|
|
16
|
+
"""Function to format a warning the standard way."""
|
|
17
|
+
msg = WarningMessage(message, category, filename, lineno, None, line)
|
|
18
|
+
return _formatwarnmsg_impl(msg)
|
|
19
|
+
|
|
20
|
+
def _showwarnmsg_impl(msg):
|
|
21
|
+
file = msg.file
|
|
22
|
+
if file is None:
|
|
23
|
+
file = sys.stderr
|
|
24
|
+
if file is None:
|
|
25
|
+
# sys.stderr is None when run with pythonw.exe:
|
|
26
|
+
# warnings get lost
|
|
27
|
+
return
|
|
28
|
+
text = _formatwarnmsg(msg)
|
|
29
|
+
try:
|
|
30
|
+
file.write(text)
|
|
31
|
+
except OSError:
|
|
32
|
+
# the file (probably stderr) is invalid - this warning gets lost.
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
def _formatwarnmsg_impl(msg):
|
|
36
|
+
category = msg.category.__name__
|
|
37
|
+
s = f"{msg.filename}:{msg.lineno}: {category}: {msg.message}\n"
|
|
38
|
+
|
|
39
|
+
if msg.line is None:
|
|
40
|
+
try:
|
|
41
|
+
import linecache
|
|
42
|
+
line = linecache.getline(msg.filename, msg.lineno)
|
|
43
|
+
except Exception:
|
|
44
|
+
# When a warning is logged during Python shutdown, linecache
|
|
45
|
+
# and the import machinery don't work anymore
|
|
46
|
+
line = None
|
|
47
|
+
linecache = None
|
|
48
|
+
else:
|
|
49
|
+
line = msg.line
|
|
50
|
+
if line:
|
|
51
|
+
line = line.strip()
|
|
52
|
+
s += " %s\n" % line
|
|
53
|
+
|
|
54
|
+
if msg.source is not None:
|
|
55
|
+
try:
|
|
56
|
+
import tracemalloc
|
|
57
|
+
# Logging a warning should not raise a new exception:
|
|
58
|
+
# catch Exception, not only ImportError and RecursionError.
|
|
59
|
+
except Exception:
|
|
60
|
+
# don't suggest to enable tracemalloc if it's not available
|
|
61
|
+
suggest_tracemalloc = False
|
|
62
|
+
tb = None
|
|
63
|
+
else:
|
|
64
|
+
try:
|
|
65
|
+
suggest_tracemalloc = not tracemalloc.is_tracing()
|
|
66
|
+
tb = tracemalloc.get_object_traceback(msg.source)
|
|
67
|
+
except Exception:
|
|
68
|
+
# When a warning is logged during Python shutdown, tracemalloc
|
|
69
|
+
# and the import machinery don't work anymore
|
|
70
|
+
suggest_tracemalloc = False
|
|
71
|
+
tb = None
|
|
72
|
+
|
|
73
|
+
if tb is not None:
|
|
74
|
+
s += 'Object allocated at (most recent call last):\n'
|
|
75
|
+
for frame in tb:
|
|
76
|
+
s += (' File "%s", lineno %s\n'
|
|
77
|
+
% (frame.filename, frame.lineno))
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
if linecache is not None:
|
|
81
|
+
line = linecache.getline(frame.filename, frame.lineno)
|
|
82
|
+
else:
|
|
83
|
+
line = None
|
|
84
|
+
except Exception:
|
|
85
|
+
line = None
|
|
86
|
+
if line:
|
|
87
|
+
line = line.strip()
|
|
88
|
+
s += ' %s\n' % line
|
|
89
|
+
elif suggest_tracemalloc:
|
|
90
|
+
s += (f'{category}: Enable tracemalloc to get the object '
|
|
91
|
+
f'allocation traceback\n')
|
|
92
|
+
return s
|
|
93
|
+
|
|
94
|
+
# Keep a reference to check if the function was replaced
|
|
95
|
+
_showwarning_orig = showwarning
|
|
96
|
+
|
|
97
|
+
def _showwarnmsg(msg):
|
|
98
|
+
"""Hook to write a warning to a file; replace if you like."""
|
|
99
|
+
try:
|
|
100
|
+
sw = showwarning
|
|
101
|
+
except NameError:
|
|
102
|
+
pass
|
|
103
|
+
else:
|
|
104
|
+
if sw is not _showwarning_orig:
|
|
105
|
+
# warnings.showwarning() was replaced
|
|
106
|
+
if not callable(sw):
|
|
107
|
+
raise TypeError("warnings.showwarning() must be set to a "
|
|
108
|
+
"function or method")
|
|
109
|
+
|
|
110
|
+
sw(msg.message, msg.category, msg.filename, msg.lineno,
|
|
111
|
+
msg.file, msg.line)
|
|
112
|
+
return
|
|
113
|
+
_showwarnmsg_impl(msg)
|
|
114
|
+
|
|
115
|
+
# Keep a reference to check if the function was replaced
|
|
116
|
+
_formatwarning_orig = formatwarning
|
|
117
|
+
|
|
118
|
+
def _formatwarnmsg(msg):
|
|
119
|
+
"""Function to format a warning the standard way."""
|
|
120
|
+
try:
|
|
121
|
+
fw = formatwarning
|
|
122
|
+
except NameError:
|
|
123
|
+
pass
|
|
124
|
+
else:
|
|
125
|
+
if fw is not _formatwarning_orig:
|
|
126
|
+
# warnings.formatwarning() was replaced
|
|
127
|
+
return fw(msg.message, msg.category,
|
|
128
|
+
msg.filename, msg.lineno, msg.line)
|
|
129
|
+
return _formatwarnmsg_impl(msg)
|
|
130
|
+
|
|
131
|
+
def filterwarnings(action, message="", category=Warning, module="", lineno=0,
|
|
132
|
+
append=False):
|
|
133
|
+
"""Insert an entry into the list of warnings filters (at the front).
|
|
134
|
+
|
|
135
|
+
'action' -- one of "error", "ignore", "always", "default", "module",
|
|
136
|
+
or "once"
|
|
137
|
+
'message' -- a regex that the warning message must match
|
|
138
|
+
'category' -- a class that the warning must be a subclass of
|
|
139
|
+
'module' -- a regex that the module name must match
|
|
140
|
+
'lineno' -- an integer line number, 0 matches all warnings
|
|
141
|
+
'append' -- if true, append to the list of filters
|
|
142
|
+
"""
|
|
143
|
+
if action not in {"error", "ignore", "always", "default", "module", "once"}:
|
|
144
|
+
raise ValueError(f"invalid action: {action!r}")
|
|
145
|
+
if not isinstance(message, str):
|
|
146
|
+
raise TypeError("message must be a string")
|
|
147
|
+
if not isinstance(category, type) or not issubclass(category, Warning):
|
|
148
|
+
raise TypeError("category must be a Warning subclass")
|
|
149
|
+
if not isinstance(module, str):
|
|
150
|
+
raise TypeError("module must be a string")
|
|
151
|
+
if not isinstance(lineno, int):
|
|
152
|
+
raise TypeError("lineno must be an int")
|
|
153
|
+
if lineno < 0:
|
|
154
|
+
raise ValueError("lineno must be an int >= 0")
|
|
155
|
+
|
|
156
|
+
if message or module:
|
|
157
|
+
import re
|
|
158
|
+
|
|
159
|
+
if message:
|
|
160
|
+
message = re.compile(message, re.I)
|
|
161
|
+
else:
|
|
162
|
+
message = None
|
|
163
|
+
if module:
|
|
164
|
+
module = re.compile(module)
|
|
165
|
+
else:
|
|
166
|
+
module = None
|
|
167
|
+
|
|
168
|
+
_add_filter(action, message, category, module, lineno, append=append)
|
|
169
|
+
|
|
170
|
+
def simplefilter(action, category=Warning, lineno=0, append=False):
|
|
171
|
+
"""Insert a simple entry into the list of warnings filters (at the front).
|
|
172
|
+
|
|
173
|
+
A simple filter matches all modules and messages.
|
|
174
|
+
'action' -- one of "error", "ignore", "always", "default", "module",
|
|
175
|
+
or "once"
|
|
176
|
+
'category' -- a class that the warning must be a subclass of
|
|
177
|
+
'lineno' -- an integer line number, 0 matches all warnings
|
|
178
|
+
'append' -- if true, append to the list of filters
|
|
179
|
+
"""
|
|
180
|
+
if action not in {"error", "ignore", "always", "default", "module", "once"}:
|
|
181
|
+
raise ValueError(f"invalid action: {action!r}")
|
|
182
|
+
if not isinstance(lineno, int):
|
|
183
|
+
raise TypeError("lineno must be an int")
|
|
184
|
+
if lineno < 0:
|
|
185
|
+
raise ValueError("lineno must be an int >= 0")
|
|
186
|
+
_add_filter(action, None, category, None, lineno, append=append)
|
|
187
|
+
|
|
188
|
+
def _add_filter(*item, append):
|
|
189
|
+
# Remove possible duplicate filters, so new one will be placed
|
|
190
|
+
# in correct place. If append=True and duplicate exists, do nothing.
|
|
191
|
+
if not append:
|
|
192
|
+
try:
|
|
193
|
+
filters.remove(item)
|
|
194
|
+
except ValueError:
|
|
195
|
+
pass
|
|
196
|
+
filters.insert(0, item)
|
|
197
|
+
else:
|
|
198
|
+
if item not in filters:
|
|
199
|
+
filters.append(item)
|
|
200
|
+
_filters_mutated()
|
|
201
|
+
|
|
202
|
+
def resetwarnings():
|
|
203
|
+
"""Clear the list of warning filters, so that no filters are active."""
|
|
204
|
+
filters[:] = []
|
|
205
|
+
_filters_mutated()
|
|
206
|
+
|
|
207
|
+
class _OptionError(Exception):
|
|
208
|
+
"""Exception used by option processing helpers."""
|
|
209
|
+
pass
|
|
210
|
+
|
|
211
|
+
# Helper to process -W options passed via sys.warnoptions
|
|
212
|
+
def _processoptions(args):
|
|
213
|
+
for arg in args:
|
|
214
|
+
try:
|
|
215
|
+
_setoption(arg)
|
|
216
|
+
except _OptionError as msg:
|
|
217
|
+
print("Invalid -W option ignored:", msg, file=sys.stderr)
|
|
218
|
+
|
|
219
|
+
# Helper for _processoptions()
|
|
220
|
+
def _setoption(arg):
|
|
221
|
+
parts = arg.split(':')
|
|
222
|
+
if len(parts) > 5:
|
|
223
|
+
raise _OptionError("too many fields (max 5): %r" % (arg,))
|
|
224
|
+
while len(parts) < 5:
|
|
225
|
+
parts.append('')
|
|
226
|
+
action, message, category, module, lineno = [s.strip()
|
|
227
|
+
for s in parts]
|
|
228
|
+
action = _getaction(action)
|
|
229
|
+
category = _getcategory(category)
|
|
230
|
+
if message or module:
|
|
231
|
+
import re
|
|
232
|
+
if message:
|
|
233
|
+
message = re.escape(message)
|
|
234
|
+
if module:
|
|
235
|
+
module = re.escape(module) + r'\Z'
|
|
236
|
+
if lineno:
|
|
237
|
+
try:
|
|
238
|
+
lineno = int(lineno)
|
|
239
|
+
if lineno < 0:
|
|
240
|
+
raise ValueError
|
|
241
|
+
except (ValueError, OverflowError):
|
|
242
|
+
raise _OptionError("invalid lineno %r" % (lineno,)) from None
|
|
243
|
+
else:
|
|
244
|
+
lineno = 0
|
|
245
|
+
filterwarnings(action, message, category, module, lineno)
|
|
246
|
+
|
|
247
|
+
# Helper for _setoption()
|
|
248
|
+
def _getaction(action):
|
|
249
|
+
if not action:
|
|
250
|
+
return "default"
|
|
251
|
+
if action == "all": return "always" # Alias
|
|
252
|
+
for a in ('default', 'always', 'ignore', 'module', 'once', 'error'):
|
|
253
|
+
if a.startswith(action):
|
|
254
|
+
return a
|
|
255
|
+
raise _OptionError("invalid action: %r" % (action,))
|
|
256
|
+
|
|
257
|
+
# Helper for _setoption()
|
|
258
|
+
def _getcategory(category):
|
|
259
|
+
if not category:
|
|
260
|
+
return Warning
|
|
261
|
+
if '.' not in category:
|
|
262
|
+
import builtins as m
|
|
263
|
+
klass = category
|
|
264
|
+
else:
|
|
265
|
+
module, _, klass = category.rpartition('.')
|
|
266
|
+
try:
|
|
267
|
+
m = __import__(module, None, None, [klass])
|
|
268
|
+
except ImportError:
|
|
269
|
+
raise _OptionError("invalid module name: %r" % (module,)) from None
|
|
270
|
+
try:
|
|
271
|
+
cat = getattr(m, klass)
|
|
272
|
+
except AttributeError:
|
|
273
|
+
raise _OptionError("unknown warning category: %r" % (category,)) from None
|
|
274
|
+
if not issubclass(cat, Warning):
|
|
275
|
+
raise _OptionError("invalid warning category: %r" % (category,))
|
|
276
|
+
return cat
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
def _is_internal_filename(filename):
|
|
280
|
+
return 'importlib' in filename and '_bootstrap' in filename
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
def _is_filename_to_skip(filename, skip_file_prefixes):
|
|
284
|
+
return any(filename.startswith(prefix) for prefix in skip_file_prefixes)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def _is_internal_frame(frame):
|
|
288
|
+
"""Signal whether the frame is an internal CPython implementation detail."""
|
|
289
|
+
return _is_internal_filename(frame.f_code.co_filename)
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def _next_external_frame(frame, skip_file_prefixes):
|
|
293
|
+
"""Find the next frame that doesn't involve Python or user internals."""
|
|
294
|
+
frame = frame.f_back
|
|
295
|
+
while frame is not None and (
|
|
296
|
+
_is_internal_filename(filename := frame.f_code.co_filename) or
|
|
297
|
+
_is_filename_to_skip(filename, skip_file_prefixes)):
|
|
298
|
+
frame = frame.f_back
|
|
299
|
+
return frame
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
# Code typically replaced by _warnings
|
|
303
|
+
def warn(message, category=None, stacklevel=1, source=None,
|
|
304
|
+
*, skip_file_prefixes=()):
|
|
305
|
+
"""Issue a warning, or maybe ignore it or raise an exception."""
|
|
306
|
+
# Check if message is already a Warning object
|
|
307
|
+
if isinstance(message, Warning):
|
|
308
|
+
category = message.__class__
|
|
309
|
+
# Check category argument
|
|
310
|
+
if category is None:
|
|
311
|
+
category = UserWarning
|
|
312
|
+
if not (isinstance(category, type) and issubclass(category, Warning)):
|
|
313
|
+
raise TypeError("category must be a Warning subclass, "
|
|
314
|
+
"not '{:s}'".format(type(category).__name__))
|
|
315
|
+
if not isinstance(skip_file_prefixes, tuple):
|
|
316
|
+
# The C version demands a tuple for implementation performance.
|
|
317
|
+
raise TypeError('skip_file_prefixes must be a tuple of strs.')
|
|
318
|
+
if skip_file_prefixes:
|
|
319
|
+
stacklevel = max(2, stacklevel)
|
|
320
|
+
# Get context information
|
|
321
|
+
try:
|
|
322
|
+
if stacklevel <= 1 or _is_internal_frame(sys._getframe(1)):
|
|
323
|
+
# If frame is too small to care or if the warning originated in
|
|
324
|
+
# internal code, then do not try to hide any frames.
|
|
325
|
+
frame = sys._getframe(stacklevel)
|
|
326
|
+
else:
|
|
327
|
+
frame = sys._getframe(1)
|
|
328
|
+
# Look for one frame less since the above line starts us off.
|
|
329
|
+
for x in range(stacklevel-1):
|
|
330
|
+
frame = _next_external_frame(frame, skip_file_prefixes)
|
|
331
|
+
if frame is None:
|
|
332
|
+
raise ValueError
|
|
333
|
+
except ValueError:
|
|
334
|
+
globals = sys.__dict__
|
|
335
|
+
filename = "<sys>"
|
|
336
|
+
lineno = 0
|
|
337
|
+
else:
|
|
338
|
+
globals = frame.f_globals
|
|
339
|
+
filename = frame.f_code.co_filename
|
|
340
|
+
lineno = frame.f_lineno
|
|
341
|
+
if '__name__' in globals:
|
|
342
|
+
module = globals['__name__']
|
|
343
|
+
else:
|
|
344
|
+
module = "<string>"
|
|
345
|
+
registry = globals.setdefault("__warningregistry__", {})
|
|
346
|
+
warn_explicit(message, category, filename, lineno, module, registry,
|
|
347
|
+
globals, source)
|
|
348
|
+
|
|
349
|
+
def warn_explicit(message, category, filename, lineno,
|
|
350
|
+
module=None, registry=None, module_globals=None,
|
|
351
|
+
source=None):
|
|
352
|
+
lineno = int(lineno)
|
|
353
|
+
if module is None:
|
|
354
|
+
module = filename or "<unknown>"
|
|
355
|
+
if module[-3:].lower() == ".py":
|
|
356
|
+
module = module[:-3] # XXX What about leading pathname?
|
|
357
|
+
if registry is None:
|
|
358
|
+
registry = {}
|
|
359
|
+
if registry.get('version', 0) != _filters_version:
|
|
360
|
+
registry.clear()
|
|
361
|
+
registry['version'] = _filters_version
|
|
362
|
+
if isinstance(message, Warning):
|
|
363
|
+
text = str(message)
|
|
364
|
+
category = message.__class__
|
|
365
|
+
else:
|
|
366
|
+
text = message
|
|
367
|
+
message = category(message)
|
|
368
|
+
key = (text, category, lineno)
|
|
369
|
+
# Quick test for common case
|
|
370
|
+
if registry.get(key):
|
|
371
|
+
return
|
|
372
|
+
# Search the filters
|
|
373
|
+
for item in filters:
|
|
374
|
+
action, msg, cat, mod, ln = item
|
|
375
|
+
if ((msg is None or msg.match(text)) and
|
|
376
|
+
issubclass(category, cat) and
|
|
377
|
+
(mod is None or mod.match(module)) and
|
|
378
|
+
(ln == 0 or lineno == ln)):
|
|
379
|
+
break
|
|
380
|
+
else:
|
|
381
|
+
action = defaultaction
|
|
382
|
+
# Early exit actions
|
|
383
|
+
if action == "ignore":
|
|
384
|
+
return
|
|
385
|
+
|
|
386
|
+
# Prime the linecache for formatting, in case the
|
|
387
|
+
# "file" is actually in a zipfile or something.
|
|
388
|
+
import linecache
|
|
389
|
+
linecache.getlines(filename, module_globals)
|
|
390
|
+
|
|
391
|
+
if action == "error":
|
|
392
|
+
raise message
|
|
393
|
+
# Other actions
|
|
394
|
+
if action == "once":
|
|
395
|
+
registry[key] = 1
|
|
396
|
+
oncekey = (text, category)
|
|
397
|
+
if onceregistry.get(oncekey):
|
|
398
|
+
return
|
|
399
|
+
onceregistry[oncekey] = 1
|
|
400
|
+
elif action == "always":
|
|
401
|
+
pass
|
|
402
|
+
elif action == "module":
|
|
403
|
+
registry[key] = 1
|
|
404
|
+
altkey = (text, category, 0)
|
|
405
|
+
if registry.get(altkey):
|
|
406
|
+
return
|
|
407
|
+
registry[altkey] = 1
|
|
408
|
+
elif action == "default":
|
|
409
|
+
registry[key] = 1
|
|
410
|
+
else:
|
|
411
|
+
# Unrecognized actions are errors
|
|
412
|
+
raise RuntimeError(
|
|
413
|
+
"Unrecognized action (%r) in warnings.filters:\n %s" %
|
|
414
|
+
(action, item))
|
|
415
|
+
# Print message and context
|
|
416
|
+
msg = WarningMessage(message, category, filename, lineno, source=source)
|
|
417
|
+
_showwarnmsg(msg)
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
class WarningMessage(object):
|
|
421
|
+
|
|
422
|
+
_WARNING_DETAILS = ("message", "category", "filename", "lineno", "file",
|
|
423
|
+
"line", "source")
|
|
424
|
+
|
|
425
|
+
def __init__(self, message, category, filename, lineno, file=None,
|
|
426
|
+
line=None, source=None):
|
|
427
|
+
self.message = message
|
|
428
|
+
self.category = category
|
|
429
|
+
self.filename = filename
|
|
430
|
+
self.lineno = lineno
|
|
431
|
+
self.file = file
|
|
432
|
+
self.line = line
|
|
433
|
+
self.source = source
|
|
434
|
+
self._category_name = category.__name__ if category else None
|
|
435
|
+
|
|
436
|
+
def __str__(self):
|
|
437
|
+
return ("{message : %r, category : %r, filename : %r, lineno : %s, "
|
|
438
|
+
"line : %r}" % (self.message, self._category_name,
|
|
439
|
+
self.filename, self.lineno, self.line))
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
class catch_warnings(object):
|
|
443
|
+
|
|
444
|
+
"""A context manager that copies and restores the warnings filter upon
|
|
445
|
+
exiting the context.
|
|
446
|
+
|
|
447
|
+
The 'record' argument specifies whether warnings should be captured by a
|
|
448
|
+
custom implementation of warnings.showwarning() and be appended to a list
|
|
449
|
+
returned by the context manager. Otherwise None is returned by the context
|
|
450
|
+
manager. The objects appended to the list are arguments whose attributes
|
|
451
|
+
mirror the arguments to showwarning().
|
|
452
|
+
|
|
453
|
+
The 'module' argument is to specify an alternative module to the module
|
|
454
|
+
named 'warnings' and imported under that name. This argument is only useful
|
|
455
|
+
when testing the warnings module itself.
|
|
456
|
+
|
|
457
|
+
If the 'action' argument is not None, the remaining arguments are passed
|
|
458
|
+
to warnings.simplefilter() as if it were called immediately on entering the
|
|
459
|
+
context.
|
|
460
|
+
"""
|
|
461
|
+
|
|
462
|
+
def __init__(self, *, record=False, module=None,
|
|
463
|
+
action=None, category=Warning, lineno=0, append=False):
|
|
464
|
+
"""Specify whether to record warnings and if an alternative module
|
|
465
|
+
should be used other than sys.modules['warnings'].
|
|
466
|
+
|
|
467
|
+
For compatibility with Python 3.0, please consider all arguments to be
|
|
468
|
+
keyword-only.
|
|
469
|
+
|
|
470
|
+
"""
|
|
471
|
+
self._record = record
|
|
472
|
+
self._module = sys.modules['warnings'] if module is None else module
|
|
473
|
+
self._entered = False
|
|
474
|
+
if action is None:
|
|
475
|
+
self._filter = None
|
|
476
|
+
else:
|
|
477
|
+
self._filter = (action, category, lineno, append)
|
|
478
|
+
|
|
479
|
+
def __repr__(self):
|
|
480
|
+
args = []
|
|
481
|
+
if self._record:
|
|
482
|
+
args.append("record=True")
|
|
483
|
+
if self._module is not sys.modules['warnings']:
|
|
484
|
+
args.append("module=%r" % self._module)
|
|
485
|
+
name = type(self).__name__
|
|
486
|
+
return "%s(%s)" % (name, ", ".join(args))
|
|
487
|
+
|
|
488
|
+
def __enter__(self):
|
|
489
|
+
if self._entered:
|
|
490
|
+
raise RuntimeError("Cannot enter %r twice" % self)
|
|
491
|
+
self._entered = True
|
|
492
|
+
self._filters = self._module.filters
|
|
493
|
+
self._module.filters = self._filters[:]
|
|
494
|
+
self._module._filters_mutated()
|
|
495
|
+
self._showwarning = self._module.showwarning
|
|
496
|
+
self._showwarnmsg_impl = self._module._showwarnmsg_impl
|
|
497
|
+
if self._filter is not None:
|
|
498
|
+
simplefilter(*self._filter)
|
|
499
|
+
if self._record:
|
|
500
|
+
log = []
|
|
501
|
+
self._module._showwarnmsg_impl = log.append
|
|
502
|
+
# Reset showwarning() to the default implementation to make sure
|
|
503
|
+
# that _showwarnmsg() calls _showwarnmsg_impl()
|
|
504
|
+
self._module.showwarning = self._module._showwarning_orig
|
|
505
|
+
return log
|
|
506
|
+
else:
|
|
507
|
+
return None
|
|
508
|
+
|
|
509
|
+
def __exit__(self, *exc_info):
|
|
510
|
+
if not self._entered:
|
|
511
|
+
raise RuntimeError("Cannot exit %r without entering first" % self)
|
|
512
|
+
self._module.filters = self._filters
|
|
513
|
+
self._module._filters_mutated()
|
|
514
|
+
self._module.showwarning = self._showwarning
|
|
515
|
+
self._module._showwarnmsg_impl = self._showwarnmsg_impl
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
class deprecated:
|
|
519
|
+
"""Indicate that a class, function or overload is deprecated.
|
|
520
|
+
|
|
521
|
+
When this decorator is applied to an object, the type checker
|
|
522
|
+
will generate a diagnostic on usage of the deprecated object.
|
|
523
|
+
|
|
524
|
+
Usage:
|
|
525
|
+
|
|
526
|
+
@deprecated("Use B instead")
|
|
527
|
+
class A:
|
|
528
|
+
pass
|
|
529
|
+
|
|
530
|
+
@deprecated("Use g instead")
|
|
531
|
+
def f():
|
|
532
|
+
pass
|
|
533
|
+
|
|
534
|
+
@overload
|
|
535
|
+
@deprecated("int support is deprecated")
|
|
536
|
+
def g(x: int) -> int: ...
|
|
537
|
+
@overload
|
|
538
|
+
def g(x: str) -> int: ...
|
|
539
|
+
|
|
540
|
+
The warning specified by *category* will be emitted at runtime
|
|
541
|
+
on use of deprecated objects. For functions, that happens on calls;
|
|
542
|
+
for classes, on instantiation and on creation of subclasses.
|
|
543
|
+
If the *category* is ``None``, no warning is emitted at runtime.
|
|
544
|
+
The *stacklevel* determines where the
|
|
545
|
+
warning is emitted. If it is ``1`` (the default), the warning
|
|
546
|
+
is emitted at the direct caller of the deprecated object; if it
|
|
547
|
+
is higher, it is emitted further up the stack.
|
|
548
|
+
Static type checker behavior is not affected by the *category*
|
|
549
|
+
and *stacklevel* arguments.
|
|
550
|
+
|
|
551
|
+
The deprecation message passed to the decorator is saved in the
|
|
552
|
+
``__deprecated__`` attribute on the decorated object.
|
|
553
|
+
If applied to an overload, the decorator
|
|
554
|
+
must be after the ``@overload`` decorator for the attribute to
|
|
555
|
+
exist on the overload as returned by ``get_overloads()``.
|
|
556
|
+
|
|
557
|
+
See PEP 702 for details.
|
|
558
|
+
|
|
559
|
+
"""
|
|
560
|
+
def __init__(
|
|
561
|
+
self,
|
|
562
|
+
message: str,
|
|
563
|
+
/,
|
|
564
|
+
*,
|
|
565
|
+
category: type[Warning] | None = DeprecationWarning,
|
|
566
|
+
stacklevel: int = 1,
|
|
567
|
+
) -> None:
|
|
568
|
+
if not isinstance(message, str):
|
|
569
|
+
raise TypeError(
|
|
570
|
+
f"Expected an object of type str for 'message', not {type(message).__name__!r}"
|
|
571
|
+
)
|
|
572
|
+
self.message = message
|
|
573
|
+
self.category = category
|
|
574
|
+
self.stacklevel = stacklevel
|
|
575
|
+
|
|
576
|
+
def __call__(self, arg, /):
|
|
577
|
+
# Make sure the inner functions created below don't
|
|
578
|
+
# retain a reference to self.
|
|
579
|
+
msg = self.message
|
|
580
|
+
category = self.category
|
|
581
|
+
stacklevel = self.stacklevel
|
|
582
|
+
if category is None:
|
|
583
|
+
arg.__deprecated__ = msg
|
|
584
|
+
return arg
|
|
585
|
+
elif isinstance(arg, type):
|
|
586
|
+
import functools
|
|
587
|
+
from types import MethodType
|
|
588
|
+
|
|
589
|
+
original_new = arg.__new__
|
|
590
|
+
|
|
591
|
+
@functools.wraps(original_new)
|
|
592
|
+
def __new__(cls, /, *args, **kwargs):
|
|
593
|
+
if cls is arg:
|
|
594
|
+
warn(msg, category=category, stacklevel=stacklevel + 1)
|
|
595
|
+
if original_new is not object.__new__:
|
|
596
|
+
return original_new(cls, *args, **kwargs)
|
|
597
|
+
# Mirrors a similar check in object.__new__.
|
|
598
|
+
elif cls.__init__ is object.__init__ and (args or kwargs):
|
|
599
|
+
raise TypeError(f"{cls.__name__}() takes no arguments")
|
|
600
|
+
else:
|
|
601
|
+
return original_new(cls)
|
|
602
|
+
|
|
603
|
+
arg.__new__ = staticmethod(__new__)
|
|
604
|
+
|
|
605
|
+
if "__init_subclass__" in arg.__dict__:
|
|
606
|
+
# __init_subclass__ is directly present on the decorated class.
|
|
607
|
+
# Synthesize a wrapper that calls this method directly.
|
|
608
|
+
original_init_subclass = arg.__init_subclass__
|
|
609
|
+
# We need slightly different behavior if __init_subclass__
|
|
610
|
+
# is a bound method (likely if it was implemented in Python).
|
|
611
|
+
# Otherwise, it likely means it's a builtin such as
|
|
612
|
+
# object's implementation of __init_subclass__.
|
|
613
|
+
if isinstance(original_init_subclass, MethodType):
|
|
614
|
+
original_init_subclass = original_init_subclass.__func__
|
|
615
|
+
|
|
616
|
+
@functools.wraps(original_init_subclass)
|
|
617
|
+
def __init_subclass__(*args, **kwargs):
|
|
618
|
+
warn(msg, category=category, stacklevel=stacklevel + 1)
|
|
619
|
+
return original_init_subclass(*args, **kwargs)
|
|
620
|
+
else:
|
|
621
|
+
def __init_subclass__(cls, *args, **kwargs):
|
|
622
|
+
warn(msg, category=category, stacklevel=stacklevel + 1)
|
|
623
|
+
return super(arg, cls).__init_subclass__(*args, **kwargs)
|
|
624
|
+
|
|
625
|
+
arg.__init_subclass__ = classmethod(__init_subclass__)
|
|
626
|
+
|
|
627
|
+
arg.__deprecated__ = __new__.__deprecated__ = msg
|
|
628
|
+
__init_subclass__.__deprecated__ = msg
|
|
629
|
+
return arg
|
|
630
|
+
elif callable(arg):
|
|
631
|
+
import functools
|
|
632
|
+
import inspect
|
|
633
|
+
|
|
634
|
+
@functools.wraps(arg)
|
|
635
|
+
def wrapper(*args, **kwargs):
|
|
636
|
+
warn(msg, category=category, stacklevel=stacklevel + 1)
|
|
637
|
+
return arg(*args, **kwargs)
|
|
638
|
+
|
|
639
|
+
if inspect.iscoroutinefunction(arg):
|
|
640
|
+
wrapper = inspect.markcoroutinefunction(wrapper)
|
|
641
|
+
|
|
642
|
+
arg.__deprecated__ = wrapper.__deprecated__ = msg
|
|
643
|
+
return wrapper
|
|
644
|
+
else:
|
|
645
|
+
raise TypeError(
|
|
646
|
+
"@deprecated decorator with non-None category must be applied to "
|
|
647
|
+
f"a class or callable, not {arg!r}"
|
|
648
|
+
)
|
|
649
|
+
|
|
650
|
+
|
|
651
|
+
_DEPRECATED_MSG = "{name!r} is deprecated and slated for removal in Python {remove}"
|
|
652
|
+
|
|
653
|
+
def _deprecated(name, message=_DEPRECATED_MSG, *, remove, _version=sys.version_info):
|
|
654
|
+
"""Warn that *name* is deprecated or should be removed.
|
|
655
|
+
|
|
656
|
+
RuntimeError is raised if *remove* specifies a major/minor tuple older than
|
|
657
|
+
the current Python version or the same version but past the alpha.
|
|
658
|
+
|
|
659
|
+
The *message* argument is formatted with *name* and *remove* as a Python
|
|
660
|
+
version tuple (e.g. (3, 11)).
|
|
661
|
+
|
|
662
|
+
"""
|
|
663
|
+
remove_formatted = f"{remove[0]}.{remove[1]}"
|
|
664
|
+
if (_version[:2] > remove) or (_version[:2] == remove and _version[3] != "alpha"):
|
|
665
|
+
msg = f"{name!r} was slated for removal after Python {remove_formatted} alpha"
|
|
666
|
+
raise RuntimeError(msg)
|
|
667
|
+
else:
|
|
668
|
+
msg = message.format(name=name, remove=remove_formatted)
|
|
669
|
+
warn(msg, DeprecationWarning, stacklevel=3)
|
|
670
|
+
|
|
671
|
+
|
|
672
|
+
# Private utility function called by _PyErr_WarnUnawaitedCoroutine
|
|
673
|
+
def _warn_unawaited_coroutine(coro):
|
|
674
|
+
msg_lines = [
|
|
675
|
+
f"coroutine '{coro.__qualname__}' was never awaited\n"
|
|
676
|
+
]
|
|
677
|
+
if coro.cr_origin is not None:
|
|
678
|
+
import linecache, traceback
|
|
679
|
+
def extract():
|
|
680
|
+
for filename, lineno, funcname in reversed(coro.cr_origin):
|
|
681
|
+
line = linecache.getline(filename, lineno)
|
|
682
|
+
yield (filename, lineno, funcname, line)
|
|
683
|
+
msg_lines.append("Coroutine created at (most recent call last)\n")
|
|
684
|
+
msg_lines += traceback.format_list(list(extract()))
|
|
685
|
+
msg = "".join(msg_lines).rstrip("\n")
|
|
686
|
+
# Passing source= here means that if the user happens to have tracemalloc
|
|
687
|
+
# enabled and tracking where the coroutine was created, the warning will
|
|
688
|
+
# contain that traceback. This does mean that if they have *both*
|
|
689
|
+
# coroutine origin tracking *and* tracemalloc enabled, they'll get two
|
|
690
|
+
# partially-redundant tracebacks. If we wanted to be clever we could
|
|
691
|
+
# probably detect this case and avoid it, but for now we don't bother.
|
|
692
|
+
warn(msg, category=RuntimeWarning, stacklevel=2, source=coro)
|
|
693
|
+
|
|
694
|
+
|
|
695
|
+
# filters contains a sequence of filter 5-tuples
|
|
696
|
+
# The components of the 5-tuple are:
|
|
697
|
+
# - an action: error, ignore, always, default, module, or once
|
|
698
|
+
# - a compiled regex that must match the warning message
|
|
699
|
+
# - a class representing the warning category
|
|
700
|
+
# - a compiled regex that must match the module that is being warned
|
|
701
|
+
# - a line number for the line being warning, or 0 to mean any line
|
|
702
|
+
# If either if the compiled regexs are None, match anything.
|
|
703
|
+
try:
|
|
704
|
+
from _warnings import (filters, _defaultaction, _onceregistry,
|
|
705
|
+
warn, warn_explicit, _filters_mutated)
|
|
706
|
+
defaultaction = _defaultaction
|
|
707
|
+
onceregistry = _onceregistry
|
|
708
|
+
_warnings_defaults = True
|
|
709
|
+
except ImportError:
|
|
710
|
+
filters = []
|
|
711
|
+
defaultaction = "default"
|
|
712
|
+
onceregistry = {}
|
|
713
|
+
|
|
714
|
+
_filters_version = 1
|
|
715
|
+
|
|
716
|
+
def _filters_mutated():
|
|
717
|
+
global _filters_version
|
|
718
|
+
_filters_version += 1
|
|
719
|
+
|
|
720
|
+
_warnings_defaults = False
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
# Module initialization
|
|
724
|
+
_processoptions(sys.warnoptions)
|
|
725
|
+
if not _warnings_defaults:
|
|
726
|
+
# Several warning categories are ignored by default in regular builds
|
|
727
|
+
if not hasattr(sys, 'gettotalrefcount'):
|
|
728
|
+
filterwarnings("default", category=DeprecationWarning,
|
|
729
|
+
module="__main__", append=1)
|
|
730
|
+
simplefilter("ignore", category=DeprecationWarning, append=1)
|
|
731
|
+
simplefilter("ignore", category=PendingDeprecationWarning, append=1)
|
|
732
|
+
simplefilter("ignore", category=ImportWarning, append=1)
|
|
733
|
+
simplefilter("ignore", category=ResourceWarning, append=1)
|
|
734
|
+
|
|
735
|
+
del _warnings_defaults
|