@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,387 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import shutil
|
|
3
|
+
import subprocess
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
# find_library(name) returns the pathname of a library, or None.
|
|
7
|
+
if os.name == "nt":
|
|
8
|
+
|
|
9
|
+
def _get_build_version():
|
|
10
|
+
"""Return the version of MSVC that was used to build Python.
|
|
11
|
+
|
|
12
|
+
For Python 2.3 and up, the version number is included in
|
|
13
|
+
sys.version. For earlier versions, assume the compiler is MSVC 6.
|
|
14
|
+
"""
|
|
15
|
+
# This function was copied from Lib/distutils/msvccompiler.py
|
|
16
|
+
prefix = "MSC v."
|
|
17
|
+
i = sys.version.find(prefix)
|
|
18
|
+
if i == -1:
|
|
19
|
+
return 6
|
|
20
|
+
i = i + len(prefix)
|
|
21
|
+
s, rest = sys.version[i:].split(" ", 1)
|
|
22
|
+
majorVersion = int(s[:-2]) - 6
|
|
23
|
+
if majorVersion >= 13:
|
|
24
|
+
majorVersion += 1
|
|
25
|
+
minorVersion = int(s[2:3]) / 10.0
|
|
26
|
+
# I don't think paths are affected by minor version in version 6
|
|
27
|
+
if majorVersion == 6:
|
|
28
|
+
minorVersion = 0
|
|
29
|
+
if majorVersion >= 6:
|
|
30
|
+
return majorVersion + minorVersion
|
|
31
|
+
# else we don't know what version of the compiler this is
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
def find_msvcrt():
|
|
35
|
+
"""Return the name of the VC runtime dll"""
|
|
36
|
+
version = _get_build_version()
|
|
37
|
+
if version is None:
|
|
38
|
+
# better be safe than sorry
|
|
39
|
+
return None
|
|
40
|
+
if version <= 6:
|
|
41
|
+
clibname = 'msvcrt'
|
|
42
|
+
elif version <= 13:
|
|
43
|
+
clibname = 'msvcr%d' % (version * 10)
|
|
44
|
+
else:
|
|
45
|
+
# CRT is no longer directly loadable. See issue23606 for the
|
|
46
|
+
# discussion about alternative approaches.
|
|
47
|
+
return None
|
|
48
|
+
|
|
49
|
+
# If python was built with in debug mode
|
|
50
|
+
import importlib.machinery
|
|
51
|
+
if '_d.pyd' in importlib.machinery.EXTENSION_SUFFIXES:
|
|
52
|
+
clibname += 'd'
|
|
53
|
+
return clibname+'.dll'
|
|
54
|
+
|
|
55
|
+
def find_library(name):
|
|
56
|
+
if name in ('c', 'm'):
|
|
57
|
+
return find_msvcrt()
|
|
58
|
+
# See MSDN for the REAL search order.
|
|
59
|
+
for directory in os.environ['PATH'].split(os.pathsep):
|
|
60
|
+
fname = os.path.join(directory, name)
|
|
61
|
+
if os.path.isfile(fname):
|
|
62
|
+
return fname
|
|
63
|
+
if fname.lower().endswith(".dll"):
|
|
64
|
+
continue
|
|
65
|
+
fname = fname + ".dll"
|
|
66
|
+
if os.path.isfile(fname):
|
|
67
|
+
return fname
|
|
68
|
+
return None
|
|
69
|
+
|
|
70
|
+
elif os.name == "posix" and sys.platform in {"darwin", "ios", "tvos", "watchos"}:
|
|
71
|
+
from ctypes.macholib.dyld import dyld_find as _dyld_find
|
|
72
|
+
def find_library(name):
|
|
73
|
+
possible = ['lib%s.dylib' % name,
|
|
74
|
+
'%s.dylib' % name,
|
|
75
|
+
'%s.framework/%s' % (name, name)]
|
|
76
|
+
for name in possible:
|
|
77
|
+
try:
|
|
78
|
+
return _dyld_find(name)
|
|
79
|
+
except ValueError:
|
|
80
|
+
continue
|
|
81
|
+
return None
|
|
82
|
+
|
|
83
|
+
elif sys.platform.startswith("aix"):
|
|
84
|
+
# AIX has two styles of storing shared libraries
|
|
85
|
+
# GNU auto_tools refer to these as svr4 and aix
|
|
86
|
+
# svr4 (System V Release 4) is a regular file, often with .so as suffix
|
|
87
|
+
# AIX style uses an archive (suffix .a) with members (e.g., shr.o, libssl.so)
|
|
88
|
+
# see issue#26439 and _aix.py for more details
|
|
89
|
+
|
|
90
|
+
from ctypes._aix import find_library
|
|
91
|
+
|
|
92
|
+
elif sys.platform == "android":
|
|
93
|
+
def find_library(name):
|
|
94
|
+
directory = "/system/lib"
|
|
95
|
+
if "64" in os.uname().machine:
|
|
96
|
+
directory += "64"
|
|
97
|
+
|
|
98
|
+
fname = f"{directory}/lib{name}.so"
|
|
99
|
+
return fname if os.path.isfile(fname) else None
|
|
100
|
+
|
|
101
|
+
elif os.name == "posix":
|
|
102
|
+
# Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump
|
|
103
|
+
import re, tempfile
|
|
104
|
+
|
|
105
|
+
def _is_elf(filename):
|
|
106
|
+
"Return True if the given file is an ELF file"
|
|
107
|
+
elf_header = b'\x7fELF'
|
|
108
|
+
try:
|
|
109
|
+
with open(filename, 'br') as thefile:
|
|
110
|
+
return thefile.read(4) == elf_header
|
|
111
|
+
except FileNotFoundError:
|
|
112
|
+
return False
|
|
113
|
+
|
|
114
|
+
def _findLib_gcc(name):
|
|
115
|
+
# Run GCC's linker with the -t (aka --trace) option and examine the
|
|
116
|
+
# library name it prints out. The GCC command will fail because we
|
|
117
|
+
# haven't supplied a proper program with main(), but that does not
|
|
118
|
+
# matter.
|
|
119
|
+
expr = os.fsencode(r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name))
|
|
120
|
+
|
|
121
|
+
c_compiler = shutil.which('gcc')
|
|
122
|
+
if not c_compiler:
|
|
123
|
+
c_compiler = shutil.which('cc')
|
|
124
|
+
if not c_compiler:
|
|
125
|
+
# No C compiler available, give up
|
|
126
|
+
return None
|
|
127
|
+
|
|
128
|
+
temp = tempfile.NamedTemporaryFile()
|
|
129
|
+
try:
|
|
130
|
+
args = [c_compiler, '-Wl,-t', '-o', temp.name, '-l' + name]
|
|
131
|
+
|
|
132
|
+
env = dict(os.environ)
|
|
133
|
+
env['LC_ALL'] = 'C'
|
|
134
|
+
env['LANG'] = 'C'
|
|
135
|
+
try:
|
|
136
|
+
proc = subprocess.Popen(args,
|
|
137
|
+
stdout=subprocess.PIPE,
|
|
138
|
+
stderr=subprocess.STDOUT,
|
|
139
|
+
env=env)
|
|
140
|
+
except OSError: # E.g. bad executable
|
|
141
|
+
return None
|
|
142
|
+
with proc:
|
|
143
|
+
trace = proc.stdout.read()
|
|
144
|
+
finally:
|
|
145
|
+
try:
|
|
146
|
+
temp.close()
|
|
147
|
+
except FileNotFoundError:
|
|
148
|
+
# Raised if the file was already removed, which is the normal
|
|
149
|
+
# behaviour of GCC if linking fails
|
|
150
|
+
pass
|
|
151
|
+
res = re.findall(expr, trace)
|
|
152
|
+
if not res:
|
|
153
|
+
return None
|
|
154
|
+
|
|
155
|
+
for file in res:
|
|
156
|
+
# Check if the given file is an elf file: gcc can report
|
|
157
|
+
# some files that are linker scripts and not actual
|
|
158
|
+
# shared objects. See bpo-41976 for more details
|
|
159
|
+
if not _is_elf(file):
|
|
160
|
+
continue
|
|
161
|
+
return os.fsdecode(file)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
if sys.platform == "sunos5":
|
|
165
|
+
# use /usr/ccs/bin/dump on solaris
|
|
166
|
+
def _get_soname(f):
|
|
167
|
+
if not f:
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
try:
|
|
171
|
+
proc = subprocess.Popen(("/usr/ccs/bin/dump", "-Lpv", f),
|
|
172
|
+
stdout=subprocess.PIPE,
|
|
173
|
+
stderr=subprocess.DEVNULL)
|
|
174
|
+
except OSError: # E.g. command not found
|
|
175
|
+
return None
|
|
176
|
+
with proc:
|
|
177
|
+
data = proc.stdout.read()
|
|
178
|
+
res = re.search(br'\[.*\]\sSONAME\s+([^\s]+)', data)
|
|
179
|
+
if not res:
|
|
180
|
+
return None
|
|
181
|
+
return os.fsdecode(res.group(1))
|
|
182
|
+
else:
|
|
183
|
+
def _get_soname(f):
|
|
184
|
+
# assuming GNU binutils / ELF
|
|
185
|
+
if not f:
|
|
186
|
+
return None
|
|
187
|
+
objdump = shutil.which('objdump')
|
|
188
|
+
if not objdump:
|
|
189
|
+
# objdump is not available, give up
|
|
190
|
+
return None
|
|
191
|
+
|
|
192
|
+
try:
|
|
193
|
+
proc = subprocess.Popen((objdump, '-p', '-j', '.dynamic', f),
|
|
194
|
+
stdout=subprocess.PIPE,
|
|
195
|
+
stderr=subprocess.DEVNULL)
|
|
196
|
+
except OSError: # E.g. bad executable
|
|
197
|
+
return None
|
|
198
|
+
with proc:
|
|
199
|
+
dump = proc.stdout.read()
|
|
200
|
+
res = re.search(br'\sSONAME\s+([^\s]+)', dump)
|
|
201
|
+
if not res:
|
|
202
|
+
return None
|
|
203
|
+
return os.fsdecode(res.group(1))
|
|
204
|
+
|
|
205
|
+
if sys.platform.startswith(("freebsd", "openbsd", "dragonfly")):
|
|
206
|
+
|
|
207
|
+
def _num_version(libname):
|
|
208
|
+
# "libxyz.so.MAJOR.MINOR" => [ MAJOR, MINOR ]
|
|
209
|
+
parts = libname.split(b".")
|
|
210
|
+
nums = []
|
|
211
|
+
try:
|
|
212
|
+
while parts:
|
|
213
|
+
nums.insert(0, int(parts.pop()))
|
|
214
|
+
except ValueError:
|
|
215
|
+
pass
|
|
216
|
+
return nums or [sys.maxsize]
|
|
217
|
+
|
|
218
|
+
def find_library(name):
|
|
219
|
+
ename = re.escape(name)
|
|
220
|
+
expr = r':-l%s\.\S+ => \S*/(lib%s\.\S+)' % (ename, ename)
|
|
221
|
+
expr = os.fsencode(expr)
|
|
222
|
+
|
|
223
|
+
try:
|
|
224
|
+
proc = subprocess.Popen(('/sbin/ldconfig', '-r'),
|
|
225
|
+
stdout=subprocess.PIPE,
|
|
226
|
+
stderr=subprocess.DEVNULL)
|
|
227
|
+
except OSError: # E.g. command not found
|
|
228
|
+
data = b''
|
|
229
|
+
else:
|
|
230
|
+
with proc:
|
|
231
|
+
data = proc.stdout.read()
|
|
232
|
+
|
|
233
|
+
res = re.findall(expr, data)
|
|
234
|
+
if not res:
|
|
235
|
+
return _get_soname(_findLib_gcc(name))
|
|
236
|
+
res.sort(key=_num_version)
|
|
237
|
+
return os.fsdecode(res[-1])
|
|
238
|
+
|
|
239
|
+
elif sys.platform == "sunos5":
|
|
240
|
+
|
|
241
|
+
def _findLib_crle(name, is64):
|
|
242
|
+
if not os.path.exists('/usr/bin/crle'):
|
|
243
|
+
return None
|
|
244
|
+
|
|
245
|
+
env = dict(os.environ)
|
|
246
|
+
env['LC_ALL'] = 'C'
|
|
247
|
+
|
|
248
|
+
if is64:
|
|
249
|
+
args = ('/usr/bin/crle', '-64')
|
|
250
|
+
else:
|
|
251
|
+
args = ('/usr/bin/crle',)
|
|
252
|
+
|
|
253
|
+
paths = None
|
|
254
|
+
try:
|
|
255
|
+
proc = subprocess.Popen(args,
|
|
256
|
+
stdout=subprocess.PIPE,
|
|
257
|
+
stderr=subprocess.DEVNULL,
|
|
258
|
+
env=env)
|
|
259
|
+
except OSError: # E.g. bad executable
|
|
260
|
+
return None
|
|
261
|
+
with proc:
|
|
262
|
+
for line in proc.stdout:
|
|
263
|
+
line = line.strip()
|
|
264
|
+
if line.startswith(b'Default Library Path (ELF):'):
|
|
265
|
+
paths = os.fsdecode(line).split()[4]
|
|
266
|
+
|
|
267
|
+
if not paths:
|
|
268
|
+
return None
|
|
269
|
+
|
|
270
|
+
for dir in paths.split(":"):
|
|
271
|
+
libfile = os.path.join(dir, "lib%s.so" % name)
|
|
272
|
+
if os.path.exists(libfile):
|
|
273
|
+
return libfile
|
|
274
|
+
|
|
275
|
+
return None
|
|
276
|
+
|
|
277
|
+
def find_library(name, is64 = False):
|
|
278
|
+
return _get_soname(_findLib_crle(name, is64) or _findLib_gcc(name))
|
|
279
|
+
|
|
280
|
+
else:
|
|
281
|
+
|
|
282
|
+
def _findSoname_ldconfig(name):
|
|
283
|
+
import struct
|
|
284
|
+
if struct.calcsize('l') == 4:
|
|
285
|
+
machine = os.uname().machine + '-32'
|
|
286
|
+
else:
|
|
287
|
+
machine = os.uname().machine + '-64'
|
|
288
|
+
mach_map = {
|
|
289
|
+
'x86_64-64': 'libc6,x86-64',
|
|
290
|
+
'ppc64-64': 'libc6,64bit',
|
|
291
|
+
'sparc64-64': 'libc6,64bit',
|
|
292
|
+
's390x-64': 'libc6,64bit',
|
|
293
|
+
'ia64-64': 'libc6,IA-64',
|
|
294
|
+
}
|
|
295
|
+
abi_type = mach_map.get(machine, 'libc6')
|
|
296
|
+
|
|
297
|
+
# XXX assuming GLIBC's ldconfig (with option -p)
|
|
298
|
+
regex = r'\s+(lib%s\.[^\s]+)\s+\(%s'
|
|
299
|
+
regex = os.fsencode(regex % (re.escape(name), abi_type))
|
|
300
|
+
try:
|
|
301
|
+
with subprocess.Popen(['/sbin/ldconfig', '-p'],
|
|
302
|
+
stdin=subprocess.DEVNULL,
|
|
303
|
+
stderr=subprocess.DEVNULL,
|
|
304
|
+
stdout=subprocess.PIPE,
|
|
305
|
+
env={'LC_ALL': 'C', 'LANG': 'C'}) as p:
|
|
306
|
+
res = re.search(regex, p.stdout.read())
|
|
307
|
+
if res:
|
|
308
|
+
return os.fsdecode(res.group(1))
|
|
309
|
+
except OSError:
|
|
310
|
+
pass
|
|
311
|
+
|
|
312
|
+
def _findLib_ld(name):
|
|
313
|
+
# See issue #9998 for why this is needed
|
|
314
|
+
expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)
|
|
315
|
+
cmd = ['ld', '-t']
|
|
316
|
+
libpath = os.environ.get('LD_LIBRARY_PATH')
|
|
317
|
+
if libpath:
|
|
318
|
+
for d in libpath.split(':'):
|
|
319
|
+
cmd.extend(['-L', d])
|
|
320
|
+
cmd.extend(['-o', os.devnull, '-l%s' % name])
|
|
321
|
+
result = None
|
|
322
|
+
try:
|
|
323
|
+
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
|
324
|
+
stderr=subprocess.PIPE)
|
|
325
|
+
out, _ = p.communicate()
|
|
326
|
+
res = re.findall(expr, os.fsdecode(out))
|
|
327
|
+
for file in res:
|
|
328
|
+
# Check if the given file is an elf file: gcc can report
|
|
329
|
+
# some files that are linker scripts and not actual
|
|
330
|
+
# shared objects. See bpo-41976 for more details
|
|
331
|
+
if not _is_elf(file):
|
|
332
|
+
continue
|
|
333
|
+
return os.fsdecode(file)
|
|
334
|
+
except Exception:
|
|
335
|
+
pass # result will be None
|
|
336
|
+
return result
|
|
337
|
+
|
|
338
|
+
def find_library(name):
|
|
339
|
+
# See issue #9998
|
|
340
|
+
return _findSoname_ldconfig(name) or \
|
|
341
|
+
_get_soname(_findLib_gcc(name)) or _get_soname(_findLib_ld(name))
|
|
342
|
+
|
|
343
|
+
################################################################
|
|
344
|
+
# test code
|
|
345
|
+
|
|
346
|
+
def test():
|
|
347
|
+
from ctypes import cdll
|
|
348
|
+
if os.name == "nt":
|
|
349
|
+
print(cdll.msvcrt)
|
|
350
|
+
print(cdll.load("msvcrt"))
|
|
351
|
+
print(find_library("msvcrt"))
|
|
352
|
+
|
|
353
|
+
if os.name == "posix":
|
|
354
|
+
# find and load_version
|
|
355
|
+
print(find_library("m"))
|
|
356
|
+
print(find_library("c"))
|
|
357
|
+
print(find_library("bz2"))
|
|
358
|
+
|
|
359
|
+
# load
|
|
360
|
+
if sys.platform == "darwin":
|
|
361
|
+
print(cdll.LoadLibrary("libm.dylib"))
|
|
362
|
+
print(cdll.LoadLibrary("libcrypto.dylib"))
|
|
363
|
+
print(cdll.LoadLibrary("libSystem.dylib"))
|
|
364
|
+
print(cdll.LoadLibrary("System.framework/System"))
|
|
365
|
+
# issue-26439 - fix broken test call for AIX
|
|
366
|
+
elif sys.platform.startswith("aix"):
|
|
367
|
+
from ctypes import CDLL
|
|
368
|
+
if sys.maxsize < 2**32:
|
|
369
|
+
print(f"Using CDLL(name, os.RTLD_MEMBER): {CDLL('libc.a(shr.o)', os.RTLD_MEMBER)}")
|
|
370
|
+
print(f"Using cdll.LoadLibrary(): {cdll.LoadLibrary('libc.a(shr.o)')}")
|
|
371
|
+
# librpm.so is only available as 32-bit shared library
|
|
372
|
+
print(find_library("rpm"))
|
|
373
|
+
print(cdll.LoadLibrary("librpm.so"))
|
|
374
|
+
else:
|
|
375
|
+
print(f"Using CDLL(name, os.RTLD_MEMBER): {CDLL('libc.a(shr_64.o)', os.RTLD_MEMBER)}")
|
|
376
|
+
print(f"Using cdll.LoadLibrary(): {cdll.LoadLibrary('libc.a(shr_64.o)')}")
|
|
377
|
+
print(f"crypt\t:: {find_library('crypt')}")
|
|
378
|
+
print(f"crypt\t:: {cdll.LoadLibrary(find_library('crypt'))}")
|
|
379
|
+
print(f"crypto\t:: {find_library('crypto')}")
|
|
380
|
+
print(f"crypto\t:: {cdll.LoadLibrary(find_library('crypto'))}")
|
|
381
|
+
else:
|
|
382
|
+
print(cdll.LoadLibrary("libm.so"))
|
|
383
|
+
print(cdll.LoadLibrary("libcrypt.so"))
|
|
384
|
+
print(find_library("crypt"))
|
|
385
|
+
|
|
386
|
+
if __name__ == "__main__":
|
|
387
|
+
test()
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# The most useful windows datatypes
|
|
2
|
+
import ctypes
|
|
3
|
+
|
|
4
|
+
BYTE = ctypes.c_ubyte
|
|
5
|
+
WORD = ctypes.c_ushort
|
|
6
|
+
DWORD = ctypes.c_ulong
|
|
7
|
+
|
|
8
|
+
#UCHAR = ctypes.c_uchar
|
|
9
|
+
CHAR = ctypes.c_char
|
|
10
|
+
WCHAR = ctypes.c_wchar
|
|
11
|
+
UINT = ctypes.c_uint
|
|
12
|
+
INT = ctypes.c_int
|
|
13
|
+
|
|
14
|
+
DOUBLE = ctypes.c_double
|
|
15
|
+
FLOAT = ctypes.c_float
|
|
16
|
+
|
|
17
|
+
BOOLEAN = BYTE
|
|
18
|
+
BOOL = ctypes.c_long
|
|
19
|
+
|
|
20
|
+
class VARIANT_BOOL(ctypes._SimpleCData):
|
|
21
|
+
_type_ = "v"
|
|
22
|
+
def __repr__(self):
|
|
23
|
+
return "%s(%r)" % (self.__class__.__name__, self.value)
|
|
24
|
+
|
|
25
|
+
ULONG = ctypes.c_ulong
|
|
26
|
+
LONG = ctypes.c_long
|
|
27
|
+
|
|
28
|
+
USHORT = ctypes.c_ushort
|
|
29
|
+
SHORT = ctypes.c_short
|
|
30
|
+
|
|
31
|
+
# in the windows header files, these are structures.
|
|
32
|
+
_LARGE_INTEGER = LARGE_INTEGER = ctypes.c_longlong
|
|
33
|
+
_ULARGE_INTEGER = ULARGE_INTEGER = ctypes.c_ulonglong
|
|
34
|
+
|
|
35
|
+
LPCOLESTR = LPOLESTR = OLESTR = ctypes.c_wchar_p
|
|
36
|
+
LPCWSTR = LPWSTR = ctypes.c_wchar_p
|
|
37
|
+
LPCSTR = LPSTR = ctypes.c_char_p
|
|
38
|
+
LPCVOID = LPVOID = ctypes.c_void_p
|
|
39
|
+
|
|
40
|
+
# WPARAM is defined as UINT_PTR (unsigned type)
|
|
41
|
+
# LPARAM is defined as LONG_PTR (signed type)
|
|
42
|
+
if ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p):
|
|
43
|
+
WPARAM = ctypes.c_ulong
|
|
44
|
+
LPARAM = ctypes.c_long
|
|
45
|
+
elif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p):
|
|
46
|
+
WPARAM = ctypes.c_ulonglong
|
|
47
|
+
LPARAM = ctypes.c_longlong
|
|
48
|
+
|
|
49
|
+
ATOM = WORD
|
|
50
|
+
LANGID = WORD
|
|
51
|
+
|
|
52
|
+
COLORREF = DWORD
|
|
53
|
+
LGRPID = DWORD
|
|
54
|
+
LCTYPE = DWORD
|
|
55
|
+
|
|
56
|
+
LCID = DWORD
|
|
57
|
+
|
|
58
|
+
################################################################
|
|
59
|
+
# HANDLE types
|
|
60
|
+
HANDLE = ctypes.c_void_p # in the header files: void *
|
|
61
|
+
|
|
62
|
+
HACCEL = HANDLE
|
|
63
|
+
HBITMAP = HANDLE
|
|
64
|
+
HBRUSH = HANDLE
|
|
65
|
+
HCOLORSPACE = HANDLE
|
|
66
|
+
HDC = HANDLE
|
|
67
|
+
HDESK = HANDLE
|
|
68
|
+
HDWP = HANDLE
|
|
69
|
+
HENHMETAFILE = HANDLE
|
|
70
|
+
HFONT = HANDLE
|
|
71
|
+
HGDIOBJ = HANDLE
|
|
72
|
+
HGLOBAL = HANDLE
|
|
73
|
+
HHOOK = HANDLE
|
|
74
|
+
HICON = HANDLE
|
|
75
|
+
HINSTANCE = HANDLE
|
|
76
|
+
HKEY = HANDLE
|
|
77
|
+
HKL = HANDLE
|
|
78
|
+
HLOCAL = HANDLE
|
|
79
|
+
HMENU = HANDLE
|
|
80
|
+
HMETAFILE = HANDLE
|
|
81
|
+
HMODULE = HANDLE
|
|
82
|
+
HMONITOR = HANDLE
|
|
83
|
+
HPALETTE = HANDLE
|
|
84
|
+
HPEN = HANDLE
|
|
85
|
+
HRGN = HANDLE
|
|
86
|
+
HRSRC = HANDLE
|
|
87
|
+
HSTR = HANDLE
|
|
88
|
+
HTASK = HANDLE
|
|
89
|
+
HWINSTA = HANDLE
|
|
90
|
+
HWND = HANDLE
|
|
91
|
+
SC_HANDLE = HANDLE
|
|
92
|
+
SERVICE_STATUS_HANDLE = HANDLE
|
|
93
|
+
|
|
94
|
+
################################################################
|
|
95
|
+
# Some important structure definitions
|
|
96
|
+
|
|
97
|
+
class RECT(ctypes.Structure):
|
|
98
|
+
_fields_ = [("left", LONG),
|
|
99
|
+
("top", LONG),
|
|
100
|
+
("right", LONG),
|
|
101
|
+
("bottom", LONG)]
|
|
102
|
+
tagRECT = _RECTL = RECTL = RECT
|
|
103
|
+
|
|
104
|
+
class _SMALL_RECT(ctypes.Structure):
|
|
105
|
+
_fields_ = [('Left', SHORT),
|
|
106
|
+
('Top', SHORT),
|
|
107
|
+
('Right', SHORT),
|
|
108
|
+
('Bottom', SHORT)]
|
|
109
|
+
SMALL_RECT = _SMALL_RECT
|
|
110
|
+
|
|
111
|
+
class _COORD(ctypes.Structure):
|
|
112
|
+
_fields_ = [('X', SHORT),
|
|
113
|
+
('Y', SHORT)]
|
|
114
|
+
|
|
115
|
+
class POINT(ctypes.Structure):
|
|
116
|
+
_fields_ = [("x", LONG),
|
|
117
|
+
("y", LONG)]
|
|
118
|
+
tagPOINT = _POINTL = POINTL = POINT
|
|
119
|
+
|
|
120
|
+
class SIZE(ctypes.Structure):
|
|
121
|
+
_fields_ = [("cx", LONG),
|
|
122
|
+
("cy", LONG)]
|
|
123
|
+
tagSIZE = SIZEL = SIZE
|
|
124
|
+
|
|
125
|
+
def RGB(red, green, blue):
|
|
126
|
+
return red + (green << 8) + (blue << 16)
|
|
127
|
+
|
|
128
|
+
class FILETIME(ctypes.Structure):
|
|
129
|
+
_fields_ = [("dwLowDateTime", DWORD),
|
|
130
|
+
("dwHighDateTime", DWORD)]
|
|
131
|
+
_FILETIME = FILETIME
|
|
132
|
+
|
|
133
|
+
class MSG(ctypes.Structure):
|
|
134
|
+
_fields_ = [("hWnd", HWND),
|
|
135
|
+
("message", UINT),
|
|
136
|
+
("wParam", WPARAM),
|
|
137
|
+
("lParam", LPARAM),
|
|
138
|
+
("time", DWORD),
|
|
139
|
+
("pt", POINT)]
|
|
140
|
+
tagMSG = MSG
|
|
141
|
+
MAX_PATH = 260
|
|
142
|
+
|
|
143
|
+
class WIN32_FIND_DATAA(ctypes.Structure):
|
|
144
|
+
_fields_ = [("dwFileAttributes", DWORD),
|
|
145
|
+
("ftCreationTime", FILETIME),
|
|
146
|
+
("ftLastAccessTime", FILETIME),
|
|
147
|
+
("ftLastWriteTime", FILETIME),
|
|
148
|
+
("nFileSizeHigh", DWORD),
|
|
149
|
+
("nFileSizeLow", DWORD),
|
|
150
|
+
("dwReserved0", DWORD),
|
|
151
|
+
("dwReserved1", DWORD),
|
|
152
|
+
("cFileName", CHAR * MAX_PATH),
|
|
153
|
+
("cAlternateFileName", CHAR * 14)]
|
|
154
|
+
|
|
155
|
+
class WIN32_FIND_DATAW(ctypes.Structure):
|
|
156
|
+
_fields_ = [("dwFileAttributes", DWORD),
|
|
157
|
+
("ftCreationTime", FILETIME),
|
|
158
|
+
("ftLastAccessTime", FILETIME),
|
|
159
|
+
("ftLastWriteTime", FILETIME),
|
|
160
|
+
("nFileSizeHigh", DWORD),
|
|
161
|
+
("nFileSizeLow", DWORD),
|
|
162
|
+
("dwReserved0", DWORD),
|
|
163
|
+
("dwReserved1", DWORD),
|
|
164
|
+
("cFileName", WCHAR * MAX_PATH),
|
|
165
|
+
("cAlternateFileName", WCHAR * 14)]
|
|
166
|
+
|
|
167
|
+
################################################################
|
|
168
|
+
# Pointer types
|
|
169
|
+
|
|
170
|
+
LPBOOL = PBOOL = ctypes.POINTER(BOOL)
|
|
171
|
+
PBOOLEAN = ctypes.POINTER(BOOLEAN)
|
|
172
|
+
LPBYTE = PBYTE = ctypes.POINTER(BYTE)
|
|
173
|
+
PCHAR = ctypes.POINTER(CHAR)
|
|
174
|
+
LPCOLORREF = ctypes.POINTER(COLORREF)
|
|
175
|
+
LPDWORD = PDWORD = ctypes.POINTER(DWORD)
|
|
176
|
+
LPFILETIME = PFILETIME = ctypes.POINTER(FILETIME)
|
|
177
|
+
PFLOAT = ctypes.POINTER(FLOAT)
|
|
178
|
+
LPHANDLE = PHANDLE = ctypes.POINTER(HANDLE)
|
|
179
|
+
PHKEY = ctypes.POINTER(HKEY)
|
|
180
|
+
LPHKL = ctypes.POINTER(HKL)
|
|
181
|
+
LPINT = PINT = ctypes.POINTER(INT)
|
|
182
|
+
PLARGE_INTEGER = ctypes.POINTER(LARGE_INTEGER)
|
|
183
|
+
PLCID = ctypes.POINTER(LCID)
|
|
184
|
+
LPLONG = PLONG = ctypes.POINTER(LONG)
|
|
185
|
+
LPMSG = PMSG = ctypes.POINTER(MSG)
|
|
186
|
+
LPPOINT = PPOINT = ctypes.POINTER(POINT)
|
|
187
|
+
PPOINTL = ctypes.POINTER(POINTL)
|
|
188
|
+
LPRECT = PRECT = ctypes.POINTER(RECT)
|
|
189
|
+
LPRECTL = PRECTL = ctypes.POINTER(RECTL)
|
|
190
|
+
LPSC_HANDLE = ctypes.POINTER(SC_HANDLE)
|
|
191
|
+
PSHORT = ctypes.POINTER(SHORT)
|
|
192
|
+
LPSIZE = PSIZE = ctypes.POINTER(SIZE)
|
|
193
|
+
LPSIZEL = PSIZEL = ctypes.POINTER(SIZEL)
|
|
194
|
+
PSMALL_RECT = ctypes.POINTER(SMALL_RECT)
|
|
195
|
+
LPUINT = PUINT = ctypes.POINTER(UINT)
|
|
196
|
+
PULARGE_INTEGER = ctypes.POINTER(ULARGE_INTEGER)
|
|
197
|
+
PULONG = ctypes.POINTER(ULONG)
|
|
198
|
+
PUSHORT = ctypes.POINTER(USHORT)
|
|
199
|
+
PWCHAR = ctypes.POINTER(WCHAR)
|
|
200
|
+
LPWIN32_FIND_DATAA = PWIN32_FIND_DATAA = ctypes.POINTER(WIN32_FIND_DATAA)
|
|
201
|
+
LPWIN32_FIND_DATAW = PWIN32_FIND_DATAW = ctypes.POINTER(WIN32_FIND_DATAW)
|
|
202
|
+
LPWORD = PWORD = ctypes.POINTER(WORD)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""curses
|
|
2
|
+
|
|
3
|
+
The main package for curses support for Python. Normally used by importing
|
|
4
|
+
the package, and perhaps a particular module inside it.
|
|
5
|
+
|
|
6
|
+
import curses
|
|
7
|
+
from curses import textpad
|
|
8
|
+
curses.initscr()
|
|
9
|
+
...
|
|
10
|
+
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from _curses import *
|
|
14
|
+
import os as _os
|
|
15
|
+
import sys as _sys
|
|
16
|
+
|
|
17
|
+
# Some constants, most notably the ACS_* ones, are only added to the C
|
|
18
|
+
# _curses module's dictionary after initscr() is called. (Some
|
|
19
|
+
# versions of SGI's curses don't define values for those constants
|
|
20
|
+
# until initscr() has been called.) This wrapper function calls the
|
|
21
|
+
# underlying C initscr(), and then copies the constants from the
|
|
22
|
+
# _curses module to the curses package's dictionary. Don't do 'from
|
|
23
|
+
# curses import *' if you'll be needing the ACS_* constants.
|
|
24
|
+
|
|
25
|
+
def initscr():
|
|
26
|
+
import _curses, curses
|
|
27
|
+
# we call setupterm() here because it raises an error
|
|
28
|
+
# instead of calling exit() in error cases.
|
|
29
|
+
setupterm(term=_os.environ.get("TERM", "unknown"),
|
|
30
|
+
fd=_sys.__stdout__.fileno())
|
|
31
|
+
stdscr = _curses.initscr()
|
|
32
|
+
for key, value in _curses.__dict__.items():
|
|
33
|
+
if key[0:4] == 'ACS_' or key in ('LINES', 'COLS'):
|
|
34
|
+
setattr(curses, key, value)
|
|
35
|
+
|
|
36
|
+
return stdscr
|
|
37
|
+
|
|
38
|
+
# This is a similar wrapper for start_color(), which adds the COLORS and
|
|
39
|
+
# COLOR_PAIRS variables which are only available after start_color() is
|
|
40
|
+
# called.
|
|
41
|
+
|
|
42
|
+
def start_color():
|
|
43
|
+
import _curses, curses
|
|
44
|
+
retval = _curses.start_color()
|
|
45
|
+
if hasattr(_curses, 'COLORS'):
|
|
46
|
+
curses.COLORS = _curses.COLORS
|
|
47
|
+
if hasattr(_curses, 'COLOR_PAIRS'):
|
|
48
|
+
curses.COLOR_PAIRS = _curses.COLOR_PAIRS
|
|
49
|
+
return retval
|
|
50
|
+
|
|
51
|
+
# Import Python has_key() implementation if _curses doesn't contain has_key()
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
has_key
|
|
55
|
+
except NameError:
|
|
56
|
+
from .has_key import has_key
|
|
57
|
+
|
|
58
|
+
# Wrapper for the entire curses-based application. Runs a function which
|
|
59
|
+
# should be the rest of your curses-based application. If the application
|
|
60
|
+
# raises an exception, wrapper() will restore the terminal to a sane state so
|
|
61
|
+
# you can read the resulting traceback.
|
|
62
|
+
|
|
63
|
+
def wrapper(func, /, *args, **kwds):
|
|
64
|
+
"""Wrapper function that initializes curses and calls another function,
|
|
65
|
+
restoring normal keyboard/screen behavior on error.
|
|
66
|
+
The callable object 'func' is then passed the main window 'stdscr'
|
|
67
|
+
as its first argument, followed by any other arguments passed to
|
|
68
|
+
wrapper().
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
try:
|
|
72
|
+
# Initialize curses
|
|
73
|
+
stdscr = initscr()
|
|
74
|
+
|
|
75
|
+
# Turn off echoing of keys, and enter cbreak mode,
|
|
76
|
+
# where no buffering is performed on keyboard input
|
|
77
|
+
noecho()
|
|
78
|
+
cbreak()
|
|
79
|
+
|
|
80
|
+
# In keypad mode, escape sequences for special keys
|
|
81
|
+
# (like the cursor keys) will be interpreted and
|
|
82
|
+
# a special value like curses.KEY_LEFT will be returned
|
|
83
|
+
stdscr.keypad(1)
|
|
84
|
+
|
|
85
|
+
# Start color, too. Harmless if the terminal doesn't have
|
|
86
|
+
# color; user can test with has_color() later on. The try/catch
|
|
87
|
+
# works around a minor bit of over-conscientiousness in the curses
|
|
88
|
+
# module -- the error return from C start_color() is ignorable.
|
|
89
|
+
try:
|
|
90
|
+
start_color()
|
|
91
|
+
except:
|
|
92
|
+
pass
|
|
93
|
+
|
|
94
|
+
return func(stdscr, *args, **kwds)
|
|
95
|
+
finally:
|
|
96
|
+
# Set everything back to normal
|
|
97
|
+
if 'stdscr' in locals():
|
|
98
|
+
stdscr.keypad(0)
|
|
99
|
+
echo()
|
|
100
|
+
nocbreak()
|
|
101
|
+
endwin()
|