@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,929 @@
1
+ # Contains code from https://github.com/MagicStack/uvloop/tree/v0.16.0
2
+ # SPDX-License-Identifier: PSF-2.0 AND (MIT OR Apache-2.0)
3
+ # SPDX-FileCopyrightText: Copyright (c) 2015-2021 MagicStack Inc. http://magic.io
4
+
5
+ import collections
6
+ import enum
7
+ import warnings
8
+ try:
9
+ import ssl
10
+ except ImportError: # pragma: no cover
11
+ ssl = None
12
+
13
+ from . import constants
14
+ from . import exceptions
15
+ from . import protocols
16
+ from . import transports
17
+ from .log import logger
18
+
19
+ if ssl is not None:
20
+ SSLAgainErrors = (ssl.SSLWantReadError, ssl.SSLSyscallError)
21
+
22
+
23
+ class SSLProtocolState(enum.Enum):
24
+ UNWRAPPED = "UNWRAPPED"
25
+ DO_HANDSHAKE = "DO_HANDSHAKE"
26
+ WRAPPED = "WRAPPED"
27
+ FLUSHING = "FLUSHING"
28
+ SHUTDOWN = "SHUTDOWN"
29
+
30
+
31
+ class AppProtocolState(enum.Enum):
32
+ # This tracks the state of app protocol (https://git.io/fj59P):
33
+ #
34
+ # INIT -cm-> CON_MADE [-dr*->] [-er-> EOF?] -cl-> CON_LOST
35
+ #
36
+ # * cm: connection_made()
37
+ # * dr: data_received()
38
+ # * er: eof_received()
39
+ # * cl: connection_lost()
40
+
41
+ STATE_INIT = "STATE_INIT"
42
+ STATE_CON_MADE = "STATE_CON_MADE"
43
+ STATE_EOF = "STATE_EOF"
44
+ STATE_CON_LOST = "STATE_CON_LOST"
45
+
46
+
47
+ def _create_transport_context(server_side, server_hostname):
48
+ if server_side:
49
+ raise ValueError('Server side SSL needs a valid SSLContext')
50
+
51
+ # Client side may pass ssl=True to use a default
52
+ # context; in that case the sslcontext passed is None.
53
+ # The default is secure for client connections.
54
+ # Python 3.4+: use up-to-date strong settings.
55
+ sslcontext = ssl.create_default_context()
56
+ if not server_hostname:
57
+ sslcontext.check_hostname = False
58
+ return sslcontext
59
+
60
+
61
+ def add_flowcontrol_defaults(high, low, kb):
62
+ if high is None:
63
+ if low is None:
64
+ hi = kb * 1024
65
+ else:
66
+ lo = low
67
+ hi = 4 * lo
68
+ else:
69
+ hi = high
70
+ if low is None:
71
+ lo = hi // 4
72
+ else:
73
+ lo = low
74
+
75
+ if not hi >= lo >= 0:
76
+ raise ValueError('high (%r) must be >= low (%r) must be >= 0' %
77
+ (hi, lo))
78
+
79
+ return hi, lo
80
+
81
+
82
+ class _SSLProtocolTransport(transports._FlowControlMixin,
83
+ transports.Transport):
84
+
85
+ _start_tls_compatible = True
86
+ _sendfile_compatible = constants._SendfileMode.FALLBACK
87
+
88
+ def __init__(self, loop, ssl_protocol):
89
+ self._loop = loop
90
+ self._ssl_protocol = ssl_protocol
91
+ self._closed = False
92
+
93
+ def get_extra_info(self, name, default=None):
94
+ """Get optional transport information."""
95
+ return self._ssl_protocol._get_extra_info(name, default)
96
+
97
+ def set_protocol(self, protocol):
98
+ self._ssl_protocol._set_app_protocol(protocol)
99
+
100
+ def get_protocol(self):
101
+ return self._ssl_protocol._app_protocol
102
+
103
+ def is_closing(self):
104
+ return self._closed or self._ssl_protocol._is_transport_closing()
105
+
106
+ def close(self):
107
+ """Close the transport.
108
+
109
+ Buffered data will be flushed asynchronously. No more data
110
+ will be received. After all buffered data is flushed, the
111
+ protocol's connection_lost() method will (eventually) called
112
+ with None as its argument.
113
+ """
114
+ if not self._closed:
115
+ self._closed = True
116
+ self._ssl_protocol._start_shutdown()
117
+ else:
118
+ self._ssl_protocol = None
119
+
120
+ def __del__(self, _warnings=warnings):
121
+ if not self._closed:
122
+ self._closed = True
123
+ _warnings.warn(
124
+ "unclosed transport <asyncio._SSLProtocolTransport "
125
+ "object>", ResourceWarning)
126
+
127
+ def is_reading(self):
128
+ return not self._ssl_protocol._app_reading_paused
129
+
130
+ def pause_reading(self):
131
+ """Pause the receiving end.
132
+
133
+ No data will be passed to the protocol's data_received()
134
+ method until resume_reading() is called.
135
+ """
136
+ self._ssl_protocol._pause_reading()
137
+
138
+ def resume_reading(self):
139
+ """Resume the receiving end.
140
+
141
+ Data received will once again be passed to the protocol's
142
+ data_received() method.
143
+ """
144
+ self._ssl_protocol._resume_reading()
145
+
146
+ def set_write_buffer_limits(self, high=None, low=None):
147
+ """Set the high- and low-water limits for write flow control.
148
+
149
+ These two values control when to call the protocol's
150
+ pause_writing() and resume_writing() methods. If specified,
151
+ the low-water limit must be less than or equal to the
152
+ high-water limit. Neither value can be negative.
153
+
154
+ The defaults are implementation-specific. If only the
155
+ high-water limit is given, the low-water limit defaults to an
156
+ implementation-specific value less than or equal to the
157
+ high-water limit. Setting high to zero forces low to zero as
158
+ well, and causes pause_writing() to be called whenever the
159
+ buffer becomes non-empty. Setting low to zero causes
160
+ resume_writing() to be called only once the buffer is empty.
161
+ Use of zero for either limit is generally sub-optimal as it
162
+ reduces opportunities for doing I/O and computation
163
+ concurrently.
164
+ """
165
+ self._ssl_protocol._set_write_buffer_limits(high, low)
166
+ self._ssl_protocol._control_app_writing()
167
+
168
+ def get_write_buffer_limits(self):
169
+ return (self._ssl_protocol._outgoing_low_water,
170
+ self._ssl_protocol._outgoing_high_water)
171
+
172
+ def get_write_buffer_size(self):
173
+ """Return the current size of the write buffers."""
174
+ return self._ssl_protocol._get_write_buffer_size()
175
+
176
+ def set_read_buffer_limits(self, high=None, low=None):
177
+ """Set the high- and low-water limits for read flow control.
178
+
179
+ These two values control when to call the upstream transport's
180
+ pause_reading() and resume_reading() methods. If specified,
181
+ the low-water limit must be less than or equal to the
182
+ high-water limit. Neither value can be negative.
183
+
184
+ The defaults are implementation-specific. If only the
185
+ high-water limit is given, the low-water limit defaults to an
186
+ implementation-specific value less than or equal to the
187
+ high-water limit. Setting high to zero forces low to zero as
188
+ well, and causes pause_reading() to be called whenever the
189
+ buffer becomes non-empty. Setting low to zero causes
190
+ resume_reading() to be called only once the buffer is empty.
191
+ Use of zero for either limit is generally sub-optimal as it
192
+ reduces opportunities for doing I/O and computation
193
+ concurrently.
194
+ """
195
+ self._ssl_protocol._set_read_buffer_limits(high, low)
196
+ self._ssl_protocol._control_ssl_reading()
197
+
198
+ def get_read_buffer_limits(self):
199
+ return (self._ssl_protocol._incoming_low_water,
200
+ self._ssl_protocol._incoming_high_water)
201
+
202
+ def get_read_buffer_size(self):
203
+ """Return the current size of the read buffer."""
204
+ return self._ssl_protocol._get_read_buffer_size()
205
+
206
+ @property
207
+ def _protocol_paused(self):
208
+ # Required for sendfile fallback pause_writing/resume_writing logic
209
+ return self._ssl_protocol._app_writing_paused
210
+
211
+ def write(self, data):
212
+ """Write some data bytes to the transport.
213
+
214
+ This does not block; it buffers the data and arranges for it
215
+ to be sent out asynchronously.
216
+ """
217
+ if not isinstance(data, (bytes, bytearray, memoryview)):
218
+ raise TypeError(f"data: expecting a bytes-like instance, "
219
+ f"got {type(data).__name__}")
220
+ if not data:
221
+ return
222
+ self._ssl_protocol._write_appdata((data,))
223
+
224
+ def writelines(self, list_of_data):
225
+ """Write a list (or any iterable) of data bytes to the transport.
226
+
227
+ The default implementation concatenates the arguments and
228
+ calls write() on the result.
229
+ """
230
+ self._ssl_protocol._write_appdata(list_of_data)
231
+
232
+ def write_eof(self):
233
+ """Close the write end after flushing buffered data.
234
+
235
+ This raises :exc:`NotImplementedError` right now.
236
+ """
237
+ raise NotImplementedError
238
+
239
+ def can_write_eof(self):
240
+ """Return True if this transport supports write_eof(), False if not."""
241
+ return False
242
+
243
+ def abort(self):
244
+ """Close the transport immediately.
245
+
246
+ Buffered data will be lost. No more data will be received.
247
+ The protocol's connection_lost() method will (eventually) be
248
+ called with None as its argument.
249
+ """
250
+ self._force_close(None)
251
+
252
+ def _force_close(self, exc):
253
+ self._closed = True
254
+ if self._ssl_protocol is not None:
255
+ self._ssl_protocol._abort(exc)
256
+
257
+ def _test__append_write_backlog(self, data):
258
+ # for test only
259
+ self._ssl_protocol._write_backlog.append(data)
260
+ self._ssl_protocol._write_buffer_size += len(data)
261
+
262
+
263
+ class SSLProtocol(protocols.BufferedProtocol):
264
+ max_size = 256 * 1024 # Buffer size passed to read()
265
+
266
+ _handshake_start_time = None
267
+ _handshake_timeout_handle = None
268
+ _shutdown_timeout_handle = None
269
+
270
+ def __init__(self, loop, app_protocol, sslcontext, waiter,
271
+ server_side=False, server_hostname=None,
272
+ call_connection_made=True,
273
+ ssl_handshake_timeout=None,
274
+ ssl_shutdown_timeout=None):
275
+ if ssl is None:
276
+ raise RuntimeError("stdlib ssl module not available")
277
+
278
+ self._ssl_buffer = bytearray(self.max_size)
279
+ self._ssl_buffer_view = memoryview(self._ssl_buffer)
280
+
281
+ if ssl_handshake_timeout is None:
282
+ ssl_handshake_timeout = constants.SSL_HANDSHAKE_TIMEOUT
283
+ elif ssl_handshake_timeout <= 0:
284
+ raise ValueError(
285
+ f"ssl_handshake_timeout should be a positive number, "
286
+ f"got {ssl_handshake_timeout}")
287
+ if ssl_shutdown_timeout is None:
288
+ ssl_shutdown_timeout = constants.SSL_SHUTDOWN_TIMEOUT
289
+ elif ssl_shutdown_timeout <= 0:
290
+ raise ValueError(
291
+ f"ssl_shutdown_timeout should be a positive number, "
292
+ f"got {ssl_shutdown_timeout}")
293
+
294
+ if not sslcontext:
295
+ sslcontext = _create_transport_context(
296
+ server_side, server_hostname)
297
+
298
+ self._server_side = server_side
299
+ if server_hostname and not server_side:
300
+ self._server_hostname = server_hostname
301
+ else:
302
+ self._server_hostname = None
303
+ self._sslcontext = sslcontext
304
+ # SSL-specific extra info. More info are set when the handshake
305
+ # completes.
306
+ self._extra = dict(sslcontext=sslcontext)
307
+
308
+ # App data write buffering
309
+ self._write_backlog = collections.deque()
310
+ self._write_buffer_size = 0
311
+
312
+ self._waiter = waiter
313
+ self._loop = loop
314
+ self._set_app_protocol(app_protocol)
315
+ self._app_transport = None
316
+ self._app_transport_created = False
317
+ # transport, ex: SelectorSocketTransport
318
+ self._transport = None
319
+ self._ssl_handshake_timeout = ssl_handshake_timeout
320
+ self._ssl_shutdown_timeout = ssl_shutdown_timeout
321
+ # SSL and state machine
322
+ self._incoming = ssl.MemoryBIO()
323
+ self._outgoing = ssl.MemoryBIO()
324
+ self._state = SSLProtocolState.UNWRAPPED
325
+ self._conn_lost = 0 # Set when connection_lost called
326
+ if call_connection_made:
327
+ self._app_state = AppProtocolState.STATE_INIT
328
+ else:
329
+ self._app_state = AppProtocolState.STATE_CON_MADE
330
+ self._sslobj = self._sslcontext.wrap_bio(
331
+ self._incoming, self._outgoing,
332
+ server_side=self._server_side,
333
+ server_hostname=self._server_hostname)
334
+
335
+ # Flow Control
336
+
337
+ self._ssl_writing_paused = False
338
+
339
+ self._app_reading_paused = False
340
+
341
+ self._ssl_reading_paused = False
342
+ self._incoming_high_water = 0
343
+ self._incoming_low_water = 0
344
+ self._set_read_buffer_limits()
345
+ self._eof_received = False
346
+
347
+ self._app_writing_paused = False
348
+ self._outgoing_high_water = 0
349
+ self._outgoing_low_water = 0
350
+ self._set_write_buffer_limits()
351
+ self._get_app_transport()
352
+
353
+ def _set_app_protocol(self, app_protocol):
354
+ self._app_protocol = app_protocol
355
+ # Make fast hasattr check first
356
+ if (hasattr(app_protocol, 'get_buffer') and
357
+ isinstance(app_protocol, protocols.BufferedProtocol)):
358
+ self._app_protocol_get_buffer = app_protocol.get_buffer
359
+ self._app_protocol_buffer_updated = app_protocol.buffer_updated
360
+ self._app_protocol_is_buffer = True
361
+ else:
362
+ self._app_protocol_is_buffer = False
363
+
364
+ def _wakeup_waiter(self, exc=None):
365
+ if self._waiter is None:
366
+ return
367
+ if not self._waiter.cancelled():
368
+ if exc is not None:
369
+ self._waiter.set_exception(exc)
370
+ else:
371
+ self._waiter.set_result(None)
372
+ self._waiter = None
373
+
374
+ def _get_app_transport(self):
375
+ if self._app_transport is None:
376
+ if self._app_transport_created:
377
+ raise RuntimeError('Creating _SSLProtocolTransport twice')
378
+ self._app_transport = _SSLProtocolTransport(self._loop, self)
379
+ self._app_transport_created = True
380
+ return self._app_transport
381
+
382
+ def _is_transport_closing(self):
383
+ return self._transport is not None and self._transport.is_closing()
384
+
385
+ def connection_made(self, transport):
386
+ """Called when the low-level connection is made.
387
+
388
+ Start the SSL handshake.
389
+ """
390
+ self._transport = transport
391
+ self._start_handshake()
392
+
393
+ def connection_lost(self, exc):
394
+ """Called when the low-level connection is lost or closed.
395
+
396
+ The argument is an exception object or None (the latter
397
+ meaning a regular EOF is received or the connection was
398
+ aborted or closed).
399
+ """
400
+ self._write_backlog.clear()
401
+ self._outgoing.read()
402
+ self._conn_lost += 1
403
+
404
+ # Just mark the app transport as closed so that its __dealloc__
405
+ # doesn't complain.
406
+ if self._app_transport is not None:
407
+ self._app_transport._closed = True
408
+
409
+ if self._state != SSLProtocolState.DO_HANDSHAKE:
410
+ if (
411
+ self._app_state == AppProtocolState.STATE_CON_MADE or
412
+ self._app_state == AppProtocolState.STATE_EOF
413
+ ):
414
+ self._app_state = AppProtocolState.STATE_CON_LOST
415
+ self._loop.call_soon(self._app_protocol.connection_lost, exc)
416
+ self._set_state(SSLProtocolState.UNWRAPPED)
417
+ self._transport = None
418
+ self._app_transport = None
419
+ self._app_protocol = None
420
+ self._wakeup_waiter(exc)
421
+
422
+ if self._shutdown_timeout_handle:
423
+ self._shutdown_timeout_handle.cancel()
424
+ self._shutdown_timeout_handle = None
425
+ if self._handshake_timeout_handle:
426
+ self._handshake_timeout_handle.cancel()
427
+ self._handshake_timeout_handle = None
428
+
429
+ def get_buffer(self, n):
430
+ want = n
431
+ if want <= 0 or want > self.max_size:
432
+ want = self.max_size
433
+ if len(self._ssl_buffer) < want:
434
+ self._ssl_buffer = bytearray(want)
435
+ self._ssl_buffer_view = memoryview(self._ssl_buffer)
436
+ return self._ssl_buffer_view
437
+
438
+ def buffer_updated(self, nbytes):
439
+ self._incoming.write(self._ssl_buffer_view[:nbytes])
440
+
441
+ if self._state == SSLProtocolState.DO_HANDSHAKE:
442
+ self._do_handshake()
443
+
444
+ elif self._state == SSLProtocolState.WRAPPED:
445
+ self._do_read()
446
+
447
+ elif self._state == SSLProtocolState.FLUSHING:
448
+ self._do_flush()
449
+
450
+ elif self._state == SSLProtocolState.SHUTDOWN:
451
+ self._do_shutdown()
452
+
453
+ def eof_received(self):
454
+ """Called when the other end of the low-level stream
455
+ is half-closed.
456
+
457
+ If this returns a false value (including None), the transport
458
+ will close itself. If it returns a true value, closing the
459
+ transport is up to the protocol.
460
+ """
461
+ self._eof_received = True
462
+ try:
463
+ if self._loop.get_debug():
464
+ logger.debug("%r received EOF", self)
465
+
466
+ if self._state == SSLProtocolState.DO_HANDSHAKE:
467
+ self._on_handshake_complete(ConnectionResetError)
468
+
469
+ elif self._state == SSLProtocolState.WRAPPED:
470
+ self._set_state(SSLProtocolState.FLUSHING)
471
+ if self._app_reading_paused:
472
+ return True
473
+ else:
474
+ self._do_flush()
475
+
476
+ elif self._state == SSLProtocolState.FLUSHING:
477
+ self._do_write()
478
+ self._set_state(SSLProtocolState.SHUTDOWN)
479
+ self._do_shutdown()
480
+
481
+ elif self._state == SSLProtocolState.SHUTDOWN:
482
+ self._do_shutdown()
483
+
484
+ except Exception:
485
+ self._transport.close()
486
+ raise
487
+
488
+ def _get_extra_info(self, name, default=None):
489
+ if name in self._extra:
490
+ return self._extra[name]
491
+ elif self._transport is not None:
492
+ return self._transport.get_extra_info(name, default)
493
+ else:
494
+ return default
495
+
496
+ def _set_state(self, new_state):
497
+ allowed = False
498
+
499
+ if new_state == SSLProtocolState.UNWRAPPED:
500
+ allowed = True
501
+
502
+ elif (
503
+ self._state == SSLProtocolState.UNWRAPPED and
504
+ new_state == SSLProtocolState.DO_HANDSHAKE
505
+ ):
506
+ allowed = True
507
+
508
+ elif (
509
+ self._state == SSLProtocolState.DO_HANDSHAKE and
510
+ new_state == SSLProtocolState.WRAPPED
511
+ ):
512
+ allowed = True
513
+
514
+ elif (
515
+ self._state == SSLProtocolState.WRAPPED and
516
+ new_state == SSLProtocolState.FLUSHING
517
+ ):
518
+ allowed = True
519
+
520
+ elif (
521
+ self._state == SSLProtocolState.FLUSHING and
522
+ new_state == SSLProtocolState.SHUTDOWN
523
+ ):
524
+ allowed = True
525
+
526
+ if allowed:
527
+ self._state = new_state
528
+
529
+ else:
530
+ raise RuntimeError(
531
+ 'cannot switch state from {} to {}'.format(
532
+ self._state, new_state))
533
+
534
+ # Handshake flow
535
+
536
+ def _start_handshake(self):
537
+ if self._loop.get_debug():
538
+ logger.debug("%r starts SSL handshake", self)
539
+ self._handshake_start_time = self._loop.time()
540
+ else:
541
+ self._handshake_start_time = None
542
+
543
+ self._set_state(SSLProtocolState.DO_HANDSHAKE)
544
+
545
+ # start handshake timeout count down
546
+ self._handshake_timeout_handle = \
547
+ self._loop.call_later(self._ssl_handshake_timeout,
548
+ self._check_handshake_timeout)
549
+
550
+ self._do_handshake()
551
+
552
+ def _check_handshake_timeout(self):
553
+ if self._state == SSLProtocolState.DO_HANDSHAKE:
554
+ msg = (
555
+ f"SSL handshake is taking longer than "
556
+ f"{self._ssl_handshake_timeout} seconds: "
557
+ f"aborting the connection"
558
+ )
559
+ self._fatal_error(ConnectionAbortedError(msg))
560
+
561
+ def _do_handshake(self):
562
+ try:
563
+ self._sslobj.do_handshake()
564
+ except SSLAgainErrors:
565
+ self._process_outgoing()
566
+ except ssl.SSLError as exc:
567
+ self._on_handshake_complete(exc)
568
+ else:
569
+ self._on_handshake_complete(None)
570
+
571
+ def _on_handshake_complete(self, handshake_exc):
572
+ if self._handshake_timeout_handle is not None:
573
+ self._handshake_timeout_handle.cancel()
574
+ self._handshake_timeout_handle = None
575
+
576
+ sslobj = self._sslobj
577
+ try:
578
+ if handshake_exc is None:
579
+ self._set_state(SSLProtocolState.WRAPPED)
580
+ else:
581
+ raise handshake_exc
582
+
583
+ peercert = sslobj.getpeercert()
584
+ except Exception as exc:
585
+ handshake_exc = None
586
+ self._set_state(SSLProtocolState.UNWRAPPED)
587
+ if isinstance(exc, ssl.CertificateError):
588
+ msg = 'SSL handshake failed on verifying the certificate'
589
+ else:
590
+ msg = 'SSL handshake failed'
591
+ self._fatal_error(exc, msg)
592
+ self._wakeup_waiter(exc)
593
+ return
594
+
595
+ if self._loop.get_debug():
596
+ dt = self._loop.time() - self._handshake_start_time
597
+ logger.debug("%r: SSL handshake took %.1f ms", self, dt * 1e3)
598
+
599
+ # Add extra info that becomes available after handshake.
600
+ self._extra.update(peercert=peercert,
601
+ cipher=sslobj.cipher(),
602
+ compression=sslobj.compression(),
603
+ ssl_object=sslobj)
604
+ if self._app_state == AppProtocolState.STATE_INIT:
605
+ self._app_state = AppProtocolState.STATE_CON_MADE
606
+ self._app_protocol.connection_made(self._get_app_transport())
607
+ self._wakeup_waiter()
608
+ self._do_read()
609
+
610
+ # Shutdown flow
611
+
612
+ def _start_shutdown(self):
613
+ if (
614
+ self._state in (
615
+ SSLProtocolState.FLUSHING,
616
+ SSLProtocolState.SHUTDOWN,
617
+ SSLProtocolState.UNWRAPPED
618
+ )
619
+ ):
620
+ return
621
+ if self._app_transport is not None:
622
+ self._app_transport._closed = True
623
+ if self._state == SSLProtocolState.DO_HANDSHAKE:
624
+ self._abort(None)
625
+ else:
626
+ self._set_state(SSLProtocolState.FLUSHING)
627
+ self._shutdown_timeout_handle = self._loop.call_later(
628
+ self._ssl_shutdown_timeout,
629
+ self._check_shutdown_timeout
630
+ )
631
+ self._do_flush()
632
+
633
+ def _check_shutdown_timeout(self):
634
+ if (
635
+ self._state in (
636
+ SSLProtocolState.FLUSHING,
637
+ SSLProtocolState.SHUTDOWN
638
+ )
639
+ ):
640
+ self._transport._force_close(
641
+ exceptions.TimeoutError('SSL shutdown timed out'))
642
+
643
+ def _do_flush(self):
644
+ self._do_read()
645
+ self._set_state(SSLProtocolState.SHUTDOWN)
646
+ self._do_shutdown()
647
+
648
+ def _do_shutdown(self):
649
+ try:
650
+ if not self._eof_received:
651
+ self._sslobj.unwrap()
652
+ except SSLAgainErrors:
653
+ self._process_outgoing()
654
+ except ssl.SSLError as exc:
655
+ self._on_shutdown_complete(exc)
656
+ else:
657
+ self._process_outgoing()
658
+ self._call_eof_received()
659
+ self._on_shutdown_complete(None)
660
+
661
+ def _on_shutdown_complete(self, shutdown_exc):
662
+ if self._shutdown_timeout_handle is not None:
663
+ self._shutdown_timeout_handle.cancel()
664
+ self._shutdown_timeout_handle = None
665
+
666
+ if shutdown_exc:
667
+ self._fatal_error(shutdown_exc)
668
+ else:
669
+ self._loop.call_soon(self._transport.close)
670
+
671
+ def _abort(self, exc):
672
+ self._set_state(SSLProtocolState.UNWRAPPED)
673
+ if self._transport is not None:
674
+ self._transport._force_close(exc)
675
+
676
+ # Outgoing flow
677
+
678
+ def _write_appdata(self, list_of_data):
679
+ if (
680
+ self._state in (
681
+ SSLProtocolState.FLUSHING,
682
+ SSLProtocolState.SHUTDOWN,
683
+ SSLProtocolState.UNWRAPPED
684
+ )
685
+ ):
686
+ if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES:
687
+ logger.warning('SSL connection is closed')
688
+ self._conn_lost += 1
689
+ return
690
+
691
+ for data in list_of_data:
692
+ self._write_backlog.append(data)
693
+ self._write_buffer_size += len(data)
694
+
695
+ try:
696
+ if self._state == SSLProtocolState.WRAPPED:
697
+ self._do_write()
698
+
699
+ except Exception as ex:
700
+ self._fatal_error(ex, 'Fatal error on SSL protocol')
701
+
702
+ def _do_write(self):
703
+ try:
704
+ while self._write_backlog:
705
+ data = self._write_backlog[0]
706
+ count = self._sslobj.write(data)
707
+ data_len = len(data)
708
+ if count < data_len:
709
+ self._write_backlog[0] = data[count:]
710
+ self._write_buffer_size -= count
711
+ else:
712
+ del self._write_backlog[0]
713
+ self._write_buffer_size -= data_len
714
+ except SSLAgainErrors:
715
+ pass
716
+ self._process_outgoing()
717
+
718
+ def _process_outgoing(self):
719
+ if not self._ssl_writing_paused:
720
+ data = self._outgoing.read()
721
+ if len(data):
722
+ self._transport.write(data)
723
+ self._control_app_writing()
724
+
725
+ # Incoming flow
726
+
727
+ def _do_read(self):
728
+ if (
729
+ self._state not in (
730
+ SSLProtocolState.WRAPPED,
731
+ SSLProtocolState.FLUSHING,
732
+ )
733
+ ):
734
+ return
735
+ try:
736
+ if not self._app_reading_paused:
737
+ if self._app_protocol_is_buffer:
738
+ self._do_read__buffered()
739
+ else:
740
+ self._do_read__copied()
741
+ if self._write_backlog:
742
+ self._do_write()
743
+ else:
744
+ self._process_outgoing()
745
+ self._control_ssl_reading()
746
+ except Exception as ex:
747
+ self._fatal_error(ex, 'Fatal error on SSL protocol')
748
+
749
+ def _do_read__buffered(self):
750
+ offset = 0
751
+ count = 1
752
+
753
+ buf = self._app_protocol_get_buffer(self._get_read_buffer_size())
754
+ wants = len(buf)
755
+
756
+ try:
757
+ count = self._sslobj.read(wants, buf)
758
+
759
+ if count > 0:
760
+ offset = count
761
+ while offset < wants:
762
+ count = self._sslobj.read(wants - offset, buf[offset:])
763
+ if count > 0:
764
+ offset += count
765
+ else:
766
+ break
767
+ else:
768
+ self._loop.call_soon(self._do_read)
769
+ except SSLAgainErrors:
770
+ pass
771
+ if offset > 0:
772
+ self._app_protocol_buffer_updated(offset)
773
+ if not count:
774
+ # close_notify
775
+ self._call_eof_received()
776
+ self._start_shutdown()
777
+
778
+ def _do_read__copied(self):
779
+ chunk = b'1'
780
+ zero = True
781
+ one = False
782
+
783
+ try:
784
+ while True:
785
+ chunk = self._sslobj.read(self.max_size)
786
+ if not chunk:
787
+ break
788
+ if zero:
789
+ zero = False
790
+ one = True
791
+ first = chunk
792
+ elif one:
793
+ one = False
794
+ data = [first, chunk]
795
+ else:
796
+ data.append(chunk)
797
+ except SSLAgainErrors:
798
+ pass
799
+ if one:
800
+ self._app_protocol.data_received(first)
801
+ elif not zero:
802
+ self._app_protocol.data_received(b''.join(data))
803
+ if not chunk:
804
+ # close_notify
805
+ self._call_eof_received()
806
+ self._start_shutdown()
807
+
808
+ def _call_eof_received(self):
809
+ try:
810
+ if self._app_state == AppProtocolState.STATE_CON_MADE:
811
+ self._app_state = AppProtocolState.STATE_EOF
812
+ keep_open = self._app_protocol.eof_received()
813
+ if keep_open:
814
+ logger.warning('returning true from eof_received() '
815
+ 'has no effect when using ssl')
816
+ except (KeyboardInterrupt, SystemExit):
817
+ raise
818
+ except BaseException as ex:
819
+ self._fatal_error(ex, 'Error calling eof_received()')
820
+
821
+ # Flow control for writes from APP socket
822
+
823
+ def _control_app_writing(self):
824
+ size = self._get_write_buffer_size()
825
+ if size >= self._outgoing_high_water and not self._app_writing_paused:
826
+ self._app_writing_paused = True
827
+ try:
828
+ self._app_protocol.pause_writing()
829
+ except (KeyboardInterrupt, SystemExit):
830
+ raise
831
+ except BaseException as exc:
832
+ self._loop.call_exception_handler({
833
+ 'message': 'protocol.pause_writing() failed',
834
+ 'exception': exc,
835
+ 'transport': self._app_transport,
836
+ 'protocol': self,
837
+ })
838
+ elif size <= self._outgoing_low_water and self._app_writing_paused:
839
+ self._app_writing_paused = False
840
+ try:
841
+ self._app_protocol.resume_writing()
842
+ except (KeyboardInterrupt, SystemExit):
843
+ raise
844
+ except BaseException as exc:
845
+ self._loop.call_exception_handler({
846
+ 'message': 'protocol.resume_writing() failed',
847
+ 'exception': exc,
848
+ 'transport': self._app_transport,
849
+ 'protocol': self,
850
+ })
851
+
852
+ def _get_write_buffer_size(self):
853
+ return self._outgoing.pending + self._write_buffer_size
854
+
855
+ def _set_write_buffer_limits(self, high=None, low=None):
856
+ high, low = add_flowcontrol_defaults(
857
+ high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_WRITE)
858
+ self._outgoing_high_water = high
859
+ self._outgoing_low_water = low
860
+
861
+ # Flow control for reads to APP socket
862
+
863
+ def _pause_reading(self):
864
+ self._app_reading_paused = True
865
+
866
+ def _resume_reading(self):
867
+ if self._app_reading_paused:
868
+ self._app_reading_paused = False
869
+
870
+ def resume():
871
+ if self._state == SSLProtocolState.WRAPPED:
872
+ self._do_read()
873
+ elif self._state == SSLProtocolState.FLUSHING:
874
+ self._do_flush()
875
+ elif self._state == SSLProtocolState.SHUTDOWN:
876
+ self._do_shutdown()
877
+ self._loop.call_soon(resume)
878
+
879
+ # Flow control for reads from SSL socket
880
+
881
+ def _control_ssl_reading(self):
882
+ size = self._get_read_buffer_size()
883
+ if size >= self._incoming_high_water and not self._ssl_reading_paused:
884
+ self._ssl_reading_paused = True
885
+ self._transport.pause_reading()
886
+ elif size <= self._incoming_low_water and self._ssl_reading_paused:
887
+ self._ssl_reading_paused = False
888
+ self._transport.resume_reading()
889
+
890
+ def _set_read_buffer_limits(self, high=None, low=None):
891
+ high, low = add_flowcontrol_defaults(
892
+ high, low, constants.FLOW_CONTROL_HIGH_WATER_SSL_READ)
893
+ self._incoming_high_water = high
894
+ self._incoming_low_water = low
895
+
896
+ def _get_read_buffer_size(self):
897
+ return self._incoming.pending
898
+
899
+ # Flow control for writes to SSL socket
900
+
901
+ def pause_writing(self):
902
+ """Called when the low-level transport's buffer goes over
903
+ the high-water mark.
904
+ """
905
+ assert not self._ssl_writing_paused
906
+ self._ssl_writing_paused = True
907
+
908
+ def resume_writing(self):
909
+ """Called when the low-level transport's buffer drains below
910
+ the low-water mark.
911
+ """
912
+ assert self._ssl_writing_paused
913
+ self._ssl_writing_paused = False
914
+ self._process_outgoing()
915
+
916
+ def _fatal_error(self, exc, message='Fatal error on transport'):
917
+ if self._transport:
918
+ self._transport._force_close(exc)
919
+
920
+ if isinstance(exc, OSError):
921
+ if self._loop.get_debug():
922
+ logger.debug("%r: %s", self, message, exc_info=True)
923
+ elif not isinstance(exc, exceptions.CancelledError):
924
+ self._loop.call_exception_handler({
925
+ 'message': message,
926
+ 'exception': exc,
927
+ 'transport': self._transport,
928
+ 'protocol': self,
929
+ })