@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,1080 @@
1
+ # Copyright 2001-2023 by Vinay Sajip. All Rights Reserved.
2
+ #
3
+ # Permission to use, copy, modify, and distribute this software and its
4
+ # documentation for any purpose and without fee is hereby granted,
5
+ # provided that the above copyright notice appear in all copies and that
6
+ # both that copyright notice and this permission notice appear in
7
+ # supporting documentation, and that the name of Vinay Sajip
8
+ # not be used in advertising or publicity pertaining to distribution
9
+ # of the software without specific, written prior permission.
10
+ # VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
11
+ # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
12
+ # VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
13
+ # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
14
+ # IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15
+ # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+
17
+ """
18
+ Configuration functions for the logging package for Python. The core package
19
+ is based on PEP 282 and comments thereto in comp.lang.python, and influenced
20
+ by Apache's log4j system.
21
+
22
+ Copyright (C) 2001-2022 Vinay Sajip. All Rights Reserved.
23
+
24
+ To use, simply 'import logging' and log away!
25
+ """
26
+
27
+ import errno
28
+ import functools
29
+ import io
30
+ import logging
31
+ import logging.handlers
32
+ import os
33
+ import queue
34
+ import re
35
+ import socket
36
+ import struct
37
+ import threading
38
+ import traceback
39
+
40
+ from socketserver import ThreadingTCPServer, StreamRequestHandler
41
+
42
+
43
+ DEFAULT_LOGGING_CONFIG_PORT = 9030
44
+
45
+ RESET_ERROR = errno.ECONNRESET
46
+
47
+ #
48
+ # The following code implements a socket listener for on-the-fly
49
+ # reconfiguration of logging.
50
+ #
51
+ # _listener holds the server object doing the listening
52
+ _listener = None
53
+
54
+ def fileConfig(fname, defaults=None, disable_existing_loggers=True, encoding=None):
55
+ """
56
+ Read the logging configuration from a ConfigParser-format file.
57
+
58
+ This can be called several times from an application, allowing an end user
59
+ the ability to select from various pre-canned configurations (if the
60
+ developer provides a mechanism to present the choices and load the chosen
61
+ configuration).
62
+ """
63
+ import configparser
64
+
65
+ if isinstance(fname, str):
66
+ if not os.path.exists(fname):
67
+ raise FileNotFoundError(f"{fname} doesn't exist")
68
+ elif not os.path.getsize(fname):
69
+ raise RuntimeError(f'{fname} is an empty file')
70
+
71
+ if isinstance(fname, configparser.RawConfigParser):
72
+ cp = fname
73
+ else:
74
+ try:
75
+ cp = configparser.ConfigParser(defaults)
76
+ if hasattr(fname, 'readline'):
77
+ cp.read_file(fname)
78
+ else:
79
+ encoding = io.text_encoding(encoding)
80
+ cp.read(fname, encoding=encoding)
81
+ except configparser.ParsingError as e:
82
+ raise RuntimeError(f'{fname} is invalid: {e}')
83
+
84
+ formatters = _create_formatters(cp)
85
+
86
+ # critical section
87
+ with logging._lock:
88
+ _clearExistingHandlers()
89
+
90
+ # Handlers add themselves to logging._handlers
91
+ handlers = _install_handlers(cp, formatters)
92
+ _install_loggers(cp, handlers, disable_existing_loggers)
93
+
94
+
95
+ def _resolve(name):
96
+ """Resolve a dotted name to a global object."""
97
+ name = name.split('.')
98
+ used = name.pop(0)
99
+ found = __import__(used)
100
+ for n in name:
101
+ used = used + '.' + n
102
+ try:
103
+ found = getattr(found, n)
104
+ except AttributeError:
105
+ __import__(used)
106
+ found = getattr(found, n)
107
+ return found
108
+
109
+ def _strip_spaces(alist):
110
+ return map(str.strip, alist)
111
+
112
+ def _create_formatters(cp):
113
+ """Create and return formatters"""
114
+ flist = cp["formatters"]["keys"]
115
+ if not len(flist):
116
+ return {}
117
+ flist = flist.split(",")
118
+ flist = _strip_spaces(flist)
119
+ formatters = {}
120
+ for form in flist:
121
+ sectname = "formatter_%s" % form
122
+ fs = cp.get(sectname, "format", raw=True, fallback=None)
123
+ dfs = cp.get(sectname, "datefmt", raw=True, fallback=None)
124
+ stl = cp.get(sectname, "style", raw=True, fallback='%')
125
+ defaults = cp.get(sectname, "defaults", raw=True, fallback=None)
126
+
127
+ c = logging.Formatter
128
+ class_name = cp[sectname].get("class")
129
+ if class_name:
130
+ c = _resolve(class_name)
131
+
132
+ if defaults is not None:
133
+ defaults = eval(defaults, vars(logging))
134
+ f = c(fs, dfs, stl, defaults=defaults)
135
+ else:
136
+ f = c(fs, dfs, stl)
137
+ formatters[form] = f
138
+ return formatters
139
+
140
+
141
+ def _install_handlers(cp, formatters):
142
+ """Install and return handlers"""
143
+ hlist = cp["handlers"]["keys"]
144
+ if not len(hlist):
145
+ return {}
146
+ hlist = hlist.split(",")
147
+ hlist = _strip_spaces(hlist)
148
+ handlers = {}
149
+ fixups = [] #for inter-handler references
150
+ for hand in hlist:
151
+ section = cp["handler_%s" % hand]
152
+ klass = section["class"]
153
+ fmt = section.get("formatter", "")
154
+ try:
155
+ klass = eval(klass, vars(logging))
156
+ except (AttributeError, NameError):
157
+ klass = _resolve(klass)
158
+ args = section.get("args", '()')
159
+ args = eval(args, vars(logging))
160
+ kwargs = section.get("kwargs", '{}')
161
+ kwargs = eval(kwargs, vars(logging))
162
+ h = klass(*args, **kwargs)
163
+ h.name = hand
164
+ if "level" in section:
165
+ level = section["level"]
166
+ h.setLevel(level)
167
+ if len(fmt):
168
+ h.setFormatter(formatters[fmt])
169
+ if issubclass(klass, logging.handlers.MemoryHandler):
170
+ target = section.get("target", "")
171
+ if len(target): #the target handler may not be loaded yet, so keep for later...
172
+ fixups.append((h, target))
173
+ handlers[hand] = h
174
+ #now all handlers are loaded, fixup inter-handler references...
175
+ for h, t in fixups:
176
+ h.setTarget(handlers[t])
177
+ return handlers
178
+
179
+ def _handle_existing_loggers(existing, child_loggers, disable_existing):
180
+ """
181
+ When (re)configuring logging, handle loggers which were in the previous
182
+ configuration but are not in the new configuration. There's no point
183
+ deleting them as other threads may continue to hold references to them;
184
+ and by disabling them, you stop them doing any logging.
185
+
186
+ However, don't disable children of named loggers, as that's probably not
187
+ what was intended by the user. Also, allow existing loggers to NOT be
188
+ disabled if disable_existing is false.
189
+ """
190
+ root = logging.root
191
+ for log in existing:
192
+ logger = root.manager.loggerDict[log]
193
+ if log in child_loggers:
194
+ if not isinstance(logger, logging.PlaceHolder):
195
+ logger.setLevel(logging.NOTSET)
196
+ logger.handlers = []
197
+ logger.propagate = True
198
+ else:
199
+ logger.disabled = disable_existing
200
+
201
+ def _install_loggers(cp, handlers, disable_existing):
202
+ """Create and install loggers"""
203
+
204
+ # configure the root first
205
+ llist = cp["loggers"]["keys"]
206
+ llist = llist.split(",")
207
+ llist = list(_strip_spaces(llist))
208
+ llist.remove("root")
209
+ section = cp["logger_root"]
210
+ root = logging.root
211
+ log = root
212
+ if "level" in section:
213
+ level = section["level"]
214
+ log.setLevel(level)
215
+ for h in root.handlers[:]:
216
+ root.removeHandler(h)
217
+ hlist = section["handlers"]
218
+ if len(hlist):
219
+ hlist = hlist.split(",")
220
+ hlist = _strip_spaces(hlist)
221
+ for hand in hlist:
222
+ log.addHandler(handlers[hand])
223
+
224
+ #and now the others...
225
+ #we don't want to lose the existing loggers,
226
+ #since other threads may have pointers to them.
227
+ #existing is set to contain all existing loggers,
228
+ #and as we go through the new configuration we
229
+ #remove any which are configured. At the end,
230
+ #what's left in existing is the set of loggers
231
+ #which were in the previous configuration but
232
+ #which are not in the new configuration.
233
+ existing = list(root.manager.loggerDict.keys())
234
+ #The list needs to be sorted so that we can
235
+ #avoid disabling child loggers of explicitly
236
+ #named loggers. With a sorted list it is easier
237
+ #to find the child loggers.
238
+ existing.sort()
239
+ #We'll keep the list of existing loggers
240
+ #which are children of named loggers here...
241
+ child_loggers = []
242
+ #now set up the new ones...
243
+ for log in llist:
244
+ section = cp["logger_%s" % log]
245
+ qn = section["qualname"]
246
+ propagate = section.getint("propagate", fallback=1)
247
+ logger = logging.getLogger(qn)
248
+ if qn in existing:
249
+ i = existing.index(qn) + 1 # start with the entry after qn
250
+ prefixed = qn + "."
251
+ pflen = len(prefixed)
252
+ num_existing = len(existing)
253
+ while i < num_existing:
254
+ if existing[i][:pflen] == prefixed:
255
+ child_loggers.append(existing[i])
256
+ i += 1
257
+ existing.remove(qn)
258
+ if "level" in section:
259
+ level = section["level"]
260
+ logger.setLevel(level)
261
+ for h in logger.handlers[:]:
262
+ logger.removeHandler(h)
263
+ logger.propagate = propagate
264
+ logger.disabled = 0
265
+ hlist = section["handlers"]
266
+ if len(hlist):
267
+ hlist = hlist.split(",")
268
+ hlist = _strip_spaces(hlist)
269
+ for hand in hlist:
270
+ logger.addHandler(handlers[hand])
271
+
272
+ #Disable any old loggers. There's no point deleting
273
+ #them as other threads may continue to hold references
274
+ #and by disabling them, you stop them doing any logging.
275
+ #However, don't disable children of named loggers, as that's
276
+ #probably not what was intended by the user.
277
+ #for log in existing:
278
+ # logger = root.manager.loggerDict[log]
279
+ # if log in child_loggers:
280
+ # logger.level = logging.NOTSET
281
+ # logger.handlers = []
282
+ # logger.propagate = 1
283
+ # elif disable_existing_loggers:
284
+ # logger.disabled = 1
285
+ _handle_existing_loggers(existing, child_loggers, disable_existing)
286
+
287
+
288
+ def _clearExistingHandlers():
289
+ """Clear and close existing handlers"""
290
+ logging._handlers.clear()
291
+ logging.shutdown(logging._handlerList[:])
292
+ del logging._handlerList[:]
293
+
294
+
295
+ IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I)
296
+
297
+
298
+ def valid_ident(s):
299
+ m = IDENTIFIER.match(s)
300
+ if not m:
301
+ raise ValueError('Not a valid Python identifier: %r' % s)
302
+ return True
303
+
304
+
305
+ class ConvertingMixin(object):
306
+ """For ConvertingXXX's, this mixin class provides common functions"""
307
+
308
+ def convert_with_key(self, key, value, replace=True):
309
+ result = self.configurator.convert(value)
310
+ #If the converted value is different, save for next time
311
+ if value is not result:
312
+ if replace:
313
+ self[key] = result
314
+ if type(result) in (ConvertingDict, ConvertingList,
315
+ ConvertingTuple):
316
+ result.parent = self
317
+ result.key = key
318
+ return result
319
+
320
+ def convert(self, value):
321
+ result = self.configurator.convert(value)
322
+ if value is not result:
323
+ if type(result) in (ConvertingDict, ConvertingList,
324
+ ConvertingTuple):
325
+ result.parent = self
326
+ return result
327
+
328
+
329
+ # The ConvertingXXX classes are wrappers around standard Python containers,
330
+ # and they serve to convert any suitable values in the container. The
331
+ # conversion converts base dicts, lists and tuples to their wrapped
332
+ # equivalents, whereas strings which match a conversion format are converted
333
+ # appropriately.
334
+ #
335
+ # Each wrapper should have a configurator attribute holding the actual
336
+ # configurator to use for conversion.
337
+
338
+ class ConvertingDict(dict, ConvertingMixin):
339
+ """A converting dictionary wrapper."""
340
+
341
+ def __getitem__(self, key):
342
+ value = dict.__getitem__(self, key)
343
+ return self.convert_with_key(key, value)
344
+
345
+ def get(self, key, default=None):
346
+ value = dict.get(self, key, default)
347
+ return self.convert_with_key(key, value)
348
+
349
+ def pop(self, key, default=None):
350
+ value = dict.pop(self, key, default)
351
+ return self.convert_with_key(key, value, replace=False)
352
+
353
+ class ConvertingList(list, ConvertingMixin):
354
+ """A converting list wrapper."""
355
+ def __getitem__(self, key):
356
+ value = list.__getitem__(self, key)
357
+ return self.convert_with_key(key, value)
358
+
359
+ def pop(self, idx=-1):
360
+ value = list.pop(self, idx)
361
+ return self.convert(value)
362
+
363
+ class ConvertingTuple(tuple, ConvertingMixin):
364
+ """A converting tuple wrapper."""
365
+ def __getitem__(self, key):
366
+ value = tuple.__getitem__(self, key)
367
+ # Can't replace a tuple entry.
368
+ return self.convert_with_key(key, value, replace=False)
369
+
370
+ class BaseConfigurator(object):
371
+ """
372
+ The configurator base class which defines some useful defaults.
373
+ """
374
+
375
+ CONVERT_PATTERN = re.compile(r'^(?P<prefix>[a-z]+)://(?P<suffix>.*)$')
376
+
377
+ WORD_PATTERN = re.compile(r'^\s*(\w+)\s*')
378
+ DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*')
379
+ INDEX_PATTERN = re.compile(r'^\[([^\[\]]*)\]\s*')
380
+ DIGIT_PATTERN = re.compile(r'^\d+$')
381
+
382
+ value_converters = {
383
+ 'ext' : 'ext_convert',
384
+ 'cfg' : 'cfg_convert',
385
+ }
386
+
387
+ # We might want to use a different one, e.g. importlib
388
+ importer = staticmethod(__import__)
389
+
390
+ def __init__(self, config):
391
+ self.config = ConvertingDict(config)
392
+ self.config.configurator = self
393
+
394
+ def resolve(self, s):
395
+ """
396
+ Resolve strings to objects using standard import and attribute
397
+ syntax.
398
+ """
399
+ name = s.split('.')
400
+ used = name.pop(0)
401
+ try:
402
+ found = self.importer(used)
403
+ for frag in name:
404
+ used += '.' + frag
405
+ try:
406
+ found = getattr(found, frag)
407
+ except AttributeError:
408
+ self.importer(used)
409
+ found = getattr(found, frag)
410
+ return found
411
+ except ImportError as e:
412
+ v = ValueError('Cannot resolve %r: %s' % (s, e))
413
+ raise v from e
414
+
415
+ def ext_convert(self, value):
416
+ """Default converter for the ext:// protocol."""
417
+ return self.resolve(value)
418
+
419
+ def cfg_convert(self, value):
420
+ """Default converter for the cfg:// protocol."""
421
+ rest = value
422
+ m = self.WORD_PATTERN.match(rest)
423
+ if m is None:
424
+ raise ValueError("Unable to convert %r" % value)
425
+ else:
426
+ rest = rest[m.end():]
427
+ d = self.config[m.groups()[0]]
428
+ #print d, rest
429
+ while rest:
430
+ m = self.DOT_PATTERN.match(rest)
431
+ if m:
432
+ d = d[m.groups()[0]]
433
+ else:
434
+ m = self.INDEX_PATTERN.match(rest)
435
+ if m:
436
+ idx = m.groups()[0]
437
+ if not self.DIGIT_PATTERN.match(idx):
438
+ d = d[idx]
439
+ else:
440
+ try:
441
+ n = int(idx) # try as number first (most likely)
442
+ d = d[n]
443
+ except TypeError:
444
+ d = d[idx]
445
+ if m:
446
+ rest = rest[m.end():]
447
+ else:
448
+ raise ValueError('Unable to convert '
449
+ '%r at %r' % (value, rest))
450
+ #rest should be empty
451
+ return d
452
+
453
+ def convert(self, value):
454
+ """
455
+ Convert values to an appropriate type. dicts, lists and tuples are
456
+ replaced by their converting alternatives. Strings are checked to
457
+ see if they have a conversion format and are converted if they do.
458
+ """
459
+ if not isinstance(value, ConvertingDict) and isinstance(value, dict):
460
+ value = ConvertingDict(value)
461
+ value.configurator = self
462
+ elif not isinstance(value, ConvertingList) and isinstance(value, list):
463
+ value = ConvertingList(value)
464
+ value.configurator = self
465
+ elif not isinstance(value, ConvertingTuple) and\
466
+ isinstance(value, tuple) and not hasattr(value, '_fields'):
467
+ value = ConvertingTuple(value)
468
+ value.configurator = self
469
+ elif isinstance(value, str): # str for py3k
470
+ m = self.CONVERT_PATTERN.match(value)
471
+ if m:
472
+ d = m.groupdict()
473
+ prefix = d['prefix']
474
+ converter = self.value_converters.get(prefix, None)
475
+ if converter:
476
+ suffix = d['suffix']
477
+ converter = getattr(self, converter)
478
+ value = converter(suffix)
479
+ return value
480
+
481
+ def configure_custom(self, config):
482
+ """Configure an object with a user-supplied factory."""
483
+ c = config.pop('()')
484
+ if not callable(c):
485
+ c = self.resolve(c)
486
+ # Check for valid identifiers
487
+ kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))}
488
+ result = c(**kwargs)
489
+ props = config.pop('.', None)
490
+ if props:
491
+ for name, value in props.items():
492
+ setattr(result, name, value)
493
+ return result
494
+
495
+ def as_tuple(self, value):
496
+ """Utility function which converts lists to tuples."""
497
+ if isinstance(value, list):
498
+ value = tuple(value)
499
+ return value
500
+
501
+ def _is_queue_like_object(obj):
502
+ """Check that *obj* implements the Queue API."""
503
+ if isinstance(obj, (queue.Queue, queue.SimpleQueue)):
504
+ return True
505
+ # defer importing multiprocessing as much as possible
506
+ from multiprocessing.queues import Queue as MPQueue
507
+ if isinstance(obj, MPQueue):
508
+ return True
509
+ # Depending on the multiprocessing start context, we cannot create
510
+ # a multiprocessing.managers.BaseManager instance 'mm' to get the
511
+ # runtime type of mm.Queue() or mm.JoinableQueue() (see gh-119819).
512
+ #
513
+ # Since we only need an object implementing the Queue API, we only
514
+ # do a protocol check, but we do not use typing.runtime_checkable()
515
+ # and typing.Protocol to reduce import time (see gh-121723).
516
+ #
517
+ # Ideally, we would have wanted to simply use strict type checking
518
+ # instead of a protocol-based type checking since the latter does
519
+ # not check the method signatures.
520
+ #
521
+ # Note that only 'put_nowait' and 'get' are required by the logging
522
+ # queue handler and queue listener (see gh-124653) and that other
523
+ # methods are either optional or unused.
524
+ minimal_queue_interface = ['put_nowait', 'get']
525
+ return all(callable(getattr(obj, method, None))
526
+ for method in minimal_queue_interface)
527
+
528
+ class DictConfigurator(BaseConfigurator):
529
+ """
530
+ Configure logging using a dictionary-like object to describe the
531
+ configuration.
532
+ """
533
+
534
+ def configure(self):
535
+ """Do the configuration."""
536
+
537
+ config = self.config
538
+ if 'version' not in config:
539
+ raise ValueError("dictionary doesn't specify a version")
540
+ if config['version'] != 1:
541
+ raise ValueError("Unsupported version: %s" % config['version'])
542
+ incremental = config.pop('incremental', False)
543
+ EMPTY_DICT = {}
544
+ with logging._lock:
545
+ if incremental:
546
+ handlers = config.get('handlers', EMPTY_DICT)
547
+ for name in handlers:
548
+ if name not in logging._handlers:
549
+ raise ValueError('No handler found with '
550
+ 'name %r' % name)
551
+ else:
552
+ try:
553
+ handler = logging._handlers[name]
554
+ handler_config = handlers[name]
555
+ level = handler_config.get('level', None)
556
+ if level:
557
+ handler.setLevel(logging._checkLevel(level))
558
+ except Exception as e:
559
+ raise ValueError('Unable to configure handler '
560
+ '%r' % name) from e
561
+ loggers = config.get('loggers', EMPTY_DICT)
562
+ for name in loggers:
563
+ try:
564
+ self.configure_logger(name, loggers[name], True)
565
+ except Exception as e:
566
+ raise ValueError('Unable to configure logger '
567
+ '%r' % name) from e
568
+ root = config.get('root', None)
569
+ if root:
570
+ try:
571
+ self.configure_root(root, True)
572
+ except Exception as e:
573
+ raise ValueError('Unable to configure root '
574
+ 'logger') from e
575
+ else:
576
+ disable_existing = config.pop('disable_existing_loggers', True)
577
+
578
+ _clearExistingHandlers()
579
+
580
+ # Do formatters first - they don't refer to anything else
581
+ formatters = config.get('formatters', EMPTY_DICT)
582
+ for name in formatters:
583
+ try:
584
+ formatters[name] = self.configure_formatter(
585
+ formatters[name])
586
+ except Exception as e:
587
+ raise ValueError('Unable to configure '
588
+ 'formatter %r' % name) from e
589
+ # Next, do filters - they don't refer to anything else, either
590
+ filters = config.get('filters', EMPTY_DICT)
591
+ for name in filters:
592
+ try:
593
+ filters[name] = self.configure_filter(filters[name])
594
+ except Exception as e:
595
+ raise ValueError('Unable to configure '
596
+ 'filter %r' % name) from e
597
+
598
+ # Next, do handlers - they refer to formatters and filters
599
+ # As handlers can refer to other handlers, sort the keys
600
+ # to allow a deterministic order of configuration
601
+ handlers = config.get('handlers', EMPTY_DICT)
602
+ deferred = []
603
+ for name in sorted(handlers):
604
+ try:
605
+ handler = self.configure_handler(handlers[name])
606
+ handler.name = name
607
+ handlers[name] = handler
608
+ except Exception as e:
609
+ if ' not configured yet' in str(e.__cause__):
610
+ deferred.append(name)
611
+ else:
612
+ raise ValueError('Unable to configure handler '
613
+ '%r' % name) from e
614
+
615
+ # Now do any that were deferred
616
+ for name in deferred:
617
+ try:
618
+ handler = self.configure_handler(handlers[name])
619
+ handler.name = name
620
+ handlers[name] = handler
621
+ except Exception as e:
622
+ raise ValueError('Unable to configure handler '
623
+ '%r' % name) from e
624
+
625
+ # Next, do loggers - they refer to handlers and filters
626
+
627
+ #we don't want to lose the existing loggers,
628
+ #since other threads may have pointers to them.
629
+ #existing is set to contain all existing loggers,
630
+ #and as we go through the new configuration we
631
+ #remove any which are configured. At the end,
632
+ #what's left in existing is the set of loggers
633
+ #which were in the previous configuration but
634
+ #which are not in the new configuration.
635
+ root = logging.root
636
+ existing = list(root.manager.loggerDict.keys())
637
+ #The list needs to be sorted so that we can
638
+ #avoid disabling child loggers of explicitly
639
+ #named loggers. With a sorted list it is easier
640
+ #to find the child loggers.
641
+ existing.sort()
642
+ #We'll keep the list of existing loggers
643
+ #which are children of named loggers here...
644
+ child_loggers = []
645
+ #now set up the new ones...
646
+ loggers = config.get('loggers', EMPTY_DICT)
647
+ for name in loggers:
648
+ if name in existing:
649
+ i = existing.index(name) + 1 # look after name
650
+ prefixed = name + "."
651
+ pflen = len(prefixed)
652
+ num_existing = len(existing)
653
+ while i < num_existing:
654
+ if existing[i][:pflen] == prefixed:
655
+ child_loggers.append(existing[i])
656
+ i += 1
657
+ existing.remove(name)
658
+ try:
659
+ self.configure_logger(name, loggers[name])
660
+ except Exception as e:
661
+ raise ValueError('Unable to configure logger '
662
+ '%r' % name) from e
663
+
664
+ #Disable any old loggers. There's no point deleting
665
+ #them as other threads may continue to hold references
666
+ #and by disabling them, you stop them doing any logging.
667
+ #However, don't disable children of named loggers, as that's
668
+ #probably not what was intended by the user.
669
+ #for log in existing:
670
+ # logger = root.manager.loggerDict[log]
671
+ # if log in child_loggers:
672
+ # logger.level = logging.NOTSET
673
+ # logger.handlers = []
674
+ # logger.propagate = True
675
+ # elif disable_existing:
676
+ # logger.disabled = True
677
+ _handle_existing_loggers(existing, child_loggers,
678
+ disable_existing)
679
+
680
+ # And finally, do the root logger
681
+ root = config.get('root', None)
682
+ if root:
683
+ try:
684
+ self.configure_root(root)
685
+ except Exception as e:
686
+ raise ValueError('Unable to configure root '
687
+ 'logger') from e
688
+
689
+ def configure_formatter(self, config):
690
+ """Configure a formatter from a dictionary."""
691
+ if '()' in config:
692
+ factory = config['()'] # for use in exception handler
693
+ try:
694
+ result = self.configure_custom(config)
695
+ except TypeError as te:
696
+ if "'format'" not in str(te):
697
+ raise
698
+ # logging.Formatter and its subclasses expect the `fmt`
699
+ # parameter instead of `format`. Retry passing configuration
700
+ # with `fmt`.
701
+ config['fmt'] = config.pop('format')
702
+ config['()'] = factory
703
+ result = self.configure_custom(config)
704
+ else:
705
+ fmt = config.get('format', None)
706
+ dfmt = config.get('datefmt', None)
707
+ style = config.get('style', '%')
708
+ cname = config.get('class', None)
709
+ defaults = config.get('defaults', None)
710
+
711
+ if not cname:
712
+ c = logging.Formatter
713
+ else:
714
+ c = _resolve(cname)
715
+
716
+ kwargs = {}
717
+
718
+ # Add defaults only if it exists.
719
+ # Prevents TypeError in custom formatter callables that do not
720
+ # accept it.
721
+ if defaults is not None:
722
+ kwargs['defaults'] = defaults
723
+
724
+ # A TypeError would be raised if "validate" key is passed in with a formatter callable
725
+ # that does not accept "validate" as a parameter
726
+ if 'validate' in config: # if user hasn't mentioned it, the default will be fine
727
+ result = c(fmt, dfmt, style, config['validate'], **kwargs)
728
+ else:
729
+ result = c(fmt, dfmt, style, **kwargs)
730
+
731
+ return result
732
+
733
+ def configure_filter(self, config):
734
+ """Configure a filter from a dictionary."""
735
+ if '()' in config:
736
+ result = self.configure_custom(config)
737
+ else:
738
+ name = config.get('name', '')
739
+ result = logging.Filter(name)
740
+ return result
741
+
742
+ def add_filters(self, filterer, filters):
743
+ """Add filters to a filterer from a list of names."""
744
+ for f in filters:
745
+ try:
746
+ if callable(f) or callable(getattr(f, 'filter', None)):
747
+ filter_ = f
748
+ else:
749
+ filter_ = self.config['filters'][f]
750
+ filterer.addFilter(filter_)
751
+ except Exception as e:
752
+ raise ValueError('Unable to add filter %r' % f) from e
753
+
754
+ def _configure_queue_handler(self, klass, **kwargs):
755
+ if 'queue' in kwargs:
756
+ q = kwargs.pop('queue')
757
+ else:
758
+ q = queue.Queue() # unbounded
759
+
760
+ rhl = kwargs.pop('respect_handler_level', False)
761
+ lklass = kwargs.pop('listener', logging.handlers.QueueListener)
762
+ handlers = kwargs.pop('handlers', [])
763
+
764
+ listener = lklass(q, *handlers, respect_handler_level=rhl)
765
+ handler = klass(q, **kwargs)
766
+ handler.listener = listener
767
+ return handler
768
+
769
+ def configure_handler(self, config):
770
+ """Configure a handler from a dictionary."""
771
+ config_copy = dict(config) # for restoring in case of error
772
+ formatter = config.pop('formatter', None)
773
+ if formatter:
774
+ try:
775
+ formatter = self.config['formatters'][formatter]
776
+ except Exception as e:
777
+ raise ValueError('Unable to set formatter '
778
+ '%r' % formatter) from e
779
+ level = config.pop('level', None)
780
+ filters = config.pop('filters', None)
781
+ if '()' in config:
782
+ c = config.pop('()')
783
+ if not callable(c):
784
+ c = self.resolve(c)
785
+ factory = c
786
+ else:
787
+ cname = config.pop('class')
788
+ if callable(cname):
789
+ klass = cname
790
+ else:
791
+ klass = self.resolve(cname)
792
+ if issubclass(klass, logging.handlers.MemoryHandler):
793
+ if 'flushLevel' in config:
794
+ config['flushLevel'] = logging._checkLevel(config['flushLevel'])
795
+ if 'target' in config:
796
+ # Special case for handler which refers to another handler
797
+ try:
798
+ tn = config['target']
799
+ th = self.config['handlers'][tn]
800
+ if not isinstance(th, logging.Handler):
801
+ config.update(config_copy) # restore for deferred cfg
802
+ raise TypeError('target not configured yet')
803
+ config['target'] = th
804
+ except Exception as e:
805
+ raise ValueError('Unable to set target handler %r' % tn) from e
806
+ elif issubclass(klass, logging.handlers.QueueHandler):
807
+ # Another special case for handler which refers to other handlers
808
+ # if 'handlers' not in config:
809
+ # raise ValueError('No handlers specified for a QueueHandler')
810
+ if 'queue' in config:
811
+ qspec = config['queue']
812
+
813
+ if isinstance(qspec, str):
814
+ q = self.resolve(qspec)
815
+ if not callable(q):
816
+ raise TypeError('Invalid queue specifier %r' % qspec)
817
+ config['queue'] = q()
818
+ elif isinstance(qspec, dict):
819
+ if '()' not in qspec:
820
+ raise TypeError('Invalid queue specifier %r' % qspec)
821
+ config['queue'] = self.configure_custom(dict(qspec))
822
+ elif not _is_queue_like_object(qspec):
823
+ raise TypeError('Invalid queue specifier %r' % qspec)
824
+
825
+ if 'listener' in config:
826
+ lspec = config['listener']
827
+ if isinstance(lspec, type):
828
+ if not issubclass(lspec, logging.handlers.QueueListener):
829
+ raise TypeError('Invalid listener specifier %r' % lspec)
830
+ else:
831
+ if isinstance(lspec, str):
832
+ listener = self.resolve(lspec)
833
+ if isinstance(listener, type) and\
834
+ not issubclass(listener, logging.handlers.QueueListener):
835
+ raise TypeError('Invalid listener specifier %r' % lspec)
836
+ elif isinstance(lspec, dict):
837
+ if '()' not in lspec:
838
+ raise TypeError('Invalid listener specifier %r' % lspec)
839
+ listener = self.configure_custom(dict(lspec))
840
+ else:
841
+ raise TypeError('Invalid listener specifier %r' % lspec)
842
+ if not callable(listener):
843
+ raise TypeError('Invalid listener specifier %r' % lspec)
844
+ config['listener'] = listener
845
+ if 'handlers' in config:
846
+ hlist = []
847
+ try:
848
+ for hn in config['handlers']:
849
+ h = self.config['handlers'][hn]
850
+ if not isinstance(h, logging.Handler):
851
+ config.update(config_copy) # restore for deferred cfg
852
+ raise TypeError('Required handler %r '
853
+ 'is not configured yet' % hn)
854
+ hlist.append(h)
855
+ except Exception as e:
856
+ raise ValueError('Unable to set required handler %r' % hn) from e
857
+ config['handlers'] = hlist
858
+ elif issubclass(klass, logging.handlers.SMTPHandler) and\
859
+ 'mailhost' in config:
860
+ config['mailhost'] = self.as_tuple(config['mailhost'])
861
+ elif issubclass(klass, logging.handlers.SysLogHandler) and\
862
+ 'address' in config:
863
+ config['address'] = self.as_tuple(config['address'])
864
+ if issubclass(klass, logging.handlers.QueueHandler):
865
+ factory = functools.partial(self._configure_queue_handler, klass)
866
+ else:
867
+ factory = klass
868
+ kwargs = {k: config[k] for k in config if (k != '.' and valid_ident(k))}
869
+ try:
870
+ result = factory(**kwargs)
871
+ except TypeError as te:
872
+ if "'stream'" not in str(te):
873
+ raise
874
+ #The argument name changed from strm to stream
875
+ #Retry with old name.
876
+ #This is so that code can be used with older Python versions
877
+ #(e.g. by Django)
878
+ kwargs['strm'] = kwargs.pop('stream')
879
+ result = factory(**kwargs)
880
+ if formatter:
881
+ result.setFormatter(formatter)
882
+ if level is not None:
883
+ result.setLevel(logging._checkLevel(level))
884
+ if filters:
885
+ self.add_filters(result, filters)
886
+ props = config.pop('.', None)
887
+ if props:
888
+ for name, value in props.items():
889
+ setattr(result, name, value)
890
+ return result
891
+
892
+ def add_handlers(self, logger, handlers):
893
+ """Add handlers to a logger from a list of names."""
894
+ for h in handlers:
895
+ try:
896
+ logger.addHandler(self.config['handlers'][h])
897
+ except Exception as e:
898
+ raise ValueError('Unable to add handler %r' % h) from e
899
+
900
+ def common_logger_config(self, logger, config, incremental=False):
901
+ """
902
+ Perform configuration which is common to root and non-root loggers.
903
+ """
904
+ level = config.get('level', None)
905
+ if level is not None:
906
+ logger.setLevel(logging._checkLevel(level))
907
+ if not incremental:
908
+ #Remove any existing handlers
909
+ for h in logger.handlers[:]:
910
+ logger.removeHandler(h)
911
+ handlers = config.get('handlers', None)
912
+ if handlers:
913
+ self.add_handlers(logger, handlers)
914
+ filters = config.get('filters', None)
915
+ if filters:
916
+ self.add_filters(logger, filters)
917
+
918
+ def configure_logger(self, name, config, incremental=False):
919
+ """Configure a non-root logger from a dictionary."""
920
+ logger = logging.getLogger(name)
921
+ self.common_logger_config(logger, config, incremental)
922
+ logger.disabled = False
923
+ propagate = config.get('propagate', None)
924
+ if propagate is not None:
925
+ logger.propagate = propagate
926
+
927
+ def configure_root(self, config, incremental=False):
928
+ """Configure a root logger from a dictionary."""
929
+ root = logging.getLogger()
930
+ self.common_logger_config(root, config, incremental)
931
+
932
+ dictConfigClass = DictConfigurator
933
+
934
+ def dictConfig(config):
935
+ """Configure logging using a dictionary."""
936
+ dictConfigClass(config).configure()
937
+
938
+
939
+ def listen(port=DEFAULT_LOGGING_CONFIG_PORT, verify=None):
940
+ """
941
+ Start up a socket server on the specified port, and listen for new
942
+ configurations.
943
+
944
+ These will be sent as a file suitable for processing by fileConfig().
945
+ Returns a Thread object on which you can call start() to start the server,
946
+ and which you can join() when appropriate. To stop the server, call
947
+ stopListening().
948
+
949
+ Use the ``verify`` argument to verify any bytes received across the wire
950
+ from a client. If specified, it should be a callable which receives a
951
+ single argument - the bytes of configuration data received across the
952
+ network - and it should return either ``None``, to indicate that the
953
+ passed in bytes could not be verified and should be discarded, or a
954
+ byte string which is then passed to the configuration machinery as
955
+ normal. Note that you can return transformed bytes, e.g. by decrypting
956
+ the bytes passed in.
957
+ """
958
+
959
+ class ConfigStreamHandler(StreamRequestHandler):
960
+ """
961
+ Handler for a logging configuration request.
962
+
963
+ It expects a completely new logging configuration and uses fileConfig
964
+ to install it.
965
+ """
966
+ def handle(self):
967
+ """
968
+ Handle a request.
969
+
970
+ Each request is expected to be a 4-byte length, packed using
971
+ struct.pack(">L", n), followed by the config file.
972
+ Uses fileConfig() to do the grunt work.
973
+ """
974
+ try:
975
+ conn = self.connection
976
+ chunk = conn.recv(4)
977
+ if len(chunk) == 4:
978
+ slen = struct.unpack(">L", chunk)[0]
979
+ chunk = self.connection.recv(slen)
980
+ while len(chunk) < slen:
981
+ chunk = chunk + conn.recv(slen - len(chunk))
982
+ if self.server.verify is not None:
983
+ chunk = self.server.verify(chunk)
984
+ if chunk is not None: # verified, can process
985
+ chunk = chunk.decode("utf-8")
986
+ try:
987
+ import json
988
+ d =json.loads(chunk)
989
+ assert isinstance(d, dict)
990
+ dictConfig(d)
991
+ except Exception:
992
+ #Apply new configuration.
993
+
994
+ file = io.StringIO(chunk)
995
+ try:
996
+ fileConfig(file)
997
+ except Exception:
998
+ traceback.print_exc()
999
+ if self.server.ready:
1000
+ self.server.ready.set()
1001
+ except OSError as e:
1002
+ if e.errno != RESET_ERROR:
1003
+ raise
1004
+
1005
+ class ConfigSocketReceiver(ThreadingTCPServer):
1006
+ """
1007
+ A simple TCP socket-based logging config receiver.
1008
+ """
1009
+
1010
+ allow_reuse_address = 1
1011
+
1012
+ def __init__(self, host='localhost', port=DEFAULT_LOGGING_CONFIG_PORT,
1013
+ handler=None, ready=None, verify=None):
1014
+ # The host can have no IPv4 address, for example if "localhost"
1015
+ # is only aliased to ::1. Leave resolution errors to the server.
1016
+ try:
1017
+ infos = socket.getaddrinfo(host, port, type=socket.SOCK_STREAM)
1018
+ except OSError:
1019
+ pass
1020
+ else:
1021
+ if not any(info[0] == socket.AF_INET for info in infos):
1022
+ self.address_family = infos[0][0]
1023
+ ThreadingTCPServer.__init__(self, (host, port), handler)
1024
+ with logging._lock:
1025
+ self.abort = 0
1026
+ self.timeout = 1
1027
+ self.ready = ready
1028
+ self.verify = verify
1029
+
1030
+ def serve_until_stopped(self):
1031
+ import select
1032
+ abort = 0
1033
+ while not abort:
1034
+ rd, wr, ex = select.select([self.socket.fileno()],
1035
+ [], [],
1036
+ self.timeout)
1037
+ if rd:
1038
+ self.handle_request()
1039
+ with logging._lock:
1040
+ abort = self.abort
1041
+ self.server_close()
1042
+
1043
+ class Server(threading.Thread):
1044
+
1045
+ def __init__(self, rcvr, hdlr, port, verify):
1046
+ super(Server, self).__init__()
1047
+ self.rcvr = rcvr
1048
+ self.hdlr = hdlr
1049
+ self.port = port
1050
+ self.verify = verify
1051
+ self.ready = threading.Event()
1052
+
1053
+ def run(self):
1054
+ try:
1055
+ server = self.rcvr(port=self.port, handler=self.hdlr,
1056
+ ready=self.ready,
1057
+ verify=self.verify)
1058
+ except BaseException:
1059
+ # Do not leave the caller waiting for ready forever.
1060
+ self.ready.set()
1061
+ raise
1062
+ if self.port == 0:
1063
+ self.port = server.server_address[1]
1064
+ self.ready.set()
1065
+ global _listener
1066
+ with logging._lock:
1067
+ _listener = server
1068
+ server.serve_until_stopped()
1069
+
1070
+ return Server(ConfigSocketReceiver, ConfigStreamHandler, port, verify)
1071
+
1072
+ def stopListening():
1073
+ """
1074
+ Stop the listening server which was created with a call to listen().
1075
+ """
1076
+ global _listener
1077
+ with logging._lock:
1078
+ if _listener:
1079
+ _listener.abort = 1
1080
+ _listener = None