@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,389 @@
|
|
|
1
|
+
"""Implementation of the DOM Level 3 'LS-Load' feature."""
|
|
2
|
+
|
|
3
|
+
import copy
|
|
4
|
+
import xml.dom
|
|
5
|
+
|
|
6
|
+
from xml.dom.NodeFilter import NodeFilter
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
__all__ = ["DOMBuilder", "DOMEntityResolver", "DOMInputSource"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Options:
|
|
13
|
+
"""Features object that has variables set for each DOMBuilder feature.
|
|
14
|
+
|
|
15
|
+
The DOMBuilder class uses an instance of this class to pass settings to
|
|
16
|
+
the ExpatBuilder class.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
# Note that the DOMBuilder class in LoadSave constrains which of these
|
|
20
|
+
# values can be set using the DOM Level 3 LoadSave feature.
|
|
21
|
+
|
|
22
|
+
namespaces = 1
|
|
23
|
+
namespace_declarations = True
|
|
24
|
+
validation = False
|
|
25
|
+
external_parameter_entities = True
|
|
26
|
+
external_general_entities = True
|
|
27
|
+
external_dtd_subset = True
|
|
28
|
+
validate_if_schema = False
|
|
29
|
+
validate = False
|
|
30
|
+
datatype_normalization = False
|
|
31
|
+
create_entity_ref_nodes = True
|
|
32
|
+
entities = True
|
|
33
|
+
whitespace_in_element_content = True
|
|
34
|
+
cdata_sections = True
|
|
35
|
+
comments = True
|
|
36
|
+
charset_overrides_xml_encoding = True
|
|
37
|
+
infoset = False
|
|
38
|
+
supported_mediatypes_only = False
|
|
39
|
+
|
|
40
|
+
errorHandler = None
|
|
41
|
+
filter = None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class DOMBuilder:
|
|
45
|
+
entityResolver = None
|
|
46
|
+
errorHandler = None
|
|
47
|
+
filter = None
|
|
48
|
+
|
|
49
|
+
ACTION_REPLACE = 1
|
|
50
|
+
ACTION_APPEND_AS_CHILDREN = 2
|
|
51
|
+
ACTION_INSERT_AFTER = 3
|
|
52
|
+
ACTION_INSERT_BEFORE = 4
|
|
53
|
+
|
|
54
|
+
_legal_actions = (ACTION_REPLACE, ACTION_APPEND_AS_CHILDREN,
|
|
55
|
+
ACTION_INSERT_AFTER, ACTION_INSERT_BEFORE)
|
|
56
|
+
|
|
57
|
+
def __init__(self):
|
|
58
|
+
self._options = Options()
|
|
59
|
+
|
|
60
|
+
def _get_entityResolver(self):
|
|
61
|
+
return self.entityResolver
|
|
62
|
+
def _set_entityResolver(self, entityResolver):
|
|
63
|
+
self.entityResolver = entityResolver
|
|
64
|
+
|
|
65
|
+
def _get_errorHandler(self):
|
|
66
|
+
return self.errorHandler
|
|
67
|
+
def _set_errorHandler(self, errorHandler):
|
|
68
|
+
self.errorHandler = errorHandler
|
|
69
|
+
|
|
70
|
+
def _get_filter(self):
|
|
71
|
+
return self.filter
|
|
72
|
+
def _set_filter(self, filter):
|
|
73
|
+
self.filter = filter
|
|
74
|
+
|
|
75
|
+
def setFeature(self, name, state):
|
|
76
|
+
if self.supportsFeature(name):
|
|
77
|
+
state = state and 1 or 0
|
|
78
|
+
try:
|
|
79
|
+
settings = self._settings[(_name_xform(name), state)]
|
|
80
|
+
except KeyError:
|
|
81
|
+
raise xml.dom.NotSupportedErr(
|
|
82
|
+
"unsupported feature: %r" % (name,)) from None
|
|
83
|
+
else:
|
|
84
|
+
for name, value in settings:
|
|
85
|
+
setattr(self._options, name, value)
|
|
86
|
+
else:
|
|
87
|
+
raise xml.dom.NotFoundErr("unknown feature: " + repr(name))
|
|
88
|
+
|
|
89
|
+
def supportsFeature(self, name):
|
|
90
|
+
return hasattr(self._options, _name_xform(name))
|
|
91
|
+
|
|
92
|
+
def canSetFeature(self, name, state):
|
|
93
|
+
key = (_name_xform(name), state and 1 or 0)
|
|
94
|
+
return key in self._settings
|
|
95
|
+
|
|
96
|
+
# This dictionary maps from (feature,value) to a list of
|
|
97
|
+
# (option,value) pairs that should be set on the Options object.
|
|
98
|
+
# If a (feature,value) setting is not in this dictionary, it is
|
|
99
|
+
# not supported by the DOMBuilder.
|
|
100
|
+
#
|
|
101
|
+
_settings = {
|
|
102
|
+
("namespace_declarations", 0): [
|
|
103
|
+
("namespace_declarations", 0)],
|
|
104
|
+
("namespace_declarations", 1): [
|
|
105
|
+
("namespace_declarations", 1)],
|
|
106
|
+
("validation", 0): [
|
|
107
|
+
("validation", 0)],
|
|
108
|
+
("external_general_entities", 0): [
|
|
109
|
+
("external_general_entities", 0)],
|
|
110
|
+
("external_general_entities", 1): [
|
|
111
|
+
("external_general_entities", 1)],
|
|
112
|
+
("external_parameter_entities", 0): [
|
|
113
|
+
("external_parameter_entities", 0)],
|
|
114
|
+
("external_parameter_entities", 1): [
|
|
115
|
+
("external_parameter_entities", 1)],
|
|
116
|
+
("validate_if_schema", 0): [
|
|
117
|
+
("validate_if_schema", 0)],
|
|
118
|
+
("create_entity_ref_nodes", 0): [
|
|
119
|
+
("create_entity_ref_nodes", 0)],
|
|
120
|
+
("create_entity_ref_nodes", 1): [
|
|
121
|
+
("create_entity_ref_nodes", 1)],
|
|
122
|
+
("entities", 0): [
|
|
123
|
+
("create_entity_ref_nodes", 0),
|
|
124
|
+
("entities", 0)],
|
|
125
|
+
("entities", 1): [
|
|
126
|
+
("entities", 1)],
|
|
127
|
+
("whitespace_in_element_content", 0): [
|
|
128
|
+
("whitespace_in_element_content", 0)],
|
|
129
|
+
("whitespace_in_element_content", 1): [
|
|
130
|
+
("whitespace_in_element_content", 1)],
|
|
131
|
+
("cdata_sections", 0): [
|
|
132
|
+
("cdata_sections", 0)],
|
|
133
|
+
("cdata_sections", 1): [
|
|
134
|
+
("cdata_sections", 1)],
|
|
135
|
+
("comments", 0): [
|
|
136
|
+
("comments", 0)],
|
|
137
|
+
("comments", 1): [
|
|
138
|
+
("comments", 1)],
|
|
139
|
+
("charset_overrides_xml_encoding", 0): [
|
|
140
|
+
("charset_overrides_xml_encoding", 0)],
|
|
141
|
+
("charset_overrides_xml_encoding", 1): [
|
|
142
|
+
("charset_overrides_xml_encoding", 1)],
|
|
143
|
+
("infoset", 0): [],
|
|
144
|
+
("infoset", 1): [
|
|
145
|
+
("namespace_declarations", 0),
|
|
146
|
+
("validate_if_schema", 0),
|
|
147
|
+
("create_entity_ref_nodes", 0),
|
|
148
|
+
("entities", 0),
|
|
149
|
+
("cdata_sections", 0),
|
|
150
|
+
("datatype_normalization", 1),
|
|
151
|
+
("whitespace_in_element_content", 1),
|
|
152
|
+
("comments", 1),
|
|
153
|
+
("charset_overrides_xml_encoding", 1)],
|
|
154
|
+
("supported_mediatypes_only", 0): [
|
|
155
|
+
("supported_mediatypes_only", 0)],
|
|
156
|
+
("namespaces", 0): [
|
|
157
|
+
("namespaces", 0)],
|
|
158
|
+
("namespaces", 1): [
|
|
159
|
+
("namespaces", 1)],
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
def getFeature(self, name):
|
|
163
|
+
xname = _name_xform(name)
|
|
164
|
+
try:
|
|
165
|
+
return getattr(self._options, xname)
|
|
166
|
+
except AttributeError:
|
|
167
|
+
if name == "infoset":
|
|
168
|
+
options = self._options
|
|
169
|
+
return (options.datatype_normalization
|
|
170
|
+
and options.whitespace_in_element_content
|
|
171
|
+
and options.comments
|
|
172
|
+
and options.charset_overrides_xml_encoding
|
|
173
|
+
and not (options.namespace_declarations
|
|
174
|
+
or options.validate_if_schema
|
|
175
|
+
or options.create_entity_ref_nodes
|
|
176
|
+
or options.entities
|
|
177
|
+
or options.cdata_sections))
|
|
178
|
+
raise xml.dom.NotFoundErr("feature %s not known" % repr(name))
|
|
179
|
+
|
|
180
|
+
def parseURI(self, uri):
|
|
181
|
+
if self.entityResolver:
|
|
182
|
+
input = self.entityResolver.resolveEntity(None, uri)
|
|
183
|
+
else:
|
|
184
|
+
input = DOMEntityResolver().resolveEntity(None, uri)
|
|
185
|
+
return self.parse(input)
|
|
186
|
+
|
|
187
|
+
def parse(self, input):
|
|
188
|
+
options = copy.copy(self._options)
|
|
189
|
+
options.filter = self.filter
|
|
190
|
+
options.errorHandler = self.errorHandler
|
|
191
|
+
fp = input.byteStream
|
|
192
|
+
if fp is None and input.systemId:
|
|
193
|
+
import urllib.request
|
|
194
|
+
fp = urllib.request.urlopen(input.systemId)
|
|
195
|
+
return self._parse_bytestream(fp, options)
|
|
196
|
+
|
|
197
|
+
def parseWithContext(self, input, cnode, action):
|
|
198
|
+
if action not in self._legal_actions:
|
|
199
|
+
raise ValueError("not a legal action")
|
|
200
|
+
raise NotImplementedError("Haven't written this yet...")
|
|
201
|
+
|
|
202
|
+
def _parse_bytestream(self, stream, options):
|
|
203
|
+
import xml.dom.expatbuilder
|
|
204
|
+
builder = xml.dom.expatbuilder.makeBuilder(options)
|
|
205
|
+
return builder.parseFile(stream)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def _name_xform(name):
|
|
209
|
+
return name.lower().replace('-', '_')
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
class DOMEntityResolver(object):
|
|
213
|
+
__slots__ = '_opener',
|
|
214
|
+
|
|
215
|
+
def resolveEntity(self, publicId, systemId):
|
|
216
|
+
assert systemId is not None
|
|
217
|
+
source = DOMInputSource()
|
|
218
|
+
source.publicId = publicId
|
|
219
|
+
source.systemId = systemId
|
|
220
|
+
source.byteStream = self._get_opener().open(systemId)
|
|
221
|
+
|
|
222
|
+
# determine the encoding if the transport provided it
|
|
223
|
+
source.encoding = self._guess_media_encoding(source)
|
|
224
|
+
|
|
225
|
+
# determine the base URI is we can
|
|
226
|
+
import posixpath, urllib.parse
|
|
227
|
+
parts = urllib.parse.urlparse(systemId)
|
|
228
|
+
scheme, netloc, path, params, query, fragment = parts
|
|
229
|
+
# XXX should we check the scheme here as well?
|
|
230
|
+
if path and not path.endswith("/"):
|
|
231
|
+
path = posixpath.dirname(path) + "/"
|
|
232
|
+
parts = scheme, netloc, path, params, query, fragment
|
|
233
|
+
source.baseURI = urllib.parse.urlunparse(parts)
|
|
234
|
+
|
|
235
|
+
return source
|
|
236
|
+
|
|
237
|
+
def _get_opener(self):
|
|
238
|
+
try:
|
|
239
|
+
return self._opener
|
|
240
|
+
except AttributeError:
|
|
241
|
+
self._opener = self._create_opener()
|
|
242
|
+
return self._opener
|
|
243
|
+
|
|
244
|
+
def _create_opener(self):
|
|
245
|
+
import urllib.request
|
|
246
|
+
return urllib.request.build_opener()
|
|
247
|
+
|
|
248
|
+
def _guess_media_encoding(self, source):
|
|
249
|
+
info = source.byteStream.info()
|
|
250
|
+
# import email.message
|
|
251
|
+
# assert isinstance(info, email.message.Message)
|
|
252
|
+
charset = info.get_param('charset')
|
|
253
|
+
if charset is not None:
|
|
254
|
+
return charset.lower()
|
|
255
|
+
return None
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
class DOMInputSource(object):
|
|
259
|
+
__slots__ = ('byteStream', 'characterStream', 'stringData',
|
|
260
|
+
'encoding', 'publicId', 'systemId', 'baseURI')
|
|
261
|
+
|
|
262
|
+
def __init__(self):
|
|
263
|
+
self.byteStream = None
|
|
264
|
+
self.characterStream = None
|
|
265
|
+
self.stringData = None
|
|
266
|
+
self.encoding = None
|
|
267
|
+
self.publicId = None
|
|
268
|
+
self.systemId = None
|
|
269
|
+
self.baseURI = None
|
|
270
|
+
|
|
271
|
+
def _get_byteStream(self):
|
|
272
|
+
return self.byteStream
|
|
273
|
+
def _set_byteStream(self, byteStream):
|
|
274
|
+
self.byteStream = byteStream
|
|
275
|
+
|
|
276
|
+
def _get_characterStream(self):
|
|
277
|
+
return self.characterStream
|
|
278
|
+
def _set_characterStream(self, characterStream):
|
|
279
|
+
self.characterStream = characterStream
|
|
280
|
+
|
|
281
|
+
def _get_stringData(self):
|
|
282
|
+
return self.stringData
|
|
283
|
+
def _set_stringData(self, data):
|
|
284
|
+
self.stringData = data
|
|
285
|
+
|
|
286
|
+
def _get_encoding(self):
|
|
287
|
+
return self.encoding
|
|
288
|
+
def _set_encoding(self, encoding):
|
|
289
|
+
self.encoding = encoding
|
|
290
|
+
|
|
291
|
+
def _get_publicId(self):
|
|
292
|
+
return self.publicId
|
|
293
|
+
def _set_publicId(self, publicId):
|
|
294
|
+
self.publicId = publicId
|
|
295
|
+
|
|
296
|
+
def _get_systemId(self):
|
|
297
|
+
return self.systemId
|
|
298
|
+
def _set_systemId(self, systemId):
|
|
299
|
+
self.systemId = systemId
|
|
300
|
+
|
|
301
|
+
def _get_baseURI(self):
|
|
302
|
+
return self.baseURI
|
|
303
|
+
def _set_baseURI(self, uri):
|
|
304
|
+
self.baseURI = uri
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
class DOMBuilderFilter:
|
|
308
|
+
"""Element filter which can be used to tailor construction of
|
|
309
|
+
a DOM instance.
|
|
310
|
+
"""
|
|
311
|
+
|
|
312
|
+
# There's really no need for this class; concrete implementations
|
|
313
|
+
# should just implement the endElement() and startElement()
|
|
314
|
+
# methods as appropriate. Using this makes it easy to only
|
|
315
|
+
# implement one of them.
|
|
316
|
+
|
|
317
|
+
FILTER_ACCEPT = 1
|
|
318
|
+
FILTER_REJECT = 2
|
|
319
|
+
FILTER_SKIP = 3
|
|
320
|
+
FILTER_INTERRUPT = 4
|
|
321
|
+
|
|
322
|
+
whatToShow = NodeFilter.SHOW_ALL
|
|
323
|
+
|
|
324
|
+
def _get_whatToShow(self):
|
|
325
|
+
return self.whatToShow
|
|
326
|
+
|
|
327
|
+
def acceptNode(self, element):
|
|
328
|
+
return self.FILTER_ACCEPT
|
|
329
|
+
|
|
330
|
+
def startContainer(self, element):
|
|
331
|
+
return self.FILTER_ACCEPT
|
|
332
|
+
|
|
333
|
+
del NodeFilter
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
class DocumentLS:
|
|
337
|
+
"""Mixin to create documents that conform to the load/save spec."""
|
|
338
|
+
|
|
339
|
+
async_ = False
|
|
340
|
+
|
|
341
|
+
def _get_async(self):
|
|
342
|
+
return False
|
|
343
|
+
|
|
344
|
+
def _set_async(self, flag):
|
|
345
|
+
if flag:
|
|
346
|
+
raise xml.dom.NotSupportedErr(
|
|
347
|
+
"asynchronous document loading is not supported")
|
|
348
|
+
|
|
349
|
+
def abort(self):
|
|
350
|
+
# What does it mean to "clear" a document? Does the
|
|
351
|
+
# documentElement disappear?
|
|
352
|
+
raise NotImplementedError(
|
|
353
|
+
"haven't figured out what this means yet")
|
|
354
|
+
|
|
355
|
+
def load(self, uri):
|
|
356
|
+
raise NotImplementedError("haven't written this yet")
|
|
357
|
+
|
|
358
|
+
def loadXML(self, source):
|
|
359
|
+
raise NotImplementedError("haven't written this yet")
|
|
360
|
+
|
|
361
|
+
def saveXML(self, snode):
|
|
362
|
+
if snode is None:
|
|
363
|
+
snode = self
|
|
364
|
+
elif snode.ownerDocument is not self:
|
|
365
|
+
raise xml.dom.WrongDocumentErr()
|
|
366
|
+
return snode.toxml()
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
class DOMImplementationLS:
|
|
370
|
+
MODE_SYNCHRONOUS = 1
|
|
371
|
+
MODE_ASYNCHRONOUS = 2
|
|
372
|
+
|
|
373
|
+
def createDOMBuilder(self, mode, schemaType):
|
|
374
|
+
if schemaType is not None:
|
|
375
|
+
raise xml.dom.NotSupportedErr(
|
|
376
|
+
"schemaType not yet supported")
|
|
377
|
+
if mode == self.MODE_SYNCHRONOUS:
|
|
378
|
+
return DOMBuilder()
|
|
379
|
+
if mode == self.MODE_ASYNCHRONOUS:
|
|
380
|
+
raise xml.dom.NotSupportedErr(
|
|
381
|
+
"asynchronous builders are not supported")
|
|
382
|
+
raise ValueError("unknown value for mode")
|
|
383
|
+
|
|
384
|
+
def createDOMWriter(self):
|
|
385
|
+
raise NotImplementedError(
|
|
386
|
+
"the writer interface hasn't been written yet!")
|
|
387
|
+
|
|
388
|
+
def createDOMInputSource(self):
|
|
389
|
+
return DOMInputSource()
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#
|
|
2
|
+
# ElementTree
|
|
3
|
+
# $Id: ElementInclude.py 3375 2008-02-13 08:05:08Z fredrik $
|
|
4
|
+
#
|
|
5
|
+
# limited xinclude support for element trees
|
|
6
|
+
#
|
|
7
|
+
# history:
|
|
8
|
+
# 2003-08-15 fl created
|
|
9
|
+
# 2003-11-14 fl fixed default loader
|
|
10
|
+
#
|
|
11
|
+
# Copyright (c) 2003-2004 by Fredrik Lundh. All rights reserved.
|
|
12
|
+
#
|
|
13
|
+
# fredrik@pythonware.com
|
|
14
|
+
# http://www.pythonware.com
|
|
15
|
+
#
|
|
16
|
+
# --------------------------------------------------------------------
|
|
17
|
+
# The ElementTree toolkit is
|
|
18
|
+
#
|
|
19
|
+
# Copyright (c) 1999-2008 by Fredrik Lundh
|
|
20
|
+
#
|
|
21
|
+
# By obtaining, using, and/or copying this software and/or its
|
|
22
|
+
# associated documentation, you agree that you have read, understood,
|
|
23
|
+
# and will comply with the following terms and conditions:
|
|
24
|
+
#
|
|
25
|
+
# Permission to use, copy, modify, and distribute this software and
|
|
26
|
+
# its associated documentation for any purpose and without fee is
|
|
27
|
+
# hereby granted, provided that the above copyright notice appears in
|
|
28
|
+
# all copies, and that both that copyright notice and this permission
|
|
29
|
+
# notice appear in supporting documentation, and that the name of
|
|
30
|
+
# Secret Labs AB or the author not be used in advertising or publicity
|
|
31
|
+
# pertaining to distribution of the software without specific, written
|
|
32
|
+
# prior permission.
|
|
33
|
+
#
|
|
34
|
+
# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
|
35
|
+
# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
|
|
36
|
+
# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
|
|
37
|
+
# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
|
|
38
|
+
# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
39
|
+
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
|
40
|
+
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
|
41
|
+
# OF THIS SOFTWARE.
|
|
42
|
+
# --------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
# Licensed to PSF under a Contributor Agreement.
|
|
45
|
+
# See https://www.python.org/psf/license for licensing details.
|
|
46
|
+
|
|
47
|
+
##
|
|
48
|
+
# Limited XInclude support for the ElementTree package.
|
|
49
|
+
##
|
|
50
|
+
|
|
51
|
+
import copy
|
|
52
|
+
from . import ElementTree
|
|
53
|
+
from urllib.parse import urljoin
|
|
54
|
+
|
|
55
|
+
XINCLUDE = "{http://www.w3.org/2001/XInclude}"
|
|
56
|
+
|
|
57
|
+
XINCLUDE_INCLUDE = XINCLUDE + "include"
|
|
58
|
+
XINCLUDE_FALLBACK = XINCLUDE + "fallback"
|
|
59
|
+
|
|
60
|
+
# For security reasons, the inclusion depth is limited to this read-only value by default.
|
|
61
|
+
DEFAULT_MAX_INCLUSION_DEPTH = 6
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
##
|
|
65
|
+
# Fatal include error.
|
|
66
|
+
|
|
67
|
+
class FatalIncludeError(SyntaxError):
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class LimitedRecursiveIncludeError(FatalIncludeError):
|
|
72
|
+
pass
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
##
|
|
76
|
+
# Default loader. This loader reads an included resource from disk.
|
|
77
|
+
#
|
|
78
|
+
# @param href Resource reference.
|
|
79
|
+
# @param parse Parse mode. Either "xml" or "text".
|
|
80
|
+
# @param encoding Optional text encoding (UTF-8 by default for "text").
|
|
81
|
+
# @return The expanded resource. If the parse mode is "xml", this
|
|
82
|
+
# is an Element instance. If the parse mode is "text", this
|
|
83
|
+
# is a string. If the loader fails, it can return None
|
|
84
|
+
# or raise an OSError exception.
|
|
85
|
+
# @throws OSError If the loader fails to load the resource.
|
|
86
|
+
|
|
87
|
+
def default_loader(href, parse, encoding=None):
|
|
88
|
+
if parse == "xml":
|
|
89
|
+
with open(href, 'rb') as file:
|
|
90
|
+
data = ElementTree.parse(file).getroot()
|
|
91
|
+
else:
|
|
92
|
+
if not encoding:
|
|
93
|
+
encoding = 'UTF-8'
|
|
94
|
+
with open(href, 'r', encoding=encoding) as file:
|
|
95
|
+
data = file.read()
|
|
96
|
+
return data
|
|
97
|
+
|
|
98
|
+
##
|
|
99
|
+
# Expand XInclude directives.
|
|
100
|
+
#
|
|
101
|
+
# @param elem Root Element or any ElementTree of a tree to be expanded
|
|
102
|
+
# @param loader Optional resource loader. If omitted, it defaults
|
|
103
|
+
# to {@link default_loader}. If given, it should be a callable
|
|
104
|
+
# that implements the same interface as <b>default_loader</b>.
|
|
105
|
+
# @param base_url The base URL of the original file, to resolve
|
|
106
|
+
# relative include file references.
|
|
107
|
+
# @param max_depth The maximum number of recursive inclusions.
|
|
108
|
+
# Limited to reduce the risk of malicious content explosion.
|
|
109
|
+
# Pass None to disable the limitation.
|
|
110
|
+
# @throws LimitedRecursiveIncludeError If the {@link max_depth} was exceeded.
|
|
111
|
+
# @throws FatalIncludeError If the function fails to include a given
|
|
112
|
+
# resource, or if the tree contains malformed XInclude elements.
|
|
113
|
+
# @throws OSError If the function fails to load a given resource.
|
|
114
|
+
# @throws ValueError If negative {@link max_depth} is passed.
|
|
115
|
+
# @returns None. Modifies tree pointed by {@link elem}
|
|
116
|
+
|
|
117
|
+
def include(elem, loader=None, base_url=None,
|
|
118
|
+
max_depth=DEFAULT_MAX_INCLUSION_DEPTH):
|
|
119
|
+
if max_depth is None:
|
|
120
|
+
max_depth = -1
|
|
121
|
+
elif max_depth < 0:
|
|
122
|
+
raise ValueError("expected non-negative depth or None for 'max_depth', got %r" % max_depth)
|
|
123
|
+
|
|
124
|
+
if hasattr(elem, 'getroot'):
|
|
125
|
+
elem = elem.getroot()
|
|
126
|
+
if loader is None:
|
|
127
|
+
loader = default_loader
|
|
128
|
+
|
|
129
|
+
_include(elem, loader, base_url, max_depth, set())
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def _include(elem, loader, base_url, max_depth, _parent_hrefs):
|
|
133
|
+
# look for xinclude elements
|
|
134
|
+
i = 0
|
|
135
|
+
while i < len(elem):
|
|
136
|
+
e = elem[i]
|
|
137
|
+
if e.tag == XINCLUDE_INCLUDE:
|
|
138
|
+
# process xinclude directive
|
|
139
|
+
href = e.get("href")
|
|
140
|
+
if base_url:
|
|
141
|
+
href = urljoin(base_url, href)
|
|
142
|
+
parse = e.get("parse", "xml")
|
|
143
|
+
if parse == "xml":
|
|
144
|
+
if href in _parent_hrefs:
|
|
145
|
+
raise FatalIncludeError("recursive include of %s" % href)
|
|
146
|
+
if max_depth == 0:
|
|
147
|
+
raise LimitedRecursiveIncludeError(
|
|
148
|
+
"maximum xinclude depth reached when including file %s" % href)
|
|
149
|
+
_parent_hrefs.add(href)
|
|
150
|
+
node = loader(href, parse)
|
|
151
|
+
if node is None:
|
|
152
|
+
raise FatalIncludeError(
|
|
153
|
+
"cannot load %r as %r" % (href, parse)
|
|
154
|
+
)
|
|
155
|
+
node = copy.copy(node) # FIXME: this makes little sense with recursive includes
|
|
156
|
+
_include(node, loader, href, max_depth - 1, _parent_hrefs)
|
|
157
|
+
_parent_hrefs.remove(href)
|
|
158
|
+
if e.tail:
|
|
159
|
+
node.tail = (node.tail or "") + e.tail
|
|
160
|
+
elem[i] = node
|
|
161
|
+
elif parse == "text":
|
|
162
|
+
text = loader(href, parse, e.get("encoding"))
|
|
163
|
+
if text is None:
|
|
164
|
+
raise FatalIncludeError(
|
|
165
|
+
"cannot load %r as %r" % (href, parse)
|
|
166
|
+
)
|
|
167
|
+
if e.tail:
|
|
168
|
+
text += e.tail
|
|
169
|
+
if i:
|
|
170
|
+
node = elem[i-1]
|
|
171
|
+
node.tail = (node.tail or "") + text
|
|
172
|
+
else:
|
|
173
|
+
elem.text = (elem.text or "") + text
|
|
174
|
+
del elem[i]
|
|
175
|
+
continue
|
|
176
|
+
else:
|
|
177
|
+
raise FatalIncludeError(
|
|
178
|
+
"unknown parse type in xi:include tag (%r)" % parse
|
|
179
|
+
)
|
|
180
|
+
elif e.tag == XINCLUDE_FALLBACK:
|
|
181
|
+
raise FatalIncludeError(
|
|
182
|
+
"xi:fallback tag must be child of xi:include (%r)" % e.tag
|
|
183
|
+
)
|
|
184
|
+
else:
|
|
185
|
+
_include(e, loader, base_url, max_depth, _parent_hrefs)
|
|
186
|
+
i += 1
|