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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +5 -0
  3. package/package.json +26 -0
  4. package/python/bin/python3.13 +0 -0
  5. package/python/bin/python3.13-config +122 -0
  6. package/python/lib/libpython3.13.so.1.0 +0 -0
  7. package/python/lib/libpython3.so +0 -0
  8. package/python/lib/python3.13/LICENSE.txt +277 -0
  9. package/python/lib/python3.13/__future__.py +147 -0
  10. package/python/lib/python3.13/__hello__.py +16 -0
  11. package/python/lib/python3.13/_aix_support.py +108 -0
  12. package/python/lib/python3.13/_android_support.py +192 -0
  13. package/python/lib/python3.13/_apple_support.py +66 -0
  14. package/python/lib/python3.13/_collections_abc.py +1187 -0
  15. package/python/lib/python3.13/_colorize.py +119 -0
  16. package/python/lib/python3.13/_compat_pickle.py +251 -0
  17. package/python/lib/python3.13/_compression.py +162 -0
  18. package/python/lib/python3.13/_ios_support.py +71 -0
  19. package/python/lib/python3.13/_markupbase.py +396 -0
  20. package/python/lib/python3.13/_opcode_metadata.py +343 -0
  21. package/python/lib/python3.13/_osx_support.py +579 -0
  22. package/python/lib/python3.13/_py_abc.py +147 -0
  23. package/python/lib/python3.13/_pydatetime.py +2640 -0
  24. package/python/lib/python3.13/_pydecimal.py +6356 -0
  25. package/python/lib/python3.13/_pyio.py +2714 -0
  26. package/python/lib/python3.13/_pylong.py +363 -0
  27. package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
  28. package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
  29. package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
  30. package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
  31. package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
  32. package/python/lib/python3.13/_pyrepl/commands.py +492 -0
  33. package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
  34. package/python/lib/python3.13/_pyrepl/console.py +229 -0
  35. package/python/lib/python3.13/_pyrepl/curses.py +33 -0
  36. package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
  37. package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
  38. package/python/lib/python3.13/_pyrepl/input.py +114 -0
  39. package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
  40. package/python/lib/python3.13/_pyrepl/main.py +59 -0
  41. package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
  42. package/python/lib/python3.13/_pyrepl/pager.py +175 -0
  43. package/python/lib/python3.13/_pyrepl/reader.py +764 -0
  44. package/python/lib/python3.13/_pyrepl/readline.py +599 -0
  45. package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
  46. package/python/lib/python3.13/_pyrepl/trace.py +21 -0
  47. package/python/lib/python3.13/_pyrepl/types.py +10 -0
  48. package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
  49. package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
  50. package/python/lib/python3.13/_pyrepl/utils.py +83 -0
  51. package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
  52. package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
  53. package/python/lib/python3.13/_sitebuiltins.py +91 -0
  54. package/python/lib/python3.13/_strptime.py +800 -0
  55. package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
  56. package/python/lib/python3.13/_threading_local.py +120 -0
  57. package/python/lib/python3.13/_weakrefset.py +205 -0
  58. package/python/lib/python3.13/abc.py +188 -0
  59. package/python/lib/python3.13/antigravity.py +17 -0
  60. package/python/lib/python3.13/argparse.py +2690 -0
  61. package/python/lib/python3.13/ast.py +1865 -0
  62. package/python/lib/python3.13/asyncio/__init__.py +47 -0
  63. package/python/lib/python3.13/asyncio/__main__.py +211 -0
  64. package/python/lib/python3.13/asyncio/base_events.py +2086 -0
  65. package/python/lib/python3.13/asyncio/base_futures.py +67 -0
  66. package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
  67. package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
  68. package/python/lib/python3.13/asyncio/constants.py +41 -0
  69. package/python/lib/python3.13/asyncio/coroutines.py +109 -0
  70. package/python/lib/python3.13/asyncio/events.py +885 -0
  71. package/python/lib/python3.13/asyncio/exceptions.py +62 -0
  72. package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
  73. package/python/lib/python3.13/asyncio/futures.py +425 -0
  74. package/python/lib/python3.13/asyncio/locks.py +617 -0
  75. package/python/lib/python3.13/asyncio/log.py +7 -0
  76. package/python/lib/python3.13/asyncio/mixins.py +21 -0
  77. package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
  78. package/python/lib/python3.13/asyncio/protocols.py +216 -0
  79. package/python/lib/python3.13/asyncio/queues.py +309 -0
  80. package/python/lib/python3.13/asyncio/runners.py +217 -0
  81. package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
  82. package/python/lib/python3.13/asyncio/sslproto.py +929 -0
  83. package/python/lib/python3.13/asyncio/staggered.py +174 -0
  84. package/python/lib/python3.13/asyncio/streams.py +787 -0
  85. package/python/lib/python3.13/asyncio/subprocess.py +229 -0
  86. package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
  87. package/python/lib/python3.13/asyncio/tasks.py +1121 -0
  88. package/python/lib/python3.13/asyncio/threads.py +26 -0
  89. package/python/lib/python3.13/asyncio/timeouts.py +185 -0
  90. package/python/lib/python3.13/asyncio/transports.py +337 -0
  91. package/python/lib/python3.13/asyncio/trsock.py +98 -0
  92. package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
  93. package/python/lib/python3.13/asyncio/windows_events.py +906 -0
  94. package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
  95. package/python/lib/python3.13/base64.py +628 -0
  96. package/python/lib/python3.13/bdb.py +973 -0
  97. package/python/lib/python3.13/bisect.py +118 -0
  98. package/python/lib/python3.13/bz2.py +352 -0
  99. package/python/lib/python3.13/cProfile.py +197 -0
  100. package/python/lib/python3.13/calendar.py +813 -0
  101. package/python/lib/python3.13/cmd.py +409 -0
  102. package/python/lib/python3.13/code.py +386 -0
  103. package/python/lib/python3.13/codecs.py +1132 -0
  104. package/python/lib/python3.13/codeop.py +155 -0
  105. package/python/lib/python3.13/collections/__init__.py +1603 -0
  106. package/python/lib/python3.13/colorsys.py +166 -0
  107. package/python/lib/python3.13/compileall.py +470 -0
  108. package/python/lib/python3.13/concurrent/__init__.py +1 -0
  109. package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
  110. package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
  111. package/python/lib/python3.13/concurrent/futures/process.py +892 -0
  112. package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
  113. package/python/lib/python3.13/configparser.py +1396 -0
  114. package/python/lib/python3.13/contextlib.py +814 -0
  115. package/python/lib/python3.13/contextvars.py +4 -0
  116. package/python/lib/python3.13/copy.py +306 -0
  117. package/python/lib/python3.13/copyreg.py +217 -0
  118. package/python/lib/python3.13/csv.py +527 -0
  119. package/python/lib/python3.13/ctypes/__init__.py +605 -0
  120. package/python/lib/python3.13/ctypes/_aix.py +327 -0
  121. package/python/lib/python3.13/ctypes/_endian.py +78 -0
  122. package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
  123. package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
  124. package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
  125. package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
  126. package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
  127. package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
  128. package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
  129. package/python/lib/python3.13/ctypes/util.py +387 -0
  130. package/python/lib/python3.13/ctypes/wintypes.py +202 -0
  131. package/python/lib/python3.13/curses/__init__.py +101 -0
  132. package/python/lib/python3.13/curses/ascii.py +99 -0
  133. package/python/lib/python3.13/curses/has_key.py +192 -0
  134. package/python/lib/python3.13/curses/panel.py +6 -0
  135. package/python/lib/python3.13/curses/textpad.py +236 -0
  136. package/python/lib/python3.13/dataclasses.py +1679 -0
  137. package/python/lib/python3.13/datetime.py +9 -0
  138. package/python/lib/python3.13/dbm/__init__.py +194 -0
  139. package/python/lib/python3.13/dbm/dumb.py +319 -0
  140. package/python/lib/python3.13/dbm/gnu.py +3 -0
  141. package/python/lib/python3.13/dbm/ndbm.py +3 -0
  142. package/python/lib/python3.13/dbm/sqlite3.py +144 -0
  143. package/python/lib/python3.13/decimal.py +109 -0
  144. package/python/lib/python3.13/difflib.py +2058 -0
  145. package/python/lib/python3.13/dis.py +1075 -0
  146. package/python/lib/python3.13/doctest.py +2919 -0
  147. package/python/lib/python3.13/email/__init__.py +61 -0
  148. package/python/lib/python3.13/email/_encoded_words.py +233 -0
  149. package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
  150. package/python/lib/python3.13/email/_parseaddr.py +563 -0
  151. package/python/lib/python3.13/email/_policybase.py +382 -0
  152. package/python/lib/python3.13/email/architecture.rst +216 -0
  153. package/python/lib/python3.13/email/base64mime.py +115 -0
  154. package/python/lib/python3.13/email/charset.py +396 -0
  155. package/python/lib/python3.13/email/contentmanager.py +254 -0
  156. package/python/lib/python3.13/email/encoders.py +65 -0
  157. package/python/lib/python3.13/email/errors.py +117 -0
  158. package/python/lib/python3.13/email/feedparser.py +536 -0
  159. package/python/lib/python3.13/email/generator.py +530 -0
  160. package/python/lib/python3.13/email/header.py +582 -0
  161. package/python/lib/python3.13/email/headerregistry.py +618 -0
  162. package/python/lib/python3.13/email/iterators.py +68 -0
  163. package/python/lib/python3.13/email/message.py +1217 -0
  164. package/python/lib/python3.13/email/mime/__init__.py +0 -0
  165. package/python/lib/python3.13/email/mime/application.py +37 -0
  166. package/python/lib/python3.13/email/mime/audio.py +97 -0
  167. package/python/lib/python3.13/email/mime/base.py +29 -0
  168. package/python/lib/python3.13/email/mime/image.py +152 -0
  169. package/python/lib/python3.13/email/mime/message.py +33 -0
  170. package/python/lib/python3.13/email/mime/multipart.py +47 -0
  171. package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
  172. package/python/lib/python3.13/email/mime/text.py +40 -0
  173. package/python/lib/python3.13/email/parser.py +127 -0
  174. package/python/lib/python3.13/email/policy.py +232 -0
  175. package/python/lib/python3.13/email/quoprimime.py +300 -0
  176. package/python/lib/python3.13/email/utils.py +497 -0
  177. package/python/lib/python3.13/encodings/__init__.py +179 -0
  178. package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
  179. package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
  180. package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
  181. package/python/lib/python3.13/encodings/aliases.py +560 -0
  182. package/python/lib/python3.13/encodings/ascii.py +50 -0
  183. package/python/lib/python3.13/encodings/base64_codec.py +55 -0
  184. package/python/lib/python3.13/encodings/big5.py +39 -0
  185. package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
  186. package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
  187. package/python/lib/python3.13/encodings/charmap.py +69 -0
  188. package/python/lib/python3.13/encodings/cp037.py +307 -0
  189. package/python/lib/python3.13/encodings/cp1006.py +307 -0
  190. package/python/lib/python3.13/encodings/cp1026.py +307 -0
  191. package/python/lib/python3.13/encodings/cp1125.py +698 -0
  192. package/python/lib/python3.13/encodings/cp1140.py +307 -0
  193. package/python/lib/python3.13/encodings/cp1250.py +307 -0
  194. package/python/lib/python3.13/encodings/cp1251.py +307 -0
  195. package/python/lib/python3.13/encodings/cp1252.py +307 -0
  196. package/python/lib/python3.13/encodings/cp1253.py +307 -0
  197. package/python/lib/python3.13/encodings/cp1254.py +307 -0
  198. package/python/lib/python3.13/encodings/cp1255.py +307 -0
  199. package/python/lib/python3.13/encodings/cp1256.py +307 -0
  200. package/python/lib/python3.13/encodings/cp1257.py +307 -0
  201. package/python/lib/python3.13/encodings/cp1258.py +307 -0
  202. package/python/lib/python3.13/encodings/cp273.py +307 -0
  203. package/python/lib/python3.13/encodings/cp424.py +307 -0
  204. package/python/lib/python3.13/encodings/cp437.py +698 -0
  205. package/python/lib/python3.13/encodings/cp500.py +307 -0
  206. package/python/lib/python3.13/encodings/cp720.py +309 -0
  207. package/python/lib/python3.13/encodings/cp737.py +698 -0
  208. package/python/lib/python3.13/encodings/cp775.py +697 -0
  209. package/python/lib/python3.13/encodings/cp850.py +698 -0
  210. package/python/lib/python3.13/encodings/cp852.py +698 -0
  211. package/python/lib/python3.13/encodings/cp855.py +698 -0
  212. package/python/lib/python3.13/encodings/cp856.py +307 -0
  213. package/python/lib/python3.13/encodings/cp857.py +694 -0
  214. package/python/lib/python3.13/encodings/cp858.py +698 -0
  215. package/python/lib/python3.13/encodings/cp860.py +698 -0
  216. package/python/lib/python3.13/encodings/cp861.py +698 -0
  217. package/python/lib/python3.13/encodings/cp862.py +698 -0
  218. package/python/lib/python3.13/encodings/cp863.py +698 -0
  219. package/python/lib/python3.13/encodings/cp864.py +690 -0
  220. package/python/lib/python3.13/encodings/cp865.py +698 -0
  221. package/python/lib/python3.13/encodings/cp866.py +698 -0
  222. package/python/lib/python3.13/encodings/cp869.py +689 -0
  223. package/python/lib/python3.13/encodings/cp874.py +307 -0
  224. package/python/lib/python3.13/encodings/cp875.py +307 -0
  225. package/python/lib/python3.13/encodings/cp932.py +39 -0
  226. package/python/lib/python3.13/encodings/cp949.py +39 -0
  227. package/python/lib/python3.13/encodings/cp950.py +39 -0
  228. package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
  229. package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
  230. package/python/lib/python3.13/encodings/euc_jp.py +39 -0
  231. package/python/lib/python3.13/encodings/euc_kr.py +39 -0
  232. package/python/lib/python3.13/encodings/gb18030.py +39 -0
  233. package/python/lib/python3.13/encodings/gb2312.py +39 -0
  234. package/python/lib/python3.13/encodings/gbk.py +39 -0
  235. package/python/lib/python3.13/encodings/hex_codec.py +55 -0
  236. package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
  237. package/python/lib/python3.13/encodings/hz.py +39 -0
  238. package/python/lib/python3.13/encodings/idna.py +387 -0
  239. package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
  240. package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
  241. package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
  242. package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
  243. package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
  244. package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
  245. package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
  246. package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
  247. package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
  248. package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
  249. package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
  250. package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
  251. package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
  252. package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
  253. package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
  254. package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
  255. package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
  256. package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
  257. package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
  258. package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
  259. package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
  260. package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
  261. package/python/lib/python3.13/encodings/johab.py +39 -0
  262. package/python/lib/python3.13/encodings/koi8_r.py +307 -0
  263. package/python/lib/python3.13/encodings/koi8_t.py +308 -0
  264. package/python/lib/python3.13/encodings/koi8_u.py +307 -0
  265. package/python/lib/python3.13/encodings/kz1048.py +307 -0
  266. package/python/lib/python3.13/encodings/latin_1.py +50 -0
  267. package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
  268. package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
  269. package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
  270. package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
  271. package/python/lib/python3.13/encodings/mac_greek.py +307 -0
  272. package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
  273. package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
  274. package/python/lib/python3.13/encodings/mac_roman.py +307 -0
  275. package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
  276. package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
  277. package/python/lib/python3.13/encodings/mbcs.py +47 -0
  278. package/python/lib/python3.13/encodings/oem.py +41 -0
  279. package/python/lib/python3.13/encodings/palmos.py +308 -0
  280. package/python/lib/python3.13/encodings/ptcp154.py +312 -0
  281. package/python/lib/python3.13/encodings/punycode.py +253 -0
  282. package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
  283. package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
  284. package/python/lib/python3.13/encodings/rot_13.py +113 -0
  285. package/python/lib/python3.13/encodings/shift_jis.py +39 -0
  286. package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
  287. package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
  288. package/python/lib/python3.13/encodings/tis_620.py +307 -0
  289. package/python/lib/python3.13/encodings/undefined.py +49 -0
  290. package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
  291. package/python/lib/python3.13/encodings/utf_16.py +155 -0
  292. package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
  293. package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
  294. package/python/lib/python3.13/encodings/utf_32.py +150 -0
  295. package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
  296. package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
  297. package/python/lib/python3.13/encodings/utf_7.py +38 -0
  298. package/python/lib/python3.13/encodings/utf_8.py +42 -0
  299. package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
  300. package/python/lib/python3.13/encodings/uu_codec.py +103 -0
  301. package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
  302. package/python/lib/python3.13/enum.py +2183 -0
  303. package/python/lib/python3.13/filecmp.py +320 -0
  304. package/python/lib/python3.13/fileinput.py +442 -0
  305. package/python/lib/python3.13/fnmatch.py +192 -0
  306. package/python/lib/python3.13/fractions.py +1043 -0
  307. package/python/lib/python3.13/ftplib.py +975 -0
  308. package/python/lib/python3.13/functools.py +1036 -0
  309. package/python/lib/python3.13/genericpath.py +200 -0
  310. package/python/lib/python3.13/getopt.py +215 -0
  311. package/python/lib/python3.13/getpass.py +192 -0
  312. package/python/lib/python3.13/gettext.py +657 -0
  313. package/python/lib/python3.13/glob.py +572 -0
  314. package/python/lib/python3.13/graphlib.py +250 -0
  315. package/python/lib/python3.13/gzip.py +693 -0
  316. package/python/lib/python3.13/hashlib.py +255 -0
  317. package/python/lib/python3.13/heapq.py +603 -0
  318. package/python/lib/python3.13/hmac.py +220 -0
  319. package/python/lib/python3.13/html/__init__.py +132 -0
  320. package/python/lib/python3.13/html/entities.py +2513 -0
  321. package/python/lib/python3.13/html/parser.py +583 -0
  322. package/python/lib/python3.13/http/__init__.py +202 -0
  323. package/python/lib/python3.13/http/client.py +1598 -0
  324. package/python/lib/python3.13/http/cookiejar.py +2122 -0
  325. package/python/lib/python3.13/http/cookies.py +635 -0
  326. package/python/lib/python3.13/http/server.py +1355 -0
  327. package/python/lib/python3.13/imaplib.py +1769 -0
  328. package/python/lib/python3.13/importlib/__init__.py +136 -0
  329. package/python/lib/python3.13/importlib/_abc.py +39 -0
  330. package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
  331. package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
  332. package/python/lib/python3.13/importlib/abc.py +243 -0
  333. package/python/lib/python3.13/importlib/machinery.py +21 -0
  334. package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
  335. package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
  336. package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
  337. package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
  338. package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
  339. package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
  340. package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
  341. package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
  342. package/python/lib/python3.13/importlib/readers.py +12 -0
  343. package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
  344. package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
  345. package/python/lib/python3.13/importlib/resources/_common.py +211 -0
  346. package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
  347. package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
  348. package/python/lib/python3.13/importlib/resources/abc.py +173 -0
  349. package/python/lib/python3.13/importlib/resources/readers.py +203 -0
  350. package/python/lib/python3.13/importlib/resources/simple.py +106 -0
  351. package/python/lib/python3.13/importlib/simple.py +14 -0
  352. package/python/lib/python3.13/importlib/util.py +274 -0
  353. package/python/lib/python3.13/inspect.py +3479 -0
  354. package/python/lib/python3.13/io.py +99 -0
  355. package/python/lib/python3.13/ipaddress.py +2440 -0
  356. package/python/lib/python3.13/json/__init__.py +365 -0
  357. package/python/lib/python3.13/json/decoder.py +364 -0
  358. package/python/lib/python3.13/json/encoder.py +446 -0
  359. package/python/lib/python3.13/json/scanner.py +73 -0
  360. package/python/lib/python3.13/json/tool.py +90 -0
  361. package/python/lib/python3.13/keyword.py +64 -0
  362. package/python/lib/python3.13/lib-dynload/.empty +0 -0
  363. package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
  364. package/python/lib/python3.13/linecache.py +236 -0
  365. package/python/lib/python3.13/locale.py +1987 -0
  366. package/python/lib/python3.13/logging/__init__.py +2330 -0
  367. package/python/lib/python3.13/logging/config.py +1080 -0
  368. package/python/lib/python3.13/logging/handlers.py +1629 -0
  369. package/python/lib/python3.13/lzma.py +364 -0
  370. package/python/lib/python3.13/mailbox.py +2219 -0
  371. package/python/lib/python3.13/mimetypes.py +679 -0
  372. package/python/lib/python3.13/modulefinder.py +671 -0
  373. package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
  374. package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
  375. package/python/lib/python3.13/multiprocessing/context.py +383 -0
  376. package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
  377. package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
  378. package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
  379. package/python/lib/python3.13/multiprocessing/heap.py +337 -0
  380. package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
  381. package/python/lib/python3.13/multiprocessing/pool.py +957 -0
  382. package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
  383. package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
  384. package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
  385. package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
  386. package/python/lib/python3.13/multiprocessing/process.py +436 -0
  387. package/python/lib/python3.13/multiprocessing/queues.py +399 -0
  388. package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
  389. package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
  390. package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
  391. package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
  392. package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
  393. package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
  394. package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
  395. package/python/lib/python3.13/multiprocessing/util.py +562 -0
  396. package/python/lib/python3.13/netrc.py +199 -0
  397. package/python/lib/python3.13/ntpath.py +872 -0
  398. package/python/lib/python3.13/nturl2path.py +69 -0
  399. package/python/lib/python3.13/numbers.py +427 -0
  400. package/python/lib/python3.13/opcode.py +115 -0
  401. package/python/lib/python3.13/operator.py +467 -0
  402. package/python/lib/python3.13/optparse.py +1681 -0
  403. package/python/lib/python3.13/os.py +1184 -0
  404. package/python/lib/python3.13/pathlib/__init__.py +12 -0
  405. package/python/lib/python3.13/pathlib/_abc.py +930 -0
  406. package/python/lib/python3.13/pathlib/_local.py +861 -0
  407. package/python/lib/python3.13/pdb.py +2550 -0
  408. package/python/lib/python3.13/pickle.py +1860 -0
  409. package/python/lib/python3.13/pickletools.py +2904 -0
  410. package/python/lib/python3.13/pkgutil.py +529 -0
  411. package/python/lib/python3.13/platform.py +1454 -0
  412. package/python/lib/python3.13/plistlib.py +948 -0
  413. package/python/lib/python3.13/poplib.py +477 -0
  414. package/python/lib/python3.13/posixpath.py +578 -0
  415. package/python/lib/python3.13/pprint.py +658 -0
  416. package/python/lib/python3.13/profile.py +616 -0
  417. package/python/lib/python3.13/pstats.py +778 -0
  418. package/python/lib/python3.13/pty.py +211 -0
  419. package/python/lib/python3.13/py_compile.py +212 -0
  420. package/python/lib/python3.13/pyclbr.py +314 -0
  421. package/python/lib/python3.13/pydoc.py +2861 -0
  422. package/python/lib/python3.13/queue.py +383 -0
  423. package/python/lib/python3.13/quopri.py +237 -0
  424. package/python/lib/python3.13/random.py +1078 -0
  425. package/python/lib/python3.13/re/__init__.py +428 -0
  426. package/python/lib/python3.13/re/_casefix.py +106 -0
  427. package/python/lib/python3.13/re/_compiler.py +768 -0
  428. package/python/lib/python3.13/re/_constants.py +222 -0
  429. package/python/lib/python3.13/re/_parser.py +1081 -0
  430. package/python/lib/python3.13/reprlib.py +230 -0
  431. package/python/lib/python3.13/rlcompleter.py +222 -0
  432. package/python/lib/python3.13/runpy.py +326 -0
  433. package/python/lib/python3.13/sched.py +167 -0
  434. package/python/lib/python3.13/secrets.py +71 -0
  435. package/python/lib/python3.13/selectors.py +603 -0
  436. package/python/lib/python3.13/shelve.py +250 -0
  437. package/python/lib/python3.13/shlex.py +345 -0
  438. package/python/lib/python3.13/shutil.py +1569 -0
  439. package/python/lib/python3.13/signal.py +94 -0
  440. package/python/lib/python3.13/site.py +773 -0
  441. package/python/lib/python3.13/smtplib.py +1123 -0
  442. package/python/lib/python3.13/socket.py +988 -0
  443. package/python/lib/python3.13/socketserver.py +863 -0
  444. package/python/lib/python3.13/sqlite3/__init__.py +70 -0
  445. package/python/lib/python3.13/sqlite3/__main__.py +139 -0
  446. package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
  447. package/python/lib/python3.13/sqlite3/dump.py +118 -0
  448. package/python/lib/python3.13/sre_compile.py +7 -0
  449. package/python/lib/python3.13/sre_constants.py +7 -0
  450. package/python/lib/python3.13/sre_parse.py +7 -0
  451. package/python/lib/python3.13/ssl.py +1541 -0
  452. package/python/lib/python3.13/stat.py +212 -0
  453. package/python/lib/python3.13/statistics.py +1817 -0
  454. package/python/lib/python3.13/string.py +314 -0
  455. package/python/lib/python3.13/stringprep.py +272 -0
  456. package/python/lib/python3.13/struct.py +15 -0
  457. package/python/lib/python3.13/subprocess.py +2258 -0
  458. package/python/lib/python3.13/symtable.py +414 -0
  459. package/python/lib/python3.13/sysconfig/__init__.py +734 -0
  460. package/python/lib/python3.13/sysconfig/__main__.py +248 -0
  461. package/python/lib/python3.13/tabnanny.py +340 -0
  462. package/python/lib/python3.13/tarfile.py +3136 -0
  463. package/python/lib/python3.13/tempfile.py +958 -0
  464. package/python/lib/python3.13/textwrap.py +497 -0
  465. package/python/lib/python3.13/this.py +28 -0
  466. package/python/lib/python3.13/threading.py +1602 -0
  467. package/python/lib/python3.13/timeit.py +381 -0
  468. package/python/lib/python3.13/token.py +141 -0
  469. package/python/lib/python3.13/tokenize.py +592 -0
  470. package/python/lib/python3.13/tomllib/__init__.py +10 -0
  471. package/python/lib/python3.13/tomllib/_parser.py +703 -0
  472. package/python/lib/python3.13/tomllib/_re.py +107 -0
  473. package/python/lib/python3.13/tomllib/_types.py +10 -0
  474. package/python/lib/python3.13/tomllib/mypy.ini +15 -0
  475. package/python/lib/python3.13/trace.py +754 -0
  476. package/python/lib/python3.13/traceback.py +1639 -0
  477. package/python/lib/python3.13/tracemalloc.py +560 -0
  478. package/python/lib/python3.13/tty.py +73 -0
  479. package/python/lib/python3.13/types.py +346 -0
  480. package/python/lib/python3.13/typing.py +3846 -0
  481. package/python/lib/python3.13/unittest/__init__.py +80 -0
  482. package/python/lib/python3.13/unittest/__main__.py +18 -0
  483. package/python/lib/python3.13/unittest/_log.py +86 -0
  484. package/python/lib/python3.13/unittest/async_case.py +146 -0
  485. package/python/lib/python3.13/unittest/case.py +1478 -0
  486. package/python/lib/python3.13/unittest/loader.py +460 -0
  487. package/python/lib/python3.13/unittest/main.py +280 -0
  488. package/python/lib/python3.13/unittest/mock.py +3189 -0
  489. package/python/lib/python3.13/unittest/result.py +256 -0
  490. package/python/lib/python3.13/unittest/runner.py +292 -0
  491. package/python/lib/python3.13/unittest/signals.py +71 -0
  492. package/python/lib/python3.13/unittest/suite.py +379 -0
  493. package/python/lib/python3.13/unittest/util.py +170 -0
  494. package/python/lib/python3.13/urllib/__init__.py +0 -0
  495. package/python/lib/python3.13/urllib/error.py +74 -0
  496. package/python/lib/python3.13/urllib/parse.py +1264 -0
  497. package/python/lib/python3.13/urllib/request.py +2796 -0
  498. package/python/lib/python3.13/urllib/response.py +84 -0
  499. package/python/lib/python3.13/urllib/robotparser.py +363 -0
  500. package/python/lib/python3.13/uuid.py +784 -0
  501. package/python/lib/python3.13/warnings.py +735 -0
  502. package/python/lib/python3.13/wave.py +665 -0
  503. package/python/lib/python3.13/weakref.py +674 -0
  504. package/python/lib/python3.13/webbrowser.py +724 -0
  505. package/python/lib/python3.13/wsgiref/__init__.py +25 -0
  506. package/python/lib/python3.13/wsgiref/handlers.py +575 -0
  507. package/python/lib/python3.13/wsgiref/headers.py +192 -0
  508. package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
  509. package/python/lib/python3.13/wsgiref/types.py +54 -0
  510. package/python/lib/python3.13/wsgiref/util.py +159 -0
  511. package/python/lib/python3.13/wsgiref/validate.py +438 -0
  512. package/python/lib/python3.13/xml/__init__.py +20 -0
  513. package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
  514. package/python/lib/python3.13/xml/dom/__init__.py +140 -0
  515. package/python/lib/python3.13/xml/dom/domreg.py +99 -0
  516. package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
  517. package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
  518. package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
  519. package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
  520. package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
  521. package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
  522. package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
  523. package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
  524. package/python/lib/python3.13/xml/etree/__init__.py +33 -0
  525. package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
  526. package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
  527. package/python/lib/python3.13/xml/parsers/expat.py +8 -0
  528. package/python/lib/python3.13/xml/sax/__init__.py +94 -0
  529. package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
  530. package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
  531. package/python/lib/python3.13/xml/sax/handler.py +387 -0
  532. package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
  533. package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
  534. package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
  535. package/python/lib/python3.13/xmlrpc/client.py +1503 -0
  536. package/python/lib/python3.13/xmlrpc/server.py +1002 -0
  537. package/python/lib/python3.13/zipapp.py +229 -0
  538. package/python/lib/python3.13/zipfile/__init__.py +2391 -0
  539. package/python/lib/python3.13/zipfile/__main__.py +4 -0
  540. package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
  541. package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
  542. package/python/lib/python3.13/zipimport.py +803 -0
  543. package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
  544. package/python/lib/python3.13/zoneinfo/_common.py +172 -0
  545. package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
  546. package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
  547. package/python/licenses/LICENSE.bdb.txt +126 -0
  548. package/python/licenses/LICENSE.bzip2.txt +37 -0
  549. package/python/licenses/LICENSE.cpython.txt +771 -0
  550. package/python/licenses/LICENSE.expat.txt +21 -0
  551. package/python/licenses/LICENSE.libX11.txt +942 -0
  552. package/python/licenses/LICENSE.libXau.txt +21 -0
  553. package/python/licenses/LICENSE.libedit.txt +29 -0
  554. package/python/licenses/LICENSE.libffi.txt +21 -0
  555. package/python/licenses/LICENSE.liblzma.txt +13 -0
  556. package/python/licenses/LICENSE.libuuid.txt +27 -0
  557. package/python/licenses/LICENSE.libxcb.txt +30 -0
  558. package/python/licenses/LICENSE.mpdecimal.txt +24 -0
  559. package/python/licenses/LICENSE.ncurses.txt +29 -0
  560. package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
  561. package/python/licenses/LICENSE.openssl-3.txt +177 -0
  562. package/python/licenses/LICENSE.sqlite.txt +23 -0
  563. package/python/licenses/LICENSE.tcl.txt +40 -0
  564. package/python/licenses/LICENSE.tix.txt +54 -0
  565. package/python/licenses/LICENSE.zlib.txt +21 -0
@@ -0,0 +1,203 @@
1
+ from __future__ import annotations
2
+
3
+ import collections
4
+ import contextlib
5
+ import itertools
6
+ import pathlib
7
+ import operator
8
+ import re
9
+ import warnings
10
+ import zipfile
11
+ from collections.abc import Iterator
12
+
13
+ from . import abc
14
+
15
+ from ._itertools import only
16
+
17
+
18
+ def remove_duplicates(items):
19
+ return iter(collections.OrderedDict.fromkeys(items))
20
+
21
+
22
+ class FileReader(abc.TraversableResources):
23
+ def __init__(self, loader):
24
+ self.path = pathlib.Path(loader.path).parent
25
+
26
+ def resource_path(self, resource):
27
+ """
28
+ Return the file system path to prevent
29
+ `resources.path()` from creating a temporary
30
+ copy.
31
+ """
32
+ return str(self.path.joinpath(resource))
33
+
34
+ def files(self):
35
+ return self.path
36
+
37
+
38
+ class ZipReader(abc.TraversableResources):
39
+ def __init__(self, loader, module):
40
+ self.prefix = loader.prefix.replace('\\', '/')
41
+ if loader.is_package(module):
42
+ _, _, name = module.rpartition('.')
43
+ self.prefix += name + '/'
44
+ self.archive = loader.archive
45
+
46
+ def open_resource(self, resource):
47
+ try:
48
+ return super().open_resource(resource)
49
+ except KeyError as exc:
50
+ raise FileNotFoundError(exc.args[0])
51
+
52
+ def is_resource(self, path):
53
+ """
54
+ Workaround for `zipfile.Path.is_file` returning true
55
+ for non-existent paths.
56
+ """
57
+ target = self.files().joinpath(path)
58
+ return target.is_file() and target.exists()
59
+
60
+ def files(self):
61
+ return zipfile.Path(self.archive, self.prefix)
62
+
63
+
64
+ class MultiplexedPath(abc.Traversable):
65
+ """
66
+ Given a series of Traversable objects, implement a merged
67
+ version of the interface across all objects. Useful for
68
+ namespace packages which may be multihomed at a single
69
+ name.
70
+ """
71
+
72
+ def __init__(self, *paths):
73
+ self._paths = list(map(_ensure_traversable, remove_duplicates(paths)))
74
+ if not self._paths:
75
+ message = 'MultiplexedPath must contain at least one path'
76
+ raise FileNotFoundError(message)
77
+ if not all(path.is_dir() for path in self._paths):
78
+ raise NotADirectoryError('MultiplexedPath only supports directories')
79
+
80
+ def iterdir(self):
81
+ children = (child for path in self._paths for child in path.iterdir())
82
+ by_name = operator.attrgetter('name')
83
+ groups = itertools.groupby(sorted(children, key=by_name), key=by_name)
84
+ return map(self._follow, (locs for name, locs in groups))
85
+
86
+ def read_bytes(self):
87
+ raise FileNotFoundError(f'{self} is not a file')
88
+
89
+ def read_text(self, *args, **kwargs):
90
+ raise FileNotFoundError(f'{self} is not a file')
91
+
92
+ def is_dir(self):
93
+ return True
94
+
95
+ def is_file(self):
96
+ return False
97
+
98
+ def joinpath(self, *descendants):
99
+ try:
100
+ return super().joinpath(*descendants)
101
+ except abc.TraversalError:
102
+ # One of the paths did not resolve (a directory does not exist).
103
+ # Just return something that will not exist.
104
+ return self._paths[0].joinpath(*descendants)
105
+
106
+ @classmethod
107
+ def _follow(cls, children):
108
+ """
109
+ Construct a MultiplexedPath if needed.
110
+
111
+ If children contains a sole element, return it.
112
+ Otherwise, return a MultiplexedPath of the items.
113
+ Unless one of the items is not a Directory, then return the first.
114
+ """
115
+ subdirs, one_dir, one_file = itertools.tee(children, 3)
116
+
117
+ try:
118
+ return only(one_dir)
119
+ except ValueError:
120
+ try:
121
+ return cls(*subdirs)
122
+ except NotADirectoryError:
123
+ return next(one_file)
124
+
125
+ def open(self, *args, **kwargs):
126
+ raise FileNotFoundError(f'{self} is not a file')
127
+
128
+ @property
129
+ def name(self):
130
+ return self._paths[0].name
131
+
132
+ def __repr__(self):
133
+ paths = ', '.join(f"'{path}'" for path in self._paths)
134
+ return f'MultiplexedPath({paths})'
135
+
136
+
137
+ class NamespaceReader(abc.TraversableResources):
138
+ def __init__(self, namespace_path):
139
+ if 'NamespacePath' not in str(namespace_path):
140
+ raise ValueError('Invalid path')
141
+ self.path = MultiplexedPath(*filter(bool, map(self._resolve, namespace_path)))
142
+
143
+ @classmethod
144
+ def _resolve(cls, path_str) -> abc.Traversable | None:
145
+ r"""
146
+ Given an item from a namespace path, resolve it to a Traversable.
147
+
148
+ path_str might be a directory on the filesystem or a path to a
149
+ zipfile plus the path within the zipfile, e.g. ``/foo/bar`` or
150
+ ``/foo/baz.zip/inner_dir`` or ``foo\baz.zip\inner_dir\sub``.
151
+
152
+ path_str might also be a sentinel used by editable packages to
153
+ trigger other behaviors (see python/importlib_resources#311).
154
+ In that case, return None.
155
+ """
156
+ dirs = (cand for cand in cls._candidate_paths(path_str) if cand.is_dir())
157
+ return next(dirs, None)
158
+
159
+ @classmethod
160
+ def _candidate_paths(cls, path_str: str) -> Iterator[abc.Traversable]:
161
+ yield pathlib.Path(path_str)
162
+ yield from cls._resolve_zip_path(path_str)
163
+
164
+ @staticmethod
165
+ def _resolve_zip_path(path_str: str):
166
+ for match in reversed(list(re.finditer(r'[\\/]', path_str))):
167
+ with contextlib.suppress(
168
+ FileNotFoundError,
169
+ IsADirectoryError,
170
+ NotADirectoryError,
171
+ PermissionError,
172
+ ):
173
+ inner = path_str[match.end() :].replace('\\', '/') + '/'
174
+ yield zipfile.Path(path_str[: match.start()], inner.lstrip('/'))
175
+
176
+ def resource_path(self, resource):
177
+ """
178
+ Return the file system path to prevent
179
+ `resources.path()` from creating a temporary
180
+ copy.
181
+ """
182
+ return str(self.path.joinpath(resource))
183
+
184
+ def files(self):
185
+ return self.path
186
+
187
+
188
+ def _ensure_traversable(path):
189
+ """
190
+ Convert deprecated string arguments to traversables (pathlib.Path).
191
+
192
+ Remove with Python 3.15.
193
+ """
194
+ if not isinstance(path, str):
195
+ return path
196
+
197
+ warnings.warn(
198
+ "String arguments are deprecated. Pass a Traversable instead.",
199
+ DeprecationWarning,
200
+ stacklevel=3,
201
+ )
202
+
203
+ return pathlib.Path(path)
@@ -0,0 +1,106 @@
1
+ """
2
+ Interface adapters for low-level readers.
3
+ """
4
+
5
+ import abc
6
+ import io
7
+ import itertools
8
+ from typing import BinaryIO, List
9
+
10
+ from .abc import Traversable, TraversableResources
11
+
12
+
13
+ class SimpleReader(abc.ABC):
14
+ """
15
+ The minimum, low-level interface required from a resource
16
+ provider.
17
+ """
18
+
19
+ @property
20
+ @abc.abstractmethod
21
+ def package(self) -> str:
22
+ """
23
+ The name of the package for which this reader loads resources.
24
+ """
25
+
26
+ @abc.abstractmethod
27
+ def children(self) -> List['SimpleReader']:
28
+ """
29
+ Obtain an iterable of SimpleReader for available
30
+ child containers (e.g. directories).
31
+ """
32
+
33
+ @abc.abstractmethod
34
+ def resources(self) -> List[str]:
35
+ """
36
+ Obtain available named resources for this virtual package.
37
+ """
38
+
39
+ @abc.abstractmethod
40
+ def open_binary(self, resource: str) -> BinaryIO:
41
+ """
42
+ Obtain a File-like for a named resource.
43
+ """
44
+
45
+ @property
46
+ def name(self):
47
+ return self.package.split('.')[-1]
48
+
49
+
50
+ class ResourceContainer(Traversable):
51
+ """
52
+ Traversable container for a package's resources via its reader.
53
+ """
54
+
55
+ def __init__(self, reader: SimpleReader):
56
+ self.reader = reader
57
+
58
+ def is_dir(self):
59
+ return True
60
+
61
+ def is_file(self):
62
+ return False
63
+
64
+ def iterdir(self):
65
+ files = (ResourceHandle(self, name) for name in self.reader.resources)
66
+ dirs = map(ResourceContainer, self.reader.children())
67
+ return itertools.chain(files, dirs)
68
+
69
+ def open(self, *args, **kwargs):
70
+ raise IsADirectoryError()
71
+
72
+
73
+ class ResourceHandle(Traversable):
74
+ """
75
+ Handle to a named resource in a ResourceReader.
76
+ """
77
+
78
+ def __init__(self, parent: ResourceContainer, name: str):
79
+ self.parent = parent
80
+ self.name = name # type: ignore[misc]
81
+
82
+ def is_file(self):
83
+ return True
84
+
85
+ def is_dir(self):
86
+ return False
87
+
88
+ def open(self, mode='r', *args, **kwargs):
89
+ stream = self.parent.reader.open_binary(self.name)
90
+ if 'b' not in mode:
91
+ stream = io.TextIOWrapper(stream, *args, **kwargs)
92
+ return stream
93
+
94
+ def joinpath(self, name):
95
+ raise RuntimeError("Cannot traverse into a resource")
96
+
97
+
98
+ class TraversableReader(TraversableResources, SimpleReader):
99
+ """
100
+ A TraversableResources based on SimpleReader. Resource providers
101
+ may derive from this class to provide the TraversableResources
102
+ interface by supplying the SimpleReader interface.
103
+ """
104
+
105
+ def files(self):
106
+ return ResourceContainer(self)
@@ -0,0 +1,14 @@
1
+ """
2
+ Compatibility shim for .resources.simple as found on Python 3.10.
3
+
4
+ Consumers that can rely on Python 3.11 should use the other
5
+ module directly.
6
+ """
7
+
8
+ from .resources.simple import (
9
+ SimpleReader, ResourceHandle, ResourceContainer, TraversableReader,
10
+ )
11
+
12
+ __all__ = [
13
+ 'SimpleReader', 'ResourceHandle', 'ResourceContainer', 'TraversableReader',
14
+ ]
@@ -0,0 +1,274 @@
1
+ """Utility code for constructing importers, etc."""
2
+ from ._abc import Loader
3
+ from ._bootstrap import module_from_spec
4
+ from ._bootstrap import _resolve_name
5
+ from ._bootstrap import spec_from_loader
6
+ from ._bootstrap import _find_spec
7
+ from ._bootstrap_external import MAGIC_NUMBER
8
+ from ._bootstrap_external import _RAW_MAGIC_NUMBER
9
+ from ._bootstrap_external import cache_from_source
10
+ from ._bootstrap_external import decode_source
11
+ from ._bootstrap_external import source_from_cache
12
+ from ._bootstrap_external import spec_from_file_location
13
+
14
+ import _imp
15
+ import sys
16
+ import types
17
+
18
+
19
+ def source_hash(source_bytes):
20
+ "Return the hash of *source_bytes* as used in hash-based pyc files."
21
+ return _imp.source_hash(_RAW_MAGIC_NUMBER, source_bytes)
22
+
23
+
24
+ def resolve_name(name, package):
25
+ """Resolve a relative module name to an absolute one."""
26
+ if not name.startswith('.'):
27
+ return name
28
+ elif not package:
29
+ raise ImportError(f'no package specified for {repr(name)} '
30
+ '(required for relative module names)')
31
+ level = 0
32
+ for character in name:
33
+ if character != '.':
34
+ break
35
+ level += 1
36
+ return _resolve_name(name[level:], package, level)
37
+
38
+
39
+ def _find_spec_from_path(name, path=None):
40
+ """Return the spec for the specified module.
41
+
42
+ First, sys.modules is checked to see if the module was already imported. If
43
+ so, then sys.modules[name].__spec__ is returned. If that happens to be
44
+ set to None, then ValueError is raised. If the module is not in
45
+ sys.modules, then sys.meta_path is searched for a suitable spec with the
46
+ value of 'path' given to the finders. None is returned if no spec could
47
+ be found.
48
+
49
+ Dotted names do not have their parent packages implicitly imported. You will
50
+ most likely need to explicitly import all parent packages in the proper
51
+ order for a submodule to get the correct spec.
52
+
53
+ """
54
+ if name not in sys.modules:
55
+ return _find_spec(name, path)
56
+ else:
57
+ module = sys.modules[name]
58
+ if module is None:
59
+ return None
60
+ try:
61
+ spec = module.__spec__
62
+ except AttributeError:
63
+ raise ValueError(f'{name}.__spec__ is not set') from None
64
+ else:
65
+ if spec is None:
66
+ raise ValueError(f'{name}.__spec__ is None')
67
+ return spec
68
+
69
+
70
+ def find_spec(name, package=None):
71
+ """Return the spec for the specified module.
72
+
73
+ First, sys.modules is checked to see if the module was already imported. If
74
+ so, then sys.modules[name].__spec__ is returned. If that happens to be
75
+ set to None, then ValueError is raised. If the module is not in
76
+ sys.modules, then sys.meta_path is searched for a suitable spec with the
77
+ value of 'path' given to the finders. None is returned if no spec could
78
+ be found.
79
+
80
+ If the name is for submodule (contains a dot), the parent module is
81
+ automatically imported.
82
+
83
+ The name and package arguments work the same as importlib.import_module().
84
+ In other words, relative module names (with leading dots) work.
85
+
86
+ """
87
+ fullname = resolve_name(name, package) if name.startswith('.') else name
88
+ if fullname not in sys.modules:
89
+ parent_name = fullname.rpartition('.')[0]
90
+ if parent_name:
91
+ parent = __import__(parent_name, fromlist=['__path__'])
92
+ try:
93
+ parent_path = parent.__path__
94
+ except AttributeError as e:
95
+ raise ModuleNotFoundError(
96
+ f"__path__ attribute not found on {parent_name!r} "
97
+ f"while trying to find {fullname!r}", name=fullname) from e
98
+ else:
99
+ parent_path = None
100
+ return _find_spec(fullname, parent_path)
101
+ else:
102
+ module = sys.modules[fullname]
103
+ if module is None:
104
+ return None
105
+ try:
106
+ spec = module.__spec__
107
+ except AttributeError:
108
+ raise ValueError(f'{name}.__spec__ is not set') from None
109
+ else:
110
+ if spec is None:
111
+ raise ValueError(f'{name}.__spec__ is None')
112
+ return spec
113
+
114
+
115
+ # Normally we would use contextlib.contextmanager. However, this module
116
+ # is imported by runpy, which means we want to avoid any unnecessary
117
+ # dependencies. Thus we use a class.
118
+
119
+ class _incompatible_extension_module_restrictions:
120
+ """A context manager that can temporarily skip the compatibility check.
121
+
122
+ NOTE: This function is meant to accommodate an unusual case; one
123
+ which is likely to eventually go away. There's is a pretty good
124
+ chance this is not what you were looking for.
125
+
126
+ WARNING: Using this function to disable the check can lead to
127
+ unexpected behavior and even crashes. It should only be used during
128
+ extension module development.
129
+
130
+ If "disable_check" is True then the compatibility check will not
131
+ happen while the context manager is active. Otherwise the check
132
+ *will* happen.
133
+
134
+ Normally, extensions that do not support multiple interpreters
135
+ may not be imported in a subinterpreter. That implies modules
136
+ that do not implement multi-phase init or that explicitly of out.
137
+
138
+ Likewise for modules import in a subinterpreter with its own GIL
139
+ when the extension does not support a per-interpreter GIL. This
140
+ implies the module does not have a Py_mod_multiple_interpreters slot
141
+ set to Py_MOD_PER_INTERPRETER_GIL_SUPPORTED.
142
+
143
+ In both cases, this context manager may be used to temporarily
144
+ disable the check for compatible extension modules.
145
+
146
+ You can get the same effect as this function by implementing the
147
+ basic interface of multi-phase init (PEP 489) and lying about
148
+ support for multiple interpreters (or per-interpreter GIL).
149
+ """
150
+
151
+ def __init__(self, *, disable_check):
152
+ self.disable_check = bool(disable_check)
153
+
154
+ def __enter__(self):
155
+ self.old = _imp._override_multi_interp_extensions_check(self.override)
156
+ return self
157
+
158
+ def __exit__(self, *args):
159
+ old = self.old
160
+ del self.old
161
+ _imp._override_multi_interp_extensions_check(old)
162
+
163
+ @property
164
+ def override(self):
165
+ return -1 if self.disable_check else 1
166
+
167
+
168
+ class _LazyModule(types.ModuleType):
169
+
170
+ """A subclass of the module type which triggers loading upon attribute access."""
171
+
172
+ def __getattribute__(self, attr):
173
+ """Trigger the load of the module and return the attribute."""
174
+ __spec__ = object.__getattribute__(self, '__spec__')
175
+ loader_state = __spec__.loader_state
176
+ with loader_state['lock']:
177
+ # Only the first thread to get the lock should trigger the load
178
+ # and reset the module's class. The rest can now getattr().
179
+ if object.__getattribute__(self, '__class__') is _LazyModule:
180
+ __class__ = loader_state['__class__']
181
+
182
+ # Reentrant calls from the same thread must be allowed to proceed without
183
+ # triggering the load again.
184
+ # exec_module() and self-referential imports are the primary ways this can
185
+ # happen, but in any case we must return something to avoid deadlock.
186
+ if loader_state['is_loading']:
187
+ return __class__.__getattribute__(self, attr)
188
+ loader_state['is_loading'] = True
189
+
190
+ __dict__ = __class__.__getattribute__(self, '__dict__')
191
+
192
+ # All module metadata must be gathered from __spec__ in order to avoid
193
+ # using mutated values.
194
+ # Get the original name to make sure no object substitution occurred
195
+ # in sys.modules.
196
+ original_name = __spec__.name
197
+ # Figure out exactly what attributes were mutated between the creation
198
+ # of the module and now.
199
+ attrs_then = loader_state['__dict__']
200
+ attrs_now = __dict__
201
+ attrs_updated = {}
202
+ for key, value in attrs_now.items():
203
+ # Code that set an attribute may have kept a reference to the
204
+ # assigned object, making identity more important than equality.
205
+ if key not in attrs_then:
206
+ attrs_updated[key] = value
207
+ elif id(attrs_now[key]) != id(attrs_then[key]):
208
+ attrs_updated[key] = value
209
+ __spec__.loader.exec_module(self)
210
+ # If exec_module() was used directly there is no guarantee the module
211
+ # object was put into sys.modules.
212
+ if original_name in sys.modules:
213
+ if id(self) != id(sys.modules[original_name]):
214
+ raise ValueError(f"module object for {original_name!r} "
215
+ "substituted in sys.modules during a lazy "
216
+ "load")
217
+ # Update after loading since that's what would happen in an eager
218
+ # loading situation.
219
+ __dict__.update(attrs_updated)
220
+ # Finally, stop triggering this method, if the module did not
221
+ # already update its own __class__.
222
+ if isinstance(self, _LazyModule):
223
+ object.__setattr__(self, '__class__', __class__)
224
+
225
+ return getattr(self, attr)
226
+
227
+ def __delattr__(self, attr):
228
+ """Trigger the load and then perform the deletion."""
229
+ # To trigger the load and raise an exception if the attribute
230
+ # doesn't exist.
231
+ self.__getattribute__(attr)
232
+ delattr(self, attr)
233
+
234
+
235
+ class LazyLoader(Loader):
236
+
237
+ """A loader that creates a module which defers loading until attribute access."""
238
+
239
+ @staticmethod
240
+ def __check_eager_loader(loader):
241
+ if not hasattr(loader, 'exec_module'):
242
+ raise TypeError('loader must define exec_module()')
243
+
244
+ @classmethod
245
+ def factory(cls, loader):
246
+ """Construct a callable which returns the eager loader made lazy."""
247
+ cls.__check_eager_loader(loader)
248
+ return lambda *args, **kwargs: cls(loader(*args, **kwargs))
249
+
250
+ def __init__(self, loader):
251
+ self.__check_eager_loader(loader)
252
+ self.loader = loader
253
+
254
+ def create_module(self, spec):
255
+ return self.loader.create_module(spec)
256
+
257
+ def exec_module(self, module):
258
+ """Make the module load lazily."""
259
+ # Threading is only needed for lazy loading, and importlib.util can
260
+ # be pulled in at interpreter startup, so defer until needed.
261
+ import threading
262
+ module.__spec__.loader = self.loader
263
+ module.__loader__ = self.loader
264
+ # Don't need to worry about deep-copying as trying to set an attribute
265
+ # on an object would have triggered the load,
266
+ # e.g. ``module.__spec__.loader = None`` would trigger a load from
267
+ # trying to access module.__spec__.
268
+ loader_state = {}
269
+ loader_state['__dict__'] = module.__dict__.copy()
270
+ loader_state['__class__'] = module.__class__
271
+ loader_state['lock'] = threading.RLock()
272
+ loader_state['is_loading'] = False
273
+ module.__spec__.loader_state = loader_state
274
+ module.__class__ = _LazyModule