@rowstile/cli-win32-x64 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +5 -0
  3. package/package.json +23 -0
  4. package/python/DLLs/_asyncio.pyd +0 -0
  5. package/python/DLLs/_bz2.pyd +0 -0
  6. package/python/DLLs/_ctypes.pyd +0 -0
  7. package/python/DLLs/_ctypes_test.pyd +0 -0
  8. package/python/DLLs/_decimal.pyd +0 -0
  9. package/python/DLLs/_elementtree.pyd +0 -0
  10. package/python/DLLs/_hashlib.pyd +0 -0
  11. package/python/DLLs/_lzma.pyd +0 -0
  12. package/python/DLLs/_multiprocessing.pyd +0 -0
  13. package/python/DLLs/_overlapped.pyd +0 -0
  14. package/python/DLLs/_queue.pyd +0 -0
  15. package/python/DLLs/_socket.pyd +0 -0
  16. package/python/DLLs/_sqlite3.pyd +0 -0
  17. package/python/DLLs/_ssl.pyd +0 -0
  18. package/python/DLLs/_testbuffer.pyd +0 -0
  19. package/python/DLLs/_testcapi.pyd +0 -0
  20. package/python/DLLs/_testclinic.pyd +0 -0
  21. package/python/DLLs/_testclinic_limited.pyd +0 -0
  22. package/python/DLLs/_testconsole.pyd +0 -0
  23. package/python/DLLs/_testimportmultiple.pyd +0 -0
  24. package/python/DLLs/_testinternalcapi.pyd +0 -0
  25. package/python/DLLs/_testlimitedcapi.pyd +0 -0
  26. package/python/DLLs/_testmultiphase.pyd +0 -0
  27. package/python/DLLs/_testsinglephase.pyd +0 -0
  28. package/python/DLLs/_uuid.pyd +0 -0
  29. package/python/DLLs/_wmi.pyd +0 -0
  30. package/python/DLLs/_zoneinfo.pyd +0 -0
  31. package/python/DLLs/libcrypto-3-x64.dll +0 -0
  32. package/python/DLLs/libffi-8.dll +0 -0
  33. package/python/DLLs/libssl-3-x64.dll +0 -0
  34. package/python/DLLs/pyexpat.pyd +0 -0
  35. package/python/DLLs/select.pyd +0 -0
  36. package/python/DLLs/sqlite3.dll +0 -0
  37. package/python/DLLs/unicodedata.pyd +0 -0
  38. package/python/DLLs/winsound.pyd +0 -0
  39. package/python/DLLs/zlib1.dll +0 -0
  40. package/python/LICENSE.txt +445 -0
  41. package/python/Lib/__future__.py +147 -0
  42. package/python/Lib/__hello__.py +16 -0
  43. package/python/Lib/__pycache__/__future__.cpython-313.pyc +0 -0
  44. package/python/Lib/__pycache__/_colorize.cpython-313.pyc +0 -0
  45. package/python/Lib/__pycache__/_compat_pickle.cpython-313.pyc +0 -0
  46. package/python/Lib/__pycache__/_compression.cpython-313.pyc +0 -0
  47. package/python/Lib/__pycache__/_markupbase.cpython-313.pyc +0 -0
  48. package/python/Lib/__pycache__/_opcode_metadata.cpython-313.pyc +0 -0
  49. package/python/Lib/__pycache__/_weakrefset.cpython-313.pyc +0 -0
  50. package/python/Lib/__pycache__/ast.cpython-313.pyc +0 -0
  51. package/python/Lib/__pycache__/base64.cpython-313.pyc +0 -0
  52. package/python/Lib/__pycache__/bisect.cpython-313.pyc +0 -0
  53. package/python/Lib/__pycache__/bz2.cpython-313.pyc +0 -0
  54. package/python/Lib/__pycache__/calendar.cpython-313.pyc +0 -0
  55. package/python/Lib/__pycache__/colorsys.cpython-313.pyc +0 -0
  56. package/python/Lib/__pycache__/compileall.cpython-313.pyc +0 -0
  57. package/python/Lib/__pycache__/configparser.cpython-313.pyc +0 -0
  58. package/python/Lib/__pycache__/contextlib.cpython-313.pyc +0 -0
  59. package/python/Lib/__pycache__/copy.cpython-313.pyc +0 -0
  60. package/python/Lib/__pycache__/copyreg.cpython-313.pyc +0 -0
  61. package/python/Lib/__pycache__/csv.cpython-313.pyc +0 -0
  62. package/python/Lib/__pycache__/dataclasses.cpython-313.pyc +0 -0
  63. package/python/Lib/__pycache__/datetime.cpython-313.pyc +0 -0
  64. package/python/Lib/__pycache__/decimal.cpython-313.pyc +0 -0
  65. package/python/Lib/__pycache__/dis.cpython-313.pyc +0 -0
  66. package/python/Lib/__pycache__/enum.cpython-313.pyc +0 -0
  67. package/python/Lib/__pycache__/filecmp.cpython-313.pyc +0 -0
  68. package/python/Lib/__pycache__/fnmatch.cpython-313.pyc +0 -0
  69. package/python/Lib/__pycache__/fractions.cpython-313.pyc +0 -0
  70. package/python/Lib/__pycache__/functools.cpython-313.pyc +0 -0
  71. package/python/Lib/__pycache__/getpass.cpython-313.pyc +0 -0
  72. package/python/Lib/__pycache__/gettext.cpython-313.pyc +0 -0
  73. package/python/Lib/__pycache__/glob.cpython-313.pyc +0 -0
  74. package/python/Lib/__pycache__/gzip.cpython-313.pyc +0 -0
  75. package/python/Lib/__pycache__/hashlib.cpython-313.pyc +0 -0
  76. package/python/Lib/__pycache__/heapq.cpython-313.pyc +0 -0
  77. package/python/Lib/__pycache__/hmac.cpython-313.pyc +0 -0
  78. package/python/Lib/__pycache__/inspect.cpython-313.pyc +0 -0
  79. package/python/Lib/__pycache__/ipaddress.cpython-313.pyc +0 -0
  80. package/python/Lib/__pycache__/keyword.cpython-313.pyc +0 -0
  81. package/python/Lib/__pycache__/linecache.cpython-313.pyc +0 -0
  82. package/python/Lib/__pycache__/locale.cpython-313.pyc +0 -0
  83. package/python/Lib/__pycache__/lzma.cpython-313.pyc +0 -0
  84. package/python/Lib/__pycache__/mimetypes.cpython-313.pyc +0 -0
  85. package/python/Lib/__pycache__/nturl2path.cpython-313.pyc +0 -0
  86. package/python/Lib/__pycache__/numbers.cpython-313.pyc +0 -0
  87. package/python/Lib/__pycache__/opcode.cpython-313.pyc +0 -0
  88. package/python/Lib/__pycache__/operator.cpython-313.pyc +0 -0
  89. package/python/Lib/__pycache__/optparse.cpython-313.pyc +0 -0
  90. package/python/Lib/__pycache__/pickle.cpython-313.pyc +0 -0
  91. package/python/Lib/__pycache__/pkgutil.cpython-313.pyc +0 -0
  92. package/python/Lib/__pycache__/platform.cpython-313.pyc +0 -0
  93. package/python/Lib/__pycache__/py_compile.cpython-313.pyc +0 -0
  94. package/python/Lib/__pycache__/queue.cpython-313.pyc +0 -0
  95. package/python/Lib/__pycache__/quopri.cpython-313.pyc +0 -0
  96. package/python/Lib/__pycache__/random.cpython-313.pyc +0 -0
  97. package/python/Lib/__pycache__/reprlib.cpython-313.pyc +0 -0
  98. package/python/Lib/__pycache__/selectors.cpython-313.pyc +0 -0
  99. package/python/Lib/__pycache__/shlex.cpython-313.pyc +0 -0
  100. package/python/Lib/__pycache__/shutil.cpython-313.pyc +0 -0
  101. package/python/Lib/__pycache__/signal.cpython-313.pyc +0 -0
  102. package/python/Lib/__pycache__/socket.cpython-313.pyc +0 -0
  103. package/python/Lib/__pycache__/socketserver.cpython-313.pyc +0 -0
  104. package/python/Lib/__pycache__/ssl.cpython-313.pyc +0 -0
  105. package/python/Lib/__pycache__/string.cpython-313.pyc +0 -0
  106. package/python/Lib/__pycache__/stringprep.cpython-313.pyc +0 -0
  107. package/python/Lib/__pycache__/struct.cpython-313.pyc +0 -0
  108. package/python/Lib/__pycache__/subprocess.cpython-313.pyc +0 -0
  109. package/python/Lib/__pycache__/tarfile.cpython-313.pyc +0 -0
  110. package/python/Lib/__pycache__/tempfile.cpython-313.pyc +0 -0
  111. package/python/Lib/__pycache__/textwrap.cpython-313.pyc +0 -0
  112. package/python/Lib/__pycache__/threading.cpython-313.pyc +0 -0
  113. package/python/Lib/__pycache__/token.cpython-313.pyc +0 -0
  114. package/python/Lib/__pycache__/tokenize.cpython-313.pyc +0 -0
  115. package/python/Lib/__pycache__/traceback.cpython-313.pyc +0 -0
  116. package/python/Lib/__pycache__/types.cpython-313.pyc +0 -0
  117. package/python/Lib/__pycache__/typing.cpython-313.pyc +0 -0
  118. package/python/Lib/__pycache__/uuid.cpython-313.pyc +0 -0
  119. package/python/Lib/__pycache__/warnings.cpython-313.pyc +0 -0
  120. package/python/Lib/__pycache__/weakref.cpython-313.pyc +0 -0
  121. package/python/Lib/_aix_support.py +108 -0
  122. package/python/Lib/_android_support.py +192 -0
  123. package/python/Lib/_apple_support.py +66 -0
  124. package/python/Lib/_collections_abc.py +1187 -0
  125. package/python/Lib/_colorize.py +119 -0
  126. package/python/Lib/_compat_pickle.py +251 -0
  127. package/python/Lib/_compression.py +162 -0
  128. package/python/Lib/_ios_support.py +71 -0
  129. package/python/Lib/_markupbase.py +396 -0
  130. package/python/Lib/_opcode_metadata.py +343 -0
  131. package/python/Lib/_osx_support.py +579 -0
  132. package/python/Lib/_py_abc.py +147 -0
  133. package/python/Lib/_pydatetime.py +2640 -0
  134. package/python/Lib/_pydecimal.py +6356 -0
  135. package/python/Lib/_pyio.py +2714 -0
  136. package/python/Lib/_pylong.py +363 -0
  137. package/python/Lib/_pyrepl/__init__.py +19 -0
  138. package/python/Lib/_pyrepl/__main__.py +10 -0
  139. package/python/Lib/_pyrepl/_minimal_curses.py +68 -0
  140. package/python/Lib/_pyrepl/_threading_handler.py +74 -0
  141. package/python/Lib/_pyrepl/base_eventqueue.py +110 -0
  142. package/python/Lib/_pyrepl/commands.py +492 -0
  143. package/python/Lib/_pyrepl/completing_reader.py +295 -0
  144. package/python/Lib/_pyrepl/console.py +229 -0
  145. package/python/Lib/_pyrepl/curses.py +33 -0
  146. package/python/Lib/_pyrepl/fancy_termios.py +82 -0
  147. package/python/Lib/_pyrepl/historical_reader.py +419 -0
  148. package/python/Lib/_pyrepl/input.py +114 -0
  149. package/python/Lib/_pyrepl/keymap.py +213 -0
  150. package/python/Lib/_pyrepl/main.py +59 -0
  151. package/python/Lib/_pyrepl/mypy.ini +29 -0
  152. package/python/Lib/_pyrepl/pager.py +175 -0
  153. package/python/Lib/_pyrepl/reader.py +764 -0
  154. package/python/Lib/_pyrepl/readline.py +599 -0
  155. package/python/Lib/_pyrepl/simple_interact.py +180 -0
  156. package/python/Lib/_pyrepl/trace.py +21 -0
  157. package/python/Lib/_pyrepl/types.py +10 -0
  158. package/python/Lib/_pyrepl/unix_console.py +852 -0
  159. package/python/Lib/_pyrepl/unix_eventqueue.py +76 -0
  160. package/python/Lib/_pyrepl/utils.py +83 -0
  161. package/python/Lib/_pyrepl/windows_console.py +687 -0
  162. package/python/Lib/_pyrepl/windows_eventqueue.py +42 -0
  163. package/python/Lib/_sitebuiltins.py +91 -0
  164. package/python/Lib/_strptime.py +800 -0
  165. package/python/Lib/_threading_local.py +120 -0
  166. package/python/Lib/_weakrefset.py +205 -0
  167. package/python/Lib/abc.py +188 -0
  168. package/python/Lib/antigravity.py +17 -0
  169. package/python/Lib/argparse.py +2690 -0
  170. package/python/Lib/ast.py +1865 -0
  171. package/python/Lib/asyncio/__init__.py +47 -0
  172. package/python/Lib/asyncio/__main__.py +211 -0
  173. package/python/Lib/asyncio/base_events.py +2086 -0
  174. package/python/Lib/asyncio/base_futures.py +67 -0
  175. package/python/Lib/asyncio/base_subprocess.py +312 -0
  176. package/python/Lib/asyncio/base_tasks.py +94 -0
  177. package/python/Lib/asyncio/constants.py +41 -0
  178. package/python/Lib/asyncio/coroutines.py +109 -0
  179. package/python/Lib/asyncio/events.py +885 -0
  180. package/python/Lib/asyncio/exceptions.py +62 -0
  181. package/python/Lib/asyncio/format_helpers.py +84 -0
  182. package/python/Lib/asyncio/futures.py +425 -0
  183. package/python/Lib/asyncio/locks.py +617 -0
  184. package/python/Lib/asyncio/log.py +7 -0
  185. package/python/Lib/asyncio/mixins.py +21 -0
  186. package/python/Lib/asyncio/proactor_events.py +891 -0
  187. package/python/Lib/asyncio/protocols.py +216 -0
  188. package/python/Lib/asyncio/queues.py +309 -0
  189. package/python/Lib/asyncio/runners.py +217 -0
  190. package/python/Lib/asyncio/selector_events.py +1328 -0
  191. package/python/Lib/asyncio/sslproto.py +929 -0
  192. package/python/Lib/asyncio/staggered.py +174 -0
  193. package/python/Lib/asyncio/streams.py +787 -0
  194. package/python/Lib/asyncio/subprocess.py +229 -0
  195. package/python/Lib/asyncio/taskgroups.py +278 -0
  196. package/python/Lib/asyncio/tasks.py +1121 -0
  197. package/python/Lib/asyncio/threads.py +26 -0
  198. package/python/Lib/asyncio/timeouts.py +185 -0
  199. package/python/Lib/asyncio/transports.py +337 -0
  200. package/python/Lib/asyncio/trsock.py +98 -0
  201. package/python/Lib/asyncio/unix_events.py +1550 -0
  202. package/python/Lib/asyncio/windows_events.py +906 -0
  203. package/python/Lib/asyncio/windows_utils.py +181 -0
  204. package/python/Lib/base64.py +628 -0
  205. package/python/Lib/bdb.py +973 -0
  206. package/python/Lib/bisect.py +118 -0
  207. package/python/Lib/bz2.py +352 -0
  208. package/python/Lib/cProfile.py +197 -0
  209. package/python/Lib/calendar.py +813 -0
  210. package/python/Lib/cmd.py +409 -0
  211. package/python/Lib/code.py +386 -0
  212. package/python/Lib/codecs.py +1132 -0
  213. package/python/Lib/codeop.py +155 -0
  214. package/python/Lib/collections/__init__.py +1603 -0
  215. package/python/Lib/collections/__pycache__/__init__.cpython-313.pyc +0 -0
  216. package/python/Lib/colorsys.py +166 -0
  217. package/python/Lib/compileall.py +470 -0
  218. package/python/Lib/concurrent/__init__.py +1 -0
  219. package/python/Lib/concurrent/futures/__init__.py +54 -0
  220. package/python/Lib/concurrent/futures/_base.py +660 -0
  221. package/python/Lib/concurrent/futures/process.py +892 -0
  222. package/python/Lib/concurrent/futures/thread.py +240 -0
  223. package/python/Lib/configparser.py +1396 -0
  224. package/python/Lib/contextlib.py +814 -0
  225. package/python/Lib/contextvars.py +4 -0
  226. package/python/Lib/copy.py +306 -0
  227. package/python/Lib/copyreg.py +217 -0
  228. package/python/Lib/csv.py +527 -0
  229. package/python/Lib/ctypes/__init__.py +602 -0
  230. package/python/Lib/ctypes/__pycache__/__init__.cpython-313.pyc +0 -0
  231. package/python/Lib/ctypes/__pycache__/_endian.cpython-313.pyc +0 -0
  232. package/python/Lib/ctypes/__pycache__/wintypes.cpython-313.pyc +0 -0
  233. package/python/Lib/ctypes/_aix.py +327 -0
  234. package/python/Lib/ctypes/_endian.py +78 -0
  235. package/python/Lib/ctypes/macholib/README.ctypes +7 -0
  236. package/python/Lib/ctypes/macholib/__init__.py +9 -0
  237. package/python/Lib/ctypes/macholib/dyld.py +165 -0
  238. package/python/Lib/ctypes/macholib/dylib.py +42 -0
  239. package/python/Lib/ctypes/macholib/fetch_macholib +2 -0
  240. package/python/Lib/ctypes/macholib/fetch_macholib.bat +1 -0
  241. package/python/Lib/ctypes/macholib/framework.py +42 -0
  242. package/python/Lib/ctypes/util.py +387 -0
  243. package/python/Lib/ctypes/wintypes.py +202 -0
  244. package/python/Lib/curses/__init__.py +101 -0
  245. package/python/Lib/curses/ascii.py +99 -0
  246. package/python/Lib/curses/has_key.py +192 -0
  247. package/python/Lib/curses/panel.py +6 -0
  248. package/python/Lib/curses/textpad.py +236 -0
  249. package/python/Lib/dataclasses.py +1679 -0
  250. package/python/Lib/datetime.py +9 -0
  251. package/python/Lib/dbm/__init__.py +194 -0
  252. package/python/Lib/dbm/dumb.py +319 -0
  253. package/python/Lib/dbm/gnu.py +3 -0
  254. package/python/Lib/dbm/ndbm.py +3 -0
  255. package/python/Lib/dbm/sqlite3.py +144 -0
  256. package/python/Lib/decimal.py +109 -0
  257. package/python/Lib/difflib.py +2058 -0
  258. package/python/Lib/dis.py +1075 -0
  259. package/python/Lib/doctest.py +2919 -0
  260. package/python/Lib/email/__init__.py +61 -0
  261. package/python/Lib/email/__pycache__/__init__.cpython-313.pyc +0 -0
  262. package/python/Lib/email/__pycache__/_encoded_words.cpython-313.pyc +0 -0
  263. package/python/Lib/email/__pycache__/_parseaddr.cpython-313.pyc +0 -0
  264. package/python/Lib/email/__pycache__/_policybase.cpython-313.pyc +0 -0
  265. package/python/Lib/email/__pycache__/base64mime.cpython-313.pyc +0 -0
  266. package/python/Lib/email/__pycache__/charset.cpython-313.pyc +0 -0
  267. package/python/Lib/email/__pycache__/encoders.cpython-313.pyc +0 -0
  268. package/python/Lib/email/__pycache__/errors.cpython-313.pyc +0 -0
  269. package/python/Lib/email/__pycache__/feedparser.cpython-313.pyc +0 -0
  270. package/python/Lib/email/__pycache__/header.cpython-313.pyc +0 -0
  271. package/python/Lib/email/__pycache__/iterators.cpython-313.pyc +0 -0
  272. package/python/Lib/email/__pycache__/message.cpython-313.pyc +0 -0
  273. package/python/Lib/email/__pycache__/parser.cpython-313.pyc +0 -0
  274. package/python/Lib/email/__pycache__/quoprimime.cpython-313.pyc +0 -0
  275. package/python/Lib/email/__pycache__/utils.cpython-313.pyc +0 -0
  276. package/python/Lib/email/_encoded_words.py +233 -0
  277. package/python/Lib/email/_header_value_parser.py +3153 -0
  278. package/python/Lib/email/_parseaddr.py +563 -0
  279. package/python/Lib/email/_policybase.py +382 -0
  280. package/python/Lib/email/architecture.rst +216 -0
  281. package/python/Lib/email/base64mime.py +115 -0
  282. package/python/Lib/email/charset.py +396 -0
  283. package/python/Lib/email/contentmanager.py +254 -0
  284. package/python/Lib/email/encoders.py +65 -0
  285. package/python/Lib/email/errors.py +117 -0
  286. package/python/Lib/email/feedparser.py +536 -0
  287. package/python/Lib/email/generator.py +530 -0
  288. package/python/Lib/email/header.py +582 -0
  289. package/python/Lib/email/headerregistry.py +618 -0
  290. package/python/Lib/email/iterators.py +68 -0
  291. package/python/Lib/email/message.py +1217 -0
  292. package/python/Lib/email/mime/__init__.py +0 -0
  293. package/python/Lib/email/mime/application.py +37 -0
  294. package/python/Lib/email/mime/audio.py +97 -0
  295. package/python/Lib/email/mime/base.py +29 -0
  296. package/python/Lib/email/mime/image.py +152 -0
  297. package/python/Lib/email/mime/message.py +33 -0
  298. package/python/Lib/email/mime/multipart.py +47 -0
  299. package/python/Lib/email/mime/nonmultipart.py +21 -0
  300. package/python/Lib/email/mime/text.py +40 -0
  301. package/python/Lib/email/parser.py +127 -0
  302. package/python/Lib/email/policy.py +232 -0
  303. package/python/Lib/email/quoprimime.py +300 -0
  304. package/python/Lib/email/utils.py +497 -0
  305. package/python/Lib/encodings/__init__.py +179 -0
  306. package/python/Lib/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
  307. package/python/Lib/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
  308. package/python/Lib/encodings/__pycache__/cp1252.cpython-313.pyc +0 -0
  309. package/python/Lib/encodings/__pycache__/cp437.cpython-313.pyc +0 -0
  310. package/python/Lib/encodings/__pycache__/hex_codec.cpython-313.pyc +0 -0
  311. package/python/Lib/encodings/__pycache__/idna.cpython-313.pyc +0 -0
  312. package/python/Lib/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
  313. package/python/Lib/encodings/aliases.py +560 -0
  314. package/python/Lib/encodings/ascii.py +50 -0
  315. package/python/Lib/encodings/base64_codec.py +55 -0
  316. package/python/Lib/encodings/big5.py +39 -0
  317. package/python/Lib/encodings/big5hkscs.py +39 -0
  318. package/python/Lib/encodings/bz2_codec.py +78 -0
  319. package/python/Lib/encodings/charmap.py +69 -0
  320. package/python/Lib/encodings/cp037.py +307 -0
  321. package/python/Lib/encodings/cp1006.py +307 -0
  322. package/python/Lib/encodings/cp1026.py +307 -0
  323. package/python/Lib/encodings/cp1125.py +698 -0
  324. package/python/Lib/encodings/cp1140.py +307 -0
  325. package/python/Lib/encodings/cp1250.py +307 -0
  326. package/python/Lib/encodings/cp1251.py +307 -0
  327. package/python/Lib/encodings/cp1252.py +307 -0
  328. package/python/Lib/encodings/cp1253.py +307 -0
  329. package/python/Lib/encodings/cp1254.py +307 -0
  330. package/python/Lib/encodings/cp1255.py +307 -0
  331. package/python/Lib/encodings/cp1256.py +307 -0
  332. package/python/Lib/encodings/cp1257.py +307 -0
  333. package/python/Lib/encodings/cp1258.py +307 -0
  334. package/python/Lib/encodings/cp273.py +307 -0
  335. package/python/Lib/encodings/cp424.py +307 -0
  336. package/python/Lib/encodings/cp437.py +698 -0
  337. package/python/Lib/encodings/cp500.py +307 -0
  338. package/python/Lib/encodings/cp720.py +309 -0
  339. package/python/Lib/encodings/cp737.py +698 -0
  340. package/python/Lib/encodings/cp775.py +697 -0
  341. package/python/Lib/encodings/cp850.py +698 -0
  342. package/python/Lib/encodings/cp852.py +698 -0
  343. package/python/Lib/encodings/cp855.py +698 -0
  344. package/python/Lib/encodings/cp856.py +307 -0
  345. package/python/Lib/encodings/cp857.py +694 -0
  346. package/python/Lib/encodings/cp858.py +698 -0
  347. package/python/Lib/encodings/cp860.py +698 -0
  348. package/python/Lib/encodings/cp861.py +698 -0
  349. package/python/Lib/encodings/cp862.py +698 -0
  350. package/python/Lib/encodings/cp863.py +698 -0
  351. package/python/Lib/encodings/cp864.py +690 -0
  352. package/python/Lib/encodings/cp865.py +698 -0
  353. package/python/Lib/encodings/cp866.py +698 -0
  354. package/python/Lib/encodings/cp869.py +689 -0
  355. package/python/Lib/encodings/cp874.py +307 -0
  356. package/python/Lib/encodings/cp875.py +307 -0
  357. package/python/Lib/encodings/cp932.py +39 -0
  358. package/python/Lib/encodings/cp949.py +39 -0
  359. package/python/Lib/encodings/cp950.py +39 -0
  360. package/python/Lib/encodings/euc_jis_2004.py +39 -0
  361. package/python/Lib/encodings/euc_jisx0213.py +39 -0
  362. package/python/Lib/encodings/euc_jp.py +39 -0
  363. package/python/Lib/encodings/euc_kr.py +39 -0
  364. package/python/Lib/encodings/gb18030.py +39 -0
  365. package/python/Lib/encodings/gb2312.py +39 -0
  366. package/python/Lib/encodings/gbk.py +39 -0
  367. package/python/Lib/encodings/hex_codec.py +55 -0
  368. package/python/Lib/encodings/hp_roman8.py +314 -0
  369. package/python/Lib/encodings/hz.py +39 -0
  370. package/python/Lib/encodings/idna.py +387 -0
  371. package/python/Lib/encodings/iso2022_jp.py +39 -0
  372. package/python/Lib/encodings/iso2022_jp_1.py +39 -0
  373. package/python/Lib/encodings/iso2022_jp_2.py +39 -0
  374. package/python/Lib/encodings/iso2022_jp_2004.py +39 -0
  375. package/python/Lib/encodings/iso2022_jp_3.py +39 -0
  376. package/python/Lib/encodings/iso2022_jp_ext.py +39 -0
  377. package/python/Lib/encodings/iso2022_kr.py +39 -0
  378. package/python/Lib/encodings/iso8859_1.py +307 -0
  379. package/python/Lib/encodings/iso8859_10.py +307 -0
  380. package/python/Lib/encodings/iso8859_11.py +307 -0
  381. package/python/Lib/encodings/iso8859_13.py +307 -0
  382. package/python/Lib/encodings/iso8859_14.py +307 -0
  383. package/python/Lib/encodings/iso8859_15.py +307 -0
  384. package/python/Lib/encodings/iso8859_16.py +307 -0
  385. package/python/Lib/encodings/iso8859_2.py +307 -0
  386. package/python/Lib/encodings/iso8859_3.py +307 -0
  387. package/python/Lib/encodings/iso8859_4.py +307 -0
  388. package/python/Lib/encodings/iso8859_5.py +307 -0
  389. package/python/Lib/encodings/iso8859_6.py +307 -0
  390. package/python/Lib/encodings/iso8859_7.py +307 -0
  391. package/python/Lib/encodings/iso8859_8.py +307 -0
  392. package/python/Lib/encodings/iso8859_9.py +307 -0
  393. package/python/Lib/encodings/johab.py +39 -0
  394. package/python/Lib/encodings/koi8_r.py +307 -0
  395. package/python/Lib/encodings/koi8_t.py +308 -0
  396. package/python/Lib/encodings/koi8_u.py +307 -0
  397. package/python/Lib/encodings/kz1048.py +307 -0
  398. package/python/Lib/encodings/latin_1.py +50 -0
  399. package/python/Lib/encodings/mac_arabic.py +698 -0
  400. package/python/Lib/encodings/mac_croatian.py +307 -0
  401. package/python/Lib/encodings/mac_cyrillic.py +307 -0
  402. package/python/Lib/encodings/mac_farsi.py +307 -0
  403. package/python/Lib/encodings/mac_greek.py +307 -0
  404. package/python/Lib/encodings/mac_iceland.py +307 -0
  405. package/python/Lib/encodings/mac_latin2.py +312 -0
  406. package/python/Lib/encodings/mac_roman.py +307 -0
  407. package/python/Lib/encodings/mac_romanian.py +307 -0
  408. package/python/Lib/encodings/mac_turkish.py +307 -0
  409. package/python/Lib/encodings/mbcs.py +47 -0
  410. package/python/Lib/encodings/oem.py +41 -0
  411. package/python/Lib/encodings/palmos.py +308 -0
  412. package/python/Lib/encodings/ptcp154.py +312 -0
  413. package/python/Lib/encodings/punycode.py +253 -0
  414. package/python/Lib/encodings/quopri_codec.py +56 -0
  415. package/python/Lib/encodings/raw_unicode_escape.py +46 -0
  416. package/python/Lib/encodings/rot_13.py +113 -0
  417. package/python/Lib/encodings/shift_jis.py +39 -0
  418. package/python/Lib/encodings/shift_jis_2004.py +39 -0
  419. package/python/Lib/encodings/shift_jisx0213.py +39 -0
  420. package/python/Lib/encodings/tis_620.py +307 -0
  421. package/python/Lib/encodings/undefined.py +49 -0
  422. package/python/Lib/encodings/unicode_escape.py +46 -0
  423. package/python/Lib/encodings/utf_16.py +155 -0
  424. package/python/Lib/encodings/utf_16_be.py +42 -0
  425. package/python/Lib/encodings/utf_16_le.py +42 -0
  426. package/python/Lib/encodings/utf_32.py +150 -0
  427. package/python/Lib/encodings/utf_32_be.py +37 -0
  428. package/python/Lib/encodings/utf_32_le.py +37 -0
  429. package/python/Lib/encodings/utf_7.py +38 -0
  430. package/python/Lib/encodings/utf_8.py +42 -0
  431. package/python/Lib/encodings/utf_8_sig.py +130 -0
  432. package/python/Lib/encodings/uu_codec.py +103 -0
  433. package/python/Lib/encodings/zlib_codec.py +77 -0
  434. package/python/Lib/enum.py +2183 -0
  435. package/python/Lib/filecmp.py +320 -0
  436. package/python/Lib/fileinput.py +442 -0
  437. package/python/Lib/fnmatch.py +192 -0
  438. package/python/Lib/fractions.py +1043 -0
  439. package/python/Lib/ftplib.py +975 -0
  440. package/python/Lib/functools.py +1036 -0
  441. package/python/Lib/genericpath.py +200 -0
  442. package/python/Lib/getopt.py +215 -0
  443. package/python/Lib/getpass.py +192 -0
  444. package/python/Lib/gettext.py +657 -0
  445. package/python/Lib/glob.py +572 -0
  446. package/python/Lib/graphlib.py +250 -0
  447. package/python/Lib/gzip.py +693 -0
  448. package/python/Lib/hashlib.py +255 -0
  449. package/python/Lib/heapq.py +603 -0
  450. package/python/Lib/hmac.py +220 -0
  451. package/python/Lib/html/__init__.py +132 -0
  452. package/python/Lib/html/__pycache__/__init__.cpython-313.pyc +0 -0
  453. package/python/Lib/html/__pycache__/entities.cpython-313.pyc +0 -0
  454. package/python/Lib/html/__pycache__/parser.cpython-313.pyc +0 -0
  455. package/python/Lib/html/entities.py +2513 -0
  456. package/python/Lib/html/parser.py +583 -0
  457. package/python/Lib/http/__init__.py +202 -0
  458. package/python/Lib/http/__pycache__/__init__.cpython-313.pyc +0 -0
  459. package/python/Lib/http/__pycache__/client.cpython-313.pyc +0 -0
  460. package/python/Lib/http/__pycache__/cookiejar.cpython-313.pyc +0 -0
  461. package/python/Lib/http/__pycache__/cookies.cpython-313.pyc +0 -0
  462. package/python/Lib/http/client.py +1598 -0
  463. package/python/Lib/http/cookiejar.py +2122 -0
  464. package/python/Lib/http/cookies.py +635 -0
  465. package/python/Lib/http/server.py +1355 -0
  466. package/python/Lib/imaplib.py +1769 -0
  467. package/python/Lib/importlib/__init__.py +136 -0
  468. package/python/Lib/importlib/__pycache__/__init__.cpython-313.pyc +0 -0
  469. package/python/Lib/importlib/__pycache__/_abc.cpython-313.pyc +0 -0
  470. package/python/Lib/importlib/__pycache__/abc.cpython-313.pyc +0 -0
  471. package/python/Lib/importlib/__pycache__/readers.cpython-313.pyc +0 -0
  472. package/python/Lib/importlib/_abc.py +39 -0
  473. package/python/Lib/importlib/_bootstrap.py +1559 -0
  474. package/python/Lib/importlib/_bootstrap_external.py +1826 -0
  475. package/python/Lib/importlib/abc.py +243 -0
  476. package/python/Lib/importlib/machinery.py +21 -0
  477. package/python/Lib/importlib/metadata/__init__.py +1093 -0
  478. package/python/Lib/importlib/metadata/__pycache__/__init__.cpython-313.pyc +0 -0
  479. package/python/Lib/importlib/metadata/__pycache__/_adapters.cpython-313.pyc +0 -0
  480. package/python/Lib/importlib/metadata/__pycache__/_collections.cpython-313.pyc +0 -0
  481. package/python/Lib/importlib/metadata/__pycache__/_functools.cpython-313.pyc +0 -0
  482. package/python/Lib/importlib/metadata/__pycache__/_itertools.cpython-313.pyc +0 -0
  483. package/python/Lib/importlib/metadata/__pycache__/_meta.cpython-313.pyc +0 -0
  484. package/python/Lib/importlib/metadata/__pycache__/_text.cpython-313.pyc +0 -0
  485. package/python/Lib/importlib/metadata/_adapters.py +89 -0
  486. package/python/Lib/importlib/metadata/_collections.py +30 -0
  487. package/python/Lib/importlib/metadata/_functools.py +104 -0
  488. package/python/Lib/importlib/metadata/_itertools.py +73 -0
  489. package/python/Lib/importlib/metadata/_meta.py +67 -0
  490. package/python/Lib/importlib/metadata/_text.py +99 -0
  491. package/python/Lib/importlib/metadata/diagnose.py +21 -0
  492. package/python/Lib/importlib/readers.py +12 -0
  493. package/python/Lib/importlib/resources/__init__.py +43 -0
  494. package/python/Lib/importlib/resources/__pycache__/__init__.cpython-313.pyc +0 -0
  495. package/python/Lib/importlib/resources/__pycache__/_adapters.cpython-313.pyc +0 -0
  496. package/python/Lib/importlib/resources/__pycache__/_common.cpython-313.pyc +0 -0
  497. package/python/Lib/importlib/resources/__pycache__/_functional.cpython-313.pyc +0 -0
  498. package/python/Lib/importlib/resources/__pycache__/_itertools.cpython-313.pyc +0 -0
  499. package/python/Lib/importlib/resources/__pycache__/abc.cpython-313.pyc +0 -0
  500. package/python/Lib/importlib/resources/__pycache__/readers.cpython-313.pyc +0 -0
  501. package/python/Lib/importlib/resources/_adapters.py +168 -0
  502. package/python/Lib/importlib/resources/_common.py +211 -0
  503. package/python/Lib/importlib/resources/_functional.py +81 -0
  504. package/python/Lib/importlib/resources/_itertools.py +38 -0
  505. package/python/Lib/importlib/resources/abc.py +173 -0
  506. package/python/Lib/importlib/resources/readers.py +203 -0
  507. package/python/Lib/importlib/resources/simple.py +106 -0
  508. package/python/Lib/importlib/simple.py +14 -0
  509. package/python/Lib/importlib/util.py +274 -0
  510. package/python/Lib/inspect.py +3479 -0
  511. package/python/Lib/io.py +99 -0
  512. package/python/Lib/ipaddress.py +2440 -0
  513. package/python/Lib/json/__init__.py +365 -0
  514. package/python/Lib/json/__pycache__/__init__.cpython-313.pyc +0 -0
  515. package/python/Lib/json/__pycache__/decoder.cpython-313.pyc +0 -0
  516. package/python/Lib/json/__pycache__/encoder.cpython-313.pyc +0 -0
  517. package/python/Lib/json/__pycache__/scanner.cpython-313.pyc +0 -0
  518. package/python/Lib/json/decoder.py +364 -0
  519. package/python/Lib/json/encoder.py +446 -0
  520. package/python/Lib/json/scanner.py +73 -0
  521. package/python/Lib/json/tool.py +90 -0
  522. package/python/Lib/keyword.py +64 -0
  523. package/python/Lib/linecache.py +236 -0
  524. package/python/Lib/locale.py +1987 -0
  525. package/python/Lib/logging/__init__.py +2330 -0
  526. package/python/Lib/logging/__pycache__/__init__.cpython-313.pyc +0 -0
  527. package/python/Lib/logging/__pycache__/config.cpython-313.pyc +0 -0
  528. package/python/Lib/logging/__pycache__/handlers.cpython-313.pyc +0 -0
  529. package/python/Lib/logging/config.py +1080 -0
  530. package/python/Lib/logging/handlers.py +1629 -0
  531. package/python/Lib/lzma.py +364 -0
  532. package/python/Lib/mailbox.py +2219 -0
  533. package/python/Lib/mimetypes.py +679 -0
  534. package/python/Lib/modulefinder.py +671 -0
  535. package/python/Lib/multiprocessing/__init__.py +37 -0
  536. package/python/Lib/multiprocessing/connection.py +1216 -0
  537. package/python/Lib/multiprocessing/context.py +383 -0
  538. package/python/Lib/multiprocessing/dummy/__init__.py +126 -0
  539. package/python/Lib/multiprocessing/dummy/connection.py +75 -0
  540. package/python/Lib/multiprocessing/forkserver.py +373 -0
  541. package/python/Lib/multiprocessing/heap.py +337 -0
  542. package/python/Lib/multiprocessing/managers.py +1397 -0
  543. package/python/Lib/multiprocessing/pool.py +957 -0
  544. package/python/Lib/multiprocessing/popen_fork.py +97 -0
  545. package/python/Lib/multiprocessing/popen_forkserver.py +74 -0
  546. package/python/Lib/multiprocessing/popen_spawn_posix.py +76 -0
  547. package/python/Lib/multiprocessing/popen_spawn_win32.py +147 -0
  548. package/python/Lib/multiprocessing/process.py +436 -0
  549. package/python/Lib/multiprocessing/queues.py +399 -0
  550. package/python/Lib/multiprocessing/reduction.py +281 -0
  551. package/python/Lib/multiprocessing/resource_sharer.py +154 -0
  552. package/python/Lib/multiprocessing/resource_tracker.py +499 -0
  553. package/python/Lib/multiprocessing/shared_memory.py +544 -0
  554. package/python/Lib/multiprocessing/sharedctypes.py +240 -0
  555. package/python/Lib/multiprocessing/spawn.py +307 -0
  556. package/python/Lib/multiprocessing/synchronize.py +404 -0
  557. package/python/Lib/multiprocessing/util.py +562 -0
  558. package/python/Lib/netrc.py +199 -0
  559. package/python/Lib/ntpath.py +872 -0
  560. package/python/Lib/nturl2path.py +69 -0
  561. package/python/Lib/numbers.py +427 -0
  562. package/python/Lib/opcode.py +115 -0
  563. package/python/Lib/operator.py +467 -0
  564. package/python/Lib/optparse.py +1681 -0
  565. package/python/Lib/os.py +1184 -0
  566. package/python/Lib/pathlib/__init__.py +12 -0
  567. package/python/Lib/pathlib/__pycache__/__init__.cpython-313.pyc +0 -0
  568. package/python/Lib/pathlib/__pycache__/_abc.cpython-313.pyc +0 -0
  569. package/python/Lib/pathlib/__pycache__/_local.cpython-313.pyc +0 -0
  570. package/python/Lib/pathlib/_abc.py +930 -0
  571. package/python/Lib/pathlib/_local.py +861 -0
  572. package/python/Lib/pdb.py +2550 -0
  573. package/python/Lib/pickle.py +1860 -0
  574. package/python/Lib/pickletools.py +2904 -0
  575. package/python/Lib/pkgutil.py +529 -0
  576. package/python/Lib/platform.py +1454 -0
  577. package/python/Lib/plistlib.py +948 -0
  578. package/python/Lib/poplib.py +477 -0
  579. package/python/Lib/posixpath.py +578 -0
  580. package/python/Lib/pprint.py +658 -0
  581. package/python/Lib/profile.py +616 -0
  582. package/python/Lib/pstats.py +778 -0
  583. package/python/Lib/pty.py +211 -0
  584. package/python/Lib/py_compile.py +212 -0
  585. package/python/Lib/pyclbr.py +314 -0
  586. package/python/Lib/pydoc.py +2861 -0
  587. package/python/Lib/queue.py +383 -0
  588. package/python/Lib/quopri.py +237 -0
  589. package/python/Lib/random.py +1078 -0
  590. package/python/Lib/re/__init__.py +428 -0
  591. package/python/Lib/re/__pycache__/__init__.cpython-313.pyc +0 -0
  592. package/python/Lib/re/__pycache__/_casefix.cpython-313.pyc +0 -0
  593. package/python/Lib/re/__pycache__/_compiler.cpython-313.pyc +0 -0
  594. package/python/Lib/re/__pycache__/_constants.cpython-313.pyc +0 -0
  595. package/python/Lib/re/__pycache__/_parser.cpython-313.pyc +0 -0
  596. package/python/Lib/re/_casefix.py +106 -0
  597. package/python/Lib/re/_compiler.py +768 -0
  598. package/python/Lib/re/_constants.py +222 -0
  599. package/python/Lib/re/_parser.py +1081 -0
  600. package/python/Lib/reprlib.py +230 -0
  601. package/python/Lib/rlcompleter.py +222 -0
  602. package/python/Lib/runpy.py +326 -0
  603. package/python/Lib/sched.py +167 -0
  604. package/python/Lib/secrets.py +71 -0
  605. package/python/Lib/selectors.py +603 -0
  606. package/python/Lib/shelve.py +250 -0
  607. package/python/Lib/shlex.py +345 -0
  608. package/python/Lib/shutil.py +1569 -0
  609. package/python/Lib/signal.py +94 -0
  610. package/python/Lib/site.py +773 -0
  611. package/python/Lib/smtplib.py +1123 -0
  612. package/python/Lib/socket.py +988 -0
  613. package/python/Lib/socketserver.py +863 -0
  614. package/python/Lib/sqlite3/__init__.py +70 -0
  615. package/python/Lib/sqlite3/__main__.py +139 -0
  616. package/python/Lib/sqlite3/dbapi2.py +108 -0
  617. package/python/Lib/sqlite3/dump.py +118 -0
  618. package/python/Lib/sre_compile.py +7 -0
  619. package/python/Lib/sre_constants.py +7 -0
  620. package/python/Lib/sre_parse.py +7 -0
  621. package/python/Lib/ssl.py +1529 -0
  622. package/python/Lib/stat.py +212 -0
  623. package/python/Lib/statistics.py +1817 -0
  624. package/python/Lib/string.py +314 -0
  625. package/python/Lib/stringprep.py +272 -0
  626. package/python/Lib/struct.py +15 -0
  627. package/python/Lib/subprocess.py +2258 -0
  628. package/python/Lib/symtable.py +414 -0
  629. package/python/Lib/sysconfig/__init__.py +734 -0
  630. package/python/Lib/sysconfig/__main__.py +248 -0
  631. package/python/Lib/sysconfig/__pycache__/__init__.cpython-313.pyc +0 -0
  632. package/python/Lib/tabnanny.py +340 -0
  633. package/python/Lib/tarfile.py +3136 -0
  634. package/python/Lib/tempfile.py +958 -0
  635. package/python/Lib/textwrap.py +497 -0
  636. package/python/Lib/this.py +28 -0
  637. package/python/Lib/threading.py +1602 -0
  638. package/python/Lib/timeit.py +381 -0
  639. package/python/Lib/token.py +141 -0
  640. package/python/Lib/tokenize.py +592 -0
  641. package/python/Lib/tomllib/__init__.py +10 -0
  642. package/python/Lib/tomllib/__pycache__/__init__.cpython-313.pyc +0 -0
  643. package/python/Lib/tomllib/__pycache__/_parser.cpython-313.pyc +0 -0
  644. package/python/Lib/tomllib/__pycache__/_re.cpython-313.pyc +0 -0
  645. package/python/Lib/tomllib/__pycache__/_types.cpython-313.pyc +0 -0
  646. package/python/Lib/tomllib/_parser.py +703 -0
  647. package/python/Lib/tomllib/_re.py +107 -0
  648. package/python/Lib/tomllib/_types.py +10 -0
  649. package/python/Lib/tomllib/mypy.ini +15 -0
  650. package/python/Lib/trace.py +754 -0
  651. package/python/Lib/traceback.py +1639 -0
  652. package/python/Lib/tracemalloc.py +560 -0
  653. package/python/Lib/tty.py +73 -0
  654. package/python/Lib/types.py +346 -0
  655. package/python/Lib/typing.py +3846 -0
  656. package/python/Lib/unittest/__init__.py +80 -0
  657. package/python/Lib/unittest/__main__.py +18 -0
  658. package/python/Lib/unittest/_log.py +86 -0
  659. package/python/Lib/unittest/async_case.py +146 -0
  660. package/python/Lib/unittest/case.py +1478 -0
  661. package/python/Lib/unittest/loader.py +460 -0
  662. package/python/Lib/unittest/main.py +280 -0
  663. package/python/Lib/unittest/mock.py +3189 -0
  664. package/python/Lib/unittest/result.py +256 -0
  665. package/python/Lib/unittest/runner.py +292 -0
  666. package/python/Lib/unittest/signals.py +71 -0
  667. package/python/Lib/unittest/suite.py +379 -0
  668. package/python/Lib/unittest/util.py +170 -0
  669. package/python/Lib/urllib/__init__.py +0 -0
  670. package/python/Lib/urllib/__pycache__/__init__.cpython-313.pyc +0 -0
  671. package/python/Lib/urllib/__pycache__/error.cpython-313.pyc +0 -0
  672. package/python/Lib/urllib/__pycache__/parse.cpython-313.pyc +0 -0
  673. package/python/Lib/urllib/__pycache__/request.cpython-313.pyc +0 -0
  674. package/python/Lib/urllib/__pycache__/response.cpython-313.pyc +0 -0
  675. package/python/Lib/urllib/error.py +74 -0
  676. package/python/Lib/urllib/parse.py +1264 -0
  677. package/python/Lib/urllib/request.py +2796 -0
  678. package/python/Lib/urllib/response.py +84 -0
  679. package/python/Lib/urllib/robotparser.py +363 -0
  680. package/python/Lib/uuid.py +784 -0
  681. package/python/Lib/warnings.py +735 -0
  682. package/python/Lib/wave.py +665 -0
  683. package/python/Lib/weakref.py +674 -0
  684. package/python/Lib/webbrowser.py +724 -0
  685. package/python/Lib/wsgiref/__init__.py +25 -0
  686. package/python/Lib/wsgiref/handlers.py +575 -0
  687. package/python/Lib/wsgiref/headers.py +192 -0
  688. package/python/Lib/wsgiref/simple_server.py +161 -0
  689. package/python/Lib/wsgiref/types.py +54 -0
  690. package/python/Lib/wsgiref/util.py +159 -0
  691. package/python/Lib/wsgiref/validate.py +438 -0
  692. package/python/Lib/xml/__init__.py +20 -0
  693. package/python/Lib/xml/__pycache__/__init__.cpython-313.pyc +0 -0
  694. package/python/Lib/xml/dom/NodeFilter.py +27 -0
  695. package/python/Lib/xml/dom/__init__.py +140 -0
  696. package/python/Lib/xml/dom/domreg.py +99 -0
  697. package/python/Lib/xml/dom/expatbuilder.py +962 -0
  698. package/python/Lib/xml/dom/minicompat.py +109 -0
  699. package/python/Lib/xml/dom/minidom.py +2024 -0
  700. package/python/Lib/xml/dom/pulldom.py +336 -0
  701. package/python/Lib/xml/dom/xmlbuilder.py +389 -0
  702. package/python/Lib/xml/etree/ElementInclude.py +186 -0
  703. package/python/Lib/xml/etree/ElementPath.py +430 -0
  704. package/python/Lib/xml/etree/ElementTree.py +2116 -0
  705. package/python/Lib/xml/etree/__init__.py +33 -0
  706. package/python/Lib/xml/etree/cElementTree.py +3 -0
  707. package/python/Lib/xml/parsers/__init__.py +8 -0
  708. package/python/Lib/xml/parsers/__pycache__/__init__.cpython-313.pyc +0 -0
  709. package/python/Lib/xml/parsers/__pycache__/expat.cpython-313.pyc +0 -0
  710. package/python/Lib/xml/parsers/expat.py +8 -0
  711. package/python/Lib/xml/sax/__init__.py +94 -0
  712. package/python/Lib/xml/sax/_exceptions.py +127 -0
  713. package/python/Lib/xml/sax/expatreader.py +454 -0
  714. package/python/Lib/xml/sax/handler.py +387 -0
  715. package/python/Lib/xml/sax/saxutils.py +369 -0
  716. package/python/Lib/xml/sax/xmlreader.py +378 -0
  717. package/python/Lib/xmlrpc/__init__.py +1 -0
  718. package/python/Lib/xmlrpc/__pycache__/__init__.cpython-313.pyc +0 -0
  719. package/python/Lib/xmlrpc/__pycache__/client.cpython-313.pyc +0 -0
  720. package/python/Lib/xmlrpc/client.py +1503 -0
  721. package/python/Lib/xmlrpc/server.py +1002 -0
  722. package/python/Lib/zipapp.py +229 -0
  723. package/python/Lib/zipfile/__init__.py +2391 -0
  724. package/python/Lib/zipfile/__main__.py +4 -0
  725. package/python/Lib/zipfile/__pycache__/__init__.cpython-313.pyc +0 -0
  726. package/python/Lib/zipfile/_path/__init__.py +452 -0
  727. package/python/Lib/zipfile/_path/__pycache__/__init__.cpython-313.pyc +0 -0
  728. package/python/Lib/zipfile/_path/__pycache__/glob.cpython-313.pyc +0 -0
  729. package/python/Lib/zipfile/_path/glob.py +113 -0
  730. package/python/Lib/zipimport.py +803 -0
  731. package/python/Lib/zoneinfo/__init__.py +34 -0
  732. package/python/Lib/zoneinfo/_common.py +172 -0
  733. package/python/Lib/zoneinfo/_tzpath.py +189 -0
  734. package/python/Lib/zoneinfo/_zoneinfo.py +779 -0
  735. package/python/licenses/LICENSE.bdb.txt +126 -0
  736. package/python/licenses/LICENSE.bzip2.txt +37 -0
  737. package/python/licenses/LICENSE.cpython.txt +771 -0
  738. package/python/licenses/LICENSE.expat.txt +21 -0
  739. package/python/licenses/LICENSE.libX11.txt +942 -0
  740. package/python/licenses/LICENSE.libXau.txt +21 -0
  741. package/python/licenses/LICENSE.libedit.txt +29 -0
  742. package/python/licenses/LICENSE.libffi.txt +21 -0
  743. package/python/licenses/LICENSE.liblzma.txt +13 -0
  744. package/python/licenses/LICENSE.libuuid.txt +27 -0
  745. package/python/licenses/LICENSE.libxcb.txt +30 -0
  746. package/python/licenses/LICENSE.mpdecimal.txt +24 -0
  747. package/python/licenses/LICENSE.ncurses.txt +29 -0
  748. package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
  749. package/python/licenses/LICENSE.openssl-3.txt +177 -0
  750. package/python/licenses/LICENSE.sqlite.txt +23 -0
  751. package/python/licenses/LICENSE.tcl.txt +40 -0
  752. package/python/licenses/LICENSE.tix.txt +54 -0
  753. package/python/licenses/LICENSE.zlib.txt +21 -0
  754. package/python/python.exe +0 -0
  755. package/python/python3.dll +0 -0
  756. package/python/python313.dll +0 -0
  757. package/python/pythonw.exe +0 -0
  758. package/python/vcruntime140.dll +0 -0
  759. package/python/vcruntime140_1.dll +0 -0
@@ -0,0 +1,962 @@
1
+ """Facility to use the Expat parser to load a minidom instance
2
+ from a string or file.
3
+
4
+ This avoids all the overhead of SAX and pulldom to gain performance.
5
+ """
6
+
7
+ # Warning!
8
+ #
9
+ # This module is tightly bound to the implementation details of the
10
+ # minidom DOM and can't be used with other DOM implementations. This
11
+ # is due, in part, to a lack of appropriate methods in the DOM (there is
12
+ # no way to create Entity and Notation nodes via the DOM Level 2
13
+ # interface), and for performance. The latter is the cause of some fairly
14
+ # cryptic code.
15
+ #
16
+ # Performance hacks:
17
+ #
18
+ # - .character_data_handler() has an extra case in which continuing
19
+ # data is appended to an existing Text node; this can be a
20
+ # speedup since pyexpat can break up character data into multiple
21
+ # callbacks even though we set the buffer_text attribute on the
22
+ # parser. This also gives us the advantage that we don't need a
23
+ # separate normalization pass.
24
+ #
25
+ # - Determining that a node exists is done using an identity comparison
26
+ # with None rather than a truth test; this avoids searching for and
27
+ # calling any methods on the node object if it exists. (A rather
28
+ # nice speedup is achieved this way as well!)
29
+
30
+ from xml.dom import xmlbuilder, minidom, Node
31
+ from xml.dom import EMPTY_NAMESPACE, EMPTY_PREFIX, XMLNS_NAMESPACE
32
+ from xml.parsers import expat
33
+ from xml.dom.minidom import _append_child, _set_attribute_node
34
+ from xml.dom.NodeFilter import NodeFilter
35
+
36
+ TEXT_NODE = Node.TEXT_NODE
37
+ CDATA_SECTION_NODE = Node.CDATA_SECTION_NODE
38
+ DOCUMENT_NODE = Node.DOCUMENT_NODE
39
+
40
+ FILTER_ACCEPT = xmlbuilder.DOMBuilderFilter.FILTER_ACCEPT
41
+ FILTER_REJECT = xmlbuilder.DOMBuilderFilter.FILTER_REJECT
42
+ FILTER_SKIP = xmlbuilder.DOMBuilderFilter.FILTER_SKIP
43
+ FILTER_INTERRUPT = xmlbuilder.DOMBuilderFilter.FILTER_INTERRUPT
44
+
45
+ theDOMImplementation = minidom.getDOMImplementation()
46
+
47
+ # Expat typename -> TypeInfo
48
+ _typeinfo_map = {
49
+ "CDATA": minidom.TypeInfo(None, "cdata"),
50
+ "ENUM": minidom.TypeInfo(None, "enumeration"),
51
+ "ENTITY": minidom.TypeInfo(None, "entity"),
52
+ "ENTITIES": minidom.TypeInfo(None, "entities"),
53
+ "ID": minidom.TypeInfo(None, "id"),
54
+ "IDREF": minidom.TypeInfo(None, "idref"),
55
+ "IDREFS": minidom.TypeInfo(None, "idrefs"),
56
+ "NMTOKEN": minidom.TypeInfo(None, "nmtoken"),
57
+ "NMTOKENS": minidom.TypeInfo(None, "nmtokens"),
58
+ }
59
+
60
+ class ElementInfo(object):
61
+ __slots__ = '_attr_info', '_model', 'tagName'
62
+
63
+ def __init__(self, tagName, model=None):
64
+ self.tagName = tagName
65
+ self._attr_info = []
66
+ self._model = model
67
+
68
+ def __getstate__(self):
69
+ return self._attr_info, self._model, self.tagName
70
+
71
+ def __setstate__(self, state):
72
+ self._attr_info, self._model, self.tagName = state
73
+
74
+ def getAttributeType(self, aname):
75
+ for info in self._attr_info:
76
+ if info[1] == aname:
77
+ t = info[-2]
78
+ if t[0] == "(":
79
+ return _typeinfo_map["ENUM"]
80
+ else:
81
+ return _typeinfo_map[info[-2]]
82
+ return minidom._no_type
83
+
84
+ def getAttributeTypeNS(self, namespaceURI, localName):
85
+ return minidom._no_type
86
+
87
+ def isElementContent(self):
88
+ if self._model:
89
+ type = self._model[0]
90
+ return type not in (expat.model.XML_CTYPE_ANY,
91
+ expat.model.XML_CTYPE_MIXED)
92
+ else:
93
+ return False
94
+
95
+ def isEmpty(self):
96
+ if self._model:
97
+ return self._model[0] == expat.model.XML_CTYPE_EMPTY
98
+ else:
99
+ return False
100
+
101
+ def isId(self, aname):
102
+ for info in self._attr_info:
103
+ if info[1] == aname:
104
+ return info[-2] == "ID"
105
+ return False
106
+
107
+ def isIdNS(self, euri, ename, auri, aname):
108
+ # not sure this is meaningful
109
+ return self.isId((auri, aname))
110
+
111
+ def _intern(builder, s):
112
+ return builder._intern_setdefault(s, s)
113
+
114
+ def _parse_ns_name(builder, name):
115
+ assert ' ' in name
116
+ parts = name.split(' ')
117
+ intern = builder._intern_setdefault
118
+ if len(parts) == 3:
119
+ uri, localname, prefix = parts
120
+ prefix = intern(prefix, prefix)
121
+ qname = "%s:%s" % (prefix, localname)
122
+ qname = intern(qname, qname)
123
+ localname = intern(localname, localname)
124
+ elif len(parts) == 2:
125
+ uri, localname = parts
126
+ prefix = EMPTY_PREFIX
127
+ qname = localname = intern(localname, localname)
128
+ else:
129
+ raise ValueError("Unsupported syntax: spaces in URIs not supported: %r" % name)
130
+ return intern(uri, uri), localname, prefix, qname
131
+
132
+
133
+ class ExpatBuilder:
134
+ """Document builder that uses Expat to build a ParsedXML.DOM document
135
+ instance."""
136
+
137
+ def __init__(self, options=None):
138
+ if options is None:
139
+ options = xmlbuilder.Options()
140
+ self._options = options
141
+ if self._options.filter is not None:
142
+ self._filter = FilterVisibilityController(self._options.filter)
143
+ else:
144
+ self._filter = None
145
+ # This *really* doesn't do anything in this case, so
146
+ # override it with something fast & minimal.
147
+ self._finish_start_element = id
148
+ self._parser = None
149
+ self.reset()
150
+
151
+ def createParser(self):
152
+ """Create a new parser object."""
153
+ return expat.ParserCreate()
154
+
155
+ def getParser(self):
156
+ """Return the parser object, creating a new one if needed."""
157
+ if not self._parser:
158
+ self._parser = self.createParser()
159
+ self._intern_setdefault = self._parser.intern.setdefault
160
+ self._parser.buffer_text = True
161
+ self._parser.ordered_attributes = True
162
+ self._parser.specified_attributes = True
163
+ self.install(self._parser)
164
+ return self._parser
165
+
166
+ def reset(self):
167
+ """Free all data structures used during DOM construction."""
168
+ self.document = theDOMImplementation.createDocument(
169
+ EMPTY_NAMESPACE, None, None)
170
+ self.curNode = self.document
171
+ self._elem_info = self.document._elem_info
172
+ self._cdata = False
173
+
174
+ def install(self, parser):
175
+ """Install the callbacks needed to build the DOM into the parser."""
176
+ # This creates circular references!
177
+ parser.StartDoctypeDeclHandler = self.start_doctype_decl_handler
178
+ parser.StartElementHandler = self.first_element_handler
179
+ parser.EndElementHandler = self.end_element_handler
180
+ parser.ProcessingInstructionHandler = self.pi_handler
181
+ if self._options.entities:
182
+ parser.EntityDeclHandler = self.entity_decl_handler
183
+ parser.NotationDeclHandler = self.notation_decl_handler
184
+ if self._options.comments:
185
+ parser.CommentHandler = self.comment_handler
186
+ if self._options.cdata_sections:
187
+ parser.StartCdataSectionHandler = self.start_cdata_section_handler
188
+ parser.EndCdataSectionHandler = self.end_cdata_section_handler
189
+ parser.CharacterDataHandler = self.character_data_handler_cdata
190
+ else:
191
+ parser.CharacterDataHandler = self.character_data_handler
192
+ parser.ExternalEntityRefHandler = self.external_entity_ref_handler
193
+ parser.XmlDeclHandler = self.xml_decl_handler
194
+ parser.ElementDeclHandler = self.element_decl_handler
195
+ parser.AttlistDeclHandler = self.attlist_decl_handler
196
+
197
+ def parseFile(self, file):
198
+ """Parse a document from a file object, returning the document
199
+ node."""
200
+ parser = self.getParser()
201
+ first_buffer = True
202
+ try:
203
+ while buffer := file.read(16*1024):
204
+ parser.Parse(buffer, False)
205
+ if first_buffer and self.document.documentElement:
206
+ self._setup_subset(buffer)
207
+ first_buffer = False
208
+ parser.Parse(b"", True)
209
+ except ParseEscape:
210
+ pass
211
+ doc = self.document
212
+ self.reset()
213
+ self._parser = None
214
+ return doc
215
+
216
+ def parseString(self, string):
217
+ """Parse a document from a string, returning the document node."""
218
+ parser = self.getParser()
219
+ try:
220
+ parser.Parse(string, True)
221
+ self._setup_subset(string)
222
+ except ParseEscape:
223
+ pass
224
+ doc = self.document
225
+ self.reset()
226
+ self._parser = None
227
+ return doc
228
+
229
+ def _setup_subset(self, buffer):
230
+ """Load the internal subset if there might be one."""
231
+ if self.document.doctype:
232
+ extractor = InternalSubsetExtractor()
233
+ extractor.parseString(buffer)
234
+ subset = extractor.getSubset()
235
+ self.document.doctype.internalSubset = subset
236
+
237
+ def start_doctype_decl_handler(self, doctypeName, systemId, publicId,
238
+ has_internal_subset):
239
+ doctype = self.document.implementation.createDocumentType(
240
+ doctypeName, publicId, systemId)
241
+ doctype.ownerDocument = self.document
242
+ _append_child(self.document, doctype)
243
+ self.document.doctype = doctype
244
+ if self._filter and self._filter.acceptNode(doctype) == FILTER_REJECT:
245
+ self.document.doctype = None
246
+ del self.document.childNodes[-1]
247
+ doctype = None
248
+ self._parser.EntityDeclHandler = None
249
+ self._parser.NotationDeclHandler = None
250
+ if has_internal_subset:
251
+ if doctype is not None:
252
+ doctype.entities._seq = []
253
+ doctype.notations._seq = []
254
+ self._parser.CommentHandler = None
255
+ self._parser.ProcessingInstructionHandler = None
256
+ self._parser.EndDoctypeDeclHandler = self.end_doctype_decl_handler
257
+
258
+ def end_doctype_decl_handler(self):
259
+ if self._options.comments:
260
+ self._parser.CommentHandler = self.comment_handler
261
+ self._parser.ProcessingInstructionHandler = self.pi_handler
262
+ if not (self._elem_info or self._filter):
263
+ self._finish_end_element = id
264
+
265
+ def pi_handler(self, target, data):
266
+ node = self.document.createProcessingInstruction(target, data)
267
+ _append_child(self.curNode, node)
268
+ if self._filter and self._filter.acceptNode(node) == FILTER_REJECT:
269
+ self.curNode.removeChild(node)
270
+
271
+ def character_data_handler_cdata(self, data):
272
+ childNodes = self.curNode.childNodes
273
+ if self._cdata:
274
+ if ( self._cdata_continue
275
+ and childNodes[-1].nodeType == CDATA_SECTION_NODE):
276
+ childNodes[-1].appendData(data)
277
+ return
278
+ node = self.document.createCDATASection(data)
279
+ self._cdata_continue = True
280
+ elif childNodes and childNodes[-1].nodeType == TEXT_NODE:
281
+ node = childNodes[-1]
282
+ value = node.data + data
283
+ node.data = value
284
+ return
285
+ else:
286
+ node = minidom.Text()
287
+ node.data = data
288
+ node.ownerDocument = self.document
289
+ _append_child(self.curNode, node)
290
+
291
+ def character_data_handler(self, data):
292
+ childNodes = self.curNode.childNodes
293
+ if childNodes and childNodes[-1].nodeType == TEXT_NODE:
294
+ node = childNodes[-1]
295
+ node.data = node.data + data
296
+ return
297
+ node = minidom.Text()
298
+ node.data = node.data + data
299
+ node.ownerDocument = self.document
300
+ _append_child(self.curNode, node)
301
+
302
+ def entity_decl_handler(self, entityName, is_parameter_entity, value,
303
+ base, systemId, publicId, notationName):
304
+ if is_parameter_entity:
305
+ # we don't care about parameter entities for the DOM
306
+ return
307
+ if not self._options.entities:
308
+ return
309
+ node = self.document._create_entity(entityName, publicId,
310
+ systemId, notationName)
311
+ if value is not None:
312
+ # internal entity
313
+ # node *should* be readonly, but we'll cheat
314
+ child = self.document.createTextNode(value)
315
+ node.childNodes.append(child)
316
+ self.document.doctype.entities._seq.append(node)
317
+ if self._filter and self._filter.acceptNode(node) == FILTER_REJECT:
318
+ del self.document.doctype.entities._seq[-1]
319
+
320
+ def notation_decl_handler(self, notationName, base, systemId, publicId):
321
+ node = self.document._create_notation(notationName, publicId, systemId)
322
+ self.document.doctype.notations._seq.append(node)
323
+ if self._filter and self._filter.acceptNode(node) == FILTER_ACCEPT:
324
+ del self.document.doctype.notations._seq[-1]
325
+
326
+ def comment_handler(self, data):
327
+ node = self.document.createComment(data)
328
+ _append_child(self.curNode, node)
329
+ if self._filter and self._filter.acceptNode(node) == FILTER_REJECT:
330
+ self.curNode.removeChild(node)
331
+
332
+ def start_cdata_section_handler(self):
333
+ self._cdata = True
334
+ self._cdata_continue = False
335
+
336
+ def end_cdata_section_handler(self):
337
+ self._cdata = False
338
+ self._cdata_continue = False
339
+
340
+ def external_entity_ref_handler(self, context, base, systemId, publicId):
341
+ return 1
342
+
343
+ def first_element_handler(self, name, attributes):
344
+ if self._filter is None and not self._elem_info:
345
+ self._finish_end_element = id
346
+ self.getParser().StartElementHandler = self.start_element_handler
347
+ self.start_element_handler(name, attributes)
348
+
349
+ def start_element_handler(self, name, attributes):
350
+ node = self.document.createElement(name)
351
+ _append_child(self.curNode, node)
352
+ self.curNode = node
353
+
354
+ if attributes:
355
+ for i in range(0, len(attributes), 2):
356
+ a = minidom.Attr(attributes[i], EMPTY_NAMESPACE,
357
+ None, EMPTY_PREFIX)
358
+ value = attributes[i+1]
359
+ a.value = value
360
+ a.ownerDocument = self.document
361
+ _set_attribute_node(node, a)
362
+
363
+ if node is not self.document.documentElement:
364
+ self._finish_start_element(node)
365
+
366
+ def _finish_start_element(self, node):
367
+ if self._filter:
368
+ # To be general, we'd have to call isSameNode(), but this
369
+ # is sufficient for minidom:
370
+ if node is self.document.documentElement:
371
+ return
372
+ filt = self._filter.startContainer(node)
373
+ if filt == FILTER_REJECT:
374
+ # ignore this node & all descendents
375
+ Rejecter(self)
376
+ elif filt == FILTER_SKIP:
377
+ # ignore this node, but make it's children become
378
+ # children of the parent node
379
+ Skipper(self)
380
+ else:
381
+ return
382
+ self.curNode = node.parentNode
383
+ node.parentNode.removeChild(node)
384
+ node.unlink()
385
+
386
+ # If this ever changes, Namespaces.end_element_handler() needs to
387
+ # be changed to match.
388
+ #
389
+ def end_element_handler(self, name):
390
+ curNode = self.curNode
391
+ self.curNode = curNode.parentNode
392
+ self._finish_end_element(curNode)
393
+
394
+ def _finish_end_element(self, curNode):
395
+ info = self._elem_info.get(curNode.tagName)
396
+ if info:
397
+ self._handle_white_text_nodes(curNode, info)
398
+ if self._filter:
399
+ if curNode is self.document.documentElement:
400
+ return
401
+ if self._filter.acceptNode(curNode) == FILTER_REJECT:
402
+ self.curNode.removeChild(curNode)
403
+ curNode.unlink()
404
+
405
+ def _handle_white_text_nodes(self, node, info):
406
+ if (self._options.whitespace_in_element_content
407
+ or not info.isElementContent()):
408
+ return
409
+
410
+ # We have element type information and should remove ignorable
411
+ # whitespace; identify for text nodes which contain only
412
+ # whitespace.
413
+ L = []
414
+ for child in node.childNodes:
415
+ if child.nodeType == TEXT_NODE and not child.data.strip():
416
+ L.append(child)
417
+
418
+ # Remove ignorable whitespace from the tree.
419
+ for child in L:
420
+ node.removeChild(child)
421
+
422
+ def element_decl_handler(self, name, model):
423
+ info = self._elem_info.get(name)
424
+ if info is None:
425
+ self._elem_info[name] = ElementInfo(name, model)
426
+ else:
427
+ assert info._model is None
428
+ info._model = model
429
+
430
+ def attlist_decl_handler(self, elem, name, type, default, required):
431
+ info = self._elem_info.get(elem)
432
+ if info is None:
433
+ info = ElementInfo(elem)
434
+ self._elem_info[elem] = info
435
+ info._attr_info.append(
436
+ [None, name, None, None, default, 0, type, required])
437
+
438
+ def xml_decl_handler(self, version, encoding, standalone):
439
+ self.document.version = version
440
+ self.document.encoding = encoding
441
+ # This is still a little ugly, thanks to the pyexpat API. ;-(
442
+ if standalone >= 0:
443
+ if standalone:
444
+ self.document.standalone = True
445
+ else:
446
+ self.document.standalone = False
447
+
448
+
449
+ # Don't include FILTER_INTERRUPT, since that's checked separately
450
+ # where allowed.
451
+ _ALLOWED_FILTER_RETURNS = (FILTER_ACCEPT, FILTER_REJECT, FILTER_SKIP)
452
+
453
+ class FilterVisibilityController(object):
454
+ """Wrapper around a DOMBuilderFilter which implements the checks
455
+ to make the whatToShow filter attribute work."""
456
+
457
+ __slots__ = 'filter',
458
+
459
+ def __init__(self, filter):
460
+ self.filter = filter
461
+
462
+ def startContainer(self, node):
463
+ mask = self._nodetype_mask[node.nodeType]
464
+ if self.filter.whatToShow & mask:
465
+ val = self.filter.startContainer(node)
466
+ if val == FILTER_INTERRUPT:
467
+ raise ParseEscape
468
+ if val not in _ALLOWED_FILTER_RETURNS:
469
+ raise ValueError(
470
+ "startContainer() returned illegal value: " + repr(val))
471
+ return val
472
+ else:
473
+ return FILTER_ACCEPT
474
+
475
+ def acceptNode(self, node):
476
+ mask = self._nodetype_mask[node.nodeType]
477
+ if self.filter.whatToShow & mask:
478
+ val = self.filter.acceptNode(node)
479
+ if val == FILTER_INTERRUPT:
480
+ raise ParseEscape
481
+ if val == FILTER_SKIP:
482
+ # move all child nodes to the parent, and remove this node
483
+ parent = node.parentNode
484
+ for child in node.childNodes[:]:
485
+ parent.appendChild(child)
486
+ # node is handled by the caller
487
+ return FILTER_REJECT
488
+ if val not in _ALLOWED_FILTER_RETURNS:
489
+ raise ValueError(
490
+ "acceptNode() returned illegal value: " + repr(val))
491
+ return val
492
+ else:
493
+ return FILTER_ACCEPT
494
+
495
+ _nodetype_mask = {
496
+ Node.ELEMENT_NODE: NodeFilter.SHOW_ELEMENT,
497
+ Node.ATTRIBUTE_NODE: NodeFilter.SHOW_ATTRIBUTE,
498
+ Node.TEXT_NODE: NodeFilter.SHOW_TEXT,
499
+ Node.CDATA_SECTION_NODE: NodeFilter.SHOW_CDATA_SECTION,
500
+ Node.ENTITY_REFERENCE_NODE: NodeFilter.SHOW_ENTITY_REFERENCE,
501
+ Node.ENTITY_NODE: NodeFilter.SHOW_ENTITY,
502
+ Node.PROCESSING_INSTRUCTION_NODE: NodeFilter.SHOW_PROCESSING_INSTRUCTION,
503
+ Node.COMMENT_NODE: NodeFilter.SHOW_COMMENT,
504
+ Node.DOCUMENT_NODE: NodeFilter.SHOW_DOCUMENT,
505
+ Node.DOCUMENT_TYPE_NODE: NodeFilter.SHOW_DOCUMENT_TYPE,
506
+ Node.DOCUMENT_FRAGMENT_NODE: NodeFilter.SHOW_DOCUMENT_FRAGMENT,
507
+ Node.NOTATION_NODE: NodeFilter.SHOW_NOTATION,
508
+ }
509
+
510
+
511
+ class FilterCrutch(object):
512
+ __slots__ = '_builder', '_level', '_old_start', '_old_end'
513
+
514
+ def __init__(self, builder):
515
+ self._level = 0
516
+ self._builder = builder
517
+ parser = builder._parser
518
+ self._old_start = parser.StartElementHandler
519
+ self._old_end = parser.EndElementHandler
520
+ parser.StartElementHandler = self.start_element_handler
521
+ parser.EndElementHandler = self.end_element_handler
522
+
523
+ class Rejecter(FilterCrutch):
524
+ __slots__ = ()
525
+
526
+ def __init__(self, builder):
527
+ FilterCrutch.__init__(self, builder)
528
+ parser = builder._parser
529
+ for name in ("ProcessingInstructionHandler",
530
+ "CommentHandler",
531
+ "CharacterDataHandler",
532
+ "StartCdataSectionHandler",
533
+ "EndCdataSectionHandler",
534
+ "ExternalEntityRefHandler",
535
+ ):
536
+ setattr(parser, name, None)
537
+
538
+ def start_element_handler(self, *args):
539
+ self._level = self._level + 1
540
+
541
+ def end_element_handler(self, *args):
542
+ if self._level == 0:
543
+ # restore the old handlers
544
+ parser = self._builder._parser
545
+ self._builder.install(parser)
546
+ parser.StartElementHandler = self._old_start
547
+ parser.EndElementHandler = self._old_end
548
+ else:
549
+ self._level = self._level - 1
550
+
551
+ class Skipper(FilterCrutch):
552
+ __slots__ = ()
553
+
554
+ def start_element_handler(self, *args):
555
+ node = self._builder.curNode
556
+ self._old_start(*args)
557
+ if self._builder.curNode is not node:
558
+ self._level = self._level + 1
559
+
560
+ def end_element_handler(self, *args):
561
+ if self._level == 0:
562
+ # We're popping back out of the node we're skipping, so we
563
+ # shouldn't need to do anything but reset the handlers.
564
+ self._builder._parser.StartElementHandler = self._old_start
565
+ self._builder._parser.EndElementHandler = self._old_end
566
+ self._builder = None
567
+ else:
568
+ self._level = self._level - 1
569
+ self._old_end(*args)
570
+
571
+
572
+ # framework document used by the fragment builder.
573
+ # Takes a string for the doctype, subset string, and namespace attrs string.
574
+
575
+ _FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID = \
576
+ "http://xml.python.org/entities/fragment-builder/internal"
577
+
578
+ _FRAGMENT_BUILDER_TEMPLATE = (
579
+ '''\
580
+ <!DOCTYPE wrapper
581
+ %%s [
582
+ <!ENTITY fragment-builder-internal
583
+ SYSTEM "%s">
584
+ %%s
585
+ ]>
586
+ <wrapper %%s
587
+ >&fragment-builder-internal;</wrapper>'''
588
+ % _FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID)
589
+
590
+
591
+ class FragmentBuilder(ExpatBuilder):
592
+ """Builder which constructs document fragments given XML source
593
+ text and a context node.
594
+
595
+ The context node is expected to provide information about the
596
+ namespace declarations which are in scope at the start of the
597
+ fragment.
598
+ """
599
+
600
+ def __init__(self, context, options=None):
601
+ if context.nodeType == DOCUMENT_NODE:
602
+ self.originalDocument = context
603
+ self.context = context
604
+ else:
605
+ self.originalDocument = context.ownerDocument
606
+ self.context = context
607
+ ExpatBuilder.__init__(self, options)
608
+
609
+ def reset(self):
610
+ ExpatBuilder.reset(self)
611
+ self.fragment = None
612
+
613
+ def parseFile(self, file):
614
+ """Parse a document fragment from a file object, returning the
615
+ fragment node."""
616
+ return self.parseString(file.read())
617
+
618
+ def parseString(self, string):
619
+ """Parse a document fragment from a string, returning the
620
+ fragment node."""
621
+ self._source = string
622
+ parser = self.getParser()
623
+ doctype = self.originalDocument.doctype
624
+ ident = ""
625
+ if doctype:
626
+ subset = doctype.internalSubset or self._getDeclarations()
627
+ if doctype.publicId:
628
+ ident = ('PUBLIC "%s" "%s"'
629
+ % (doctype.publicId, doctype.systemId))
630
+ elif doctype.systemId:
631
+ ident = 'SYSTEM "%s"' % doctype.systemId
632
+ else:
633
+ subset = ""
634
+ nsattrs = self._getNSattrs() # get ns decls from node's ancestors
635
+ document = _FRAGMENT_BUILDER_TEMPLATE % (ident, subset, nsattrs)
636
+ try:
637
+ parser.Parse(document, True)
638
+ except:
639
+ self.reset()
640
+ raise
641
+ fragment = self.fragment
642
+ self.reset()
643
+ ## self._parser = None
644
+ return fragment
645
+
646
+ def _getDeclarations(self):
647
+ """Re-create the internal subset from the DocumentType node.
648
+
649
+ This is only needed if we don't already have the
650
+ internalSubset as a string.
651
+ """
652
+ doctype = self.context.ownerDocument.doctype
653
+ s = ""
654
+ if doctype:
655
+ for i in range(doctype.notations.length):
656
+ notation = doctype.notations.item(i)
657
+ if s:
658
+ s = s + "\n "
659
+ s = "%s<!NOTATION %s" % (s, notation.nodeName)
660
+ if notation.publicId:
661
+ s = '%s PUBLIC "%s"\n "%s">' \
662
+ % (s, notation.publicId, notation.systemId)
663
+ else:
664
+ s = '%s SYSTEM "%s">' % (s, notation.systemId)
665
+ for i in range(doctype.entities.length):
666
+ entity = doctype.entities.item(i)
667
+ if s:
668
+ s = s + "\n "
669
+ s = "%s<!ENTITY %s" % (s, entity.nodeName)
670
+ if entity.publicId:
671
+ s = '%s PUBLIC "%s"\n "%s"' \
672
+ % (s, entity.publicId, entity.systemId)
673
+ elif entity.systemId:
674
+ s = '%s SYSTEM "%s"' % (s, entity.systemId)
675
+ else:
676
+ s = '%s "%s"' % (s, entity.firstChild.data)
677
+ if entity.notationName:
678
+ s = "%s NOTATION %s" % (s, entity.notationName)
679
+ s = s + ">"
680
+ return s
681
+
682
+ def _getNSattrs(self):
683
+ return ""
684
+
685
+ def external_entity_ref_handler(self, context, base, systemId, publicId):
686
+ if systemId == _FRAGMENT_BUILDER_INTERNAL_SYSTEM_ID:
687
+ # this entref is the one that we made to put the subtree
688
+ # in; all of our given input is parsed in here.
689
+ old_document = self.document
690
+ old_cur_node = self.curNode
691
+ parser = self._parser.ExternalEntityParserCreate(context)
692
+ # put the real document back, parse into the fragment to return
693
+ self.document = self.originalDocument
694
+ self.fragment = self.document.createDocumentFragment()
695
+ self.curNode = self.fragment
696
+ try:
697
+ parser.Parse(self._source, True)
698
+ finally:
699
+ self.curNode = old_cur_node
700
+ self.document = old_document
701
+ self._source = None
702
+ return -1
703
+ else:
704
+ return ExpatBuilder.external_entity_ref_handler(
705
+ self, context, base, systemId, publicId)
706
+
707
+
708
+ class Namespaces:
709
+ """Mix-in class for builders; adds support for namespaces."""
710
+
711
+ def _initNamespaces(self):
712
+ # list of (prefix, uri) ns declarations. Namespace attrs are
713
+ # constructed from this and added to the element's attrs.
714
+ self._ns_ordered_prefixes = []
715
+
716
+ def createParser(self):
717
+ """Create a new namespace-handling parser."""
718
+ parser = expat.ParserCreate(namespace_separator=" ")
719
+ parser.namespace_prefixes = True
720
+ return parser
721
+
722
+ def install(self, parser):
723
+ """Insert the namespace-handlers onto the parser."""
724
+ ExpatBuilder.install(self, parser)
725
+ if self._options.namespace_declarations:
726
+ parser.StartNamespaceDeclHandler = (
727
+ self.start_namespace_decl_handler)
728
+
729
+ def start_namespace_decl_handler(self, prefix, uri):
730
+ """Push this namespace declaration on our storage."""
731
+ self._ns_ordered_prefixes.append((prefix, uri))
732
+
733
+ def start_element_handler(self, name, attributes):
734
+ if ' ' in name:
735
+ uri, localname, prefix, qname = _parse_ns_name(self, name)
736
+ else:
737
+ uri = EMPTY_NAMESPACE
738
+ qname = name
739
+ localname = None
740
+ prefix = EMPTY_PREFIX
741
+ node = minidom.Element(qname, uri, prefix, localname)
742
+ node.ownerDocument = self.document
743
+ _append_child(self.curNode, node)
744
+ self.curNode = node
745
+
746
+ if self._ns_ordered_prefixes:
747
+ for prefix, uri in self._ns_ordered_prefixes:
748
+ if prefix:
749
+ a = minidom.Attr(_intern(self, 'xmlns:' + prefix),
750
+ XMLNS_NAMESPACE, prefix, "xmlns")
751
+ else:
752
+ a = minidom.Attr("xmlns", XMLNS_NAMESPACE,
753
+ "xmlns", EMPTY_PREFIX)
754
+ a.value = uri
755
+ a.ownerDocument = self.document
756
+ _set_attribute_node(node, a)
757
+ del self._ns_ordered_prefixes[:]
758
+
759
+ if attributes:
760
+ node._ensure_attributes()
761
+ _attrs = node._attrs
762
+ _attrsNS = node._attrsNS
763
+ for i in range(0, len(attributes), 2):
764
+ aname = attributes[i]
765
+ value = attributes[i+1]
766
+ if ' ' in aname:
767
+ uri, localname, prefix, qname = _parse_ns_name(self, aname)
768
+ a = minidom.Attr(qname, uri, localname, prefix)
769
+ _attrs[qname] = a
770
+ _attrsNS[(uri, localname)] = a
771
+ else:
772
+ a = minidom.Attr(aname, EMPTY_NAMESPACE,
773
+ aname, EMPTY_PREFIX)
774
+ _attrs[aname] = a
775
+ _attrsNS[(EMPTY_NAMESPACE, aname)] = a
776
+ a.ownerDocument = self.document
777
+ a.value = value
778
+ a.ownerElement = node
779
+
780
+ if __debug__:
781
+ # This only adds some asserts to the original
782
+ # end_element_handler(), so we only define this when -O is not
783
+ # used. If changing one, be sure to check the other to see if
784
+ # it needs to be changed as well.
785
+ #
786
+ def end_element_handler(self, name):
787
+ curNode = self.curNode
788
+ if ' ' in name:
789
+ uri, localname, prefix, qname = _parse_ns_name(self, name)
790
+ assert (curNode.namespaceURI == uri
791
+ and curNode.localName == localname
792
+ and curNode.prefix == prefix), \
793
+ "element stack messed up! (namespace)"
794
+ else:
795
+ assert curNode.nodeName == name, \
796
+ "element stack messed up - bad nodeName"
797
+ assert curNode.namespaceURI == EMPTY_NAMESPACE, \
798
+ "element stack messed up - bad namespaceURI"
799
+ self.curNode = curNode.parentNode
800
+ self._finish_end_element(curNode)
801
+
802
+
803
+ class ExpatBuilderNS(Namespaces, ExpatBuilder):
804
+ """Document builder that supports namespaces."""
805
+
806
+ def reset(self):
807
+ ExpatBuilder.reset(self)
808
+ self._initNamespaces()
809
+
810
+
811
+ class FragmentBuilderNS(Namespaces, FragmentBuilder):
812
+ """Fragment builder that supports namespaces."""
813
+
814
+ def reset(self):
815
+ FragmentBuilder.reset(self)
816
+ self._initNamespaces()
817
+
818
+ def _getNSattrs(self):
819
+ """Return string of namespace attributes from this element and
820
+ ancestors."""
821
+ # XXX This needs to be re-written to walk the ancestors of the
822
+ # context to build up the namespace information from
823
+ # declarations, elements, and attributes found in context.
824
+ # Otherwise we have to store a bunch more data on the DOM
825
+ # (though that *might* be more reliable -- not clear).
826
+ attrs = ""
827
+ context = self.context
828
+ L = []
829
+ while context:
830
+ if hasattr(context, '_ns_prefix_uri'):
831
+ for prefix, uri in context._ns_prefix_uri.items():
832
+ # add every new NS decl from context to L and attrs string
833
+ if prefix in L:
834
+ continue
835
+ L.append(prefix)
836
+ if prefix:
837
+ declname = "xmlns:" + prefix
838
+ else:
839
+ declname = "xmlns"
840
+ if attrs:
841
+ attrs = "%s\n %s='%s'" % (attrs, declname, uri)
842
+ else:
843
+ attrs = " %s='%s'" % (declname, uri)
844
+ context = context.parentNode
845
+ return attrs
846
+
847
+
848
+ class ParseEscape(Exception):
849
+ """Exception raised to short-circuit parsing in InternalSubsetExtractor."""
850
+ pass
851
+
852
+ class InternalSubsetExtractor(ExpatBuilder):
853
+ """XML processor which can rip out the internal document type subset."""
854
+
855
+ subset = None
856
+
857
+ def getSubset(self):
858
+ """Return the internal subset as a string."""
859
+ return self.subset
860
+
861
+ def parseFile(self, file):
862
+ try:
863
+ ExpatBuilder.parseFile(self, file)
864
+ except ParseEscape:
865
+ pass
866
+
867
+ def parseString(self, string):
868
+ try:
869
+ ExpatBuilder.parseString(self, string)
870
+ except ParseEscape:
871
+ pass
872
+
873
+ def install(self, parser):
874
+ parser.StartDoctypeDeclHandler = self.start_doctype_decl_handler
875
+ parser.StartElementHandler = self.start_element_handler
876
+
877
+ def start_doctype_decl_handler(self, name, publicId, systemId,
878
+ has_internal_subset):
879
+ if has_internal_subset:
880
+ parser = self.getParser()
881
+ self.subset = []
882
+ parser.DefaultHandler = self.subset.append
883
+ parser.EndDoctypeDeclHandler = self.end_doctype_decl_handler
884
+ else:
885
+ raise ParseEscape()
886
+
887
+ def end_doctype_decl_handler(self):
888
+ s = ''.join(self.subset).replace('\r\n', '\n').replace('\r', '\n')
889
+ self.subset = s
890
+ raise ParseEscape()
891
+
892
+ def start_element_handler(self, name, attrs):
893
+ raise ParseEscape()
894
+
895
+
896
+ def parse(file, namespaces=True):
897
+ """Parse a document, returning the resulting Document node.
898
+
899
+ 'file' may be either a file name or an open file object.
900
+ """
901
+ if namespaces:
902
+ builder = ExpatBuilderNS()
903
+ else:
904
+ builder = ExpatBuilder()
905
+
906
+ if isinstance(file, str):
907
+ with open(file, 'rb') as fp:
908
+ result = builder.parseFile(fp)
909
+ else:
910
+ result = builder.parseFile(file)
911
+ return result
912
+
913
+
914
+ def parseString(string, namespaces=True):
915
+ """Parse a document from a string, returning the resulting
916
+ Document node.
917
+ """
918
+ if namespaces:
919
+ builder = ExpatBuilderNS()
920
+ else:
921
+ builder = ExpatBuilder()
922
+ return builder.parseString(string)
923
+
924
+
925
+ def parseFragment(file, context, namespaces=True):
926
+ """Parse a fragment of a document, given the context from which it
927
+ was originally extracted. context should be the parent of the
928
+ node(s) which are in the fragment.
929
+
930
+ 'file' may be either a file name or an open file object.
931
+ """
932
+ if namespaces:
933
+ builder = FragmentBuilderNS(context)
934
+ else:
935
+ builder = FragmentBuilder(context)
936
+
937
+ if isinstance(file, str):
938
+ with open(file, 'rb') as fp:
939
+ result = builder.parseFile(fp)
940
+ else:
941
+ result = builder.parseFile(file)
942
+ return result
943
+
944
+
945
+ def parseFragmentString(string, context, namespaces=True):
946
+ """Parse a fragment of a document from a string, given the context
947
+ from which it was originally extracted. context should be the
948
+ parent of the node(s) which are in the fragment.
949
+ """
950
+ if namespaces:
951
+ builder = FragmentBuilderNS(context)
952
+ else:
953
+ builder = FragmentBuilder(context)
954
+ return builder.parseString(string)
955
+
956
+
957
+ def makeBuilder(options):
958
+ """Create a builder based on an Options object."""
959
+ if options.namespaces:
960
+ return ExpatBuilderNS(options)
961
+ else:
962
+ return ExpatBuilder(options)