gh-91217: deprecate uu (GH-92009)

Automerge-Triggered-By: GH:brettcannon
This commit is contained in:
Brett Cannon 2022-04-27 20:26:33 -07:00 committed by GitHub
parent f348154c8f
commit 407c3afe19
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 11 deletions

View File

@ -1071,6 +1071,7 @@ Deprecated
* :mod:`spwd`
* :mod:`sunau`
* :mod:`telnetlib`
* :mod:`uu`
(Contributed by Brett Cannon in :issue:`47061` and Victor Stinner in
:gh:`68966`.)

View File

@ -6,8 +6,8 @@
__all__ = ['Message', 'EmailMessage']
import binascii
import re
import uu
import quopri
from io import BytesIO, StringIO
@ -35,7 +35,7 @@ def _splitparam(param):
if not sep:
return a.strip(), None
return a.strip(), b.strip()
def _formatparam(param, value=None, quote=True):
"""Convenience function to format and return a key=value pair.
@ -101,7 +101,37 @@ def _unquotevalue(value):
return utils.unquote(value)
def _decode_uu(encoded):
"""Decode uuencoded data."""
decoded_lines = []
encoded_lines_iter = iter(encoded.splitlines())
for line in encoded_lines_iter:
if line.startswith(b"begin "):
mode, _, path = line.removeprefix(b"begin ").partition(b" ")
try:
int(mode, base=8)
except ValueError:
continue
else:
break
else:
raise ValueError("`begin` line not found")
for line in encoded_lines_iter:
if not line:
raise ValueError("Truncated input")
elif line.strip(b' \t\r\n\f') == b'end':
break
try:
decoded_line = binascii.a2b_uu(line)
except binascii.Error:
# Workaround for broken uuencoders by /Fredrik Lundh
nbytes = (((line[0]-32) & 63) * 4 + 5) // 3
decoded_line = binascii.a2b_uu(line[:nbytes])
decoded_lines.append(decoded_line)
return b''.join(decoded_lines)
class Message:
"""Basic message object.
@ -288,13 +318,10 @@ def get_payload(self, i=None, decode=False):
self.policy.handle_defect(self, defect)
return value
elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
in_file = BytesIO(bpayload)
out_file = BytesIO()
try:
uu.decode(in_file, out_file, quiet=True)
return out_file.getvalue()
except uu.Error:
# Some decoding problem
return _decode_uu(bpayload)
except ValueError:
# Some decoding problem.
return bpayload
if isinstance(payload, str):
return bpayload

View File

@ -4,12 +4,13 @@
"""
import unittest
from test.support import os_helper
from test.support import os_helper, warnings_helper
uu = warnings_helper.import_deprecated("uu")
import os
import stat
import sys
import uu
import io
plaintext = b"The symbols on top of your keyboard are !@#$%^&*()_+|~\n"

View File

@ -33,6 +33,9 @@
import binascii
import os
import sys
import warnings
warnings._deprecated(__name__, remove=(3, 13))
__all__ = ["Error", "encode", "decode"]

View File

@ -0,0 +1 @@
Deprecate the uu module.