@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.
Files changed (565) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +5 -0
  3. package/package.json +26 -0
  4. package/python/bin/python3.13 +0 -0
  5. package/python/bin/python3.13-config +122 -0
  6. package/python/lib/libpython3.13.so.1.0 +0 -0
  7. package/python/lib/libpython3.so +0 -0
  8. package/python/lib/python3.13/LICENSE.txt +277 -0
  9. package/python/lib/python3.13/__future__.py +147 -0
  10. package/python/lib/python3.13/__hello__.py +16 -0
  11. package/python/lib/python3.13/_aix_support.py +108 -0
  12. package/python/lib/python3.13/_android_support.py +192 -0
  13. package/python/lib/python3.13/_apple_support.py +66 -0
  14. package/python/lib/python3.13/_collections_abc.py +1187 -0
  15. package/python/lib/python3.13/_colorize.py +119 -0
  16. package/python/lib/python3.13/_compat_pickle.py +251 -0
  17. package/python/lib/python3.13/_compression.py +162 -0
  18. package/python/lib/python3.13/_ios_support.py +71 -0
  19. package/python/lib/python3.13/_markupbase.py +396 -0
  20. package/python/lib/python3.13/_opcode_metadata.py +343 -0
  21. package/python/lib/python3.13/_osx_support.py +579 -0
  22. package/python/lib/python3.13/_py_abc.py +147 -0
  23. package/python/lib/python3.13/_pydatetime.py +2640 -0
  24. package/python/lib/python3.13/_pydecimal.py +6356 -0
  25. package/python/lib/python3.13/_pyio.py +2714 -0
  26. package/python/lib/python3.13/_pylong.py +363 -0
  27. package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
  28. package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
  29. package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
  30. package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
  31. package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
  32. package/python/lib/python3.13/_pyrepl/commands.py +492 -0
  33. package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
  34. package/python/lib/python3.13/_pyrepl/console.py +229 -0
  35. package/python/lib/python3.13/_pyrepl/curses.py +33 -0
  36. package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
  37. package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
  38. package/python/lib/python3.13/_pyrepl/input.py +114 -0
  39. package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
  40. package/python/lib/python3.13/_pyrepl/main.py +59 -0
  41. package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
  42. package/python/lib/python3.13/_pyrepl/pager.py +175 -0
  43. package/python/lib/python3.13/_pyrepl/reader.py +764 -0
  44. package/python/lib/python3.13/_pyrepl/readline.py +599 -0
  45. package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
  46. package/python/lib/python3.13/_pyrepl/trace.py +21 -0
  47. package/python/lib/python3.13/_pyrepl/types.py +10 -0
  48. package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
  49. package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
  50. package/python/lib/python3.13/_pyrepl/utils.py +83 -0
  51. package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
  52. package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
  53. package/python/lib/python3.13/_sitebuiltins.py +91 -0
  54. package/python/lib/python3.13/_strptime.py +800 -0
  55. package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
  56. package/python/lib/python3.13/_threading_local.py +120 -0
  57. package/python/lib/python3.13/_weakrefset.py +205 -0
  58. package/python/lib/python3.13/abc.py +188 -0
  59. package/python/lib/python3.13/antigravity.py +17 -0
  60. package/python/lib/python3.13/argparse.py +2690 -0
  61. package/python/lib/python3.13/ast.py +1865 -0
  62. package/python/lib/python3.13/asyncio/__init__.py +47 -0
  63. package/python/lib/python3.13/asyncio/__main__.py +211 -0
  64. package/python/lib/python3.13/asyncio/base_events.py +2086 -0
  65. package/python/lib/python3.13/asyncio/base_futures.py +67 -0
  66. package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
  67. package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
  68. package/python/lib/python3.13/asyncio/constants.py +41 -0
  69. package/python/lib/python3.13/asyncio/coroutines.py +109 -0
  70. package/python/lib/python3.13/asyncio/events.py +885 -0
  71. package/python/lib/python3.13/asyncio/exceptions.py +62 -0
  72. package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
  73. package/python/lib/python3.13/asyncio/futures.py +425 -0
  74. package/python/lib/python3.13/asyncio/locks.py +617 -0
  75. package/python/lib/python3.13/asyncio/log.py +7 -0
  76. package/python/lib/python3.13/asyncio/mixins.py +21 -0
  77. package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
  78. package/python/lib/python3.13/asyncio/protocols.py +216 -0
  79. package/python/lib/python3.13/asyncio/queues.py +309 -0
  80. package/python/lib/python3.13/asyncio/runners.py +217 -0
  81. package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
  82. package/python/lib/python3.13/asyncio/sslproto.py +929 -0
  83. package/python/lib/python3.13/asyncio/staggered.py +174 -0
  84. package/python/lib/python3.13/asyncio/streams.py +787 -0
  85. package/python/lib/python3.13/asyncio/subprocess.py +229 -0
  86. package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
  87. package/python/lib/python3.13/asyncio/tasks.py +1121 -0
  88. package/python/lib/python3.13/asyncio/threads.py +26 -0
  89. package/python/lib/python3.13/asyncio/timeouts.py +185 -0
  90. package/python/lib/python3.13/asyncio/transports.py +337 -0
  91. package/python/lib/python3.13/asyncio/trsock.py +98 -0
  92. package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
  93. package/python/lib/python3.13/asyncio/windows_events.py +906 -0
  94. package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
  95. package/python/lib/python3.13/base64.py +628 -0
  96. package/python/lib/python3.13/bdb.py +973 -0
  97. package/python/lib/python3.13/bisect.py +118 -0
  98. package/python/lib/python3.13/bz2.py +352 -0
  99. package/python/lib/python3.13/cProfile.py +197 -0
  100. package/python/lib/python3.13/calendar.py +813 -0
  101. package/python/lib/python3.13/cmd.py +409 -0
  102. package/python/lib/python3.13/code.py +386 -0
  103. package/python/lib/python3.13/codecs.py +1132 -0
  104. package/python/lib/python3.13/codeop.py +155 -0
  105. package/python/lib/python3.13/collections/__init__.py +1603 -0
  106. package/python/lib/python3.13/colorsys.py +166 -0
  107. package/python/lib/python3.13/compileall.py +470 -0
  108. package/python/lib/python3.13/concurrent/__init__.py +1 -0
  109. package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
  110. package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
  111. package/python/lib/python3.13/concurrent/futures/process.py +892 -0
  112. package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
  113. package/python/lib/python3.13/configparser.py +1396 -0
  114. package/python/lib/python3.13/contextlib.py +814 -0
  115. package/python/lib/python3.13/contextvars.py +4 -0
  116. package/python/lib/python3.13/copy.py +306 -0
  117. package/python/lib/python3.13/copyreg.py +217 -0
  118. package/python/lib/python3.13/csv.py +527 -0
  119. package/python/lib/python3.13/ctypes/__init__.py +605 -0
  120. package/python/lib/python3.13/ctypes/_aix.py +327 -0
  121. package/python/lib/python3.13/ctypes/_endian.py +78 -0
  122. package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
  123. package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
  124. package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
  125. package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
  126. package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
  127. package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
  128. package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
  129. package/python/lib/python3.13/ctypes/util.py +387 -0
  130. package/python/lib/python3.13/ctypes/wintypes.py +202 -0
  131. package/python/lib/python3.13/curses/__init__.py +101 -0
  132. package/python/lib/python3.13/curses/ascii.py +99 -0
  133. package/python/lib/python3.13/curses/has_key.py +192 -0
  134. package/python/lib/python3.13/curses/panel.py +6 -0
  135. package/python/lib/python3.13/curses/textpad.py +236 -0
  136. package/python/lib/python3.13/dataclasses.py +1679 -0
  137. package/python/lib/python3.13/datetime.py +9 -0
  138. package/python/lib/python3.13/dbm/__init__.py +194 -0
  139. package/python/lib/python3.13/dbm/dumb.py +319 -0
  140. package/python/lib/python3.13/dbm/gnu.py +3 -0
  141. package/python/lib/python3.13/dbm/ndbm.py +3 -0
  142. package/python/lib/python3.13/dbm/sqlite3.py +144 -0
  143. package/python/lib/python3.13/decimal.py +109 -0
  144. package/python/lib/python3.13/difflib.py +2058 -0
  145. package/python/lib/python3.13/dis.py +1075 -0
  146. package/python/lib/python3.13/doctest.py +2919 -0
  147. package/python/lib/python3.13/email/__init__.py +61 -0
  148. package/python/lib/python3.13/email/_encoded_words.py +233 -0
  149. package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
  150. package/python/lib/python3.13/email/_parseaddr.py +563 -0
  151. package/python/lib/python3.13/email/_policybase.py +382 -0
  152. package/python/lib/python3.13/email/architecture.rst +216 -0
  153. package/python/lib/python3.13/email/base64mime.py +115 -0
  154. package/python/lib/python3.13/email/charset.py +396 -0
  155. package/python/lib/python3.13/email/contentmanager.py +254 -0
  156. package/python/lib/python3.13/email/encoders.py +65 -0
  157. package/python/lib/python3.13/email/errors.py +117 -0
  158. package/python/lib/python3.13/email/feedparser.py +536 -0
  159. package/python/lib/python3.13/email/generator.py +530 -0
  160. package/python/lib/python3.13/email/header.py +582 -0
  161. package/python/lib/python3.13/email/headerregistry.py +618 -0
  162. package/python/lib/python3.13/email/iterators.py +68 -0
  163. package/python/lib/python3.13/email/message.py +1217 -0
  164. package/python/lib/python3.13/email/mime/__init__.py +0 -0
  165. package/python/lib/python3.13/email/mime/application.py +37 -0
  166. package/python/lib/python3.13/email/mime/audio.py +97 -0
  167. package/python/lib/python3.13/email/mime/base.py +29 -0
  168. package/python/lib/python3.13/email/mime/image.py +152 -0
  169. package/python/lib/python3.13/email/mime/message.py +33 -0
  170. package/python/lib/python3.13/email/mime/multipart.py +47 -0
  171. package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
  172. package/python/lib/python3.13/email/mime/text.py +40 -0
  173. package/python/lib/python3.13/email/parser.py +127 -0
  174. package/python/lib/python3.13/email/policy.py +232 -0
  175. package/python/lib/python3.13/email/quoprimime.py +300 -0
  176. package/python/lib/python3.13/email/utils.py +497 -0
  177. package/python/lib/python3.13/encodings/__init__.py +179 -0
  178. package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
  179. package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
  180. package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
  181. package/python/lib/python3.13/encodings/aliases.py +560 -0
  182. package/python/lib/python3.13/encodings/ascii.py +50 -0
  183. package/python/lib/python3.13/encodings/base64_codec.py +55 -0
  184. package/python/lib/python3.13/encodings/big5.py +39 -0
  185. package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
  186. package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
  187. package/python/lib/python3.13/encodings/charmap.py +69 -0
  188. package/python/lib/python3.13/encodings/cp037.py +307 -0
  189. package/python/lib/python3.13/encodings/cp1006.py +307 -0
  190. package/python/lib/python3.13/encodings/cp1026.py +307 -0
  191. package/python/lib/python3.13/encodings/cp1125.py +698 -0
  192. package/python/lib/python3.13/encodings/cp1140.py +307 -0
  193. package/python/lib/python3.13/encodings/cp1250.py +307 -0
  194. package/python/lib/python3.13/encodings/cp1251.py +307 -0
  195. package/python/lib/python3.13/encodings/cp1252.py +307 -0
  196. package/python/lib/python3.13/encodings/cp1253.py +307 -0
  197. package/python/lib/python3.13/encodings/cp1254.py +307 -0
  198. package/python/lib/python3.13/encodings/cp1255.py +307 -0
  199. package/python/lib/python3.13/encodings/cp1256.py +307 -0
  200. package/python/lib/python3.13/encodings/cp1257.py +307 -0
  201. package/python/lib/python3.13/encodings/cp1258.py +307 -0
  202. package/python/lib/python3.13/encodings/cp273.py +307 -0
  203. package/python/lib/python3.13/encodings/cp424.py +307 -0
  204. package/python/lib/python3.13/encodings/cp437.py +698 -0
  205. package/python/lib/python3.13/encodings/cp500.py +307 -0
  206. package/python/lib/python3.13/encodings/cp720.py +309 -0
  207. package/python/lib/python3.13/encodings/cp737.py +698 -0
  208. package/python/lib/python3.13/encodings/cp775.py +697 -0
  209. package/python/lib/python3.13/encodings/cp850.py +698 -0
  210. package/python/lib/python3.13/encodings/cp852.py +698 -0
  211. package/python/lib/python3.13/encodings/cp855.py +698 -0
  212. package/python/lib/python3.13/encodings/cp856.py +307 -0
  213. package/python/lib/python3.13/encodings/cp857.py +694 -0
  214. package/python/lib/python3.13/encodings/cp858.py +698 -0
  215. package/python/lib/python3.13/encodings/cp860.py +698 -0
  216. package/python/lib/python3.13/encodings/cp861.py +698 -0
  217. package/python/lib/python3.13/encodings/cp862.py +698 -0
  218. package/python/lib/python3.13/encodings/cp863.py +698 -0
  219. package/python/lib/python3.13/encodings/cp864.py +690 -0
  220. package/python/lib/python3.13/encodings/cp865.py +698 -0
  221. package/python/lib/python3.13/encodings/cp866.py +698 -0
  222. package/python/lib/python3.13/encodings/cp869.py +689 -0
  223. package/python/lib/python3.13/encodings/cp874.py +307 -0
  224. package/python/lib/python3.13/encodings/cp875.py +307 -0
  225. package/python/lib/python3.13/encodings/cp932.py +39 -0
  226. package/python/lib/python3.13/encodings/cp949.py +39 -0
  227. package/python/lib/python3.13/encodings/cp950.py +39 -0
  228. package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
  229. package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
  230. package/python/lib/python3.13/encodings/euc_jp.py +39 -0
  231. package/python/lib/python3.13/encodings/euc_kr.py +39 -0
  232. package/python/lib/python3.13/encodings/gb18030.py +39 -0
  233. package/python/lib/python3.13/encodings/gb2312.py +39 -0
  234. package/python/lib/python3.13/encodings/gbk.py +39 -0
  235. package/python/lib/python3.13/encodings/hex_codec.py +55 -0
  236. package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
  237. package/python/lib/python3.13/encodings/hz.py +39 -0
  238. package/python/lib/python3.13/encodings/idna.py +387 -0
  239. package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
  240. package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
  241. package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
  242. package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
  243. package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
  244. package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
  245. package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
  246. package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
  247. package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
  248. package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
  249. package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
  250. package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
  251. package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
  252. package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
  253. package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
  254. package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
  255. package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
  256. package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
  257. package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
  258. package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
  259. package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
  260. package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
  261. package/python/lib/python3.13/encodings/johab.py +39 -0
  262. package/python/lib/python3.13/encodings/koi8_r.py +307 -0
  263. package/python/lib/python3.13/encodings/koi8_t.py +308 -0
  264. package/python/lib/python3.13/encodings/koi8_u.py +307 -0
  265. package/python/lib/python3.13/encodings/kz1048.py +307 -0
  266. package/python/lib/python3.13/encodings/latin_1.py +50 -0
  267. package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
  268. package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
  269. package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
  270. package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
  271. package/python/lib/python3.13/encodings/mac_greek.py +307 -0
  272. package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
  273. package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
  274. package/python/lib/python3.13/encodings/mac_roman.py +307 -0
  275. package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
  276. package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
  277. package/python/lib/python3.13/encodings/mbcs.py +47 -0
  278. package/python/lib/python3.13/encodings/oem.py +41 -0
  279. package/python/lib/python3.13/encodings/palmos.py +308 -0
  280. package/python/lib/python3.13/encodings/ptcp154.py +312 -0
  281. package/python/lib/python3.13/encodings/punycode.py +253 -0
  282. package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
  283. package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
  284. package/python/lib/python3.13/encodings/rot_13.py +113 -0
  285. package/python/lib/python3.13/encodings/shift_jis.py +39 -0
  286. package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
  287. package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
  288. package/python/lib/python3.13/encodings/tis_620.py +307 -0
  289. package/python/lib/python3.13/encodings/undefined.py +49 -0
  290. package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
  291. package/python/lib/python3.13/encodings/utf_16.py +155 -0
  292. package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
  293. package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
  294. package/python/lib/python3.13/encodings/utf_32.py +150 -0
  295. package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
  296. package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
  297. package/python/lib/python3.13/encodings/utf_7.py +38 -0
  298. package/python/lib/python3.13/encodings/utf_8.py +42 -0
  299. package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
  300. package/python/lib/python3.13/encodings/uu_codec.py +103 -0
  301. package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
  302. package/python/lib/python3.13/enum.py +2183 -0
  303. package/python/lib/python3.13/filecmp.py +320 -0
  304. package/python/lib/python3.13/fileinput.py +442 -0
  305. package/python/lib/python3.13/fnmatch.py +192 -0
  306. package/python/lib/python3.13/fractions.py +1043 -0
  307. package/python/lib/python3.13/ftplib.py +975 -0
  308. package/python/lib/python3.13/functools.py +1036 -0
  309. package/python/lib/python3.13/genericpath.py +200 -0
  310. package/python/lib/python3.13/getopt.py +215 -0
  311. package/python/lib/python3.13/getpass.py +192 -0
  312. package/python/lib/python3.13/gettext.py +657 -0
  313. package/python/lib/python3.13/glob.py +572 -0
  314. package/python/lib/python3.13/graphlib.py +250 -0
  315. package/python/lib/python3.13/gzip.py +693 -0
  316. package/python/lib/python3.13/hashlib.py +255 -0
  317. package/python/lib/python3.13/heapq.py +603 -0
  318. package/python/lib/python3.13/hmac.py +220 -0
  319. package/python/lib/python3.13/html/__init__.py +132 -0
  320. package/python/lib/python3.13/html/entities.py +2513 -0
  321. package/python/lib/python3.13/html/parser.py +583 -0
  322. package/python/lib/python3.13/http/__init__.py +202 -0
  323. package/python/lib/python3.13/http/client.py +1598 -0
  324. package/python/lib/python3.13/http/cookiejar.py +2122 -0
  325. package/python/lib/python3.13/http/cookies.py +635 -0
  326. package/python/lib/python3.13/http/server.py +1355 -0
  327. package/python/lib/python3.13/imaplib.py +1769 -0
  328. package/python/lib/python3.13/importlib/__init__.py +136 -0
  329. package/python/lib/python3.13/importlib/_abc.py +39 -0
  330. package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
  331. package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
  332. package/python/lib/python3.13/importlib/abc.py +243 -0
  333. package/python/lib/python3.13/importlib/machinery.py +21 -0
  334. package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
  335. package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
  336. package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
  337. package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
  338. package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
  339. package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
  340. package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
  341. package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
  342. package/python/lib/python3.13/importlib/readers.py +12 -0
  343. package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
  344. package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
  345. package/python/lib/python3.13/importlib/resources/_common.py +211 -0
  346. package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
  347. package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
  348. package/python/lib/python3.13/importlib/resources/abc.py +173 -0
  349. package/python/lib/python3.13/importlib/resources/readers.py +203 -0
  350. package/python/lib/python3.13/importlib/resources/simple.py +106 -0
  351. package/python/lib/python3.13/importlib/simple.py +14 -0
  352. package/python/lib/python3.13/importlib/util.py +274 -0
  353. package/python/lib/python3.13/inspect.py +3479 -0
  354. package/python/lib/python3.13/io.py +99 -0
  355. package/python/lib/python3.13/ipaddress.py +2440 -0
  356. package/python/lib/python3.13/json/__init__.py +365 -0
  357. package/python/lib/python3.13/json/decoder.py +364 -0
  358. package/python/lib/python3.13/json/encoder.py +446 -0
  359. package/python/lib/python3.13/json/scanner.py +73 -0
  360. package/python/lib/python3.13/json/tool.py +90 -0
  361. package/python/lib/python3.13/keyword.py +64 -0
  362. package/python/lib/python3.13/lib-dynload/.empty +0 -0
  363. package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
  364. package/python/lib/python3.13/linecache.py +236 -0
  365. package/python/lib/python3.13/locale.py +1987 -0
  366. package/python/lib/python3.13/logging/__init__.py +2330 -0
  367. package/python/lib/python3.13/logging/config.py +1080 -0
  368. package/python/lib/python3.13/logging/handlers.py +1629 -0
  369. package/python/lib/python3.13/lzma.py +364 -0
  370. package/python/lib/python3.13/mailbox.py +2219 -0
  371. package/python/lib/python3.13/mimetypes.py +679 -0
  372. package/python/lib/python3.13/modulefinder.py +671 -0
  373. package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
  374. package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
  375. package/python/lib/python3.13/multiprocessing/context.py +383 -0
  376. package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
  377. package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
  378. package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
  379. package/python/lib/python3.13/multiprocessing/heap.py +337 -0
  380. package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
  381. package/python/lib/python3.13/multiprocessing/pool.py +957 -0
  382. package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
  383. package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
  384. package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
  385. package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
  386. package/python/lib/python3.13/multiprocessing/process.py +436 -0
  387. package/python/lib/python3.13/multiprocessing/queues.py +399 -0
  388. package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
  389. package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
  390. package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
  391. package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
  392. package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
  393. package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
  394. package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
  395. package/python/lib/python3.13/multiprocessing/util.py +562 -0
  396. package/python/lib/python3.13/netrc.py +199 -0
  397. package/python/lib/python3.13/ntpath.py +872 -0
  398. package/python/lib/python3.13/nturl2path.py +69 -0
  399. package/python/lib/python3.13/numbers.py +427 -0
  400. package/python/lib/python3.13/opcode.py +115 -0
  401. package/python/lib/python3.13/operator.py +467 -0
  402. package/python/lib/python3.13/optparse.py +1681 -0
  403. package/python/lib/python3.13/os.py +1184 -0
  404. package/python/lib/python3.13/pathlib/__init__.py +12 -0
  405. package/python/lib/python3.13/pathlib/_abc.py +930 -0
  406. package/python/lib/python3.13/pathlib/_local.py +861 -0
  407. package/python/lib/python3.13/pdb.py +2550 -0
  408. package/python/lib/python3.13/pickle.py +1860 -0
  409. package/python/lib/python3.13/pickletools.py +2904 -0
  410. package/python/lib/python3.13/pkgutil.py +529 -0
  411. package/python/lib/python3.13/platform.py +1454 -0
  412. package/python/lib/python3.13/plistlib.py +948 -0
  413. package/python/lib/python3.13/poplib.py +477 -0
  414. package/python/lib/python3.13/posixpath.py +578 -0
  415. package/python/lib/python3.13/pprint.py +658 -0
  416. package/python/lib/python3.13/profile.py +616 -0
  417. package/python/lib/python3.13/pstats.py +778 -0
  418. package/python/lib/python3.13/pty.py +211 -0
  419. package/python/lib/python3.13/py_compile.py +212 -0
  420. package/python/lib/python3.13/pyclbr.py +314 -0
  421. package/python/lib/python3.13/pydoc.py +2861 -0
  422. package/python/lib/python3.13/queue.py +383 -0
  423. package/python/lib/python3.13/quopri.py +237 -0
  424. package/python/lib/python3.13/random.py +1078 -0
  425. package/python/lib/python3.13/re/__init__.py +428 -0
  426. package/python/lib/python3.13/re/_casefix.py +106 -0
  427. package/python/lib/python3.13/re/_compiler.py +768 -0
  428. package/python/lib/python3.13/re/_constants.py +222 -0
  429. package/python/lib/python3.13/re/_parser.py +1081 -0
  430. package/python/lib/python3.13/reprlib.py +230 -0
  431. package/python/lib/python3.13/rlcompleter.py +222 -0
  432. package/python/lib/python3.13/runpy.py +326 -0
  433. package/python/lib/python3.13/sched.py +167 -0
  434. package/python/lib/python3.13/secrets.py +71 -0
  435. package/python/lib/python3.13/selectors.py +603 -0
  436. package/python/lib/python3.13/shelve.py +250 -0
  437. package/python/lib/python3.13/shlex.py +345 -0
  438. package/python/lib/python3.13/shutil.py +1569 -0
  439. package/python/lib/python3.13/signal.py +94 -0
  440. package/python/lib/python3.13/site.py +773 -0
  441. package/python/lib/python3.13/smtplib.py +1123 -0
  442. package/python/lib/python3.13/socket.py +988 -0
  443. package/python/lib/python3.13/socketserver.py +863 -0
  444. package/python/lib/python3.13/sqlite3/__init__.py +70 -0
  445. package/python/lib/python3.13/sqlite3/__main__.py +139 -0
  446. package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
  447. package/python/lib/python3.13/sqlite3/dump.py +118 -0
  448. package/python/lib/python3.13/sre_compile.py +7 -0
  449. package/python/lib/python3.13/sre_constants.py +7 -0
  450. package/python/lib/python3.13/sre_parse.py +7 -0
  451. package/python/lib/python3.13/ssl.py +1541 -0
  452. package/python/lib/python3.13/stat.py +212 -0
  453. package/python/lib/python3.13/statistics.py +1817 -0
  454. package/python/lib/python3.13/string.py +314 -0
  455. package/python/lib/python3.13/stringprep.py +272 -0
  456. package/python/lib/python3.13/struct.py +15 -0
  457. package/python/lib/python3.13/subprocess.py +2258 -0
  458. package/python/lib/python3.13/symtable.py +414 -0
  459. package/python/lib/python3.13/sysconfig/__init__.py +734 -0
  460. package/python/lib/python3.13/sysconfig/__main__.py +248 -0
  461. package/python/lib/python3.13/tabnanny.py +340 -0
  462. package/python/lib/python3.13/tarfile.py +3136 -0
  463. package/python/lib/python3.13/tempfile.py +958 -0
  464. package/python/lib/python3.13/textwrap.py +497 -0
  465. package/python/lib/python3.13/this.py +28 -0
  466. package/python/lib/python3.13/threading.py +1602 -0
  467. package/python/lib/python3.13/timeit.py +381 -0
  468. package/python/lib/python3.13/token.py +141 -0
  469. package/python/lib/python3.13/tokenize.py +592 -0
  470. package/python/lib/python3.13/tomllib/__init__.py +10 -0
  471. package/python/lib/python3.13/tomllib/_parser.py +703 -0
  472. package/python/lib/python3.13/tomllib/_re.py +107 -0
  473. package/python/lib/python3.13/tomllib/_types.py +10 -0
  474. package/python/lib/python3.13/tomllib/mypy.ini +15 -0
  475. package/python/lib/python3.13/trace.py +754 -0
  476. package/python/lib/python3.13/traceback.py +1639 -0
  477. package/python/lib/python3.13/tracemalloc.py +560 -0
  478. package/python/lib/python3.13/tty.py +73 -0
  479. package/python/lib/python3.13/types.py +346 -0
  480. package/python/lib/python3.13/typing.py +3846 -0
  481. package/python/lib/python3.13/unittest/__init__.py +80 -0
  482. package/python/lib/python3.13/unittest/__main__.py +18 -0
  483. package/python/lib/python3.13/unittest/_log.py +86 -0
  484. package/python/lib/python3.13/unittest/async_case.py +146 -0
  485. package/python/lib/python3.13/unittest/case.py +1478 -0
  486. package/python/lib/python3.13/unittest/loader.py +460 -0
  487. package/python/lib/python3.13/unittest/main.py +280 -0
  488. package/python/lib/python3.13/unittest/mock.py +3189 -0
  489. package/python/lib/python3.13/unittest/result.py +256 -0
  490. package/python/lib/python3.13/unittest/runner.py +292 -0
  491. package/python/lib/python3.13/unittest/signals.py +71 -0
  492. package/python/lib/python3.13/unittest/suite.py +379 -0
  493. package/python/lib/python3.13/unittest/util.py +170 -0
  494. package/python/lib/python3.13/urllib/__init__.py +0 -0
  495. package/python/lib/python3.13/urllib/error.py +74 -0
  496. package/python/lib/python3.13/urllib/parse.py +1264 -0
  497. package/python/lib/python3.13/urllib/request.py +2796 -0
  498. package/python/lib/python3.13/urllib/response.py +84 -0
  499. package/python/lib/python3.13/urllib/robotparser.py +363 -0
  500. package/python/lib/python3.13/uuid.py +784 -0
  501. package/python/lib/python3.13/warnings.py +735 -0
  502. package/python/lib/python3.13/wave.py +665 -0
  503. package/python/lib/python3.13/weakref.py +674 -0
  504. package/python/lib/python3.13/webbrowser.py +724 -0
  505. package/python/lib/python3.13/wsgiref/__init__.py +25 -0
  506. package/python/lib/python3.13/wsgiref/handlers.py +575 -0
  507. package/python/lib/python3.13/wsgiref/headers.py +192 -0
  508. package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
  509. package/python/lib/python3.13/wsgiref/types.py +54 -0
  510. package/python/lib/python3.13/wsgiref/util.py +159 -0
  511. package/python/lib/python3.13/wsgiref/validate.py +438 -0
  512. package/python/lib/python3.13/xml/__init__.py +20 -0
  513. package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
  514. package/python/lib/python3.13/xml/dom/__init__.py +140 -0
  515. package/python/lib/python3.13/xml/dom/domreg.py +99 -0
  516. package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
  517. package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
  518. package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
  519. package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
  520. package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
  521. package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
  522. package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
  523. package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
  524. package/python/lib/python3.13/xml/etree/__init__.py +33 -0
  525. package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
  526. package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
  527. package/python/lib/python3.13/xml/parsers/expat.py +8 -0
  528. package/python/lib/python3.13/xml/sax/__init__.py +94 -0
  529. package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
  530. package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
  531. package/python/lib/python3.13/xml/sax/handler.py +387 -0
  532. package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
  533. package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
  534. package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
  535. package/python/lib/python3.13/xmlrpc/client.py +1503 -0
  536. package/python/lib/python3.13/xmlrpc/server.py +1002 -0
  537. package/python/lib/python3.13/zipapp.py +229 -0
  538. package/python/lib/python3.13/zipfile/__init__.py +2391 -0
  539. package/python/lib/python3.13/zipfile/__main__.py +4 -0
  540. package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
  541. package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
  542. package/python/lib/python3.13/zipimport.py +803 -0
  543. package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
  544. package/python/lib/python3.13/zoneinfo/_common.py +172 -0
  545. package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
  546. package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
  547. package/python/licenses/LICENSE.bdb.txt +126 -0
  548. package/python/licenses/LICENSE.bzip2.txt +37 -0
  549. package/python/licenses/LICENSE.cpython.txt +771 -0
  550. package/python/licenses/LICENSE.expat.txt +21 -0
  551. package/python/licenses/LICENSE.libX11.txt +942 -0
  552. package/python/licenses/LICENSE.libXau.txt +21 -0
  553. package/python/licenses/LICENSE.libedit.txt +29 -0
  554. package/python/licenses/LICENSE.libffi.txt +21 -0
  555. package/python/licenses/LICENSE.liblzma.txt +13 -0
  556. package/python/licenses/LICENSE.libuuid.txt +27 -0
  557. package/python/licenses/LICENSE.libxcb.txt +30 -0
  558. package/python/licenses/LICENSE.mpdecimal.txt +24 -0
  559. package/python/licenses/LICENSE.ncurses.txt +29 -0
  560. package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
  561. package/python/licenses/LICENSE.openssl-3.txt +177 -0
  562. package/python/licenses/LICENSE.sqlite.txt +23 -0
  563. package/python/licenses/LICENSE.tcl.txt +40 -0
  564. package/python/licenses/LICENSE.tix.txt +54 -0
  565. package/python/licenses/LICENSE.zlib.txt +21 -0
@@ -0,0 +1,764 @@
1
+ # Copyright 2000-2010 Michael Hudson-Doyle <micahel@gmail.com>
2
+ # Antonio Cuni
3
+ # Armin Rigo
4
+ #
5
+ # All Rights Reserved
6
+ #
7
+ #
8
+ # Permission to use, copy, modify, and distribute this software and
9
+ # its documentation for any purpose is hereby granted without fee,
10
+ # provided that the above copyright notice appear in all copies and
11
+ # that both that copyright notice and this permission notice appear in
12
+ # supporting documentation.
13
+ #
14
+ # THE AUTHOR MICHAEL HUDSON DISCLAIMS ALL WARRANTIES WITH REGARD TO
15
+ # THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
16
+ # AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL,
17
+ # INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
18
+ # RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
19
+ # CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
20
+ # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21
+
22
+ from __future__ import annotations
23
+
24
+ import sys
25
+
26
+ from contextlib import contextmanager
27
+ from dataclasses import dataclass, field, fields
28
+ from _colorize import can_colorize, ANSIColors
29
+
30
+
31
+ from . import commands, console, input
32
+ from .utils import wlen, unbracket, disp_str
33
+ from .trace import trace
34
+
35
+
36
+ # types
37
+ Command = commands.Command
38
+ from .types import Callback, SimpleContextManager, KeySpec, CommandName
39
+
40
+
41
+ # syntax classes:
42
+
43
+ SYNTAX_WHITESPACE, SYNTAX_WORD, SYNTAX_SYMBOL = range(3)
44
+
45
+
46
+ def make_default_syntax_table() -> dict[str, int]:
47
+ # XXX perhaps should use some unicodedata here?
48
+ st: dict[str, int] = {}
49
+ for c in map(chr, range(256)):
50
+ st[c] = SYNTAX_SYMBOL
51
+ for c in [a for a in map(chr, range(256)) if a.isalnum()]:
52
+ st[c] = SYNTAX_WORD
53
+ st["\n"] = st[" "] = SYNTAX_WHITESPACE
54
+ return st
55
+
56
+
57
+ def make_default_commands() -> dict[CommandName, type[Command]]:
58
+ result: dict[CommandName, type[Command]] = {}
59
+ for v in vars(commands).values():
60
+ if isinstance(v, type) and issubclass(v, Command) and v.__name__[0].islower():
61
+ result[v.__name__] = v
62
+ result[v.__name__.replace("_", "-")] = v
63
+ return result
64
+
65
+
66
+ default_keymap: tuple[tuple[KeySpec, CommandName], ...] = tuple(
67
+ [
68
+ (r"\C-a", "beginning-of-line"),
69
+ (r"\C-b", "left"),
70
+ (r"\C-c", "interrupt"),
71
+ (r"\C-d", "delete"),
72
+ (r"\C-e", "end-of-line"),
73
+ (r"\C-f", "right"),
74
+ (r"\C-g", "cancel"),
75
+ (r"\C-h", "backspace"),
76
+ (r"\C-j", "accept"),
77
+ (r"\<return>", "accept"),
78
+ (r"\C-k", "kill-line"),
79
+ (r"\C-l", "clear-screen"),
80
+ (r"\C-m", "accept"),
81
+ (r"\C-t", "transpose-characters"),
82
+ (r"\C-u", "unix-line-discard"),
83
+ (r"\C-w", "unix-word-rubout"),
84
+ (r"\C-x\C-u", "upcase-region"),
85
+ (r"\C-y", "yank"),
86
+ *(() if sys.platform == "win32" else ((r"\C-z", "suspend"), )),
87
+ (r"\M-b", "backward-word"),
88
+ (r"\M-c", "capitalize-word"),
89
+ (r"\M-d", "kill-word"),
90
+ (r"\M-f", "forward-word"),
91
+ (r"\M-l", "downcase-word"),
92
+ (r"\M-t", "transpose-words"),
93
+ (r"\M-u", "upcase-word"),
94
+ (r"\M-y", "yank-pop"),
95
+ (r"\M--", "digit-arg"),
96
+ (r"\M-0", "digit-arg"),
97
+ (r"\M-1", "digit-arg"),
98
+ (r"\M-2", "digit-arg"),
99
+ (r"\M-3", "digit-arg"),
100
+ (r"\M-4", "digit-arg"),
101
+ (r"\M-5", "digit-arg"),
102
+ (r"\M-6", "digit-arg"),
103
+ (r"\M-7", "digit-arg"),
104
+ (r"\M-8", "digit-arg"),
105
+ (r"\M-9", "digit-arg"),
106
+ (r"\M-\n", "accept"),
107
+ ("\\\\", "self-insert"),
108
+ (r"\x1b[200~", "enable_bracketed_paste"),
109
+ (r"\x1b[201~", "disable_bracketed_paste"),
110
+ (r"\x03", "ctrl-c"),
111
+ ]
112
+ + [(c, "self-insert") for c in map(chr, range(32, 127)) if c != "\\"]
113
+ + [(c, "self-insert") for c in map(chr, range(128, 256)) if c.isalpha()]
114
+ + [
115
+ (r"\<up>", "up"),
116
+ (r"\<down>", "down"),
117
+ (r"\<left>", "left"),
118
+ (r"\C-\<left>", "backward-word"),
119
+ (r"\<right>", "right"),
120
+ (r"\C-\<right>", "forward-word"),
121
+ (r"\<delete>", "delete"),
122
+ (r"\x1b[3~", "delete"),
123
+ (r"\<backspace>", "backspace"),
124
+ (r"\M-\<backspace>", "backward-kill-word"),
125
+ (r"\<end>", "end-of-line"), # was 'end'
126
+ (r"\<home>", "beginning-of-line"), # was 'home'
127
+ (r"\<f1>", "help"),
128
+ (r"\<f2>", "show-history"),
129
+ (r"\<f3>", "paste-mode"),
130
+ (r"\EOF", "end"), # the entries in the terminfo database for xterms
131
+ (r"\EOH", "home"), # seem to be wrong. this is a less than ideal
132
+ # workaround
133
+ ]
134
+ )
135
+
136
+
137
+ @dataclass(slots=True)
138
+ class Reader:
139
+ """The Reader class implements the bare bones of a command reader,
140
+ handling such details as editing and cursor motion. What it does
141
+ not support are such things as completion or history support -
142
+ these are implemented elsewhere.
143
+
144
+ Instance variables of note include:
145
+
146
+ * buffer:
147
+ A *list* (*not* a string at the moment :-) containing all the
148
+ characters that have been entered.
149
+ * console:
150
+ Hopefully encapsulates the OS dependent stuff.
151
+ * pos:
152
+ A 0-based index into `buffer' for where the insertion point
153
+ is.
154
+ * screeninfo:
155
+ Ahem. This list contains some info needed to move the
156
+ insertion point around reasonably efficiently.
157
+ * cxy, lxy:
158
+ the position of the insertion point in screen ...
159
+ * syntax_table:
160
+ Dictionary mapping characters to `syntax class'; read the
161
+ emacs docs to see what this means :-)
162
+ * commands:
163
+ Dictionary mapping command names to command classes.
164
+ * arg:
165
+ The emacs-style prefix argument. It will be None if no such
166
+ argument has been provided.
167
+ * dirty:
168
+ True if we need to refresh the display.
169
+ * kill_ring:
170
+ The emacs-style kill-ring; manipulated with yank & yank-pop
171
+ * ps1, ps2, ps3, ps4:
172
+ prompts. ps1 is the prompt for a one-line input; for a
173
+ multiline input it looks like:
174
+ ps2> first line of input goes here
175
+ ps3> second and further
176
+ ps3> lines get ps3
177
+ ...
178
+ ps4> and the last one gets ps4
179
+ As with the usual top-level, you can set these to instances if
180
+ you like; str() will be called on them (once) at the beginning
181
+ of each command. Don't put really long or newline containing
182
+ strings here, please!
183
+ This is just the default policy; you can change it freely by
184
+ overriding get_prompt() (and indeed some standard subclasses
185
+ do).
186
+ * finished:
187
+ handle1 will set this to a true value if a command signals
188
+ that we're done.
189
+ """
190
+
191
+ console: console.Console
192
+
193
+ ## state
194
+ buffer: list[str] = field(default_factory=list)
195
+ pos: int = 0
196
+ ps1: str = "->> "
197
+ ps2: str = "/>> "
198
+ ps3: str = "|.. "
199
+ ps4: str = R"\__ "
200
+ kill_ring: list[list[str]] = field(default_factory=list)
201
+ msg: str = ""
202
+ arg: int | None = None
203
+ dirty: bool = False
204
+ finished: bool = False
205
+ paste_mode: bool = False
206
+ in_bracketed_paste: bool = False
207
+ commands: dict[str, type[Command]] = field(default_factory=make_default_commands)
208
+ last_command: type[Command] | None = None
209
+ syntax_table: dict[str, int] = field(default_factory=make_default_syntax_table)
210
+ keymap: tuple[tuple[str, str], ...] = ()
211
+ input_trans: input.KeymapTranslator = field(init=False)
212
+ input_trans_stack: list[input.KeymapTranslator] = field(default_factory=list)
213
+ screen: list[str] = field(default_factory=list)
214
+ screeninfo: list[tuple[int, list[int]]] = field(init=False)
215
+ cxy: tuple[int, int] = field(init=False)
216
+ lxy: tuple[int, int] = field(init=False)
217
+ scheduled_commands: list[str] = field(default_factory=list)
218
+ can_colorize: bool = False
219
+ threading_hook: Callback | None = None
220
+
221
+ ## cached metadata to speed up screen refreshes
222
+ @dataclass
223
+ class RefreshCache:
224
+ in_bracketed_paste: bool = False
225
+ screen: list[str] = field(default_factory=list)
226
+ screeninfo: list[tuple[int, list[int]]] = field(init=False)
227
+ line_end_offsets: list[int] = field(default_factory=list)
228
+ pos: int = field(init=False)
229
+ cxy: tuple[int, int] = field(init=False)
230
+ dimensions: tuple[int, int] = field(init=False)
231
+ invalidated: bool = False
232
+
233
+ def update_cache(self,
234
+ reader: Reader,
235
+ screen: list[str],
236
+ screeninfo: list[tuple[int, list[int]]],
237
+ ) -> None:
238
+ self.in_bracketed_paste = reader.in_bracketed_paste
239
+ self.screen = screen.copy()
240
+ self.screeninfo = screeninfo.copy()
241
+ self.pos = reader.pos
242
+ self.cxy = reader.cxy
243
+ self.dimensions = reader.console.width, reader.console.height
244
+ self.invalidated = False
245
+
246
+ def valid(self, reader: Reader) -> bool:
247
+ if self.invalidated:
248
+ return False
249
+ dimensions = reader.console.width, reader.console.height
250
+ dimensions_changed = dimensions != self.dimensions
251
+ paste_changed = reader.in_bracketed_paste != self.in_bracketed_paste
252
+ return not (dimensions_changed or paste_changed)
253
+
254
+ def get_cached_location(self, reader: Reader) -> tuple[int, int]:
255
+ if self.invalidated:
256
+ raise ValueError("Cache is invalidated")
257
+ offset = 0
258
+ earliest_common_pos = min(reader.pos, self.pos)
259
+ num_common_lines = len(self.line_end_offsets)
260
+ while num_common_lines > 0:
261
+ offset = self.line_end_offsets[num_common_lines - 1]
262
+ if earliest_common_pos > offset:
263
+ break
264
+ num_common_lines -= 1
265
+ else:
266
+ offset = 0
267
+ return offset, num_common_lines
268
+
269
+ last_refresh_cache: RefreshCache = field(default_factory=RefreshCache)
270
+
271
+ def __post_init__(self) -> None:
272
+ # Enable the use of `insert` without a `prepare` call - necessary to
273
+ # facilitate the tab completion hack implemented for
274
+ # <https://bugs.python.org/issue25660>.
275
+ self.keymap = self.collect_keymap()
276
+ self.input_trans = input.KeymapTranslator(
277
+ self.keymap, invalid_cls="invalid-key", character_cls="self-insert"
278
+ )
279
+ self.screeninfo = [(0, [])]
280
+ self.cxy = self.pos2xy()
281
+ self.lxy = (self.pos, 0)
282
+ self.can_colorize = can_colorize()
283
+
284
+ self.last_refresh_cache.screeninfo = self.screeninfo
285
+ self.last_refresh_cache.pos = self.pos
286
+ self.last_refresh_cache.cxy = self.cxy
287
+ self.last_refresh_cache.dimensions = (0, 0)
288
+
289
+ def collect_keymap(self) -> tuple[tuple[KeySpec, CommandName], ...]:
290
+ return default_keymap
291
+
292
+ def calc_screen(self) -> list[str]:
293
+ """Translate changes in self.buffer into changes in self.console.screen."""
294
+ # Since the last call to calc_screen:
295
+ # screen and screeninfo may differ due to a completion menu being shown
296
+ # pos and cxy may differ due to edits, cursor movements, or completion menus
297
+
298
+ # Lines that are above both the old and new cursor position can't have changed,
299
+ # unless the terminal has been resized (which might cause reflowing) or we've
300
+ # entered or left paste mode (which changes prompts, causing reflowing).
301
+ num_common_lines = 0
302
+ offset = 0
303
+ if self.last_refresh_cache.valid(self):
304
+ offset, num_common_lines = self.last_refresh_cache.get_cached_location(self)
305
+
306
+ screen = self.last_refresh_cache.screen
307
+ del screen[num_common_lines:]
308
+
309
+ screeninfo = self.last_refresh_cache.screeninfo
310
+ del screeninfo[num_common_lines:]
311
+
312
+ last_refresh_line_end_offsets = self.last_refresh_cache.line_end_offsets
313
+ del last_refresh_line_end_offsets[num_common_lines:]
314
+
315
+ pos = self.pos
316
+ pos -= offset
317
+
318
+ prompt_from_cache = (offset and self.buffer[offset - 1] != "\n")
319
+ lines = "".join(self.buffer[offset:]).split("\n")
320
+ cursor_found = False
321
+ lines_beyond_cursor = 0
322
+ for ln, line in enumerate(lines, num_common_lines):
323
+ line_len = len(line)
324
+ if 0 <= pos <= line_len:
325
+ self.lxy = pos, ln
326
+ cursor_found = True
327
+ elif cursor_found:
328
+ lines_beyond_cursor += 1
329
+ if lines_beyond_cursor > self.console.height:
330
+ # No need to keep formatting lines.
331
+ # The console can't show them.
332
+ break
333
+ if prompt_from_cache:
334
+ # Only the first line's prompt can come from the cache
335
+ prompt_from_cache = False
336
+ prompt = ""
337
+ else:
338
+ prompt = self.get_prompt(ln, line_len >= pos >= 0)
339
+ while "\n" in prompt:
340
+ pre_prompt, _, prompt = prompt.partition("\n")
341
+ last_refresh_line_end_offsets.append(offset)
342
+ screen.append(pre_prompt)
343
+ screeninfo.append((0, []))
344
+ pos -= line_len + 1
345
+ prompt, prompt_len = self.process_prompt(prompt)
346
+ chars, char_widths = disp_str(line)
347
+ wrapcount = (sum(char_widths) + prompt_len) // self.console.width
348
+ trace("wrapcount = {wrapcount}", wrapcount=wrapcount)
349
+ if wrapcount == 0 or not char_widths:
350
+ offset += line_len + 1 # Takes all of the line plus the newline
351
+ last_refresh_line_end_offsets.append(offset)
352
+ screen.append(prompt + "".join(chars))
353
+ screeninfo.append((prompt_len, char_widths))
354
+ else:
355
+ pre = prompt
356
+ prelen = prompt_len
357
+ for wrap in range(wrapcount + 1):
358
+ index_to_wrap_before = 0
359
+ column = 0
360
+ for char_width in char_widths:
361
+ if column + char_width + prelen >= self.console.width:
362
+ break
363
+ index_to_wrap_before += 1
364
+ column += char_width
365
+ if len(chars) > index_to_wrap_before:
366
+ offset += index_to_wrap_before
367
+ post = "\\"
368
+ after = [1]
369
+ else:
370
+ offset += index_to_wrap_before + 1 # Takes the newline
371
+ post = ""
372
+ after = []
373
+ last_refresh_line_end_offsets.append(offset)
374
+ render = pre + "".join(chars[:index_to_wrap_before]) + post
375
+ render_widths = char_widths[:index_to_wrap_before] + after
376
+ screen.append(render)
377
+ screeninfo.append((prelen, render_widths))
378
+ chars = chars[index_to_wrap_before:]
379
+ char_widths = char_widths[index_to_wrap_before:]
380
+ pre = ""
381
+ prelen = 0
382
+ self.screeninfo = screeninfo
383
+ self.cxy = self.pos2xy()
384
+ if self.msg:
385
+ for mline in self.msg.split("\n"):
386
+ screen.append(mline)
387
+ screeninfo.append((0, []))
388
+
389
+ self.last_refresh_cache.update_cache(self, screen, screeninfo)
390
+ return screen
391
+
392
+ @staticmethod
393
+ def process_prompt(prompt: str) -> tuple[str, int]:
394
+ r"""Return a tuple with the prompt string and its visible length.
395
+
396
+ The prompt string has the zero-width brackets recognized by shells
397
+ (\x01 and \x02) removed. The length ignores anything between those
398
+ brackets as well as any ANSI escape sequences.
399
+ """
400
+ out_prompt = unbracket(prompt, including_content=False)
401
+ visible_prompt = unbracket(prompt, including_content=True)
402
+ return out_prompt, wlen(visible_prompt)
403
+
404
+ def bow(self, p: int | None = None) -> int:
405
+ """Return the 0-based index of the word break preceding p most
406
+ immediately.
407
+
408
+ p defaults to self.pos; word boundaries are determined using
409
+ self.syntax_table."""
410
+ if p is None:
411
+ p = self.pos
412
+ st = self.syntax_table
413
+ b = self.buffer
414
+ p -= 1
415
+ while p >= 0 and st.get(b[p], SYNTAX_WORD) != SYNTAX_WORD:
416
+ p -= 1
417
+ while p >= 0 and st.get(b[p], SYNTAX_WORD) == SYNTAX_WORD:
418
+ p -= 1
419
+ return p + 1
420
+
421
+ def eow(self, p: int | None = None) -> int:
422
+ """Return the 0-based index of the word break following p most
423
+ immediately.
424
+
425
+ p defaults to self.pos; word boundaries are determined using
426
+ self.syntax_table."""
427
+ if p is None:
428
+ p = self.pos
429
+ st = self.syntax_table
430
+ b = self.buffer
431
+ while p < len(b) and st.get(b[p], SYNTAX_WORD) != SYNTAX_WORD:
432
+ p += 1
433
+ while p < len(b) and st.get(b[p], SYNTAX_WORD) == SYNTAX_WORD:
434
+ p += 1
435
+ return p
436
+
437
+ def bol(self, p: int | None = None) -> int:
438
+ """Return the 0-based index of the line break preceding p most
439
+ immediately.
440
+
441
+ p defaults to self.pos."""
442
+ if p is None:
443
+ p = self.pos
444
+ b = self.buffer
445
+ p -= 1
446
+ while p >= 0 and b[p] != "\n":
447
+ p -= 1
448
+ return p + 1
449
+
450
+ def eol(self, p: int | None = None) -> int:
451
+ """Return the 0-based index of the line break following p most
452
+ immediately.
453
+
454
+ p defaults to self.pos."""
455
+ if p is None:
456
+ p = self.pos
457
+ b = self.buffer
458
+ while p < len(b) and b[p] != "\n":
459
+ p += 1
460
+ return p
461
+
462
+ def max_column(self, y: int) -> int:
463
+ """Return the last x-offset for line y"""
464
+ return self.screeninfo[y][0] + sum(self.screeninfo[y][1])
465
+
466
+ def max_row(self) -> int:
467
+ return len(self.screeninfo) - 1
468
+
469
+ def get_arg(self, default: int = 1) -> int:
470
+ """Return any prefix argument that the user has supplied,
471
+ returning `default' if there is None. Defaults to 1.
472
+ """
473
+ if self.arg is None:
474
+ return default
475
+ return self.arg
476
+
477
+ def get_prompt(self, lineno: int, cursor_on_line: bool) -> str:
478
+ """Return what should be in the left-hand margin for line
479
+ `lineno'."""
480
+ if self.arg is not None and cursor_on_line:
481
+ prompt = f"(arg: {self.arg}) "
482
+ elif self.paste_mode and not self.in_bracketed_paste:
483
+ prompt = "(paste) "
484
+ elif "\n" in self.buffer:
485
+ if lineno == 0:
486
+ prompt = self.ps2
487
+ elif self.ps4 and lineno == self.buffer.count("\n"):
488
+ prompt = self.ps4
489
+ else:
490
+ prompt = self.ps3
491
+ else:
492
+ prompt = self.ps1
493
+
494
+ if self.can_colorize:
495
+ prompt = f"{ANSIColors.BOLD_MAGENTA}{prompt}{ANSIColors.RESET}"
496
+ return prompt
497
+
498
+ def push_input_trans(self, itrans: input.KeymapTranslator) -> None:
499
+ self.input_trans_stack.append(self.input_trans)
500
+ self.input_trans = itrans
501
+
502
+ def pop_input_trans(self) -> None:
503
+ self.input_trans = self.input_trans_stack.pop()
504
+
505
+ def setpos_from_xy(self, x: int, y: int) -> None:
506
+ """Set pos according to coordinates x, y"""
507
+ pos = 0
508
+ i = 0
509
+ while i < y:
510
+ prompt_len, char_widths = self.screeninfo[i]
511
+ offset = len(char_widths)
512
+ in_wrapped_line = prompt_len + sum(char_widths) >= self.console.width
513
+ if in_wrapped_line:
514
+ pos += offset - 1 # -1 cause backslash is not in buffer
515
+ else:
516
+ pos += offset + 1 # +1 cause newline is in buffer
517
+ i += 1
518
+
519
+ j = 0
520
+ cur_x = self.screeninfo[i][0]
521
+ while cur_x < x:
522
+ if self.screeninfo[i][1][j] == 0:
523
+ j += 1 # prevent potential future infinite loop
524
+ continue
525
+ cur_x += self.screeninfo[i][1][j]
526
+ j += 1
527
+ pos += 1
528
+
529
+ self.pos = pos
530
+
531
+ def pos2xy(self) -> tuple[int, int]:
532
+ """Return the x, y coordinates of position 'pos'."""
533
+
534
+ prompt_len, y = 0, 0
535
+ char_widths: list[int] = []
536
+ pos = self.pos
537
+ assert 0 <= pos <= len(self.buffer)
538
+
539
+ # optimize for the common case: typing at the end of the buffer
540
+ if pos == len(self.buffer) and len(self.screeninfo) > 0:
541
+ y = len(self.screeninfo) - 1
542
+ prompt_len, char_widths = self.screeninfo[y]
543
+ return prompt_len + sum(char_widths), y
544
+
545
+ for prompt_len, char_widths in self.screeninfo:
546
+ offset = len(char_widths)
547
+ in_wrapped_line = prompt_len + sum(char_widths) >= self.console.width
548
+ if in_wrapped_line:
549
+ offset -= 1 # need to remove line-wrapping backslash
550
+
551
+ if offset >= pos:
552
+ break
553
+
554
+ if not in_wrapped_line:
555
+ offset += 1 # there's a newline in buffer
556
+
557
+ pos -= offset
558
+ y += 1
559
+ return prompt_len + sum(char_widths[:pos]), y
560
+
561
+ def insert(self, text: str | list[str]) -> None:
562
+ """Insert 'text' at the insertion point."""
563
+ self.buffer[self.pos : self.pos] = list(text)
564
+ self.pos += len(text)
565
+ self.dirty = True
566
+
567
+ def update_cursor(self) -> None:
568
+ """Move the cursor to reflect changes in self.pos"""
569
+ self.cxy = self.pos2xy()
570
+ self.console.move_cursor(*self.cxy)
571
+
572
+ def after_command(self, cmd: Command) -> None:
573
+ """This function is called to allow post command cleanup."""
574
+ if getattr(cmd, "kills_digit_arg", True):
575
+ if self.arg is not None:
576
+ self.dirty = True
577
+ self.arg = None
578
+
579
+ def prepare(self) -> None:
580
+ """Get ready to run. Call restore when finished. You must not
581
+ write to the console in between the calls to prepare and
582
+ restore."""
583
+ try:
584
+ self.console.prepare()
585
+ self.arg = None
586
+ self.finished = False
587
+ del self.buffer[:]
588
+ self.pos = 0
589
+ self.dirty = True
590
+ self.last_command = None
591
+ self.calc_screen()
592
+ except BaseException:
593
+ self.restore()
594
+ raise
595
+
596
+ while self.scheduled_commands:
597
+ cmd = self.scheduled_commands.pop()
598
+ self.do_cmd((cmd, []))
599
+
600
+ def last_command_is(self, cls: type) -> bool:
601
+ if not self.last_command:
602
+ return False
603
+ return issubclass(cls, self.last_command)
604
+
605
+ def restore(self) -> None:
606
+ """Clean up after a run."""
607
+ self.console.restore()
608
+
609
+ @contextmanager
610
+ def suspend(self) -> SimpleContextManager:
611
+ """A context manager to delegate to another reader."""
612
+ prev_state = {f.name: getattr(self, f.name) for f in fields(self)}
613
+ try:
614
+ self.restore()
615
+ yield
616
+ finally:
617
+ for arg in ("msg", "ps1", "ps2", "ps3", "ps4", "paste_mode"):
618
+ setattr(self, arg, prev_state[arg])
619
+ self.prepare()
620
+
621
+ def finish(self) -> None:
622
+ """Called when a command signals that we're finished."""
623
+ pass
624
+
625
+ def error(self, msg: str = "none") -> None:
626
+ self.msg = "! " + msg + " "
627
+ self.dirty = True
628
+ self.console.beep()
629
+
630
+ def update_screen(self) -> None:
631
+ if self.dirty:
632
+ self.refresh()
633
+
634
+ def refresh(self) -> None:
635
+ """Recalculate and refresh the screen."""
636
+ if self.in_bracketed_paste and self.buffer and not self.buffer[-1] == "\n":
637
+ return
638
+
639
+ # this call sets up self.cxy, so call it first.
640
+ self.screen = self.calc_screen()
641
+ self.console.refresh(self.screen, self.cxy)
642
+ self.dirty = False
643
+
644
+ def do_cmd(self, cmd: tuple[str, list[str]]) -> None:
645
+ """`cmd` is a tuple of "event_name" and "event", which in the current
646
+ implementation is always just the "buffer" which happens to be a list
647
+ of single-character strings."""
648
+
649
+ trace("received command {cmd}", cmd=cmd)
650
+ if isinstance(cmd[0], str):
651
+ command_type = self.commands.get(cmd[0], commands.invalid_command)
652
+ elif isinstance(cmd[0], type):
653
+ command_type = cmd[0]
654
+ else:
655
+ return # nothing to do
656
+
657
+ command = command_type(self, *cmd) # type: ignore[arg-type]
658
+ command.do()
659
+
660
+ self.after_command(command)
661
+
662
+ if self.dirty:
663
+ self.refresh()
664
+ else:
665
+ self.update_cursor()
666
+
667
+ if not isinstance(cmd, commands.digit_arg):
668
+ self.last_command = command_type
669
+
670
+ self.finished = bool(command.finish)
671
+ if self.finished:
672
+ self.console.finish()
673
+ self.finish()
674
+
675
+ def run_hooks(self) -> None:
676
+ threading_hook = self.threading_hook
677
+ if threading_hook is None and 'threading' in sys.modules:
678
+ from ._threading_handler import install_threading_hook
679
+ install_threading_hook(self)
680
+ if threading_hook is not None:
681
+ try:
682
+ threading_hook()
683
+ except Exception:
684
+ pass
685
+
686
+ input_hook = self.console.input_hook
687
+ if input_hook:
688
+ try:
689
+ input_hook()
690
+ except Exception:
691
+ pass
692
+
693
+ def handle1(self, block: bool = True) -> bool:
694
+ """Handle a single event. Wait as long as it takes if block
695
+ is true (the default), otherwise return False if no event is
696
+ pending."""
697
+
698
+ if self.msg:
699
+ self.msg = ""
700
+ self.dirty = True
701
+
702
+ while True:
703
+ # We use the same timeout as in readline.c: 100ms
704
+ self.run_hooks()
705
+ self.console.wait(100)
706
+ event = self.console.get_event(block=False)
707
+ if not event:
708
+ if block:
709
+ continue
710
+ return False
711
+
712
+ translate = True
713
+
714
+ if event.evt == "key":
715
+ self.input_trans.push(event)
716
+ elif event.evt == "scroll":
717
+ self.refresh()
718
+ elif event.evt == "resize":
719
+ self.refresh()
720
+ else:
721
+ translate = False
722
+
723
+ if translate:
724
+ cmd = self.input_trans.get()
725
+ else:
726
+ cmd = [event.evt, event.data]
727
+
728
+ if cmd is None:
729
+ if block:
730
+ continue
731
+ return False
732
+
733
+ self.do_cmd(cmd)
734
+ return True
735
+
736
+ def push_char(self, char: int | bytes) -> None:
737
+ self.console.push_char(char)
738
+ self.handle1(block=False)
739
+
740
+ def readline(self, startup_hook: Callback | None = None) -> str:
741
+ """Read a line. The implementation of this method also shows
742
+ how to drive Reader if you want more control over the event
743
+ loop."""
744
+ self.prepare()
745
+ try:
746
+ if startup_hook is not None:
747
+ startup_hook()
748
+ self.refresh()
749
+ while not self.finished:
750
+ self.handle1()
751
+ return self.get_unicode()
752
+
753
+ finally:
754
+ self.restore()
755
+
756
+ def bind(self, spec: KeySpec, command: CommandName) -> None:
757
+ self.keymap = self.keymap + ((spec, command),)
758
+ self.input_trans = input.KeymapTranslator(
759
+ self.keymap, invalid_cls="invalid-key", character_cls="self-insert"
760
+ )
761
+
762
+ def get_unicode(self) -> str:
763
+ """Return the current buffer as a unicode string."""
764
+ return "".join(self.buffer)