From b2528c92f139195e8a3c745833ad1cd0ff4bc0f2 Mon Sep 17 00:00:00 2001 From: Martin Panter Date: Sat, 12 Sep 2015 00:34:28 +0000 Subject: [PATCH] Issue #16473: Fix byte transform codec documentation; test quotetabs=True This changes the equivalent functions listed for the Base-64, hex and Quoted- Printable codecs to reflect the functions actually used. Also mention and test the "quotetabs" setting for Quoted-Printable encoding. --- Doc/library/codecs.rst | 17 +++++++++-------- Lib/encodings/quopri_codec.py | 2 +- Lib/test/test_codecs.py | 8 ++++++++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Doc/library/codecs.rst b/Doc/library/codecs.rst index 9529e66d07..f5d1a9d787 100644 --- a/Doc/library/codecs.rst +++ b/Doc/library/codecs.rst @@ -1193,21 +1193,22 @@ The following codecs provide str-to-str encoding and decoding +--------------------+---------------------------+---------------------------+------------------------------+ | Codec | Aliases | Purpose | Encoder/decoder | +====================+===========================+===========================+==============================+ -| base64_codec | base64, base-64 | Convert operand to MIME | :meth:`base64.b64encode`, | -| | | base64 (the result always | :meth:`base64.b64decode` | -| | | includes a trailing | | -| | | ``'\n'``) | | +| base64_codec | base64, base-64 | Convert operand to | :meth:`base64.encodestring`, | +| | | multiline MIME base64 (the| :meth:`base64.decodestring` | +| | | result always includes a | | +| | | trailing ``'\n'``) | | +--------------------+---------------------------+---------------------------+------------------------------+ | bz2_codec | bz2 | Compress the operand | :meth:`bz2.compress`, | | | | using bz2 | :meth:`bz2.decompress` | +--------------------+---------------------------+---------------------------+------------------------------+ -| hex_codec | hex | Convert operand to | :meth:`base64.b16encode`, | -| | | hexadecimal | :meth:`base64.b16decode` | +| hex_codec | hex | Convert operand to | :meth:`binascii.b2a_hex`, | +| | | hexadecimal | :meth:`binascii.a2b_hex` | | | | representation, with two | | | | | digits per byte | | +--------------------+---------------------------+---------------------------+------------------------------+ -| quopri_codec | quopri, quoted-printable, | Convert operand to MIME | :meth:`quopri.encodestring`, | -| | quotedprintable | quoted printable | :meth:`quopri.decodestring` | +| quopri_codec | quopri, quoted-printable, | Convert operand to MIME | :meth:`quopri.encode` with | +| | quotedprintable | quoted printable | ``quotetabs=True``, | +| | | | :meth:`quopri.decode` | +--------------------+---------------------------+---------------------------+------------------------------+ | string_escape | | Produce a string that is | | | | | suitable as string | | diff --git a/Lib/encodings/quopri_codec.py b/Lib/encodings/quopri_codec.py index f2591496fe..e4965da86c 100644 --- a/Lib/encodings/quopri_codec.py +++ b/Lib/encodings/quopri_codec.py @@ -21,7 +21,7 @@ def quopri_encode(input, errors='strict'): # using str() because of cStringIO's Unicode undesired Unicode behavior. f = StringIO(str(input)) g = StringIO() - quopri.encode(f, g, 1) + quopri.encode(f, g, quotetabs=True) output = g.getvalue() return (output, len(input)) diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 7300f23606..cf486373cc 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -2103,6 +2103,14 @@ class BomTest(unittest.TestCase): class TransformCodecTest(unittest.TestCase): + def test_quopri_stateless(self): + # Should encode with quotetabs=True + encoded = codecs.encode(b"space tab\teol \n", "quopri-codec") + self.assertEqual(encoded, b"space=20tab=09eol=20\n") + # But should still support unescaped tabs and spaces + unescaped = b"space tab eol\n" + self.assertEqual(codecs.decode(unescaped, "quopri-codec"), unescaped) + def test_uu_invalid(self): # Missing "begin" line self.assertRaises(ValueError, codecs.decode, "", "uu-codec") -- 2.50.1