@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,618 @@
1
+ """Representing and manipulating email headers via custom objects.
2
+
3
+ This module provides an implementation of the HeaderRegistry API.
4
+ The implementation is designed to flexibly follow RFC5322 rules.
5
+ """
6
+ from types import MappingProxyType
7
+
8
+ from email import utils
9
+ from email import errors
10
+ from email import _header_value_parser as parser
11
+
12
+ class Address:
13
+
14
+ def __init__(self, display_name='', username='', domain='', addr_spec=None):
15
+ """Create an object representing a full email address.
16
+
17
+ An address can have a 'display_name', a 'username', and a 'domain'. In
18
+ addition to specifying the username and domain separately, they may be
19
+ specified together by using the addr_spec keyword *instead of* the
20
+ username and domain keywords. If an addr_spec string is specified it
21
+ must be properly quoted according to RFC 5322 rules; an error will be
22
+ raised if it is not.
23
+
24
+ An Address object has display_name, username, domain, and addr_spec
25
+ attributes, all of which are read-only. The addr_spec and the string
26
+ value of the object are both quoted according to RFC5322 rules, but
27
+ without any Content Transfer Encoding.
28
+
29
+ """
30
+
31
+ inputs = ''.join(filter(None, (display_name, username, domain, addr_spec)))
32
+ if '\r' in inputs or '\n' in inputs:
33
+ raise ValueError("invalid arguments; address parts cannot contain CR or LF")
34
+
35
+ # This clause with its potential 'raise' may only happen when an
36
+ # application program creates an Address object using an addr_spec
37
+ # keyword. The email library code itself must always supply username
38
+ # and domain.
39
+ if addr_spec is not None:
40
+ if username or domain:
41
+ raise TypeError("addrspec specified when username and/or "
42
+ "domain also specified")
43
+ a_s, rest = parser.get_addr_spec(addr_spec)
44
+ if rest:
45
+ raise ValueError("Invalid addr_spec; only '{}' "
46
+ "could be parsed from '{}'".format(
47
+ a_s, addr_spec))
48
+ if a_s.all_defects:
49
+ raise a_s.all_defects[0]
50
+ username = a_s.local_part
51
+ domain = a_s.domain
52
+ self._display_name = display_name
53
+ self._username = username
54
+ self._domain = domain
55
+
56
+ @property
57
+ def display_name(self):
58
+ return self._display_name
59
+
60
+ @property
61
+ def username(self):
62
+ return self._username
63
+
64
+ @property
65
+ def domain(self):
66
+ return self._domain
67
+
68
+ @property
69
+ def addr_spec(self):
70
+ """The addr_spec (username@domain) portion of the address, quoted
71
+ according to RFC 5322 rules, but with no Content Transfer Encoding.
72
+ """
73
+ lp = self.username
74
+ if not parser.DOT_ATOM_ENDS.isdisjoint(lp):
75
+ lp = parser.quote_string(lp)
76
+ if self.domain:
77
+ return lp + '@' + self.domain
78
+ if not lp:
79
+ return '<>'
80
+ return lp
81
+
82
+ def __repr__(self):
83
+ return "{}(display_name={!r}, username={!r}, domain={!r})".format(
84
+ self.__class__.__name__,
85
+ self.display_name, self.username, self.domain)
86
+
87
+ def __str__(self):
88
+ disp = self.display_name
89
+ if not parser.SPECIALS.isdisjoint(disp):
90
+ disp = parser.quote_string(disp)
91
+ if disp:
92
+ addr_spec = '' if self.addr_spec=='<>' else self.addr_spec
93
+ return "{} <{}>".format(disp, addr_spec)
94
+ return self.addr_spec
95
+
96
+ def __eq__(self, other):
97
+ if not isinstance(other, Address):
98
+ return NotImplemented
99
+ return (self.display_name == other.display_name and
100
+ self.username == other.username and
101
+ self.domain == other.domain)
102
+
103
+
104
+ class Group:
105
+
106
+ def __init__(self, display_name=None, addresses=None):
107
+ """Create an object representing an address group.
108
+
109
+ An address group consists of a display_name followed by colon and a
110
+ list of addresses (see Address) terminated by a semi-colon. The Group
111
+ is created by specifying a display_name and a possibly empty list of
112
+ Address objects. A Group can also be used to represent a single
113
+ address that is not in a group, which is convenient when manipulating
114
+ lists that are a combination of Groups and individual Addresses. In
115
+ this case the display_name should be set to None. In particular, the
116
+ string representation of a Group whose display_name is None is the same
117
+ as the Address object, if there is one and only one Address object in
118
+ the addresses list.
119
+
120
+ """
121
+ self._display_name = display_name
122
+ self._addresses = tuple(addresses) if addresses else tuple()
123
+
124
+ @property
125
+ def display_name(self):
126
+ return self._display_name
127
+
128
+ @property
129
+ def addresses(self):
130
+ return self._addresses
131
+
132
+ def __repr__(self):
133
+ return "{}(display_name={!r}, addresses={!r}".format(
134
+ self.__class__.__name__,
135
+ self.display_name, self.addresses)
136
+
137
+ def __str__(self):
138
+ if self.display_name is None and len(self.addresses)==1:
139
+ return str(self.addresses[0])
140
+ disp = self.display_name
141
+ if disp is not None and not parser.SPECIALS.isdisjoint(disp):
142
+ disp = parser.quote_string(disp)
143
+ adrstr = ", ".join(str(x) for x in self.addresses)
144
+ adrstr = ' ' + adrstr if adrstr else adrstr
145
+ return "{}:{};".format(disp, adrstr)
146
+
147
+ def __eq__(self, other):
148
+ if not isinstance(other, Group):
149
+ return NotImplemented
150
+ return (self.display_name == other.display_name and
151
+ self.addresses == other.addresses)
152
+
153
+
154
+ # Header Classes #
155
+
156
+ class BaseHeader(str):
157
+
158
+ """Base class for message headers.
159
+
160
+ Implements generic behavior and provides tools for subclasses.
161
+
162
+ A subclass must define a classmethod named 'parse' that takes an unfolded
163
+ value string and a dictionary as its arguments. The dictionary will
164
+ contain one key, 'defects', initialized to an empty list. After the call
165
+ the dictionary must contain two additional keys: parse_tree, set to the
166
+ parse tree obtained from parsing the header, and 'decoded', set to the
167
+ string value of the idealized representation of the data from the value.
168
+ (That is, encoded words are decoded, and values that have canonical
169
+ representations are so represented.)
170
+
171
+ The defects key is intended to collect parsing defects, which the message
172
+ parser will subsequently dispose of as appropriate. The parser should not,
173
+ insofar as practical, raise any errors. Defects should be added to the
174
+ list instead. The standard header parsers register defects for RFC
175
+ compliance issues, for obsolete RFC syntax, and for unrecoverable parsing
176
+ errors.
177
+
178
+ The parse method may add additional keys to the dictionary. In this case
179
+ the subclass must define an 'init' method, which will be passed the
180
+ dictionary as its keyword arguments. The method should use (usually by
181
+ setting them as the value of similarly named attributes) and remove all the
182
+ extra keys added by its parse method, and then use super to call its parent
183
+ class with the remaining arguments and keywords.
184
+
185
+ The subclass should also make sure that a 'max_count' attribute is defined
186
+ that is either None or 1. XXX: need to better define this API.
187
+
188
+ """
189
+
190
+ def __new__(cls, name, value):
191
+ kwds = {'defects': []}
192
+ cls.parse(value, kwds)
193
+ if utils._has_surrogates(kwds['decoded']):
194
+ kwds['decoded'] = utils._sanitize(kwds['decoded'])
195
+ self = str.__new__(cls, kwds['decoded'])
196
+ del kwds['decoded']
197
+ self.init(name, **kwds)
198
+ return self
199
+
200
+ def init(self, name, *, parse_tree, defects):
201
+ self._name = name
202
+ self._parse_tree = parse_tree
203
+ self._defects = defects
204
+
205
+ @property
206
+ def name(self):
207
+ return self._name
208
+
209
+ @property
210
+ def defects(self):
211
+ return tuple(self._defects)
212
+
213
+ def __reduce__(self):
214
+ return (
215
+ _reconstruct_header,
216
+ (
217
+ self.__class__.__name__,
218
+ self.__class__.__bases__,
219
+ str(self),
220
+ ),
221
+ self.__getstate__())
222
+
223
+ @classmethod
224
+ def _reconstruct(cls, value):
225
+ return str.__new__(cls, value)
226
+
227
+ def fold(self, *, policy):
228
+ """Fold header according to policy.
229
+
230
+ The parsed representation of the header is folded according to
231
+ RFC5322 rules, as modified by the policy. If the parse tree
232
+ contains surrogateescaped bytes, the bytes are CTE encoded using
233
+ the charset 'unknown-8bit".
234
+
235
+ Any non-ASCII characters in the parse tree are CTE encoded using
236
+ charset utf-8. XXX: make this a policy setting.
237
+
238
+ The returned value is an ASCII-only string possibly containing linesep
239
+ characters, and ending with a linesep character. The string includes
240
+ the header name and the ': ' separator.
241
+
242
+ """
243
+ # At some point we need to put fws here if it was in the source.
244
+ header = parser.Header([
245
+ parser.HeaderLabel([
246
+ parser.ValueTerminal(self.name, 'header-name'),
247
+ parser.ValueTerminal(':', 'header-sep')]),
248
+ ])
249
+ if self._parse_tree:
250
+ header.append(
251
+ parser.CFWSList([parser.WhiteSpaceTerminal(' ', 'fws')]))
252
+ header.append(self._parse_tree)
253
+ return header.fold(policy=policy)
254
+
255
+
256
+ def _reconstruct_header(cls_name, bases, value):
257
+ return type(cls_name, bases, {})._reconstruct(value)
258
+
259
+
260
+ class UnstructuredHeader:
261
+
262
+ max_count = None
263
+ value_parser = staticmethod(parser.get_unstructured)
264
+
265
+ @classmethod
266
+ def parse(cls, value, kwds):
267
+ kwds['parse_tree'] = cls.value_parser(value)
268
+ kwds['decoded'] = str(kwds['parse_tree'])
269
+
270
+
271
+ class UniqueUnstructuredHeader(UnstructuredHeader):
272
+
273
+ max_count = 1
274
+
275
+
276
+ class DateHeader:
277
+
278
+ """Header whose value consists of a single timestamp.
279
+
280
+ Provides an additional attribute, datetime, which is either an aware
281
+ datetime using a timezone, or a naive datetime if the timezone
282
+ in the input string is -0000. Also accepts a datetime as input.
283
+ The 'value' attribute is the normalized form of the timestamp,
284
+ which means it is the output of format_datetime on the datetime.
285
+ """
286
+
287
+ max_count = None
288
+
289
+ # This is used only for folding, not for creating 'decoded'.
290
+ value_parser = staticmethod(parser.get_unstructured)
291
+
292
+ @classmethod
293
+ def parse(cls, value, kwds):
294
+ if not value:
295
+ kwds['defects'].append(errors.HeaderMissingRequiredValue())
296
+ kwds['datetime'] = None
297
+ kwds['decoded'] = ''
298
+ kwds['parse_tree'] = parser.TokenList()
299
+ return
300
+ if isinstance(value, str):
301
+ kwds['decoded'] = value
302
+ try:
303
+ value = utils.parsedate_to_datetime(value)
304
+ except ValueError:
305
+ kwds['defects'].append(errors.InvalidDateDefect('Invalid date value or format'))
306
+ kwds['datetime'] = None
307
+ kwds['parse_tree'] = parser.TokenList()
308
+ return
309
+ kwds['datetime'] = value
310
+ kwds['decoded'] = utils.format_datetime(kwds['datetime'])
311
+ kwds['parse_tree'] = cls.value_parser(kwds['decoded'])
312
+
313
+ def init(self, *args, **kw):
314
+ self._datetime = kw.pop('datetime')
315
+ super().init(*args, **kw)
316
+
317
+ @property
318
+ def datetime(self):
319
+ return self._datetime
320
+
321
+
322
+ class UniqueDateHeader(DateHeader):
323
+
324
+ max_count = 1
325
+
326
+
327
+ class AddressHeader:
328
+
329
+ max_count = None
330
+
331
+ @staticmethod
332
+ def value_parser(value):
333
+ address_list, value = parser.get_address_list(value)
334
+ assert not value, 'this should not happen'
335
+ return address_list
336
+
337
+ @classmethod
338
+ def parse(cls, value, kwds):
339
+ if isinstance(value, str):
340
+ # We are translating here from the RFC language (address/mailbox)
341
+ # to our API language (group/address).
342
+ kwds['parse_tree'] = address_list = cls.value_parser(value)
343
+ groups = []
344
+ for addr in address_list.addresses:
345
+ groups.append(Group(addr.display_name,
346
+ [Address(mb.display_name or '',
347
+ mb.local_part or '',
348
+ mb.domain or '')
349
+ for mb in addr.all_mailboxes]))
350
+ defects = list(address_list.all_defects)
351
+ else:
352
+ # Assume it is Address/Group stuff
353
+ if not hasattr(value, '__iter__'):
354
+ value = [value]
355
+ groups = [Group(None, [item]) if not hasattr(item, 'addresses')
356
+ else item
357
+ for item in value]
358
+ defects = []
359
+ kwds['groups'] = groups
360
+ kwds['defects'] = defects
361
+ kwds['decoded'] = ', '.join([str(item) for item in groups])
362
+ if 'parse_tree' not in kwds:
363
+ kwds['parse_tree'] = cls.value_parser(kwds['decoded'])
364
+
365
+ def init(self, *args, **kw):
366
+ self._groups = tuple(kw.pop('groups'))
367
+ self._addresses = None
368
+ super().init(*args, **kw)
369
+
370
+ @property
371
+ def groups(self):
372
+ return self._groups
373
+
374
+ @property
375
+ def addresses(self):
376
+ if self._addresses is None:
377
+ self._addresses = tuple(address for group in self._groups
378
+ for address in group.addresses)
379
+ return self._addresses
380
+
381
+
382
+ class UniqueAddressHeader(AddressHeader):
383
+
384
+ max_count = 1
385
+
386
+
387
+ class SingleAddressHeader(AddressHeader):
388
+
389
+ @property
390
+ def address(self):
391
+ if len(self.addresses)!=1:
392
+ raise ValueError(("value of single address header {} is not "
393
+ "a single address").format(self.name))
394
+ return self.addresses[0]
395
+
396
+
397
+ class UniqueSingleAddressHeader(SingleAddressHeader):
398
+
399
+ max_count = 1
400
+
401
+
402
+ class MIMEVersionHeader:
403
+
404
+ max_count = 1
405
+
406
+ value_parser = staticmethod(parser.parse_mime_version)
407
+
408
+ @classmethod
409
+ def parse(cls, value, kwds):
410
+ kwds['parse_tree'] = parse_tree = cls.value_parser(value)
411
+ kwds['decoded'] = str(parse_tree)
412
+ kwds['defects'].extend(parse_tree.all_defects)
413
+ kwds['major'] = None if parse_tree.minor is None else parse_tree.major
414
+ kwds['minor'] = parse_tree.minor
415
+ if parse_tree.minor is not None:
416
+ kwds['version'] = '{}.{}'.format(kwds['major'], kwds['minor'])
417
+ else:
418
+ kwds['version'] = None
419
+
420
+ def init(self, *args, **kw):
421
+ self._version = kw.pop('version')
422
+ self._major = kw.pop('major')
423
+ self._minor = kw.pop('minor')
424
+ super().init(*args, **kw)
425
+
426
+ @property
427
+ def major(self):
428
+ return self._major
429
+
430
+ @property
431
+ def minor(self):
432
+ return self._minor
433
+
434
+ @property
435
+ def version(self):
436
+ return self._version
437
+
438
+
439
+ class ParameterizedMIMEHeader:
440
+
441
+ # Mixin that handles the params dict. Must be subclassed and
442
+ # a property value_parser for the specific header provided.
443
+
444
+ max_count = 1
445
+
446
+ @classmethod
447
+ def parse(cls, value, kwds):
448
+ kwds['parse_tree'] = parse_tree = cls.value_parser(value)
449
+ kwds['decoded'] = str(parse_tree)
450
+ kwds['defects'].extend(parse_tree.all_defects)
451
+ if parse_tree.params is None:
452
+ kwds['params'] = {}
453
+ else:
454
+ # The MIME RFCs specify that parameter ordering is arbitrary.
455
+ kwds['params'] = {utils._sanitize(name).lower():
456
+ utils._sanitize(value)
457
+ for name, value in parse_tree.params}
458
+
459
+ def init(self, *args, **kw):
460
+ self._params = kw.pop('params')
461
+ super().init(*args, **kw)
462
+
463
+ @property
464
+ def params(self):
465
+ return MappingProxyType(self._params)
466
+
467
+
468
+ class ContentTypeHeader(ParameterizedMIMEHeader):
469
+
470
+ value_parser = staticmethod(parser.parse_content_type_header)
471
+
472
+ def init(self, *args, **kw):
473
+ super().init(*args, **kw)
474
+ self._maintype = utils._sanitize(self._parse_tree.maintype)
475
+ self._subtype = utils._sanitize(self._parse_tree.subtype)
476
+
477
+ @property
478
+ def maintype(self):
479
+ return self._maintype
480
+
481
+ @property
482
+ def subtype(self):
483
+ return self._subtype
484
+
485
+ @property
486
+ def content_type(self):
487
+ return self.maintype + '/' + self.subtype
488
+
489
+
490
+ class ContentDispositionHeader(ParameterizedMIMEHeader):
491
+
492
+ value_parser = staticmethod(parser.parse_content_disposition_header)
493
+
494
+ def init(self, *args, **kw):
495
+ super().init(*args, **kw)
496
+ cd = self._parse_tree.content_disposition
497
+ self._content_disposition = cd if cd is None else utils._sanitize(cd)
498
+
499
+ @property
500
+ def content_disposition(self):
501
+ return self._content_disposition
502
+
503
+
504
+ class ContentTransferEncodingHeader:
505
+
506
+ max_count = 1
507
+
508
+ value_parser = staticmethod(parser.parse_content_transfer_encoding_header)
509
+
510
+ @classmethod
511
+ def parse(cls, value, kwds):
512
+ kwds['parse_tree'] = parse_tree = cls.value_parser(value)
513
+ kwds['decoded'] = str(parse_tree)
514
+ kwds['defects'].extend(parse_tree.all_defects)
515
+
516
+ def init(self, *args, **kw):
517
+ super().init(*args, **kw)
518
+ self._cte = utils._sanitize(self._parse_tree.cte)
519
+
520
+ @property
521
+ def cte(self):
522
+ return self._cte
523
+
524
+
525
+ class MessageIDHeader:
526
+
527
+ max_count = 1
528
+ value_parser = staticmethod(parser.parse_message_id)
529
+
530
+ @classmethod
531
+ def parse(cls, value, kwds):
532
+ kwds['parse_tree'] = parse_tree = cls.value_parser(value)
533
+ kwds['decoded'] = str(parse_tree)
534
+ kwds['defects'].extend(parse_tree.all_defects)
535
+
536
+
537
+ class ReferencesHeader:
538
+
539
+ max_count = 1
540
+ value_parser = staticmethod(parser.parse_message_ids)
541
+
542
+ @classmethod
543
+ def parse(cls, value, kwds):
544
+ kwds['parse_tree'] = parse_tree = cls.value_parser(value)
545
+ kwds['decoded'] = str(parse_tree)
546
+ kwds['defects'].extend(parse_tree.all_defects)
547
+
548
+
549
+ # The header factory #
550
+
551
+ _default_header_map = {
552
+ 'subject': UniqueUnstructuredHeader,
553
+ 'date': UniqueDateHeader,
554
+ 'resent-date': DateHeader,
555
+ 'orig-date': UniqueDateHeader,
556
+ 'sender': UniqueSingleAddressHeader,
557
+ 'resent-sender': SingleAddressHeader,
558
+ 'to': UniqueAddressHeader,
559
+ 'resent-to': AddressHeader,
560
+ 'cc': UniqueAddressHeader,
561
+ 'resent-cc': AddressHeader,
562
+ 'bcc': UniqueAddressHeader,
563
+ 'resent-bcc': AddressHeader,
564
+ 'from': UniqueAddressHeader,
565
+ 'resent-from': AddressHeader,
566
+ 'reply-to': UniqueAddressHeader,
567
+ 'mime-version': MIMEVersionHeader,
568
+ 'content-type': ContentTypeHeader,
569
+ 'content-disposition': ContentDispositionHeader,
570
+ 'content-transfer-encoding': ContentTransferEncodingHeader,
571
+ 'message-id': MessageIDHeader,
572
+ 'in-reply-to': ReferencesHeader,
573
+ 'references': ReferencesHeader,
574
+ }
575
+
576
+ class HeaderRegistry:
577
+
578
+ """A header_factory and header registry."""
579
+
580
+ def __init__(self, base_class=BaseHeader, default_class=UnstructuredHeader,
581
+ use_default_map=True):
582
+ """Create a header_factory that works with the Policy API.
583
+
584
+ base_class is the class that will be the last class in the created
585
+ header class's __bases__ list. default_class is the class that will be
586
+ used if "name" (see __call__) does not appear in the registry.
587
+ use_default_map controls whether or not the default mapping of names to
588
+ specialized classes is copied in to the registry when the factory is
589
+ created. The default is True.
590
+
591
+ """
592
+ self.registry = {}
593
+ self.base_class = base_class
594
+ self.default_class = default_class
595
+ if use_default_map:
596
+ self.registry.update(_default_header_map)
597
+
598
+ def map_to_type(self, name, cls):
599
+ """Register cls as the specialized class for handling "name" headers.
600
+
601
+ """
602
+ self.registry[name.lower()] = cls
603
+
604
+ def __getitem__(self, name):
605
+ cls = self.registry.get(name.lower(), self.default_class)
606
+ return type('_'+cls.__name__, (cls, self.base_class), {})
607
+
608
+ def __call__(self, name, value):
609
+ """Create a header instance for header 'name' from 'value'.
610
+
611
+ Creates a header instance by creating a specialized class for parsing
612
+ and representing the specified header by combining the factory
613
+ base_class with a specialized class from the registry or the
614
+ default_class, and passing the name and value to the constructed
615
+ class's constructor.
616
+
617
+ """
618
+ return self[name](name, value)
@@ -0,0 +1,68 @@
1
+ # Copyright (C) 2001-2006 Python Software Foundation
2
+ # Author: Barry Warsaw
3
+ # Contact: email-sig@python.org
4
+
5
+ """Various types of useful iterators and generators."""
6
+
7
+ __all__ = [
8
+ 'body_line_iterator',
9
+ 'typed_subpart_iterator',
10
+ 'walk',
11
+ # Do not include _structure() since it's part of the debugging API.
12
+ ]
13
+
14
+ import sys
15
+ from io import StringIO
16
+
17
+
18
+ # This function will become a method of the Message class
19
+ def walk(self):
20
+ """Walk over the message tree, yielding each subpart.
21
+
22
+ The walk is performed in depth-first order. This method is a
23
+ generator.
24
+ """
25
+ yield self
26
+ if self.is_multipart():
27
+ for subpart in self.get_payload():
28
+ yield from subpart.walk()
29
+
30
+
31
+ # These two functions are imported into the Iterators.py interface module.
32
+ def body_line_iterator(msg, decode=False):
33
+ """Iterate over the parts, returning string payloads line-by-line.
34
+
35
+ Optional decode (default False) is passed through to .get_payload().
36
+ """
37
+ for subpart in msg.walk():
38
+ payload = subpart.get_payload(decode=decode)
39
+ if isinstance(payload, str):
40
+ yield from StringIO(payload)
41
+
42
+
43
+ def typed_subpart_iterator(msg, maintype='text', subtype=None):
44
+ """Iterate over the subparts with a given MIME type.
45
+
46
+ Use `maintype' as the main MIME type to match against; this defaults to
47
+ "text". Optional `subtype' is the MIME subtype to match against; if
48
+ omitted, only the main type is matched.
49
+ """
50
+ for subpart in msg.walk():
51
+ if subpart.get_content_maintype() == maintype:
52
+ if subtype is None or subpart.get_content_subtype() == subtype:
53
+ yield subpart
54
+
55
+
56
+ def _structure(msg, fp=None, level=0, include_default=False):
57
+ """A handy debugging aid"""
58
+ if fp is None:
59
+ fp = sys.stdout
60
+ tab = ' ' * (level * 4)
61
+ print(tab + msg.get_content_type(), end='', file=fp)
62
+ if include_default:
63
+ print(' [%s]' % msg.get_default_type(), file=fp)
64
+ else:
65
+ print(file=fp)
66
+ if msg.is_multipart():
67
+ for subpart in msg.get_payload():
68
+ _structure(subpart, fp, level+1, include_default)