@rowstile/cli-linux-x64 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +5 -0
- package/package.json +26 -0
- package/python/bin/python3.13 +0 -0
- package/python/bin/python3.13-config +122 -0
- package/python/lib/libpython3.13.so.1.0 +0 -0
- package/python/lib/libpython3.so +0 -0
- package/python/lib/python3.13/LICENSE.txt +277 -0
- package/python/lib/python3.13/__future__.py +147 -0
- package/python/lib/python3.13/__hello__.py +16 -0
- package/python/lib/python3.13/_aix_support.py +108 -0
- package/python/lib/python3.13/_android_support.py +192 -0
- package/python/lib/python3.13/_apple_support.py +66 -0
- package/python/lib/python3.13/_collections_abc.py +1187 -0
- package/python/lib/python3.13/_colorize.py +119 -0
- package/python/lib/python3.13/_compat_pickle.py +251 -0
- package/python/lib/python3.13/_compression.py +162 -0
- package/python/lib/python3.13/_ios_support.py +71 -0
- package/python/lib/python3.13/_markupbase.py +396 -0
- package/python/lib/python3.13/_opcode_metadata.py +343 -0
- package/python/lib/python3.13/_osx_support.py +579 -0
- package/python/lib/python3.13/_py_abc.py +147 -0
- package/python/lib/python3.13/_pydatetime.py +2640 -0
- package/python/lib/python3.13/_pydecimal.py +6356 -0
- package/python/lib/python3.13/_pyio.py +2714 -0
- package/python/lib/python3.13/_pylong.py +363 -0
- package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
- package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
- package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
- package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
- package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
- package/python/lib/python3.13/_pyrepl/commands.py +492 -0
- package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
- package/python/lib/python3.13/_pyrepl/console.py +229 -0
- package/python/lib/python3.13/_pyrepl/curses.py +33 -0
- package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
- package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
- package/python/lib/python3.13/_pyrepl/input.py +114 -0
- package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
- package/python/lib/python3.13/_pyrepl/main.py +59 -0
- package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
- package/python/lib/python3.13/_pyrepl/pager.py +175 -0
- package/python/lib/python3.13/_pyrepl/reader.py +764 -0
- package/python/lib/python3.13/_pyrepl/readline.py +599 -0
- package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
- package/python/lib/python3.13/_pyrepl/trace.py +21 -0
- package/python/lib/python3.13/_pyrepl/types.py +10 -0
- package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
- package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
- package/python/lib/python3.13/_pyrepl/utils.py +83 -0
- package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
- package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
- package/python/lib/python3.13/_sitebuiltins.py +91 -0
- package/python/lib/python3.13/_strptime.py +800 -0
- package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
- package/python/lib/python3.13/_threading_local.py +120 -0
- package/python/lib/python3.13/_weakrefset.py +205 -0
- package/python/lib/python3.13/abc.py +188 -0
- package/python/lib/python3.13/antigravity.py +17 -0
- package/python/lib/python3.13/argparse.py +2690 -0
- package/python/lib/python3.13/ast.py +1865 -0
- package/python/lib/python3.13/asyncio/__init__.py +47 -0
- package/python/lib/python3.13/asyncio/__main__.py +211 -0
- package/python/lib/python3.13/asyncio/base_events.py +2086 -0
- package/python/lib/python3.13/asyncio/base_futures.py +67 -0
- package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
- package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
- package/python/lib/python3.13/asyncio/constants.py +41 -0
- package/python/lib/python3.13/asyncio/coroutines.py +109 -0
- package/python/lib/python3.13/asyncio/events.py +885 -0
- package/python/lib/python3.13/asyncio/exceptions.py +62 -0
- package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
- package/python/lib/python3.13/asyncio/futures.py +425 -0
- package/python/lib/python3.13/asyncio/locks.py +617 -0
- package/python/lib/python3.13/asyncio/log.py +7 -0
- package/python/lib/python3.13/asyncio/mixins.py +21 -0
- package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
- package/python/lib/python3.13/asyncio/protocols.py +216 -0
- package/python/lib/python3.13/asyncio/queues.py +309 -0
- package/python/lib/python3.13/asyncio/runners.py +217 -0
- package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
- package/python/lib/python3.13/asyncio/sslproto.py +929 -0
- package/python/lib/python3.13/asyncio/staggered.py +174 -0
- package/python/lib/python3.13/asyncio/streams.py +787 -0
- package/python/lib/python3.13/asyncio/subprocess.py +229 -0
- package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
- package/python/lib/python3.13/asyncio/tasks.py +1121 -0
- package/python/lib/python3.13/asyncio/threads.py +26 -0
- package/python/lib/python3.13/asyncio/timeouts.py +185 -0
- package/python/lib/python3.13/asyncio/transports.py +337 -0
- package/python/lib/python3.13/asyncio/trsock.py +98 -0
- package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
- package/python/lib/python3.13/asyncio/windows_events.py +906 -0
- package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
- package/python/lib/python3.13/base64.py +628 -0
- package/python/lib/python3.13/bdb.py +973 -0
- package/python/lib/python3.13/bisect.py +118 -0
- package/python/lib/python3.13/bz2.py +352 -0
- package/python/lib/python3.13/cProfile.py +197 -0
- package/python/lib/python3.13/calendar.py +813 -0
- package/python/lib/python3.13/cmd.py +409 -0
- package/python/lib/python3.13/code.py +386 -0
- package/python/lib/python3.13/codecs.py +1132 -0
- package/python/lib/python3.13/codeop.py +155 -0
- package/python/lib/python3.13/collections/__init__.py +1603 -0
- package/python/lib/python3.13/colorsys.py +166 -0
- package/python/lib/python3.13/compileall.py +470 -0
- package/python/lib/python3.13/concurrent/__init__.py +1 -0
- package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
- package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
- package/python/lib/python3.13/concurrent/futures/process.py +892 -0
- package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
- package/python/lib/python3.13/configparser.py +1396 -0
- package/python/lib/python3.13/contextlib.py +814 -0
- package/python/lib/python3.13/contextvars.py +4 -0
- package/python/lib/python3.13/copy.py +306 -0
- package/python/lib/python3.13/copyreg.py +217 -0
- package/python/lib/python3.13/csv.py +527 -0
- package/python/lib/python3.13/ctypes/__init__.py +605 -0
- package/python/lib/python3.13/ctypes/_aix.py +327 -0
- package/python/lib/python3.13/ctypes/_endian.py +78 -0
- package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
- package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
- package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
- package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
- package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
- package/python/lib/python3.13/ctypes/util.py +387 -0
- package/python/lib/python3.13/ctypes/wintypes.py +202 -0
- package/python/lib/python3.13/curses/__init__.py +101 -0
- package/python/lib/python3.13/curses/ascii.py +99 -0
- package/python/lib/python3.13/curses/has_key.py +192 -0
- package/python/lib/python3.13/curses/panel.py +6 -0
- package/python/lib/python3.13/curses/textpad.py +236 -0
- package/python/lib/python3.13/dataclasses.py +1679 -0
- package/python/lib/python3.13/datetime.py +9 -0
- package/python/lib/python3.13/dbm/__init__.py +194 -0
- package/python/lib/python3.13/dbm/dumb.py +319 -0
- package/python/lib/python3.13/dbm/gnu.py +3 -0
- package/python/lib/python3.13/dbm/ndbm.py +3 -0
- package/python/lib/python3.13/dbm/sqlite3.py +144 -0
- package/python/lib/python3.13/decimal.py +109 -0
- package/python/lib/python3.13/difflib.py +2058 -0
- package/python/lib/python3.13/dis.py +1075 -0
- package/python/lib/python3.13/doctest.py +2919 -0
- package/python/lib/python3.13/email/__init__.py +61 -0
- package/python/lib/python3.13/email/_encoded_words.py +233 -0
- package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
- package/python/lib/python3.13/email/_parseaddr.py +563 -0
- package/python/lib/python3.13/email/_policybase.py +382 -0
- package/python/lib/python3.13/email/architecture.rst +216 -0
- package/python/lib/python3.13/email/base64mime.py +115 -0
- package/python/lib/python3.13/email/charset.py +396 -0
- package/python/lib/python3.13/email/contentmanager.py +254 -0
- package/python/lib/python3.13/email/encoders.py +65 -0
- package/python/lib/python3.13/email/errors.py +117 -0
- package/python/lib/python3.13/email/feedparser.py +536 -0
- package/python/lib/python3.13/email/generator.py +530 -0
- package/python/lib/python3.13/email/header.py +582 -0
- package/python/lib/python3.13/email/headerregistry.py +618 -0
- package/python/lib/python3.13/email/iterators.py +68 -0
- package/python/lib/python3.13/email/message.py +1217 -0
- package/python/lib/python3.13/email/mime/__init__.py +0 -0
- package/python/lib/python3.13/email/mime/application.py +37 -0
- package/python/lib/python3.13/email/mime/audio.py +97 -0
- package/python/lib/python3.13/email/mime/base.py +29 -0
- package/python/lib/python3.13/email/mime/image.py +152 -0
- package/python/lib/python3.13/email/mime/message.py +33 -0
- package/python/lib/python3.13/email/mime/multipart.py +47 -0
- package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
- package/python/lib/python3.13/email/mime/text.py +40 -0
- package/python/lib/python3.13/email/parser.py +127 -0
- package/python/lib/python3.13/email/policy.py +232 -0
- package/python/lib/python3.13/email/quoprimime.py +300 -0
- package/python/lib/python3.13/email/utils.py +497 -0
- package/python/lib/python3.13/encodings/__init__.py +179 -0
- package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/aliases.py +560 -0
- package/python/lib/python3.13/encodings/ascii.py +50 -0
- package/python/lib/python3.13/encodings/base64_codec.py +55 -0
- package/python/lib/python3.13/encodings/big5.py +39 -0
- package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
- package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
- package/python/lib/python3.13/encodings/charmap.py +69 -0
- package/python/lib/python3.13/encodings/cp037.py +307 -0
- package/python/lib/python3.13/encodings/cp1006.py +307 -0
- package/python/lib/python3.13/encodings/cp1026.py +307 -0
- package/python/lib/python3.13/encodings/cp1125.py +698 -0
- package/python/lib/python3.13/encodings/cp1140.py +307 -0
- package/python/lib/python3.13/encodings/cp1250.py +307 -0
- package/python/lib/python3.13/encodings/cp1251.py +307 -0
- package/python/lib/python3.13/encodings/cp1252.py +307 -0
- package/python/lib/python3.13/encodings/cp1253.py +307 -0
- package/python/lib/python3.13/encodings/cp1254.py +307 -0
- package/python/lib/python3.13/encodings/cp1255.py +307 -0
- package/python/lib/python3.13/encodings/cp1256.py +307 -0
- package/python/lib/python3.13/encodings/cp1257.py +307 -0
- package/python/lib/python3.13/encodings/cp1258.py +307 -0
- package/python/lib/python3.13/encodings/cp273.py +307 -0
- package/python/lib/python3.13/encodings/cp424.py +307 -0
- package/python/lib/python3.13/encodings/cp437.py +698 -0
- package/python/lib/python3.13/encodings/cp500.py +307 -0
- package/python/lib/python3.13/encodings/cp720.py +309 -0
- package/python/lib/python3.13/encodings/cp737.py +698 -0
- package/python/lib/python3.13/encodings/cp775.py +697 -0
- package/python/lib/python3.13/encodings/cp850.py +698 -0
- package/python/lib/python3.13/encodings/cp852.py +698 -0
- package/python/lib/python3.13/encodings/cp855.py +698 -0
- package/python/lib/python3.13/encodings/cp856.py +307 -0
- package/python/lib/python3.13/encodings/cp857.py +694 -0
- package/python/lib/python3.13/encodings/cp858.py +698 -0
- package/python/lib/python3.13/encodings/cp860.py +698 -0
- package/python/lib/python3.13/encodings/cp861.py +698 -0
- package/python/lib/python3.13/encodings/cp862.py +698 -0
- package/python/lib/python3.13/encodings/cp863.py +698 -0
- package/python/lib/python3.13/encodings/cp864.py +690 -0
- package/python/lib/python3.13/encodings/cp865.py +698 -0
- package/python/lib/python3.13/encodings/cp866.py +698 -0
- package/python/lib/python3.13/encodings/cp869.py +689 -0
- package/python/lib/python3.13/encodings/cp874.py +307 -0
- package/python/lib/python3.13/encodings/cp875.py +307 -0
- package/python/lib/python3.13/encodings/cp932.py +39 -0
- package/python/lib/python3.13/encodings/cp949.py +39 -0
- package/python/lib/python3.13/encodings/cp950.py +39 -0
- package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/euc_jp.py +39 -0
- package/python/lib/python3.13/encodings/euc_kr.py +39 -0
- package/python/lib/python3.13/encodings/gb18030.py +39 -0
- package/python/lib/python3.13/encodings/gb2312.py +39 -0
- package/python/lib/python3.13/encodings/gbk.py +39 -0
- package/python/lib/python3.13/encodings/hex_codec.py +55 -0
- package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
- package/python/lib/python3.13/encodings/hz.py +39 -0
- package/python/lib/python3.13/encodings/idna.py +387 -0
- package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
- package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
- package/python/lib/python3.13/encodings/johab.py +39 -0
- package/python/lib/python3.13/encodings/koi8_r.py +307 -0
- package/python/lib/python3.13/encodings/koi8_t.py +308 -0
- package/python/lib/python3.13/encodings/koi8_u.py +307 -0
- package/python/lib/python3.13/encodings/kz1048.py +307 -0
- package/python/lib/python3.13/encodings/latin_1.py +50 -0
- package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
- package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
- package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
- package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
- package/python/lib/python3.13/encodings/mac_greek.py +307 -0
- package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
- package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
- package/python/lib/python3.13/encodings/mac_roman.py +307 -0
- package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
- package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
- package/python/lib/python3.13/encodings/mbcs.py +47 -0
- package/python/lib/python3.13/encodings/oem.py +41 -0
- package/python/lib/python3.13/encodings/palmos.py +308 -0
- package/python/lib/python3.13/encodings/ptcp154.py +312 -0
- package/python/lib/python3.13/encodings/punycode.py +253 -0
- package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
- package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/rot_13.py +113 -0
- package/python/lib/python3.13/encodings/shift_jis.py +39 -0
- package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/tis_620.py +307 -0
- package/python/lib/python3.13/encodings/undefined.py +49 -0
- package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/utf_16.py +155 -0
- package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
- package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
- package/python/lib/python3.13/encodings/utf_32.py +150 -0
- package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
- package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
- package/python/lib/python3.13/encodings/utf_7.py +38 -0
- package/python/lib/python3.13/encodings/utf_8.py +42 -0
- package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
- package/python/lib/python3.13/encodings/uu_codec.py +103 -0
- package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
- package/python/lib/python3.13/enum.py +2183 -0
- package/python/lib/python3.13/filecmp.py +320 -0
- package/python/lib/python3.13/fileinput.py +442 -0
- package/python/lib/python3.13/fnmatch.py +192 -0
- package/python/lib/python3.13/fractions.py +1043 -0
- package/python/lib/python3.13/ftplib.py +975 -0
- package/python/lib/python3.13/functools.py +1036 -0
- package/python/lib/python3.13/genericpath.py +200 -0
- package/python/lib/python3.13/getopt.py +215 -0
- package/python/lib/python3.13/getpass.py +192 -0
- package/python/lib/python3.13/gettext.py +657 -0
- package/python/lib/python3.13/glob.py +572 -0
- package/python/lib/python3.13/graphlib.py +250 -0
- package/python/lib/python3.13/gzip.py +693 -0
- package/python/lib/python3.13/hashlib.py +255 -0
- package/python/lib/python3.13/heapq.py +603 -0
- package/python/lib/python3.13/hmac.py +220 -0
- package/python/lib/python3.13/html/__init__.py +132 -0
- package/python/lib/python3.13/html/entities.py +2513 -0
- package/python/lib/python3.13/html/parser.py +583 -0
- package/python/lib/python3.13/http/__init__.py +202 -0
- package/python/lib/python3.13/http/client.py +1598 -0
- package/python/lib/python3.13/http/cookiejar.py +2122 -0
- package/python/lib/python3.13/http/cookies.py +635 -0
- package/python/lib/python3.13/http/server.py +1355 -0
- package/python/lib/python3.13/imaplib.py +1769 -0
- package/python/lib/python3.13/importlib/__init__.py +136 -0
- package/python/lib/python3.13/importlib/_abc.py +39 -0
- package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
- package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
- package/python/lib/python3.13/importlib/abc.py +243 -0
- package/python/lib/python3.13/importlib/machinery.py +21 -0
- package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
- package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
- package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
- package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
- package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
- package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
- package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
- package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
- package/python/lib/python3.13/importlib/readers.py +12 -0
- package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
- package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
- package/python/lib/python3.13/importlib/resources/_common.py +211 -0
- package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
- package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
- package/python/lib/python3.13/importlib/resources/abc.py +173 -0
- package/python/lib/python3.13/importlib/resources/readers.py +203 -0
- package/python/lib/python3.13/importlib/resources/simple.py +106 -0
- package/python/lib/python3.13/importlib/simple.py +14 -0
- package/python/lib/python3.13/importlib/util.py +274 -0
- package/python/lib/python3.13/inspect.py +3479 -0
- package/python/lib/python3.13/io.py +99 -0
- package/python/lib/python3.13/ipaddress.py +2440 -0
- package/python/lib/python3.13/json/__init__.py +365 -0
- package/python/lib/python3.13/json/decoder.py +364 -0
- package/python/lib/python3.13/json/encoder.py +446 -0
- package/python/lib/python3.13/json/scanner.py +73 -0
- package/python/lib/python3.13/json/tool.py +90 -0
- package/python/lib/python3.13/keyword.py +64 -0
- package/python/lib/python3.13/lib-dynload/.empty +0 -0
- package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
- package/python/lib/python3.13/linecache.py +236 -0
- package/python/lib/python3.13/locale.py +1987 -0
- package/python/lib/python3.13/logging/__init__.py +2330 -0
- package/python/lib/python3.13/logging/config.py +1080 -0
- package/python/lib/python3.13/logging/handlers.py +1629 -0
- package/python/lib/python3.13/lzma.py +364 -0
- package/python/lib/python3.13/mailbox.py +2219 -0
- package/python/lib/python3.13/mimetypes.py +679 -0
- package/python/lib/python3.13/modulefinder.py +671 -0
- package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
- package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
- package/python/lib/python3.13/multiprocessing/context.py +383 -0
- package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
- package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
- package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
- package/python/lib/python3.13/multiprocessing/heap.py +337 -0
- package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
- package/python/lib/python3.13/multiprocessing/pool.py +957 -0
- package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
- package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
- package/python/lib/python3.13/multiprocessing/process.py +436 -0
- package/python/lib/python3.13/multiprocessing/queues.py +399 -0
- package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
- package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
- package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
- package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
- package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
- package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
- package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
- package/python/lib/python3.13/multiprocessing/util.py +562 -0
- package/python/lib/python3.13/netrc.py +199 -0
- package/python/lib/python3.13/ntpath.py +872 -0
- package/python/lib/python3.13/nturl2path.py +69 -0
- package/python/lib/python3.13/numbers.py +427 -0
- package/python/lib/python3.13/opcode.py +115 -0
- package/python/lib/python3.13/operator.py +467 -0
- package/python/lib/python3.13/optparse.py +1681 -0
- package/python/lib/python3.13/os.py +1184 -0
- package/python/lib/python3.13/pathlib/__init__.py +12 -0
- package/python/lib/python3.13/pathlib/_abc.py +930 -0
- package/python/lib/python3.13/pathlib/_local.py +861 -0
- package/python/lib/python3.13/pdb.py +2550 -0
- package/python/lib/python3.13/pickle.py +1860 -0
- package/python/lib/python3.13/pickletools.py +2904 -0
- package/python/lib/python3.13/pkgutil.py +529 -0
- package/python/lib/python3.13/platform.py +1454 -0
- package/python/lib/python3.13/plistlib.py +948 -0
- package/python/lib/python3.13/poplib.py +477 -0
- package/python/lib/python3.13/posixpath.py +578 -0
- package/python/lib/python3.13/pprint.py +658 -0
- package/python/lib/python3.13/profile.py +616 -0
- package/python/lib/python3.13/pstats.py +778 -0
- package/python/lib/python3.13/pty.py +211 -0
- package/python/lib/python3.13/py_compile.py +212 -0
- package/python/lib/python3.13/pyclbr.py +314 -0
- package/python/lib/python3.13/pydoc.py +2861 -0
- package/python/lib/python3.13/queue.py +383 -0
- package/python/lib/python3.13/quopri.py +237 -0
- package/python/lib/python3.13/random.py +1078 -0
- package/python/lib/python3.13/re/__init__.py +428 -0
- package/python/lib/python3.13/re/_casefix.py +106 -0
- package/python/lib/python3.13/re/_compiler.py +768 -0
- package/python/lib/python3.13/re/_constants.py +222 -0
- package/python/lib/python3.13/re/_parser.py +1081 -0
- package/python/lib/python3.13/reprlib.py +230 -0
- package/python/lib/python3.13/rlcompleter.py +222 -0
- package/python/lib/python3.13/runpy.py +326 -0
- package/python/lib/python3.13/sched.py +167 -0
- package/python/lib/python3.13/secrets.py +71 -0
- package/python/lib/python3.13/selectors.py +603 -0
- package/python/lib/python3.13/shelve.py +250 -0
- package/python/lib/python3.13/shlex.py +345 -0
- package/python/lib/python3.13/shutil.py +1569 -0
- package/python/lib/python3.13/signal.py +94 -0
- package/python/lib/python3.13/site.py +773 -0
- package/python/lib/python3.13/smtplib.py +1123 -0
- package/python/lib/python3.13/socket.py +988 -0
- package/python/lib/python3.13/socketserver.py +863 -0
- package/python/lib/python3.13/sqlite3/__init__.py +70 -0
- package/python/lib/python3.13/sqlite3/__main__.py +139 -0
- package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
- package/python/lib/python3.13/sqlite3/dump.py +118 -0
- package/python/lib/python3.13/sre_compile.py +7 -0
- package/python/lib/python3.13/sre_constants.py +7 -0
- package/python/lib/python3.13/sre_parse.py +7 -0
- package/python/lib/python3.13/ssl.py +1541 -0
- package/python/lib/python3.13/stat.py +212 -0
- package/python/lib/python3.13/statistics.py +1817 -0
- package/python/lib/python3.13/string.py +314 -0
- package/python/lib/python3.13/stringprep.py +272 -0
- package/python/lib/python3.13/struct.py +15 -0
- package/python/lib/python3.13/subprocess.py +2258 -0
- package/python/lib/python3.13/symtable.py +414 -0
- package/python/lib/python3.13/sysconfig/__init__.py +734 -0
- package/python/lib/python3.13/sysconfig/__main__.py +248 -0
- package/python/lib/python3.13/tabnanny.py +340 -0
- package/python/lib/python3.13/tarfile.py +3136 -0
- package/python/lib/python3.13/tempfile.py +958 -0
- package/python/lib/python3.13/textwrap.py +497 -0
- package/python/lib/python3.13/this.py +28 -0
- package/python/lib/python3.13/threading.py +1602 -0
- package/python/lib/python3.13/timeit.py +381 -0
- package/python/lib/python3.13/token.py +141 -0
- package/python/lib/python3.13/tokenize.py +592 -0
- package/python/lib/python3.13/tomllib/__init__.py +10 -0
- package/python/lib/python3.13/tomllib/_parser.py +703 -0
- package/python/lib/python3.13/tomllib/_re.py +107 -0
- package/python/lib/python3.13/tomllib/_types.py +10 -0
- package/python/lib/python3.13/tomllib/mypy.ini +15 -0
- package/python/lib/python3.13/trace.py +754 -0
- package/python/lib/python3.13/traceback.py +1639 -0
- package/python/lib/python3.13/tracemalloc.py +560 -0
- package/python/lib/python3.13/tty.py +73 -0
- package/python/lib/python3.13/types.py +346 -0
- package/python/lib/python3.13/typing.py +3846 -0
- package/python/lib/python3.13/unittest/__init__.py +80 -0
- package/python/lib/python3.13/unittest/__main__.py +18 -0
- package/python/lib/python3.13/unittest/_log.py +86 -0
- package/python/lib/python3.13/unittest/async_case.py +146 -0
- package/python/lib/python3.13/unittest/case.py +1478 -0
- package/python/lib/python3.13/unittest/loader.py +460 -0
- package/python/lib/python3.13/unittest/main.py +280 -0
- package/python/lib/python3.13/unittest/mock.py +3189 -0
- package/python/lib/python3.13/unittest/result.py +256 -0
- package/python/lib/python3.13/unittest/runner.py +292 -0
- package/python/lib/python3.13/unittest/signals.py +71 -0
- package/python/lib/python3.13/unittest/suite.py +379 -0
- package/python/lib/python3.13/unittest/util.py +170 -0
- package/python/lib/python3.13/urllib/__init__.py +0 -0
- package/python/lib/python3.13/urllib/error.py +74 -0
- package/python/lib/python3.13/urllib/parse.py +1264 -0
- package/python/lib/python3.13/urllib/request.py +2796 -0
- package/python/lib/python3.13/urllib/response.py +84 -0
- package/python/lib/python3.13/urllib/robotparser.py +363 -0
- package/python/lib/python3.13/uuid.py +784 -0
- package/python/lib/python3.13/warnings.py +735 -0
- package/python/lib/python3.13/wave.py +665 -0
- package/python/lib/python3.13/weakref.py +674 -0
- package/python/lib/python3.13/webbrowser.py +724 -0
- package/python/lib/python3.13/wsgiref/__init__.py +25 -0
- package/python/lib/python3.13/wsgiref/handlers.py +575 -0
- package/python/lib/python3.13/wsgiref/headers.py +192 -0
- package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
- package/python/lib/python3.13/wsgiref/types.py +54 -0
- package/python/lib/python3.13/wsgiref/util.py +159 -0
- package/python/lib/python3.13/wsgiref/validate.py +438 -0
- package/python/lib/python3.13/xml/__init__.py +20 -0
- package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
- package/python/lib/python3.13/xml/dom/__init__.py +140 -0
- package/python/lib/python3.13/xml/dom/domreg.py +99 -0
- package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
- package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
- package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
- package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
- package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
- package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
- package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
- package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
- package/python/lib/python3.13/xml/etree/__init__.py +33 -0
- package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
- package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
- package/python/lib/python3.13/xml/parsers/expat.py +8 -0
- package/python/lib/python3.13/xml/sax/__init__.py +94 -0
- package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
- package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
- package/python/lib/python3.13/xml/sax/handler.py +387 -0
- package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
- package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
- package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
- package/python/lib/python3.13/xmlrpc/client.py +1503 -0
- package/python/lib/python3.13/xmlrpc/server.py +1002 -0
- package/python/lib/python3.13/zipapp.py +229 -0
- package/python/lib/python3.13/zipfile/__init__.py +2391 -0
- package/python/lib/python3.13/zipfile/__main__.py +4 -0
- package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
- package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
- package/python/lib/python3.13/zipimport.py +803 -0
- package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
- package/python/lib/python3.13/zoneinfo/_common.py +172 -0
- package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
- package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
- package/python/licenses/LICENSE.bdb.txt +126 -0
- package/python/licenses/LICENSE.bzip2.txt +37 -0
- package/python/licenses/LICENSE.cpython.txt +771 -0
- package/python/licenses/LICENSE.expat.txt +21 -0
- package/python/licenses/LICENSE.libX11.txt +942 -0
- package/python/licenses/LICENSE.libXau.txt +21 -0
- package/python/licenses/LICENSE.libedit.txt +29 -0
- package/python/licenses/LICENSE.libffi.txt +21 -0
- package/python/licenses/LICENSE.liblzma.txt +13 -0
- package/python/licenses/LICENSE.libuuid.txt +27 -0
- package/python/licenses/LICENSE.libxcb.txt +30 -0
- package/python/licenses/LICENSE.mpdecimal.txt +24 -0
- package/python/licenses/LICENSE.ncurses.txt +29 -0
- package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
- package/python/licenses/LICENSE.openssl-3.txt +177 -0
- package/python/licenses/LICENSE.sqlite.txt +23 -0
- package/python/licenses/LICENSE.tcl.txt +40 -0
- package/python/licenses/LICENSE.tix.txt +54 -0
- package/python/licenses/LICENSE.zlib.txt +21 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
#
|
|
2
|
+
# ElementTree
|
|
3
|
+
# $Id: ElementPath.py 3375 2008-02-13 08:05:08Z fredrik $
|
|
4
|
+
#
|
|
5
|
+
# limited xpath support for element trees
|
|
6
|
+
#
|
|
7
|
+
# history:
|
|
8
|
+
# 2003-05-23 fl created
|
|
9
|
+
# 2003-05-28 fl added support for // etc
|
|
10
|
+
# 2003-08-27 fl fixed parsing of periods in element names
|
|
11
|
+
# 2007-09-10 fl new selection engine
|
|
12
|
+
# 2007-09-12 fl fixed parent selector
|
|
13
|
+
# 2007-09-13 fl added iterfind; changed findall to return a list
|
|
14
|
+
# 2007-11-30 fl added namespaces support
|
|
15
|
+
# 2009-10-30 fl added child element value filter
|
|
16
|
+
#
|
|
17
|
+
# Copyright (c) 2003-2009 by Fredrik Lundh. All rights reserved.
|
|
18
|
+
#
|
|
19
|
+
# fredrik@pythonware.com
|
|
20
|
+
# http://www.pythonware.com
|
|
21
|
+
#
|
|
22
|
+
# --------------------------------------------------------------------
|
|
23
|
+
# The ElementTree toolkit is
|
|
24
|
+
#
|
|
25
|
+
# Copyright (c) 1999-2009 by Fredrik Lundh
|
|
26
|
+
#
|
|
27
|
+
# By obtaining, using, and/or copying this software and/or its
|
|
28
|
+
# associated documentation, you agree that you have read, understood,
|
|
29
|
+
# and will comply with the following terms and conditions:
|
|
30
|
+
#
|
|
31
|
+
# Permission to use, copy, modify, and distribute this software and
|
|
32
|
+
# its associated documentation for any purpose and without fee is
|
|
33
|
+
# hereby granted, provided that the above copyright notice appears in
|
|
34
|
+
# all copies, and that both that copyright notice and this permission
|
|
35
|
+
# notice appear in supporting documentation, and that the name of
|
|
36
|
+
# Secret Labs AB or the author not be used in advertising or publicity
|
|
37
|
+
# pertaining to distribution of the software without specific, written
|
|
38
|
+
# prior permission.
|
|
39
|
+
#
|
|
40
|
+
# SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
|
|
41
|
+
# TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT-
|
|
42
|
+
# ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR
|
|
43
|
+
# BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
|
|
44
|
+
# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
|
45
|
+
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
|
46
|
+
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
|
47
|
+
# OF THIS SOFTWARE.
|
|
48
|
+
# --------------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
# Licensed to PSF under a Contributor Agreement.
|
|
51
|
+
# See https://www.python.org/psf/license for licensing details.
|
|
52
|
+
|
|
53
|
+
##
|
|
54
|
+
# Implementation module for XPath support. There's usually no reason
|
|
55
|
+
# to import this module directly; the <b>ElementTree</b> does this for
|
|
56
|
+
# you, if needed.
|
|
57
|
+
##
|
|
58
|
+
|
|
59
|
+
import re
|
|
60
|
+
|
|
61
|
+
xpath_tokenizer_re = re.compile(
|
|
62
|
+
r"("
|
|
63
|
+
r"'[^']*'|\"[^\"]*\"|"
|
|
64
|
+
r"::|"
|
|
65
|
+
r"//?|"
|
|
66
|
+
r"\.\.|"
|
|
67
|
+
r"\(\)|"
|
|
68
|
+
r"!=|"
|
|
69
|
+
r"[/.*:\[\]\(\)@=])|"
|
|
70
|
+
r"((?:\{[^}]+\})?[^/\[\]\(\)@!=\s]+)|"
|
|
71
|
+
r"\s+"
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
def xpath_tokenizer(pattern, namespaces=None):
|
|
75
|
+
default_namespace = namespaces.get('') if namespaces else None
|
|
76
|
+
parsing_attribute = False
|
|
77
|
+
for token in xpath_tokenizer_re.findall(pattern):
|
|
78
|
+
ttype, tag = token
|
|
79
|
+
if tag and tag[0] != "{":
|
|
80
|
+
if ":" in tag:
|
|
81
|
+
prefix, uri = tag.split(":", 1)
|
|
82
|
+
try:
|
|
83
|
+
if not namespaces:
|
|
84
|
+
raise KeyError
|
|
85
|
+
yield ttype, "{%s}%s" % (namespaces[prefix], uri)
|
|
86
|
+
except KeyError:
|
|
87
|
+
raise SyntaxError("prefix %r not found in prefix map" % prefix) from None
|
|
88
|
+
elif default_namespace and not parsing_attribute:
|
|
89
|
+
yield ttype, "{%s}%s" % (default_namespace, tag)
|
|
90
|
+
else:
|
|
91
|
+
yield token
|
|
92
|
+
parsing_attribute = False
|
|
93
|
+
else:
|
|
94
|
+
yield token
|
|
95
|
+
parsing_attribute = ttype == '@'
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def get_parent_map(context):
|
|
99
|
+
parent_map = context.parent_map
|
|
100
|
+
if parent_map is None:
|
|
101
|
+
context.parent_map = parent_map = {}
|
|
102
|
+
for p in context.root.iter():
|
|
103
|
+
for e in p:
|
|
104
|
+
parent_map[e] = p
|
|
105
|
+
return parent_map
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _is_wildcard_tag(tag):
|
|
109
|
+
return tag[:3] == '{*}' or tag[-2:] == '}*'
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _prepare_tag(tag):
|
|
113
|
+
_isinstance, _str = isinstance, str
|
|
114
|
+
if tag == '{*}*':
|
|
115
|
+
# Same as '*', but no comments or processing instructions.
|
|
116
|
+
# It can be a surprise that '*' includes those, but there is no
|
|
117
|
+
# justification for '{*}*' doing the same.
|
|
118
|
+
def select(context, result):
|
|
119
|
+
for elem in result:
|
|
120
|
+
if _isinstance(elem.tag, _str):
|
|
121
|
+
yield elem
|
|
122
|
+
elif tag == '{}*':
|
|
123
|
+
# Any tag that is not in a namespace.
|
|
124
|
+
def select(context, result):
|
|
125
|
+
for elem in result:
|
|
126
|
+
el_tag = elem.tag
|
|
127
|
+
if _isinstance(el_tag, _str) and el_tag[0] != '{':
|
|
128
|
+
yield elem
|
|
129
|
+
elif tag[:3] == '{*}':
|
|
130
|
+
# The tag in any (or no) namespace.
|
|
131
|
+
suffix = tag[2:] # '}name'
|
|
132
|
+
no_ns = slice(-len(suffix), None)
|
|
133
|
+
tag = tag[3:]
|
|
134
|
+
def select(context, result):
|
|
135
|
+
for elem in result:
|
|
136
|
+
el_tag = elem.tag
|
|
137
|
+
if el_tag == tag or _isinstance(el_tag, _str) and el_tag[no_ns] == suffix:
|
|
138
|
+
yield elem
|
|
139
|
+
elif tag[-2:] == '}*':
|
|
140
|
+
# Any tag in the given namespace.
|
|
141
|
+
ns = tag[:-1]
|
|
142
|
+
ns_only = slice(None, len(ns))
|
|
143
|
+
def select(context, result):
|
|
144
|
+
for elem in result:
|
|
145
|
+
el_tag = elem.tag
|
|
146
|
+
if _isinstance(el_tag, _str) and el_tag[ns_only] == ns:
|
|
147
|
+
yield elem
|
|
148
|
+
else:
|
|
149
|
+
raise RuntimeError(f"internal parser error, got {tag}")
|
|
150
|
+
return select
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def prepare_child(next, token):
|
|
154
|
+
tag = token[1]
|
|
155
|
+
if _is_wildcard_tag(tag):
|
|
156
|
+
select_tag = _prepare_tag(tag)
|
|
157
|
+
def select(context, result):
|
|
158
|
+
def select_child(result):
|
|
159
|
+
for elem in result:
|
|
160
|
+
yield from elem
|
|
161
|
+
return select_tag(context, select_child(result))
|
|
162
|
+
else:
|
|
163
|
+
if tag[:2] == '{}':
|
|
164
|
+
tag = tag[2:] # '{}tag' == 'tag'
|
|
165
|
+
def select(context, result):
|
|
166
|
+
for elem in result:
|
|
167
|
+
for e in elem:
|
|
168
|
+
if e.tag == tag:
|
|
169
|
+
yield e
|
|
170
|
+
return select
|
|
171
|
+
|
|
172
|
+
def prepare_star(next, token):
|
|
173
|
+
def select(context, result):
|
|
174
|
+
for elem in result:
|
|
175
|
+
yield from elem
|
|
176
|
+
return select
|
|
177
|
+
|
|
178
|
+
def prepare_self(next, token):
|
|
179
|
+
def select(context, result):
|
|
180
|
+
yield from result
|
|
181
|
+
return select
|
|
182
|
+
|
|
183
|
+
def prepare_descendant(next, token):
|
|
184
|
+
try:
|
|
185
|
+
token = next()
|
|
186
|
+
except StopIteration:
|
|
187
|
+
return
|
|
188
|
+
if token[0] == "*":
|
|
189
|
+
tag = "*"
|
|
190
|
+
elif not token[0]:
|
|
191
|
+
tag = token[1]
|
|
192
|
+
else:
|
|
193
|
+
raise SyntaxError("invalid descendant")
|
|
194
|
+
|
|
195
|
+
if _is_wildcard_tag(tag):
|
|
196
|
+
select_tag = _prepare_tag(tag)
|
|
197
|
+
def select(context, result):
|
|
198
|
+
def select_child(result):
|
|
199
|
+
for elem in result:
|
|
200
|
+
for e in elem.iter():
|
|
201
|
+
if e is not elem:
|
|
202
|
+
yield e
|
|
203
|
+
return select_tag(context, select_child(result))
|
|
204
|
+
else:
|
|
205
|
+
if tag[:2] == '{}':
|
|
206
|
+
tag = tag[2:] # '{}tag' == 'tag'
|
|
207
|
+
def select(context, result):
|
|
208
|
+
for elem in result:
|
|
209
|
+
for e in elem.iter(tag):
|
|
210
|
+
if e is not elem:
|
|
211
|
+
yield e
|
|
212
|
+
return select
|
|
213
|
+
|
|
214
|
+
def prepare_parent(next, token):
|
|
215
|
+
def select(context, result):
|
|
216
|
+
# FIXME: raise error if .. is applied at toplevel?
|
|
217
|
+
parent_map = get_parent_map(context)
|
|
218
|
+
result_map = {}
|
|
219
|
+
for elem in result:
|
|
220
|
+
if elem in parent_map:
|
|
221
|
+
parent = parent_map[elem]
|
|
222
|
+
if parent not in result_map:
|
|
223
|
+
result_map[parent] = None
|
|
224
|
+
yield parent
|
|
225
|
+
return select
|
|
226
|
+
|
|
227
|
+
def prepare_predicate(next, token):
|
|
228
|
+
# FIXME: replace with real parser!!! refs:
|
|
229
|
+
# http://javascript.crockford.com/tdop/tdop.html
|
|
230
|
+
signature = []
|
|
231
|
+
predicate = []
|
|
232
|
+
while 1:
|
|
233
|
+
try:
|
|
234
|
+
token = next()
|
|
235
|
+
except StopIteration:
|
|
236
|
+
return
|
|
237
|
+
if token[0] == "]":
|
|
238
|
+
break
|
|
239
|
+
if token == ('', ''):
|
|
240
|
+
# ignore whitespace
|
|
241
|
+
continue
|
|
242
|
+
if token[0] and token[0][:1] in "'\"":
|
|
243
|
+
token = "'", token[0][1:-1]
|
|
244
|
+
signature.append(token[0] or "-")
|
|
245
|
+
predicate.append(token[1])
|
|
246
|
+
signature = "".join(signature)
|
|
247
|
+
# use signature to determine predicate type
|
|
248
|
+
if signature == "@-":
|
|
249
|
+
# [@attribute] predicate
|
|
250
|
+
key = predicate[1]
|
|
251
|
+
def select(context, result):
|
|
252
|
+
for elem in result:
|
|
253
|
+
if elem.get(key) is not None:
|
|
254
|
+
yield elem
|
|
255
|
+
return select
|
|
256
|
+
if signature == "@-='" or signature == "@-!='":
|
|
257
|
+
# [@attribute='value'] or [@attribute!='value']
|
|
258
|
+
key = predicate[1]
|
|
259
|
+
value = predicate[-1]
|
|
260
|
+
def select(context, result):
|
|
261
|
+
for elem in result:
|
|
262
|
+
if elem.get(key) == value:
|
|
263
|
+
yield elem
|
|
264
|
+
def select_negated(context, result):
|
|
265
|
+
for elem in result:
|
|
266
|
+
if (attr_value := elem.get(key)) is not None and attr_value != value:
|
|
267
|
+
yield elem
|
|
268
|
+
return select_negated if '!=' in signature else select
|
|
269
|
+
if signature == "-" and not re.match(r"\-?\d+$", predicate[0]):
|
|
270
|
+
# [tag]
|
|
271
|
+
tag = predicate[0]
|
|
272
|
+
def select(context, result):
|
|
273
|
+
for elem in result:
|
|
274
|
+
if elem.find(tag) is not None:
|
|
275
|
+
yield elem
|
|
276
|
+
return select
|
|
277
|
+
if signature == ".='" or signature == ".!='" or (
|
|
278
|
+
(signature == "-='" or signature == "-!='")
|
|
279
|
+
and not re.match(r"\-?\d+$", predicate[0])):
|
|
280
|
+
# [.='value'] or [tag='value'] or [.!='value'] or [tag!='value']
|
|
281
|
+
tag = predicate[0]
|
|
282
|
+
value = predicate[-1]
|
|
283
|
+
if tag:
|
|
284
|
+
def select(context, result):
|
|
285
|
+
for elem in result:
|
|
286
|
+
for e in elem.findall(tag):
|
|
287
|
+
if "".join(e.itertext()) == value:
|
|
288
|
+
yield elem
|
|
289
|
+
break
|
|
290
|
+
def select_negated(context, result):
|
|
291
|
+
for elem in result:
|
|
292
|
+
for e in elem.iterfind(tag):
|
|
293
|
+
if "".join(e.itertext()) != value:
|
|
294
|
+
yield elem
|
|
295
|
+
break
|
|
296
|
+
else:
|
|
297
|
+
def select(context, result):
|
|
298
|
+
for elem in result:
|
|
299
|
+
if "".join(elem.itertext()) == value:
|
|
300
|
+
yield elem
|
|
301
|
+
def select_negated(context, result):
|
|
302
|
+
for elem in result:
|
|
303
|
+
if "".join(elem.itertext()) != value:
|
|
304
|
+
yield elem
|
|
305
|
+
return select_negated if '!=' in signature else select
|
|
306
|
+
if signature == "-" or signature == "-()" or signature == "-()-":
|
|
307
|
+
# [index] or [last()] or [last()-index]
|
|
308
|
+
if signature == "-":
|
|
309
|
+
# [index]
|
|
310
|
+
index = int(predicate[0]) - 1
|
|
311
|
+
if index < 0:
|
|
312
|
+
raise SyntaxError("XPath position >= 1 expected")
|
|
313
|
+
else:
|
|
314
|
+
if predicate[0] != "last":
|
|
315
|
+
raise SyntaxError("unsupported function")
|
|
316
|
+
if signature == "-()-":
|
|
317
|
+
try:
|
|
318
|
+
index = int(predicate[2]) - 1
|
|
319
|
+
except ValueError:
|
|
320
|
+
raise SyntaxError("unsupported expression")
|
|
321
|
+
if index > -2:
|
|
322
|
+
raise SyntaxError("XPath offset from last() must be negative")
|
|
323
|
+
else:
|
|
324
|
+
index = -1
|
|
325
|
+
def select(context, result):
|
|
326
|
+
parent_map = get_parent_map(context)
|
|
327
|
+
cache = {}
|
|
328
|
+
for elem in result:
|
|
329
|
+
try:
|
|
330
|
+
parent = parent_map[elem]
|
|
331
|
+
except KeyError:
|
|
332
|
+
continue
|
|
333
|
+
key = (parent, elem.tag)
|
|
334
|
+
if key not in cache:
|
|
335
|
+
# FIXME: what if the selector is "*" ?
|
|
336
|
+
elems = parent.findall(elem.tag)
|
|
337
|
+
try:
|
|
338
|
+
cache[key] = elems[index]
|
|
339
|
+
except IndexError:
|
|
340
|
+
cache[key] = None
|
|
341
|
+
if cache[key] is elem:
|
|
342
|
+
yield elem
|
|
343
|
+
return select
|
|
344
|
+
raise SyntaxError("invalid predicate")
|
|
345
|
+
|
|
346
|
+
ops = {
|
|
347
|
+
"": prepare_child,
|
|
348
|
+
"*": prepare_star,
|
|
349
|
+
".": prepare_self,
|
|
350
|
+
"..": prepare_parent,
|
|
351
|
+
"//": prepare_descendant,
|
|
352
|
+
"[": prepare_predicate,
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
_cache = {}
|
|
356
|
+
|
|
357
|
+
class _SelectorContext:
|
|
358
|
+
parent_map = None
|
|
359
|
+
def __init__(self, root):
|
|
360
|
+
self.root = root
|
|
361
|
+
|
|
362
|
+
# --------------------------------------------------------------------
|
|
363
|
+
|
|
364
|
+
##
|
|
365
|
+
# Generate all matching objects.
|
|
366
|
+
|
|
367
|
+
def iterfind(elem, path, namespaces=None):
|
|
368
|
+
# compile selector pattern
|
|
369
|
+
if path[-1:] == "/":
|
|
370
|
+
path = path + "*" # implicit all (FIXME: keep this?)
|
|
371
|
+
|
|
372
|
+
cache_key = (path,)
|
|
373
|
+
if namespaces:
|
|
374
|
+
cache_key += tuple(sorted(namespaces.items()))
|
|
375
|
+
|
|
376
|
+
try:
|
|
377
|
+
selector = _cache[cache_key]
|
|
378
|
+
except KeyError:
|
|
379
|
+
if len(_cache) > 100:
|
|
380
|
+
_cache.clear()
|
|
381
|
+
if path[:1] == "/":
|
|
382
|
+
raise SyntaxError("cannot use absolute path on element")
|
|
383
|
+
next = iter(xpath_tokenizer(path, namespaces)).__next__
|
|
384
|
+
try:
|
|
385
|
+
token = next()
|
|
386
|
+
except StopIteration:
|
|
387
|
+
return
|
|
388
|
+
selector = []
|
|
389
|
+
while 1:
|
|
390
|
+
try:
|
|
391
|
+
selector.append(ops[token[0]](next, token))
|
|
392
|
+
except StopIteration:
|
|
393
|
+
raise SyntaxError("invalid path") from None
|
|
394
|
+
try:
|
|
395
|
+
token = next()
|
|
396
|
+
if token[0] == "/":
|
|
397
|
+
token = next()
|
|
398
|
+
except StopIteration:
|
|
399
|
+
break
|
|
400
|
+
_cache[cache_key] = selector
|
|
401
|
+
# execute selector pattern
|
|
402
|
+
result = [elem]
|
|
403
|
+
context = _SelectorContext(elem)
|
|
404
|
+
for select in selector:
|
|
405
|
+
result = select(context, result)
|
|
406
|
+
return result
|
|
407
|
+
|
|
408
|
+
##
|
|
409
|
+
# Find first matching object.
|
|
410
|
+
|
|
411
|
+
def find(elem, path, namespaces=None):
|
|
412
|
+
return next(iterfind(elem, path, namespaces), None)
|
|
413
|
+
|
|
414
|
+
##
|
|
415
|
+
# Find all matching objects.
|
|
416
|
+
|
|
417
|
+
def findall(elem, path, namespaces=None):
|
|
418
|
+
return list(iterfind(elem, path, namespaces))
|
|
419
|
+
|
|
420
|
+
##
|
|
421
|
+
# Find text for first matching object.
|
|
422
|
+
|
|
423
|
+
def findtext(elem, path, default=None, namespaces=None):
|
|
424
|
+
try:
|
|
425
|
+
elem = next(iterfind(elem, path, namespaces))
|
|
426
|
+
if elem.text is None:
|
|
427
|
+
return ""
|
|
428
|
+
return elem.text
|
|
429
|
+
except StopIteration:
|
|
430
|
+
return default
|