@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,497 @@
1
+ # Copyright (C) 2001-2010 Python Software Foundation
2
+ # Author: Barry Warsaw
3
+ # Contact: email-sig@python.org
4
+
5
+ """Miscellaneous utilities."""
6
+
7
+ __all__ = [
8
+ 'collapse_rfc2231_value',
9
+ 'decode_params',
10
+ 'decode_rfc2231',
11
+ 'encode_rfc2231',
12
+ 'formataddr',
13
+ 'formatdate',
14
+ 'format_datetime',
15
+ 'getaddresses',
16
+ 'make_msgid',
17
+ 'mktime_tz',
18
+ 'parseaddr',
19
+ 'parsedate',
20
+ 'parsedate_tz',
21
+ 'parsedate_to_datetime',
22
+ 'unquote',
23
+ ]
24
+
25
+ import os
26
+ import re
27
+ import time
28
+ import datetime
29
+ import urllib.parse
30
+
31
+ from email._parseaddr import quote
32
+ from email._parseaddr import AddressList as _AddressList
33
+ from email._parseaddr import mktime_tz
34
+
35
+ from email._parseaddr import parsedate, parsedate_tz, _parsedate_tz
36
+
37
+ COMMASPACE = ', '
38
+ EMPTYSTRING = ''
39
+ UEMPTYSTRING = ''
40
+ CRLF = '\r\n'
41
+ TICK = "'"
42
+
43
+ specialsre = re.compile(r'[][\\()<>@,:;".]')
44
+ escapesre = re.compile(r'[\\"]')
45
+
46
+
47
+ def _has_surrogates(s):
48
+ """Return True if s may contain surrogate-escaped binary data."""
49
+ # This check is based on the fact that unless there are surrogates, utf8
50
+ # (Python's default encoding) can encode any string. This is the fastest
51
+ # way to check for surrogates, see bpo-11454 (moved to gh-55663) for timings.
52
+ try:
53
+ s.encode()
54
+ return False
55
+ except UnicodeEncodeError:
56
+ return True
57
+
58
+ # How to deal with a string containing bytes before handing it to the
59
+ # application through the 'normal' interface.
60
+ def _sanitize(string):
61
+ # Turn any escaped bytes into unicode 'unknown' char. If the escaped
62
+ # bytes happen to be utf-8 they will instead get decoded, even if they
63
+ # were invalid in the charset the source was supposed to be in. This
64
+ # seems like it is not a bad thing; a defect was still registered.
65
+ original_bytes = string.encode('utf-8', 'surrogateescape')
66
+ return original_bytes.decode('utf-8', 'replace')
67
+
68
+
69
+
70
+ # Helpers
71
+
72
+ def formataddr(pair, charset='utf-8'):
73
+ """The inverse of parseaddr(), this takes a 2-tuple of the form
74
+ (realname, email_address) and returns the string value suitable
75
+ for an RFC 2822 From, To or Cc header.
76
+
77
+ If the first element of pair is false, then the second element is
78
+ returned unmodified.
79
+
80
+ The optional charset is the character set that is used to encode
81
+ realname in case realname is not ASCII safe. Can be an instance of str or
82
+ a Charset-like object which has a header_encode method. Default is
83
+ 'utf-8'.
84
+ """
85
+ name, address = pair
86
+ # The address MUST (per RFC) be ascii, so raise a UnicodeError if it isn't.
87
+ address.encode('ascii')
88
+ if name:
89
+ try:
90
+ name.encode('ascii')
91
+ except UnicodeEncodeError:
92
+ if isinstance(charset, str):
93
+ # lazy import to improve module import time
94
+ from email.charset import Charset
95
+ charset = Charset(charset)
96
+ encoded_name = charset.header_encode(name)
97
+ return "%s <%s>" % (encoded_name, address)
98
+ else:
99
+ quotes = ''
100
+ if specialsre.search(name):
101
+ quotes = '"'
102
+ name = escapesre.sub(r'\\\g<0>', name)
103
+ return '%s%s%s <%s>' % (quotes, name, quotes, address)
104
+ return address
105
+
106
+
107
+ def _iter_escaped_chars(addr):
108
+ pos = 0
109
+ escape = False
110
+ for pos, ch in enumerate(addr):
111
+ if escape:
112
+ yield (pos, '\\' + ch)
113
+ escape = False
114
+ elif ch == '\\':
115
+ escape = True
116
+ else:
117
+ yield (pos, ch)
118
+ if escape:
119
+ yield (pos, '\\')
120
+
121
+
122
+ def _strip_quoted_realnames(addr):
123
+ """Strip real names between quotes."""
124
+ if '"' not in addr:
125
+ # Fast path
126
+ return addr
127
+
128
+ start = 0
129
+ open_pos = None
130
+ result = []
131
+ for pos, ch in _iter_escaped_chars(addr):
132
+ if ch == '"':
133
+ if open_pos is None:
134
+ open_pos = pos
135
+ else:
136
+ if start != open_pos:
137
+ result.append(addr[start:open_pos])
138
+ start = pos + 1
139
+ open_pos = None
140
+
141
+ if start < len(addr):
142
+ result.append(addr[start:])
143
+
144
+ return ''.join(result)
145
+
146
+
147
+ supports_strict_parsing = True
148
+
149
+ def getaddresses(fieldvalues, *, strict=True):
150
+ """Return a list of (REALNAME, EMAIL) or ('','') for each fieldvalue.
151
+
152
+ When parsing fails for a fieldvalue, a 2-tuple of ('', '') is returned in
153
+ its place.
154
+
155
+ If strict is true, use a strict parser which rejects malformed inputs.
156
+ """
157
+
158
+ # If strict is true, if the resulting list of parsed addresses is greater
159
+ # than the number of fieldvalues in the input list, a parsing error has
160
+ # occurred and consequently a list containing a single empty 2-tuple [('',
161
+ # '')] is returned in its place. This is done to avoid invalid output.
162
+ #
163
+ # Malformed input: getaddresses(['alice@example.com <bob@example.com>'])
164
+ # Invalid output: [('', 'alice@example.com'), ('', 'bob@example.com')]
165
+ # Safe output: [('', '')]
166
+
167
+ if not strict:
168
+ all = COMMASPACE.join(str(v) for v in fieldvalues)
169
+ a = _AddressList(all)
170
+ return a.addresslist
171
+
172
+ fieldvalues = [str(v) for v in fieldvalues]
173
+ fieldvalues = _pre_parse_validation(fieldvalues)
174
+ addr = COMMASPACE.join(fieldvalues)
175
+ a = _AddressList(addr)
176
+ result = _post_parse_validation(a.addresslist)
177
+
178
+ # Treat output as invalid if the number of addresses is not equal to the
179
+ # expected number of addresses.
180
+ n = 0
181
+ for v in fieldvalues:
182
+ # When a comma is used in the Real Name part it is not a deliminator.
183
+ # So strip those out before counting the commas.
184
+ v = _strip_quoted_realnames(v)
185
+ # Expected number of addresses: 1 + number of commas
186
+ n += 1 + v.count(',')
187
+ if len(result) != n:
188
+ return [('', '')]
189
+
190
+ return result
191
+
192
+
193
+ def _check_parenthesis(addr):
194
+ # Ignore parenthesis in quoted real names.
195
+ addr = _strip_quoted_realnames(addr)
196
+
197
+ opens = 0
198
+ for pos, ch in _iter_escaped_chars(addr):
199
+ if ch == '(':
200
+ opens += 1
201
+ elif ch == ')':
202
+ opens -= 1
203
+ if opens < 0:
204
+ return False
205
+ return (opens == 0)
206
+
207
+
208
+ def _pre_parse_validation(email_header_fields):
209
+ accepted_values = []
210
+ for v in email_header_fields:
211
+ if not _check_parenthesis(v):
212
+ v = "('', '')"
213
+ accepted_values.append(v)
214
+
215
+ return accepted_values
216
+
217
+
218
+ def _post_parse_validation(parsed_email_header_tuples):
219
+ accepted_values = []
220
+ # The parser would have parsed a correctly formatted domain-literal
221
+ # The existence of an [ after parsing indicates a parsing failure
222
+ for v in parsed_email_header_tuples:
223
+ if '[' in v[1]:
224
+ v = ('', '')
225
+ accepted_values.append(v)
226
+
227
+ return accepted_values
228
+
229
+
230
+ def _format_timetuple_and_zone(timetuple, zone):
231
+ return '%s, %02d %s %04d %02d:%02d:%02d %s' % (
232
+ ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'][timetuple[6]],
233
+ timetuple[2],
234
+ ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
235
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][timetuple[1] - 1],
236
+ timetuple[0], timetuple[3], timetuple[4], timetuple[5],
237
+ zone)
238
+
239
+ def formatdate(timeval=None, localtime=False, usegmt=False):
240
+ """Returns a date string as specified by RFC 2822, e.g.:
241
+
242
+ Fri, 09 Nov 2001 01:08:47 -0000
243
+
244
+ Optional timeval if given is a floating-point time value as accepted by
245
+ gmtime() and localtime(), otherwise the current time is used.
246
+
247
+ Optional localtime is a flag that when True, interprets timeval, and
248
+ returns a date relative to the local timezone instead of UTC, properly
249
+ taking daylight savings time into account.
250
+
251
+ Optional argument usegmt means that the timezone is written out as
252
+ an ascii string, not numeric one (so "GMT" instead of "+0000"). This
253
+ is needed for HTTP, and is only used when localtime==False.
254
+ """
255
+ # Note: we cannot use strftime() because that honors the locale and RFC
256
+ # 2822 requires that day and month names be the English abbreviations.
257
+ if timeval is None:
258
+ timeval = time.time()
259
+ dt = datetime.datetime.fromtimestamp(timeval, datetime.timezone.utc)
260
+
261
+ if localtime:
262
+ dt = dt.astimezone()
263
+ usegmt = False
264
+ elif not usegmt:
265
+ dt = dt.replace(tzinfo=None)
266
+ return format_datetime(dt, usegmt)
267
+
268
+ def format_datetime(dt, usegmt=False):
269
+ """Turn a datetime into a date string as specified in RFC 2822.
270
+
271
+ If usegmt is True, dt must be an aware datetime with an offset of zero. In
272
+ this case 'GMT' will be rendered instead of the normal +0000 required by
273
+ RFC2822. This is to support HTTP headers involving date stamps.
274
+ """
275
+ now = dt.timetuple()
276
+ if usegmt:
277
+ if dt.tzinfo is None or dt.tzinfo != datetime.timezone.utc:
278
+ raise ValueError("usegmt option requires a UTC datetime")
279
+ zone = 'GMT'
280
+ elif dt.tzinfo is None:
281
+ zone = '-0000'
282
+ else:
283
+ zone = dt.strftime("%z")
284
+ return _format_timetuple_and_zone(now, zone)
285
+
286
+
287
+ def make_msgid(idstring=None, domain=None):
288
+ """Returns a string suitable for RFC 2822 compliant Message-ID, e.g:
289
+
290
+ <142480216486.20800.16526388040877946887@nightshade.la.mastaler.com>
291
+
292
+ Optional idstring if given is a string used to strengthen the
293
+ uniqueness of the message id. Optional domain if given provides the
294
+ portion of the message id after the '@'. It defaults to the locally
295
+ defined hostname.
296
+ """
297
+ # Lazy imports to speedup module import time
298
+ # (no other functions in email.utils need these modules)
299
+ import random
300
+ import socket
301
+
302
+ timeval = int(time.time()*100)
303
+ pid = os.getpid()
304
+ randint = random.getrandbits(64)
305
+ if idstring is None:
306
+ idstring = ''
307
+ else:
308
+ idstring = '.' + idstring
309
+ if domain is None:
310
+ domain = socket.getfqdn()
311
+ msgid = '<%d.%d.%d%s@%s>' % (timeval, pid, randint, idstring, domain)
312
+ return msgid
313
+
314
+
315
+ def parsedate_to_datetime(data):
316
+ parsed_date_tz = _parsedate_tz(data)
317
+ if parsed_date_tz is None:
318
+ raise ValueError('Invalid date value or format "%s"' % str(data))
319
+ *dtuple, tz = parsed_date_tz
320
+ try:
321
+ if tz is None:
322
+ return datetime.datetime(*dtuple[:6])
323
+ return datetime.datetime(*dtuple[:6],
324
+ tzinfo=datetime.timezone(datetime.timedelta(seconds=tz)))
325
+ except OverflowError as exc:
326
+ raise ValueError('Invalid date value or format "%s"' % str(data)) from exc
327
+
328
+
329
+ def parseaddr(addr, *, strict=True):
330
+ """
331
+ Parse addr into its constituent realname and email address parts.
332
+
333
+ Return a tuple of realname and email address, unless the parse fails, in
334
+ which case return a 2-tuple of ('', '').
335
+
336
+ If strict is True, use a strict parser which rejects malformed inputs.
337
+ """
338
+ if not strict:
339
+ addrs = _AddressList(addr).addresslist
340
+ if not addrs:
341
+ return ('', '')
342
+ return addrs[0]
343
+
344
+ if isinstance(addr, list):
345
+ addr = addr[0]
346
+
347
+ if not isinstance(addr, str):
348
+ return ('', '')
349
+
350
+ addr = _pre_parse_validation([addr])[0]
351
+ addrs = _post_parse_validation(_AddressList(addr).addresslist)
352
+
353
+ if not addrs or len(addrs) > 1:
354
+ return ('', '')
355
+
356
+ return addrs[0]
357
+
358
+
359
+ # rfc822.unquote() doesn't properly de-backslash-ify in Python pre-2.3.
360
+ def unquote(str):
361
+ """Remove quotes from a string."""
362
+ if len(str) > 1:
363
+ if str.startswith('"') and str.endswith('"'):
364
+ return str[1:-1].replace('\\\\', '\\').replace('\\"', '"')
365
+ if str.startswith('<') and str.endswith('>'):
366
+ return str[1:-1]
367
+ return str
368
+
369
+
370
+
371
+ # RFC2231-related functions - parameter encoding and decoding
372
+ def decode_rfc2231(s):
373
+ """Decode string according to RFC 2231"""
374
+ parts = s.split(TICK, 2)
375
+ if len(parts) <= 2:
376
+ return None, None, s
377
+ return parts
378
+
379
+
380
+ def encode_rfc2231(s, charset=None, language=None):
381
+ """Encode string according to RFC 2231.
382
+
383
+ If neither charset nor language is given, then s is returned as-is. If
384
+ charset is given but not language, the string is encoded using the empty
385
+ string for language.
386
+ """
387
+ s = urllib.parse.quote(s, safe='', encoding=charset or 'ascii')
388
+ if charset is None and language is None:
389
+ return s
390
+ if language is None:
391
+ language = ''
392
+ return "%s'%s'%s" % (charset, language, s)
393
+
394
+
395
+ rfc2231_continuation = re.compile(r'^(?P<name>\w+)\*((?P<num>[0-9]+)\*?)?$',
396
+ re.ASCII)
397
+
398
+ def decode_params(params):
399
+ """Decode parameters list according to RFC 2231.
400
+
401
+ params is a sequence of 2-tuples containing (param name, string value).
402
+ """
403
+ new_params = [params[0]]
404
+ # Map parameter's name to a list of continuations. The values are a
405
+ # 3-tuple of the continuation number, the string value, and a flag
406
+ # specifying whether a particular segment is %-encoded.
407
+ rfc2231_params = {}
408
+ for name, value in params[1:]:
409
+ encoded = name.endswith('*')
410
+ value = unquote(value)
411
+ mo = rfc2231_continuation.match(name)
412
+ if mo:
413
+ name, num = mo.group('name', 'num')
414
+ if num is not None:
415
+ num = int(num)
416
+ rfc2231_params.setdefault(name, []).append((num, value, encoded))
417
+ else:
418
+ new_params.append((name, '"%s"' % quote(value)))
419
+ if rfc2231_params:
420
+ for name, continuations in rfc2231_params.items():
421
+ value = []
422
+ extended = False
423
+ # Sort by number, treating None as 0 if there is no 0,
424
+ # and ignore it if there is already a 0.
425
+ has_zero = any(x[0] == 0 for x in continuations)
426
+ if has_zero:
427
+ continuations = [x for x in continuations if x[0] is not None]
428
+ else:
429
+ continuations = [(x[0] or 0, x[1], x[2]) for x in continuations]
430
+ continuations.sort(key=lambda x: x[0])
431
+ # And now append all values in numerical order, converting
432
+ # %-encodings for the encoded segments. If any of the
433
+ # continuation names ends in a *, then the entire string, after
434
+ # decoding segments and concatenating, must have the charset and
435
+ # language specifiers at the beginning of the string.
436
+ for num, s, encoded in continuations:
437
+ if encoded:
438
+ # Decode as "latin-1", so the characters in s directly
439
+ # represent the percent-encoded octet values.
440
+ # collapse_rfc2231_value treats this as an octet sequence.
441
+ s = urllib.parse.unquote(s, encoding="latin-1")
442
+ extended = True
443
+ value.append(s)
444
+ value = quote(EMPTYSTRING.join(value))
445
+ if extended:
446
+ charset, language, value = decode_rfc2231(value)
447
+ new_params.append((name, (charset, language, '"%s"' % value)))
448
+ else:
449
+ new_params.append((name, '"%s"' % value))
450
+ return new_params
451
+
452
+ def collapse_rfc2231_value(value, errors='replace',
453
+ fallback_charset='us-ascii'):
454
+ if not isinstance(value, tuple) or len(value) != 3:
455
+ return unquote(value)
456
+ # While value comes to us as a unicode string, we need it to be a bytes
457
+ # object. We do not want bytes() normal utf-8 decoder, we want a straight
458
+ # interpretation of the string as character bytes.
459
+ charset, language, text = value
460
+ if charset is None:
461
+ # Issue 17369: if charset/lang is None, decode_rfc2231 couldn't parse
462
+ # the value, so use the fallback_charset.
463
+ charset = fallback_charset
464
+ rawbytes = bytes(text, 'raw-unicode-escape')
465
+ try:
466
+ return str(rawbytes, charset, errors)
467
+ except LookupError:
468
+ # charset is not a known codec.
469
+ return unquote(text)
470
+
471
+
472
+ #
473
+ # datetime doesn't provide a localtime function yet, so provide one. Code
474
+ # adapted from the patch in issue 9527. This may not be perfect, but it is
475
+ # better than not having it.
476
+ #
477
+
478
+ def localtime(dt=None, isdst=None):
479
+ """Return local time as an aware datetime object.
480
+
481
+ If called without arguments, return current time. Otherwise *dt*
482
+ argument should be a datetime instance, and it is converted to the
483
+ local time zone according to the system time zone database. If *dt* is
484
+ naive (that is, dt.tzinfo is None), it is assumed to be in local time.
485
+ The isdst parameter is ignored.
486
+
487
+ """
488
+ if isdst is not None:
489
+ import warnings
490
+ warnings._deprecated(
491
+ "The 'isdst' parameter to 'localtime'",
492
+ message='{name} is deprecated and slated for removal in Python {remove}',
493
+ remove=(3, 14),
494
+ )
495
+ if dt is None:
496
+ dt = datetime.datetime.now()
497
+ return dt.astimezone()
@@ -0,0 +1,179 @@
1
+ """ Standard "encodings" Package
2
+
3
+ Standard Python encoding modules are stored in this package
4
+ directory.
5
+
6
+ Codec modules must have names corresponding to normalized encoding
7
+ names as defined in the normalize_encoding() function below, e.g.
8
+ 'utf-8' must be implemented by the module 'utf_8.py'.
9
+
10
+ Each codec module must export the following interface:
11
+
12
+ * getregentry() -> codecs.CodecInfo object
13
+ The getregentry() API must return a CodecInfo object with encoder, decoder,
14
+ incrementalencoder, incrementaldecoder, streamwriter and streamreader
15
+ attributes which adhere to the Python Codec Interface Standard.
16
+
17
+ In addition, a module may optionally also define the following
18
+ APIs which are then used by the package's codec search function:
19
+
20
+ * getaliases() -> sequence of encoding name strings to use as aliases
21
+
22
+ Alias names returned by getaliases() must be normalized encoding
23
+ names as defined by normalize_encoding().
24
+
25
+ Written by Marc-Andre Lemburg (mal@lemburg.com).
26
+
27
+ (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
28
+
29
+ """#"
30
+
31
+ import codecs
32
+ import sys
33
+ from . import aliases
34
+
35
+ _cache = {}
36
+ _MAXCACHE = 500
37
+ _unknown = '--unknown--'
38
+ _import_tail = ['*']
39
+ _aliases = aliases.aliases
40
+
41
+ class CodecRegistryError(LookupError, SystemError):
42
+ pass
43
+
44
+ def normalize_encoding(encoding):
45
+
46
+ """ Normalize an encoding name.
47
+
48
+ Normalization works as follows: all non-alphanumeric
49
+ characters except the dot used for Python package names are
50
+ collapsed and replaced with a single underscore, e.g. ' -;#'
51
+ becomes '_'. Leading and trailing underscores are removed.
52
+
53
+ Note that encoding names should be ASCII only.
54
+
55
+ """
56
+ if isinstance(encoding, bytes):
57
+ encoding = str(encoding, "ascii")
58
+
59
+ chars = []
60
+ punct = False
61
+ for c in encoding:
62
+ if c.isalnum() or c == '.':
63
+ if punct and chars:
64
+ chars.append('_')
65
+ if c.isascii():
66
+ chars.append(c)
67
+ punct = False
68
+ else:
69
+ punct = True
70
+ return ''.join(chars)
71
+
72
+ def search_function(encoding):
73
+
74
+ # Cache lookup
75
+ entry = _cache.get(encoding, _unknown)
76
+ if entry is not _unknown:
77
+ return entry
78
+
79
+ # Import the module:
80
+ #
81
+ # First try to find an alias for the normalized encoding
82
+ # name and lookup the module using the aliased name, then try to
83
+ # lookup the module using the standard import scheme, i.e. first
84
+ # try in the encodings package, then at top-level.
85
+ #
86
+ norm_encoding = normalize_encoding(encoding)
87
+ aliased_encoding = _aliases.get(norm_encoding) or \
88
+ _aliases.get(norm_encoding.replace('.', '_'))
89
+ if aliased_encoding is not None:
90
+ modnames = [aliased_encoding,
91
+ norm_encoding]
92
+ else:
93
+ modnames = [norm_encoding]
94
+ for modname in modnames:
95
+ if not modname or '.' in modname:
96
+ continue
97
+ try:
98
+ # Import is absolute to prevent the possibly malicious import of a
99
+ # module with side-effects that is not in the 'encodings' package.
100
+ mod = __import__('encodings.' + modname, fromlist=_import_tail,
101
+ level=0)
102
+ except ImportError:
103
+ # ImportError may occur because 'encodings.(modname)' does not exist,
104
+ # or because it imports a name that does not exist (see mbcs and oem)
105
+ pass
106
+ else:
107
+ break
108
+ else:
109
+ mod = None
110
+
111
+ try:
112
+ getregentry = mod.getregentry
113
+ except AttributeError:
114
+ # Not a codec module
115
+ mod = None
116
+
117
+ if mod is None:
118
+ # Cache misses
119
+ if len(_cache) >= _MAXCACHE:
120
+ _cache.clear()
121
+ _cache[encoding] = None
122
+ return None
123
+
124
+ # Now ask the module for the registry entry
125
+ entry = getregentry()
126
+ if not isinstance(entry, codecs.CodecInfo):
127
+ if not 4 <= len(entry) <= 7:
128
+ raise CodecRegistryError('module "%s" (%s) failed to register'
129
+ % (mod.__name__, mod.__file__))
130
+ if not callable(entry[0]) or not callable(entry[1]) or \
131
+ (entry[2] is not None and not callable(entry[2])) or \
132
+ (entry[3] is not None and not callable(entry[3])) or \
133
+ (len(entry) > 4 and entry[4] is not None and not callable(entry[4])) or \
134
+ (len(entry) > 5 and entry[5] is not None and not callable(entry[5])):
135
+ raise CodecRegistryError('incompatible codecs in module "%s" (%s)'
136
+ % (mod.__name__, mod.__file__))
137
+ if len(entry)<7 or entry[6] is None:
138
+ entry += (None,)*(6-len(entry)) + (mod.__name__.split(".", 1)[1],)
139
+ entry = codecs.CodecInfo(*entry)
140
+
141
+ # Cache the codec registry entry
142
+ if len(_cache) >= _MAXCACHE:
143
+ _cache.clear()
144
+ _cache[encoding] = entry
145
+
146
+ # Register its aliases (without overwriting previously registered
147
+ # aliases)
148
+ try:
149
+ codecaliases = mod.getaliases()
150
+ except AttributeError:
151
+ pass
152
+ else:
153
+ for alias in codecaliases:
154
+ if alias not in _aliases:
155
+ _aliases[alias] = modname
156
+
157
+ # Return the registry entry
158
+ return entry
159
+
160
+ # Register the search_function in the Python codec registry
161
+ codecs.register(search_function)
162
+
163
+ if sys.platform == 'win32':
164
+ # bpo-671666, bpo-46668: If Python does not implement a codec for current
165
+ # Windows ANSI code page, use the "mbcs" codec instead:
166
+ # WideCharToMultiByte() and MultiByteToWideChar() functions with CP_ACP.
167
+ # Python does not support custom code pages.
168
+ def _alias_mbcs(encoding):
169
+ try:
170
+ import _winapi
171
+ ansi_code_page = "cp%s" % _winapi.GetACP()
172
+ if encoding == ansi_code_page:
173
+ import encodings.mbcs
174
+ return encodings.mbcs.getregentry()
175
+ except ImportError:
176
+ # Imports may fail while we are shutting down
177
+ pass
178
+
179
+ codecs.register(_alias_mbcs)