@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.
- package/LICENSE +202 -0
- package/README.md +5 -0
- package/package.json +26 -0
- package/python/bin/python3.13 +0 -0
- package/python/bin/python3.13-config +122 -0
- package/python/lib/libpython3.13.so.1.0 +0 -0
- package/python/lib/libpython3.so +0 -0
- package/python/lib/python3.13/LICENSE.txt +277 -0
- package/python/lib/python3.13/__future__.py +147 -0
- package/python/lib/python3.13/__hello__.py +16 -0
- package/python/lib/python3.13/_aix_support.py +108 -0
- package/python/lib/python3.13/_android_support.py +192 -0
- package/python/lib/python3.13/_apple_support.py +66 -0
- package/python/lib/python3.13/_collections_abc.py +1187 -0
- package/python/lib/python3.13/_colorize.py +119 -0
- package/python/lib/python3.13/_compat_pickle.py +251 -0
- package/python/lib/python3.13/_compression.py +162 -0
- package/python/lib/python3.13/_ios_support.py +71 -0
- package/python/lib/python3.13/_markupbase.py +396 -0
- package/python/lib/python3.13/_opcode_metadata.py +343 -0
- package/python/lib/python3.13/_osx_support.py +579 -0
- package/python/lib/python3.13/_py_abc.py +147 -0
- package/python/lib/python3.13/_pydatetime.py +2640 -0
- package/python/lib/python3.13/_pydecimal.py +6356 -0
- package/python/lib/python3.13/_pyio.py +2714 -0
- package/python/lib/python3.13/_pylong.py +363 -0
- package/python/lib/python3.13/_pyrepl/__init__.py +19 -0
- package/python/lib/python3.13/_pyrepl/__main__.py +10 -0
- package/python/lib/python3.13/_pyrepl/_minimal_curses.py +68 -0
- package/python/lib/python3.13/_pyrepl/_threading_handler.py +74 -0
- package/python/lib/python3.13/_pyrepl/base_eventqueue.py +110 -0
- package/python/lib/python3.13/_pyrepl/commands.py +492 -0
- package/python/lib/python3.13/_pyrepl/completing_reader.py +295 -0
- package/python/lib/python3.13/_pyrepl/console.py +229 -0
- package/python/lib/python3.13/_pyrepl/curses.py +33 -0
- package/python/lib/python3.13/_pyrepl/fancy_termios.py +82 -0
- package/python/lib/python3.13/_pyrepl/historical_reader.py +419 -0
- package/python/lib/python3.13/_pyrepl/input.py +114 -0
- package/python/lib/python3.13/_pyrepl/keymap.py +213 -0
- package/python/lib/python3.13/_pyrepl/main.py +59 -0
- package/python/lib/python3.13/_pyrepl/mypy.ini +29 -0
- package/python/lib/python3.13/_pyrepl/pager.py +175 -0
- package/python/lib/python3.13/_pyrepl/reader.py +764 -0
- package/python/lib/python3.13/_pyrepl/readline.py +599 -0
- package/python/lib/python3.13/_pyrepl/simple_interact.py +180 -0
- package/python/lib/python3.13/_pyrepl/trace.py +21 -0
- package/python/lib/python3.13/_pyrepl/types.py +10 -0
- package/python/lib/python3.13/_pyrepl/unix_console.py +852 -0
- package/python/lib/python3.13/_pyrepl/unix_eventqueue.py +76 -0
- package/python/lib/python3.13/_pyrepl/utils.py +83 -0
- package/python/lib/python3.13/_pyrepl/windows_console.py +687 -0
- package/python/lib/python3.13/_pyrepl/windows_eventqueue.py +42 -0
- package/python/lib/python3.13/_sitebuiltins.py +91 -0
- package/python/lib/python3.13/_strptime.py +800 -0
- package/python/lib/python3.13/_sysconfigdata__linux_x86_64-linux-gnu.py +1079 -0
- package/python/lib/python3.13/_threading_local.py +120 -0
- package/python/lib/python3.13/_weakrefset.py +205 -0
- package/python/lib/python3.13/abc.py +188 -0
- package/python/lib/python3.13/antigravity.py +17 -0
- package/python/lib/python3.13/argparse.py +2690 -0
- package/python/lib/python3.13/ast.py +1865 -0
- package/python/lib/python3.13/asyncio/__init__.py +47 -0
- package/python/lib/python3.13/asyncio/__main__.py +211 -0
- package/python/lib/python3.13/asyncio/base_events.py +2086 -0
- package/python/lib/python3.13/asyncio/base_futures.py +67 -0
- package/python/lib/python3.13/asyncio/base_subprocess.py +312 -0
- package/python/lib/python3.13/asyncio/base_tasks.py +94 -0
- package/python/lib/python3.13/asyncio/constants.py +41 -0
- package/python/lib/python3.13/asyncio/coroutines.py +109 -0
- package/python/lib/python3.13/asyncio/events.py +885 -0
- package/python/lib/python3.13/asyncio/exceptions.py +62 -0
- package/python/lib/python3.13/asyncio/format_helpers.py +84 -0
- package/python/lib/python3.13/asyncio/futures.py +425 -0
- package/python/lib/python3.13/asyncio/locks.py +617 -0
- package/python/lib/python3.13/asyncio/log.py +7 -0
- package/python/lib/python3.13/asyncio/mixins.py +21 -0
- package/python/lib/python3.13/asyncio/proactor_events.py +891 -0
- package/python/lib/python3.13/asyncio/protocols.py +216 -0
- package/python/lib/python3.13/asyncio/queues.py +309 -0
- package/python/lib/python3.13/asyncio/runners.py +217 -0
- package/python/lib/python3.13/asyncio/selector_events.py +1328 -0
- package/python/lib/python3.13/asyncio/sslproto.py +929 -0
- package/python/lib/python3.13/asyncio/staggered.py +174 -0
- package/python/lib/python3.13/asyncio/streams.py +787 -0
- package/python/lib/python3.13/asyncio/subprocess.py +229 -0
- package/python/lib/python3.13/asyncio/taskgroups.py +278 -0
- package/python/lib/python3.13/asyncio/tasks.py +1121 -0
- package/python/lib/python3.13/asyncio/threads.py +26 -0
- package/python/lib/python3.13/asyncio/timeouts.py +185 -0
- package/python/lib/python3.13/asyncio/transports.py +337 -0
- package/python/lib/python3.13/asyncio/trsock.py +98 -0
- package/python/lib/python3.13/asyncio/unix_events.py +1550 -0
- package/python/lib/python3.13/asyncio/windows_events.py +906 -0
- package/python/lib/python3.13/asyncio/windows_utils.py +181 -0
- package/python/lib/python3.13/base64.py +628 -0
- package/python/lib/python3.13/bdb.py +973 -0
- package/python/lib/python3.13/bisect.py +118 -0
- package/python/lib/python3.13/bz2.py +352 -0
- package/python/lib/python3.13/cProfile.py +197 -0
- package/python/lib/python3.13/calendar.py +813 -0
- package/python/lib/python3.13/cmd.py +409 -0
- package/python/lib/python3.13/code.py +386 -0
- package/python/lib/python3.13/codecs.py +1132 -0
- package/python/lib/python3.13/codeop.py +155 -0
- package/python/lib/python3.13/collections/__init__.py +1603 -0
- package/python/lib/python3.13/colorsys.py +166 -0
- package/python/lib/python3.13/compileall.py +470 -0
- package/python/lib/python3.13/concurrent/__init__.py +1 -0
- package/python/lib/python3.13/concurrent/futures/__init__.py +54 -0
- package/python/lib/python3.13/concurrent/futures/_base.py +660 -0
- package/python/lib/python3.13/concurrent/futures/process.py +892 -0
- package/python/lib/python3.13/concurrent/futures/thread.py +240 -0
- package/python/lib/python3.13/configparser.py +1396 -0
- package/python/lib/python3.13/contextlib.py +814 -0
- package/python/lib/python3.13/contextvars.py +4 -0
- package/python/lib/python3.13/copy.py +306 -0
- package/python/lib/python3.13/copyreg.py +217 -0
- package/python/lib/python3.13/csv.py +527 -0
- package/python/lib/python3.13/ctypes/__init__.py +605 -0
- package/python/lib/python3.13/ctypes/_aix.py +327 -0
- package/python/lib/python3.13/ctypes/_endian.py +78 -0
- package/python/lib/python3.13/ctypes/macholib/README.ctypes +7 -0
- package/python/lib/python3.13/ctypes/macholib/__init__.py +9 -0
- package/python/lib/python3.13/ctypes/macholib/dyld.py +165 -0
- package/python/lib/python3.13/ctypes/macholib/dylib.py +42 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib +2 -0
- package/python/lib/python3.13/ctypes/macholib/fetch_macholib.bat +1 -0
- package/python/lib/python3.13/ctypes/macholib/framework.py +42 -0
- package/python/lib/python3.13/ctypes/util.py +387 -0
- package/python/lib/python3.13/ctypes/wintypes.py +202 -0
- package/python/lib/python3.13/curses/__init__.py +101 -0
- package/python/lib/python3.13/curses/ascii.py +99 -0
- package/python/lib/python3.13/curses/has_key.py +192 -0
- package/python/lib/python3.13/curses/panel.py +6 -0
- package/python/lib/python3.13/curses/textpad.py +236 -0
- package/python/lib/python3.13/dataclasses.py +1679 -0
- package/python/lib/python3.13/datetime.py +9 -0
- package/python/lib/python3.13/dbm/__init__.py +194 -0
- package/python/lib/python3.13/dbm/dumb.py +319 -0
- package/python/lib/python3.13/dbm/gnu.py +3 -0
- package/python/lib/python3.13/dbm/ndbm.py +3 -0
- package/python/lib/python3.13/dbm/sqlite3.py +144 -0
- package/python/lib/python3.13/decimal.py +109 -0
- package/python/lib/python3.13/difflib.py +2058 -0
- package/python/lib/python3.13/dis.py +1075 -0
- package/python/lib/python3.13/doctest.py +2919 -0
- package/python/lib/python3.13/email/__init__.py +61 -0
- package/python/lib/python3.13/email/_encoded_words.py +233 -0
- package/python/lib/python3.13/email/_header_value_parser.py +3153 -0
- package/python/lib/python3.13/email/_parseaddr.py +563 -0
- package/python/lib/python3.13/email/_policybase.py +382 -0
- package/python/lib/python3.13/email/architecture.rst +216 -0
- package/python/lib/python3.13/email/base64mime.py +115 -0
- package/python/lib/python3.13/email/charset.py +396 -0
- package/python/lib/python3.13/email/contentmanager.py +254 -0
- package/python/lib/python3.13/email/encoders.py +65 -0
- package/python/lib/python3.13/email/errors.py +117 -0
- package/python/lib/python3.13/email/feedparser.py +536 -0
- package/python/lib/python3.13/email/generator.py +530 -0
- package/python/lib/python3.13/email/header.py +582 -0
- package/python/lib/python3.13/email/headerregistry.py +618 -0
- package/python/lib/python3.13/email/iterators.py +68 -0
- package/python/lib/python3.13/email/message.py +1217 -0
- package/python/lib/python3.13/email/mime/__init__.py +0 -0
- package/python/lib/python3.13/email/mime/application.py +37 -0
- package/python/lib/python3.13/email/mime/audio.py +97 -0
- package/python/lib/python3.13/email/mime/base.py +29 -0
- package/python/lib/python3.13/email/mime/image.py +152 -0
- package/python/lib/python3.13/email/mime/message.py +33 -0
- package/python/lib/python3.13/email/mime/multipart.py +47 -0
- package/python/lib/python3.13/email/mime/nonmultipart.py +21 -0
- package/python/lib/python3.13/email/mime/text.py +40 -0
- package/python/lib/python3.13/email/parser.py +127 -0
- package/python/lib/python3.13/email/policy.py +232 -0
- package/python/lib/python3.13/email/quoprimime.py +300 -0
- package/python/lib/python3.13/email/utils.py +497 -0
- package/python/lib/python3.13/encodings/__init__.py +179 -0
- package/python/lib/python3.13/encodings/__pycache__/__init__.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/aliases.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/__pycache__/utf_8.cpython-313.pyc +0 -0
- package/python/lib/python3.13/encodings/aliases.py +560 -0
- package/python/lib/python3.13/encodings/ascii.py +50 -0
- package/python/lib/python3.13/encodings/base64_codec.py +55 -0
- package/python/lib/python3.13/encodings/big5.py +39 -0
- package/python/lib/python3.13/encodings/big5hkscs.py +39 -0
- package/python/lib/python3.13/encodings/bz2_codec.py +78 -0
- package/python/lib/python3.13/encodings/charmap.py +69 -0
- package/python/lib/python3.13/encodings/cp037.py +307 -0
- package/python/lib/python3.13/encodings/cp1006.py +307 -0
- package/python/lib/python3.13/encodings/cp1026.py +307 -0
- package/python/lib/python3.13/encodings/cp1125.py +698 -0
- package/python/lib/python3.13/encodings/cp1140.py +307 -0
- package/python/lib/python3.13/encodings/cp1250.py +307 -0
- package/python/lib/python3.13/encodings/cp1251.py +307 -0
- package/python/lib/python3.13/encodings/cp1252.py +307 -0
- package/python/lib/python3.13/encodings/cp1253.py +307 -0
- package/python/lib/python3.13/encodings/cp1254.py +307 -0
- package/python/lib/python3.13/encodings/cp1255.py +307 -0
- package/python/lib/python3.13/encodings/cp1256.py +307 -0
- package/python/lib/python3.13/encodings/cp1257.py +307 -0
- package/python/lib/python3.13/encodings/cp1258.py +307 -0
- package/python/lib/python3.13/encodings/cp273.py +307 -0
- package/python/lib/python3.13/encodings/cp424.py +307 -0
- package/python/lib/python3.13/encodings/cp437.py +698 -0
- package/python/lib/python3.13/encodings/cp500.py +307 -0
- package/python/lib/python3.13/encodings/cp720.py +309 -0
- package/python/lib/python3.13/encodings/cp737.py +698 -0
- package/python/lib/python3.13/encodings/cp775.py +697 -0
- package/python/lib/python3.13/encodings/cp850.py +698 -0
- package/python/lib/python3.13/encodings/cp852.py +698 -0
- package/python/lib/python3.13/encodings/cp855.py +698 -0
- package/python/lib/python3.13/encodings/cp856.py +307 -0
- package/python/lib/python3.13/encodings/cp857.py +694 -0
- package/python/lib/python3.13/encodings/cp858.py +698 -0
- package/python/lib/python3.13/encodings/cp860.py +698 -0
- package/python/lib/python3.13/encodings/cp861.py +698 -0
- package/python/lib/python3.13/encodings/cp862.py +698 -0
- package/python/lib/python3.13/encodings/cp863.py +698 -0
- package/python/lib/python3.13/encodings/cp864.py +690 -0
- package/python/lib/python3.13/encodings/cp865.py +698 -0
- package/python/lib/python3.13/encodings/cp866.py +698 -0
- package/python/lib/python3.13/encodings/cp869.py +689 -0
- package/python/lib/python3.13/encodings/cp874.py +307 -0
- package/python/lib/python3.13/encodings/cp875.py +307 -0
- package/python/lib/python3.13/encodings/cp932.py +39 -0
- package/python/lib/python3.13/encodings/cp949.py +39 -0
- package/python/lib/python3.13/encodings/cp950.py +39 -0
- package/python/lib/python3.13/encodings/euc_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/euc_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/euc_jp.py +39 -0
- package/python/lib/python3.13/encodings/euc_kr.py +39 -0
- package/python/lib/python3.13/encodings/gb18030.py +39 -0
- package/python/lib/python3.13/encodings/gb2312.py +39 -0
- package/python/lib/python3.13/encodings/gbk.py +39 -0
- package/python/lib/python3.13/encodings/hex_codec.py +55 -0
- package/python/lib/python3.13/encodings/hp_roman8.py +314 -0
- package/python/lib/python3.13/encodings/hz.py +39 -0
- package/python/lib/python3.13/encodings/idna.py +387 -0
- package/python/lib/python3.13/encodings/iso2022_jp.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_1.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_2004.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_3.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_jp_ext.py +39 -0
- package/python/lib/python3.13/encodings/iso2022_kr.py +39 -0
- package/python/lib/python3.13/encodings/iso8859_1.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_10.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_11.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_13.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_14.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_15.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_16.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_2.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_3.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_4.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_5.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_6.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_7.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_8.py +307 -0
- package/python/lib/python3.13/encodings/iso8859_9.py +307 -0
- package/python/lib/python3.13/encodings/johab.py +39 -0
- package/python/lib/python3.13/encodings/koi8_r.py +307 -0
- package/python/lib/python3.13/encodings/koi8_t.py +308 -0
- package/python/lib/python3.13/encodings/koi8_u.py +307 -0
- package/python/lib/python3.13/encodings/kz1048.py +307 -0
- package/python/lib/python3.13/encodings/latin_1.py +50 -0
- package/python/lib/python3.13/encodings/mac_arabic.py +698 -0
- package/python/lib/python3.13/encodings/mac_croatian.py +307 -0
- package/python/lib/python3.13/encodings/mac_cyrillic.py +307 -0
- package/python/lib/python3.13/encodings/mac_farsi.py +307 -0
- package/python/lib/python3.13/encodings/mac_greek.py +307 -0
- package/python/lib/python3.13/encodings/mac_iceland.py +307 -0
- package/python/lib/python3.13/encodings/mac_latin2.py +312 -0
- package/python/lib/python3.13/encodings/mac_roman.py +307 -0
- package/python/lib/python3.13/encodings/mac_romanian.py +307 -0
- package/python/lib/python3.13/encodings/mac_turkish.py +307 -0
- package/python/lib/python3.13/encodings/mbcs.py +47 -0
- package/python/lib/python3.13/encodings/oem.py +41 -0
- package/python/lib/python3.13/encodings/palmos.py +308 -0
- package/python/lib/python3.13/encodings/ptcp154.py +312 -0
- package/python/lib/python3.13/encodings/punycode.py +253 -0
- package/python/lib/python3.13/encodings/quopri_codec.py +56 -0
- package/python/lib/python3.13/encodings/raw_unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/rot_13.py +113 -0
- package/python/lib/python3.13/encodings/shift_jis.py +39 -0
- package/python/lib/python3.13/encodings/shift_jis_2004.py +39 -0
- package/python/lib/python3.13/encodings/shift_jisx0213.py +39 -0
- package/python/lib/python3.13/encodings/tis_620.py +307 -0
- package/python/lib/python3.13/encodings/undefined.py +49 -0
- package/python/lib/python3.13/encodings/unicode_escape.py +46 -0
- package/python/lib/python3.13/encodings/utf_16.py +155 -0
- package/python/lib/python3.13/encodings/utf_16_be.py +42 -0
- package/python/lib/python3.13/encodings/utf_16_le.py +42 -0
- package/python/lib/python3.13/encodings/utf_32.py +150 -0
- package/python/lib/python3.13/encodings/utf_32_be.py +37 -0
- package/python/lib/python3.13/encodings/utf_32_le.py +37 -0
- package/python/lib/python3.13/encodings/utf_7.py +38 -0
- package/python/lib/python3.13/encodings/utf_8.py +42 -0
- package/python/lib/python3.13/encodings/utf_8_sig.py +130 -0
- package/python/lib/python3.13/encodings/uu_codec.py +103 -0
- package/python/lib/python3.13/encodings/zlib_codec.py +77 -0
- package/python/lib/python3.13/enum.py +2183 -0
- package/python/lib/python3.13/filecmp.py +320 -0
- package/python/lib/python3.13/fileinput.py +442 -0
- package/python/lib/python3.13/fnmatch.py +192 -0
- package/python/lib/python3.13/fractions.py +1043 -0
- package/python/lib/python3.13/ftplib.py +975 -0
- package/python/lib/python3.13/functools.py +1036 -0
- package/python/lib/python3.13/genericpath.py +200 -0
- package/python/lib/python3.13/getopt.py +215 -0
- package/python/lib/python3.13/getpass.py +192 -0
- package/python/lib/python3.13/gettext.py +657 -0
- package/python/lib/python3.13/glob.py +572 -0
- package/python/lib/python3.13/graphlib.py +250 -0
- package/python/lib/python3.13/gzip.py +693 -0
- package/python/lib/python3.13/hashlib.py +255 -0
- package/python/lib/python3.13/heapq.py +603 -0
- package/python/lib/python3.13/hmac.py +220 -0
- package/python/lib/python3.13/html/__init__.py +132 -0
- package/python/lib/python3.13/html/entities.py +2513 -0
- package/python/lib/python3.13/html/parser.py +583 -0
- package/python/lib/python3.13/http/__init__.py +202 -0
- package/python/lib/python3.13/http/client.py +1598 -0
- package/python/lib/python3.13/http/cookiejar.py +2122 -0
- package/python/lib/python3.13/http/cookies.py +635 -0
- package/python/lib/python3.13/http/server.py +1355 -0
- package/python/lib/python3.13/imaplib.py +1769 -0
- package/python/lib/python3.13/importlib/__init__.py +136 -0
- package/python/lib/python3.13/importlib/_abc.py +39 -0
- package/python/lib/python3.13/importlib/_bootstrap.py +1559 -0
- package/python/lib/python3.13/importlib/_bootstrap_external.py +1826 -0
- package/python/lib/python3.13/importlib/abc.py +243 -0
- package/python/lib/python3.13/importlib/machinery.py +21 -0
- package/python/lib/python3.13/importlib/metadata/__init__.py +1093 -0
- package/python/lib/python3.13/importlib/metadata/_adapters.py +89 -0
- package/python/lib/python3.13/importlib/metadata/_collections.py +30 -0
- package/python/lib/python3.13/importlib/metadata/_functools.py +104 -0
- package/python/lib/python3.13/importlib/metadata/_itertools.py +73 -0
- package/python/lib/python3.13/importlib/metadata/_meta.py +67 -0
- package/python/lib/python3.13/importlib/metadata/_text.py +99 -0
- package/python/lib/python3.13/importlib/metadata/diagnose.py +21 -0
- package/python/lib/python3.13/importlib/readers.py +12 -0
- package/python/lib/python3.13/importlib/resources/__init__.py +43 -0
- package/python/lib/python3.13/importlib/resources/_adapters.py +168 -0
- package/python/lib/python3.13/importlib/resources/_common.py +211 -0
- package/python/lib/python3.13/importlib/resources/_functional.py +81 -0
- package/python/lib/python3.13/importlib/resources/_itertools.py +38 -0
- package/python/lib/python3.13/importlib/resources/abc.py +173 -0
- package/python/lib/python3.13/importlib/resources/readers.py +203 -0
- package/python/lib/python3.13/importlib/resources/simple.py +106 -0
- package/python/lib/python3.13/importlib/simple.py +14 -0
- package/python/lib/python3.13/importlib/util.py +274 -0
- package/python/lib/python3.13/inspect.py +3479 -0
- package/python/lib/python3.13/io.py +99 -0
- package/python/lib/python3.13/ipaddress.py +2440 -0
- package/python/lib/python3.13/json/__init__.py +365 -0
- package/python/lib/python3.13/json/decoder.py +364 -0
- package/python/lib/python3.13/json/encoder.py +446 -0
- package/python/lib/python3.13/json/scanner.py +73 -0
- package/python/lib/python3.13/json/tool.py +90 -0
- package/python/lib/python3.13/keyword.py +64 -0
- package/python/lib/python3.13/lib-dynload/.empty +0 -0
- package/python/lib/python3.13/lib-dynload/_dbm.cpython-313-x86_64-linux-gnu.so +0 -0
- package/python/lib/python3.13/linecache.py +236 -0
- package/python/lib/python3.13/locale.py +1987 -0
- package/python/lib/python3.13/logging/__init__.py +2330 -0
- package/python/lib/python3.13/logging/config.py +1080 -0
- package/python/lib/python3.13/logging/handlers.py +1629 -0
- package/python/lib/python3.13/lzma.py +364 -0
- package/python/lib/python3.13/mailbox.py +2219 -0
- package/python/lib/python3.13/mimetypes.py +679 -0
- package/python/lib/python3.13/modulefinder.py +671 -0
- package/python/lib/python3.13/multiprocessing/__init__.py +37 -0
- package/python/lib/python3.13/multiprocessing/connection.py +1216 -0
- package/python/lib/python3.13/multiprocessing/context.py +383 -0
- package/python/lib/python3.13/multiprocessing/dummy/__init__.py +126 -0
- package/python/lib/python3.13/multiprocessing/dummy/connection.py +75 -0
- package/python/lib/python3.13/multiprocessing/forkserver.py +373 -0
- package/python/lib/python3.13/multiprocessing/heap.py +337 -0
- package/python/lib/python3.13/multiprocessing/managers.py +1397 -0
- package/python/lib/python3.13/multiprocessing/pool.py +957 -0
- package/python/lib/python3.13/multiprocessing/popen_fork.py +97 -0
- package/python/lib/python3.13/multiprocessing/popen_forkserver.py +74 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_posix.py +76 -0
- package/python/lib/python3.13/multiprocessing/popen_spawn_win32.py +147 -0
- package/python/lib/python3.13/multiprocessing/process.py +436 -0
- package/python/lib/python3.13/multiprocessing/queues.py +399 -0
- package/python/lib/python3.13/multiprocessing/reduction.py +281 -0
- package/python/lib/python3.13/multiprocessing/resource_sharer.py +154 -0
- package/python/lib/python3.13/multiprocessing/resource_tracker.py +499 -0
- package/python/lib/python3.13/multiprocessing/shared_memory.py +544 -0
- package/python/lib/python3.13/multiprocessing/sharedctypes.py +240 -0
- package/python/lib/python3.13/multiprocessing/spawn.py +307 -0
- package/python/lib/python3.13/multiprocessing/synchronize.py +404 -0
- package/python/lib/python3.13/multiprocessing/util.py +562 -0
- package/python/lib/python3.13/netrc.py +199 -0
- package/python/lib/python3.13/ntpath.py +872 -0
- package/python/lib/python3.13/nturl2path.py +69 -0
- package/python/lib/python3.13/numbers.py +427 -0
- package/python/lib/python3.13/opcode.py +115 -0
- package/python/lib/python3.13/operator.py +467 -0
- package/python/lib/python3.13/optparse.py +1681 -0
- package/python/lib/python3.13/os.py +1184 -0
- package/python/lib/python3.13/pathlib/__init__.py +12 -0
- package/python/lib/python3.13/pathlib/_abc.py +930 -0
- package/python/lib/python3.13/pathlib/_local.py +861 -0
- package/python/lib/python3.13/pdb.py +2550 -0
- package/python/lib/python3.13/pickle.py +1860 -0
- package/python/lib/python3.13/pickletools.py +2904 -0
- package/python/lib/python3.13/pkgutil.py +529 -0
- package/python/lib/python3.13/platform.py +1454 -0
- package/python/lib/python3.13/plistlib.py +948 -0
- package/python/lib/python3.13/poplib.py +477 -0
- package/python/lib/python3.13/posixpath.py +578 -0
- package/python/lib/python3.13/pprint.py +658 -0
- package/python/lib/python3.13/profile.py +616 -0
- package/python/lib/python3.13/pstats.py +778 -0
- package/python/lib/python3.13/pty.py +211 -0
- package/python/lib/python3.13/py_compile.py +212 -0
- package/python/lib/python3.13/pyclbr.py +314 -0
- package/python/lib/python3.13/pydoc.py +2861 -0
- package/python/lib/python3.13/queue.py +383 -0
- package/python/lib/python3.13/quopri.py +237 -0
- package/python/lib/python3.13/random.py +1078 -0
- package/python/lib/python3.13/re/__init__.py +428 -0
- package/python/lib/python3.13/re/_casefix.py +106 -0
- package/python/lib/python3.13/re/_compiler.py +768 -0
- package/python/lib/python3.13/re/_constants.py +222 -0
- package/python/lib/python3.13/re/_parser.py +1081 -0
- package/python/lib/python3.13/reprlib.py +230 -0
- package/python/lib/python3.13/rlcompleter.py +222 -0
- package/python/lib/python3.13/runpy.py +326 -0
- package/python/lib/python3.13/sched.py +167 -0
- package/python/lib/python3.13/secrets.py +71 -0
- package/python/lib/python3.13/selectors.py +603 -0
- package/python/lib/python3.13/shelve.py +250 -0
- package/python/lib/python3.13/shlex.py +345 -0
- package/python/lib/python3.13/shutil.py +1569 -0
- package/python/lib/python3.13/signal.py +94 -0
- package/python/lib/python3.13/site.py +773 -0
- package/python/lib/python3.13/smtplib.py +1123 -0
- package/python/lib/python3.13/socket.py +988 -0
- package/python/lib/python3.13/socketserver.py +863 -0
- package/python/lib/python3.13/sqlite3/__init__.py +70 -0
- package/python/lib/python3.13/sqlite3/__main__.py +139 -0
- package/python/lib/python3.13/sqlite3/dbapi2.py +108 -0
- package/python/lib/python3.13/sqlite3/dump.py +118 -0
- package/python/lib/python3.13/sre_compile.py +7 -0
- package/python/lib/python3.13/sre_constants.py +7 -0
- package/python/lib/python3.13/sre_parse.py +7 -0
- package/python/lib/python3.13/ssl.py +1541 -0
- package/python/lib/python3.13/stat.py +212 -0
- package/python/lib/python3.13/statistics.py +1817 -0
- package/python/lib/python3.13/string.py +314 -0
- package/python/lib/python3.13/stringprep.py +272 -0
- package/python/lib/python3.13/struct.py +15 -0
- package/python/lib/python3.13/subprocess.py +2258 -0
- package/python/lib/python3.13/symtable.py +414 -0
- package/python/lib/python3.13/sysconfig/__init__.py +734 -0
- package/python/lib/python3.13/sysconfig/__main__.py +248 -0
- package/python/lib/python3.13/tabnanny.py +340 -0
- package/python/lib/python3.13/tarfile.py +3136 -0
- package/python/lib/python3.13/tempfile.py +958 -0
- package/python/lib/python3.13/textwrap.py +497 -0
- package/python/lib/python3.13/this.py +28 -0
- package/python/lib/python3.13/threading.py +1602 -0
- package/python/lib/python3.13/timeit.py +381 -0
- package/python/lib/python3.13/token.py +141 -0
- package/python/lib/python3.13/tokenize.py +592 -0
- package/python/lib/python3.13/tomllib/__init__.py +10 -0
- package/python/lib/python3.13/tomllib/_parser.py +703 -0
- package/python/lib/python3.13/tomllib/_re.py +107 -0
- package/python/lib/python3.13/tomllib/_types.py +10 -0
- package/python/lib/python3.13/tomllib/mypy.ini +15 -0
- package/python/lib/python3.13/trace.py +754 -0
- package/python/lib/python3.13/traceback.py +1639 -0
- package/python/lib/python3.13/tracemalloc.py +560 -0
- package/python/lib/python3.13/tty.py +73 -0
- package/python/lib/python3.13/types.py +346 -0
- package/python/lib/python3.13/typing.py +3846 -0
- package/python/lib/python3.13/unittest/__init__.py +80 -0
- package/python/lib/python3.13/unittest/__main__.py +18 -0
- package/python/lib/python3.13/unittest/_log.py +86 -0
- package/python/lib/python3.13/unittest/async_case.py +146 -0
- package/python/lib/python3.13/unittest/case.py +1478 -0
- package/python/lib/python3.13/unittest/loader.py +460 -0
- package/python/lib/python3.13/unittest/main.py +280 -0
- package/python/lib/python3.13/unittest/mock.py +3189 -0
- package/python/lib/python3.13/unittest/result.py +256 -0
- package/python/lib/python3.13/unittest/runner.py +292 -0
- package/python/lib/python3.13/unittest/signals.py +71 -0
- package/python/lib/python3.13/unittest/suite.py +379 -0
- package/python/lib/python3.13/unittest/util.py +170 -0
- package/python/lib/python3.13/urllib/__init__.py +0 -0
- package/python/lib/python3.13/urllib/error.py +74 -0
- package/python/lib/python3.13/urllib/parse.py +1264 -0
- package/python/lib/python3.13/urllib/request.py +2796 -0
- package/python/lib/python3.13/urllib/response.py +84 -0
- package/python/lib/python3.13/urllib/robotparser.py +363 -0
- package/python/lib/python3.13/uuid.py +784 -0
- package/python/lib/python3.13/warnings.py +735 -0
- package/python/lib/python3.13/wave.py +665 -0
- package/python/lib/python3.13/weakref.py +674 -0
- package/python/lib/python3.13/webbrowser.py +724 -0
- package/python/lib/python3.13/wsgiref/__init__.py +25 -0
- package/python/lib/python3.13/wsgiref/handlers.py +575 -0
- package/python/lib/python3.13/wsgiref/headers.py +192 -0
- package/python/lib/python3.13/wsgiref/simple_server.py +161 -0
- package/python/lib/python3.13/wsgiref/types.py +54 -0
- package/python/lib/python3.13/wsgiref/util.py +159 -0
- package/python/lib/python3.13/wsgiref/validate.py +438 -0
- package/python/lib/python3.13/xml/__init__.py +20 -0
- package/python/lib/python3.13/xml/dom/NodeFilter.py +27 -0
- package/python/lib/python3.13/xml/dom/__init__.py +140 -0
- package/python/lib/python3.13/xml/dom/domreg.py +99 -0
- package/python/lib/python3.13/xml/dom/expatbuilder.py +962 -0
- package/python/lib/python3.13/xml/dom/minicompat.py +109 -0
- package/python/lib/python3.13/xml/dom/minidom.py +2024 -0
- package/python/lib/python3.13/xml/dom/pulldom.py +336 -0
- package/python/lib/python3.13/xml/dom/xmlbuilder.py +389 -0
- package/python/lib/python3.13/xml/etree/ElementInclude.py +186 -0
- package/python/lib/python3.13/xml/etree/ElementPath.py +430 -0
- package/python/lib/python3.13/xml/etree/ElementTree.py +2116 -0
- package/python/lib/python3.13/xml/etree/__init__.py +33 -0
- package/python/lib/python3.13/xml/etree/cElementTree.py +3 -0
- package/python/lib/python3.13/xml/parsers/__init__.py +8 -0
- package/python/lib/python3.13/xml/parsers/expat.py +8 -0
- package/python/lib/python3.13/xml/sax/__init__.py +94 -0
- package/python/lib/python3.13/xml/sax/_exceptions.py +127 -0
- package/python/lib/python3.13/xml/sax/expatreader.py +454 -0
- package/python/lib/python3.13/xml/sax/handler.py +387 -0
- package/python/lib/python3.13/xml/sax/saxutils.py +369 -0
- package/python/lib/python3.13/xml/sax/xmlreader.py +378 -0
- package/python/lib/python3.13/xmlrpc/__init__.py +1 -0
- package/python/lib/python3.13/xmlrpc/client.py +1503 -0
- package/python/lib/python3.13/xmlrpc/server.py +1002 -0
- package/python/lib/python3.13/zipapp.py +229 -0
- package/python/lib/python3.13/zipfile/__init__.py +2391 -0
- package/python/lib/python3.13/zipfile/__main__.py +4 -0
- package/python/lib/python3.13/zipfile/_path/__init__.py +452 -0
- package/python/lib/python3.13/zipfile/_path/glob.py +113 -0
- package/python/lib/python3.13/zipimport.py +803 -0
- package/python/lib/python3.13/zoneinfo/__init__.py +34 -0
- package/python/lib/python3.13/zoneinfo/_common.py +172 -0
- package/python/lib/python3.13/zoneinfo/_tzpath.py +189 -0
- package/python/lib/python3.13/zoneinfo/_zoneinfo.py +779 -0
- package/python/licenses/LICENSE.bdb.txt +126 -0
- package/python/licenses/LICENSE.bzip2.txt +37 -0
- package/python/licenses/LICENSE.cpython.txt +771 -0
- package/python/licenses/LICENSE.expat.txt +21 -0
- package/python/licenses/LICENSE.libX11.txt +942 -0
- package/python/licenses/LICENSE.libXau.txt +21 -0
- package/python/licenses/LICENSE.libedit.txt +29 -0
- package/python/licenses/LICENSE.libffi.txt +21 -0
- package/python/licenses/LICENSE.liblzma.txt +13 -0
- package/python/licenses/LICENSE.libuuid.txt +27 -0
- package/python/licenses/LICENSE.libxcb.txt +30 -0
- package/python/licenses/LICENSE.mpdecimal.txt +24 -0
- package/python/licenses/LICENSE.ncurses.txt +29 -0
- package/python/licenses/LICENSE.openssl-1.1.txt +124 -0
- package/python/licenses/LICENSE.openssl-3.txt +177 -0
- package/python/licenses/LICENSE.sqlite.txt +23 -0
- package/python/licenses/LICENSE.tcl.txt +40 -0
- package/python/licenses/LICENSE.tix.txt +54 -0
- package/python/licenses/LICENSE.zlib.txt +21 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import binascii
|
|
2
|
+
import email.charset
|
|
3
|
+
import email.message
|
|
4
|
+
import email.errors
|
|
5
|
+
import sys
|
|
6
|
+
from email import quoprimime
|
|
7
|
+
|
|
8
|
+
class ContentManager:
|
|
9
|
+
|
|
10
|
+
def __init__(self):
|
|
11
|
+
self.get_handlers = {}
|
|
12
|
+
self.set_handlers = {}
|
|
13
|
+
|
|
14
|
+
def add_get_handler(self, key, handler):
|
|
15
|
+
self.get_handlers[key] = handler
|
|
16
|
+
|
|
17
|
+
def get_content(self, msg, *args, **kw):
|
|
18
|
+
content_type = msg.get_content_type()
|
|
19
|
+
if content_type in self.get_handlers:
|
|
20
|
+
return self.get_handlers[content_type](msg, *args, **kw)
|
|
21
|
+
maintype = msg.get_content_maintype()
|
|
22
|
+
if maintype in self.get_handlers:
|
|
23
|
+
return self.get_handlers[maintype](msg, *args, **kw)
|
|
24
|
+
if '' in self.get_handlers:
|
|
25
|
+
return self.get_handlers[''](msg, *args, **kw)
|
|
26
|
+
raise KeyError(content_type)
|
|
27
|
+
|
|
28
|
+
def add_set_handler(self, typekey, handler):
|
|
29
|
+
self.set_handlers[typekey] = handler
|
|
30
|
+
|
|
31
|
+
def set_content(self, msg, obj, *args, **kw):
|
|
32
|
+
if msg.get_content_maintype() == 'multipart':
|
|
33
|
+
# XXX: is this error a good idea or not? We can remove it later,
|
|
34
|
+
# but we can't add it later, so do it for now.
|
|
35
|
+
raise TypeError("set_content not valid on multipart")
|
|
36
|
+
handler = self._find_set_handler(msg, obj)
|
|
37
|
+
msg.clear_content()
|
|
38
|
+
handler(msg, obj, *args, **kw)
|
|
39
|
+
|
|
40
|
+
def _find_set_handler(self, msg, obj):
|
|
41
|
+
full_path_for_error = None
|
|
42
|
+
for typ in type(obj).__mro__:
|
|
43
|
+
if typ in self.set_handlers:
|
|
44
|
+
return self.set_handlers[typ]
|
|
45
|
+
qname = typ.__qualname__
|
|
46
|
+
modname = getattr(typ, '__module__', '')
|
|
47
|
+
full_path = '.'.join((modname, qname)) if modname else qname
|
|
48
|
+
if full_path_for_error is None:
|
|
49
|
+
full_path_for_error = full_path
|
|
50
|
+
if full_path in self.set_handlers:
|
|
51
|
+
return self.set_handlers[full_path]
|
|
52
|
+
if qname in self.set_handlers:
|
|
53
|
+
return self.set_handlers[qname]
|
|
54
|
+
name = typ.__name__
|
|
55
|
+
if name in self.set_handlers:
|
|
56
|
+
return self.set_handlers[name]
|
|
57
|
+
if None in self.set_handlers:
|
|
58
|
+
return self.set_handlers[None]
|
|
59
|
+
raise KeyError(full_path_for_error)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
raw_data_manager = ContentManager()
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def get_text_content(msg, errors='replace'):
|
|
66
|
+
content = msg.get_payload(decode=True)
|
|
67
|
+
charset = msg.get_param('charset', 'ASCII')
|
|
68
|
+
return content.decode(charset, errors=errors)
|
|
69
|
+
raw_data_manager.add_get_handler('text', get_text_content)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def get_non_text_content(msg):
|
|
73
|
+
return msg.get_payload(decode=True)
|
|
74
|
+
for maintype in 'audio image video application'.split():
|
|
75
|
+
raw_data_manager.add_get_handler(maintype, get_non_text_content)
|
|
76
|
+
del maintype
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def get_message_content(msg):
|
|
80
|
+
return msg.get_payload(0)
|
|
81
|
+
for subtype in 'rfc822 external-body'.split():
|
|
82
|
+
raw_data_manager.add_get_handler('message/'+subtype, get_message_content)
|
|
83
|
+
del subtype
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def get_and_fixup_unknown_message_content(msg):
|
|
87
|
+
# If we don't understand a message subtype, we are supposed to treat it as
|
|
88
|
+
# if it were application/octet-stream, per
|
|
89
|
+
# tools.ietf.org/html/rfc2046#section-5.2.4. Feedparser doesn't do that,
|
|
90
|
+
# so do our best to fix things up. Note that it is *not* appropriate to
|
|
91
|
+
# model message/partial content as Message objects, so they are handled
|
|
92
|
+
# here as well. (How to reassemble them is out of scope for this comment :)
|
|
93
|
+
return bytes(msg.get_payload(0))
|
|
94
|
+
raw_data_manager.add_get_handler('message',
|
|
95
|
+
get_and_fixup_unknown_message_content)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _prepare_set(msg, maintype, subtype, headers):
|
|
99
|
+
msg['Content-Type'] = '/'.join((maintype, subtype))
|
|
100
|
+
if headers:
|
|
101
|
+
if not hasattr(headers[0], 'name'):
|
|
102
|
+
mp = msg.policy
|
|
103
|
+
headers = [mp.header_factory(*mp.header_source_parse([header]))
|
|
104
|
+
for header in headers]
|
|
105
|
+
try:
|
|
106
|
+
for header in headers:
|
|
107
|
+
if header.defects:
|
|
108
|
+
raise header.defects[0]
|
|
109
|
+
msg[header.name] = header
|
|
110
|
+
except email.errors.HeaderDefect as exc:
|
|
111
|
+
raise ValueError("Invalid header: {}".format(
|
|
112
|
+
header.fold(policy=msg.policy))) from exc
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _finalize_set(msg, disposition, filename, cid, params):
|
|
116
|
+
if disposition is None and filename is not None:
|
|
117
|
+
disposition = 'attachment'
|
|
118
|
+
if disposition is not None:
|
|
119
|
+
msg['Content-Disposition'] = disposition
|
|
120
|
+
if filename is not None:
|
|
121
|
+
msg.set_param('filename',
|
|
122
|
+
filename,
|
|
123
|
+
header='Content-Disposition',
|
|
124
|
+
replace=True)
|
|
125
|
+
if cid is not None:
|
|
126
|
+
msg['Content-ID'] = cid
|
|
127
|
+
if params is not None:
|
|
128
|
+
for key, value in params.items():
|
|
129
|
+
msg.set_param(key, value)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# XXX: This is a cleaned-up version of base64mime.body_encode (including a bug
|
|
133
|
+
# fix in the calculation of unencoded_bytes_per_line). It would be nice to
|
|
134
|
+
# drop both this and quoprimime.body_encode in favor of enhanced binascii
|
|
135
|
+
# routines that accepted a max_line_length parameter.
|
|
136
|
+
def _encode_base64(data, max_line_length):
|
|
137
|
+
encoded_lines = []
|
|
138
|
+
unencoded_bytes_per_line = max_line_length // 4 * 3
|
|
139
|
+
for i in range(0, len(data), unencoded_bytes_per_line):
|
|
140
|
+
thisline = data[i:i+unencoded_bytes_per_line]
|
|
141
|
+
encoded_lines.append(binascii.b2a_base64(thisline).decode('ascii'))
|
|
142
|
+
return ''.join(encoded_lines)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def _encode_text(string, charset, cte, policy):
|
|
146
|
+
# If max_line_length is 0 or None, there is no limit.
|
|
147
|
+
maxlen = policy.max_line_length or sys.maxsize
|
|
148
|
+
lines = string.encode(charset).splitlines()
|
|
149
|
+
linesep = policy.linesep.encode('ascii')
|
|
150
|
+
def embedded_body(lines): return linesep.join(lines) + linesep
|
|
151
|
+
def normal_body(lines): return b'\n'.join(lines) + b'\n'
|
|
152
|
+
if cte is None:
|
|
153
|
+
# Use heuristics to decide on the "best" encoding.
|
|
154
|
+
if max(map(len, lines), default=0) <= maxlen:
|
|
155
|
+
try:
|
|
156
|
+
return '7bit', normal_body(lines).decode('ascii')
|
|
157
|
+
except UnicodeDecodeError:
|
|
158
|
+
pass
|
|
159
|
+
if policy.cte_type == '8bit':
|
|
160
|
+
return '8bit', normal_body(lines).decode('ascii', 'surrogateescape')
|
|
161
|
+
sniff = embedded_body(lines[:10])
|
|
162
|
+
sniff_qp = quoprimime.body_encode(sniff.decode('latin-1'), maxlen)
|
|
163
|
+
sniff_base64 = binascii.b2a_base64(sniff)
|
|
164
|
+
# This is a little unfair to qp; it includes lineseps, base64 doesn't.
|
|
165
|
+
if len(sniff_qp) > len(sniff_base64):
|
|
166
|
+
cte = 'base64'
|
|
167
|
+
else:
|
|
168
|
+
cte = 'quoted-printable'
|
|
169
|
+
if len(lines) <= 10:
|
|
170
|
+
return cte, sniff_qp
|
|
171
|
+
if cte == '7bit':
|
|
172
|
+
data = normal_body(lines).decode('ascii')
|
|
173
|
+
elif cte == '8bit':
|
|
174
|
+
data = normal_body(lines).decode('ascii', 'surrogateescape')
|
|
175
|
+
elif cte == 'quoted-printable':
|
|
176
|
+
data = quoprimime.body_encode(normal_body(lines).decode('latin-1'),
|
|
177
|
+
maxlen)
|
|
178
|
+
elif cte == 'base64':
|
|
179
|
+
data = _encode_base64(embedded_body(lines), maxlen)
|
|
180
|
+
else:
|
|
181
|
+
raise ValueError("Unknown content transfer encoding {}".format(cte))
|
|
182
|
+
return cte, data
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def set_text_content(msg, string, subtype="plain", charset='utf-8', cte=None,
|
|
186
|
+
disposition=None, filename=None, cid=None,
|
|
187
|
+
params=None, headers=None):
|
|
188
|
+
_prepare_set(msg, 'text', subtype, headers)
|
|
189
|
+
|
|
190
|
+
cs = email.charset.Charset(charset)
|
|
191
|
+
charset = cs.output_charset
|
|
192
|
+
cte, payload = _encode_text(string, charset, cte, msg.policy)
|
|
193
|
+
msg.set_payload(payload)
|
|
194
|
+
msg.set_param('charset', charset, replace=True)
|
|
195
|
+
msg['Content-Transfer-Encoding'] = cte
|
|
196
|
+
_finalize_set(msg, disposition, filename, cid, params)
|
|
197
|
+
raw_data_manager.add_set_handler(str, set_text_content)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def set_message_content(msg, message, subtype="rfc822", cte=None,
|
|
201
|
+
disposition=None, filename=None, cid=None,
|
|
202
|
+
params=None, headers=None):
|
|
203
|
+
if subtype == 'partial':
|
|
204
|
+
raise ValueError("message/partial is not supported for Message objects")
|
|
205
|
+
if subtype == 'rfc822':
|
|
206
|
+
if cte not in (None, '7bit', '8bit', 'binary'):
|
|
207
|
+
# http://tools.ietf.org/html/rfc2046#section-5.2.1 mandate.
|
|
208
|
+
raise ValueError(
|
|
209
|
+
"message/rfc822 parts do not support cte={}".format(cte))
|
|
210
|
+
# 8bit will get coerced on serialization if policy.cte_type='7bit'. We
|
|
211
|
+
# may end up claiming 8bit when it isn't needed, but the only negative
|
|
212
|
+
# result of that should be a gateway that needs to coerce to 7bit
|
|
213
|
+
# having to look through the whole embedded message to discover whether
|
|
214
|
+
# or not it actually has to do anything.
|
|
215
|
+
cte = '8bit' if cte is None else cte
|
|
216
|
+
elif subtype == 'external-body':
|
|
217
|
+
if cte not in (None, '7bit'):
|
|
218
|
+
# http://tools.ietf.org/html/rfc2046#section-5.2.3 mandate.
|
|
219
|
+
raise ValueError(
|
|
220
|
+
"message/external-body parts do not support cte={}".format(cte))
|
|
221
|
+
cte = '7bit'
|
|
222
|
+
elif cte is None:
|
|
223
|
+
# http://tools.ietf.org/html/rfc2046#section-5.2.4 says all future
|
|
224
|
+
# subtypes should be restricted to 7bit, so assume that.
|
|
225
|
+
cte = '7bit'
|
|
226
|
+
_prepare_set(msg, 'message', subtype, headers)
|
|
227
|
+
msg.set_payload([message])
|
|
228
|
+
msg['Content-Transfer-Encoding'] = cte
|
|
229
|
+
_finalize_set(msg, disposition, filename, cid, params)
|
|
230
|
+
raw_data_manager.add_set_handler(email.message.Message, set_message_content)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def set_bytes_content(msg, data, maintype, subtype, cte='base64',
|
|
234
|
+
disposition=None, filename=None, cid=None,
|
|
235
|
+
params=None, headers=None):
|
|
236
|
+
_prepare_set(msg, maintype, subtype, headers)
|
|
237
|
+
if cte == 'base64':
|
|
238
|
+
data = _encode_base64(data, max_line_length=msg.policy.max_line_length)
|
|
239
|
+
elif cte == 'quoted-printable':
|
|
240
|
+
# XXX: quoprimime.body_encode won't encode newline characters in data,
|
|
241
|
+
# so we can't use it. This means max_line_length is ignored. Another
|
|
242
|
+
# bug to fix later. (Note: encoders.quopri is broken on line ends.)
|
|
243
|
+
data = binascii.b2a_qp(data, istext=False, header=False, quotetabs=True)
|
|
244
|
+
data = data.decode('ascii')
|
|
245
|
+
elif cte == '7bit':
|
|
246
|
+
data = data.decode('ascii')
|
|
247
|
+
elif cte in ('8bit', 'binary'):
|
|
248
|
+
data = data.decode('ascii', 'surrogateescape')
|
|
249
|
+
msg.set_payload(data)
|
|
250
|
+
msg['Content-Transfer-Encoding'] = cte
|
|
251
|
+
_finalize_set(msg, disposition, filename, cid, params)
|
|
252
|
+
for typ in (bytes, bytearray, memoryview):
|
|
253
|
+
raw_data_manager.add_set_handler(typ, set_bytes_content)
|
|
254
|
+
del typ
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Copyright (C) 2001-2006 Python Software Foundation
|
|
2
|
+
# Author: Barry Warsaw
|
|
3
|
+
# Contact: email-sig@python.org
|
|
4
|
+
|
|
5
|
+
"""Encodings and related functions."""
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
'encode_7or8bit',
|
|
9
|
+
'encode_base64',
|
|
10
|
+
'encode_noop',
|
|
11
|
+
'encode_quopri',
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from base64 import encodebytes as _bencode
|
|
16
|
+
from quopri import encodestring as _encodestring
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _qencode(s):
|
|
20
|
+
enc = _encodestring(s, quotetabs=True)
|
|
21
|
+
# Must encode spaces, which quopri.encodestring() doesn't do
|
|
22
|
+
return enc.replace(b' ', b'=20')
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def encode_base64(msg):
|
|
26
|
+
"""Encode the message's payload in Base64.
|
|
27
|
+
|
|
28
|
+
Also, add an appropriate Content-Transfer-Encoding header.
|
|
29
|
+
"""
|
|
30
|
+
orig = msg.get_payload(decode=True)
|
|
31
|
+
encdata = str(_bencode(orig), 'ascii')
|
|
32
|
+
msg.set_payload(encdata)
|
|
33
|
+
msg['Content-Transfer-Encoding'] = 'base64'
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def encode_quopri(msg):
|
|
37
|
+
"""Encode the message's payload in quoted-printable.
|
|
38
|
+
|
|
39
|
+
Also, add an appropriate Content-Transfer-Encoding header.
|
|
40
|
+
"""
|
|
41
|
+
orig = msg.get_payload(decode=True)
|
|
42
|
+
encdata = _qencode(orig)
|
|
43
|
+
msg.set_payload(encdata)
|
|
44
|
+
msg['Content-Transfer-Encoding'] = 'quoted-printable'
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def encode_7or8bit(msg):
|
|
48
|
+
"""Set the Content-Transfer-Encoding header to 7bit or 8bit."""
|
|
49
|
+
orig = msg.get_payload(decode=True)
|
|
50
|
+
if orig is None:
|
|
51
|
+
# There's no payload. For backwards compatibility we use 7bit
|
|
52
|
+
msg['Content-Transfer-Encoding'] = '7bit'
|
|
53
|
+
return
|
|
54
|
+
# We play a trick to make this go fast. If decoding from ASCII succeeds,
|
|
55
|
+
# we know the data must be 7bit, otherwise treat it as 8bit.
|
|
56
|
+
try:
|
|
57
|
+
orig.decode('ascii')
|
|
58
|
+
except UnicodeError:
|
|
59
|
+
msg['Content-Transfer-Encoding'] = '8bit'
|
|
60
|
+
else:
|
|
61
|
+
msg['Content-Transfer-Encoding'] = '7bit'
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def encode_noop(msg):
|
|
65
|
+
"""Do nothing."""
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Copyright (C) 2001-2006 Python Software Foundation
|
|
2
|
+
# Author: Barry Warsaw
|
|
3
|
+
# Contact: email-sig@python.org
|
|
4
|
+
|
|
5
|
+
"""email package exception classes."""
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class MessageError(Exception):
|
|
9
|
+
"""Base class for errors in the email package."""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MessageParseError(MessageError):
|
|
13
|
+
"""Base class for message parsing errors."""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class HeaderParseError(MessageParseError):
|
|
17
|
+
"""Error while parsing headers."""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class BoundaryError(MessageParseError):
|
|
21
|
+
"""Couldn't find terminating boundary."""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class MultipartConversionError(MessageError, TypeError):
|
|
25
|
+
"""Conversion to a multipart is prohibited."""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class CharsetError(MessageError):
|
|
29
|
+
"""An illegal charset was given."""
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class HeaderWriteError(MessageError):
|
|
33
|
+
"""Error while writing headers."""
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# These are parsing defects which the parser was able to work around.
|
|
37
|
+
class MessageDefect(ValueError):
|
|
38
|
+
"""Base class for a message defect."""
|
|
39
|
+
|
|
40
|
+
def __init__(self, line=None):
|
|
41
|
+
if line is not None:
|
|
42
|
+
super().__init__(line)
|
|
43
|
+
self.line = line
|
|
44
|
+
|
|
45
|
+
class NoBoundaryInMultipartDefect(MessageDefect):
|
|
46
|
+
"""A message claimed to be a multipart but had no boundary parameter."""
|
|
47
|
+
|
|
48
|
+
class StartBoundaryNotFoundDefect(MessageDefect):
|
|
49
|
+
"""The claimed start boundary was never found."""
|
|
50
|
+
|
|
51
|
+
class CloseBoundaryNotFoundDefect(MessageDefect):
|
|
52
|
+
"""A start boundary was found, but not the corresponding close boundary."""
|
|
53
|
+
|
|
54
|
+
class FirstHeaderLineIsContinuationDefect(MessageDefect):
|
|
55
|
+
"""A message had a continuation line as its first header line."""
|
|
56
|
+
|
|
57
|
+
class MisplacedEnvelopeHeaderDefect(MessageDefect):
|
|
58
|
+
"""A 'Unix-from' header was found in the middle of a header block."""
|
|
59
|
+
|
|
60
|
+
class MissingHeaderBodySeparatorDefect(MessageDefect):
|
|
61
|
+
"""Found line with no leading whitespace and no colon before blank line."""
|
|
62
|
+
# XXX: backward compatibility, just in case (it was never emitted).
|
|
63
|
+
MalformedHeaderDefect = MissingHeaderBodySeparatorDefect
|
|
64
|
+
|
|
65
|
+
class MultipartInvariantViolationDefect(MessageDefect):
|
|
66
|
+
"""A message claimed to be a multipart but no subparts were found."""
|
|
67
|
+
|
|
68
|
+
class InvalidMultipartContentTransferEncodingDefect(MessageDefect):
|
|
69
|
+
"""An invalid content transfer encoding was set on the multipart itself."""
|
|
70
|
+
|
|
71
|
+
class UndecodableBytesDefect(MessageDefect):
|
|
72
|
+
"""Header contained bytes that could not be decoded"""
|
|
73
|
+
|
|
74
|
+
class InvalidBase64PaddingDefect(MessageDefect):
|
|
75
|
+
"""base64 encoded sequence had an incorrect length"""
|
|
76
|
+
|
|
77
|
+
class InvalidBase64CharactersDefect(MessageDefect):
|
|
78
|
+
"""base64 encoded sequence had characters not in base64 alphabet"""
|
|
79
|
+
|
|
80
|
+
class InvalidBase64LengthDefect(MessageDefect):
|
|
81
|
+
"""base64 encoded sequence had invalid length (1 mod 4)"""
|
|
82
|
+
|
|
83
|
+
# These errors are specific to header parsing.
|
|
84
|
+
|
|
85
|
+
class HeaderDefect(MessageDefect):
|
|
86
|
+
"""Base class for a header defect."""
|
|
87
|
+
|
|
88
|
+
def __init__(self, *args, **kw):
|
|
89
|
+
super().__init__(*args, **kw)
|
|
90
|
+
|
|
91
|
+
class InvalidHeaderDefect(HeaderDefect):
|
|
92
|
+
"""Header is not valid, message gives details."""
|
|
93
|
+
|
|
94
|
+
class HeaderMissingRequiredValue(HeaderDefect):
|
|
95
|
+
"""A header that must have a value had none"""
|
|
96
|
+
|
|
97
|
+
class NonPrintableDefect(HeaderDefect):
|
|
98
|
+
"""ASCII characters outside the ascii-printable range found"""
|
|
99
|
+
|
|
100
|
+
def __init__(self, non_printables):
|
|
101
|
+
super().__init__(non_printables)
|
|
102
|
+
self.non_printables = non_printables
|
|
103
|
+
|
|
104
|
+
def __str__(self):
|
|
105
|
+
return ("the following ASCII non-printables found in header: "
|
|
106
|
+
"{}".format(self.non_printables))
|
|
107
|
+
|
|
108
|
+
class ObsoleteHeaderDefect(HeaderDefect):
|
|
109
|
+
"""Header uses syntax declared obsolete by RFC 5322"""
|
|
110
|
+
|
|
111
|
+
class NonASCIILocalPartDefect(HeaderDefect):
|
|
112
|
+
"""local_part contains non-ASCII characters"""
|
|
113
|
+
# This defect only occurs during unicode parsing, not when
|
|
114
|
+
# parsing messages decoded from binary.
|
|
115
|
+
|
|
116
|
+
class InvalidDateDefect(HeaderDefect):
|
|
117
|
+
"""Header has unparsable or invalid date"""
|