aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/encodings/uu_codec.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/encodings/uu_codec.py')
-rw-r--r--Lib/encodings/uu_codec.py100
1 files changed, 35 insertions, 65 deletions
diff --git a/Lib/encodings/uu_codec.py b/Lib/encodings/uu_codec.py
index fb03758171d..69c6f17c7f3 100644
--- a/Lib/encodings/uu_codec.py
+++ b/Lib/encodings/uu_codec.py
@@ -1,68 +1,40 @@
-""" Python 'uu_codec' Codec - UU content transfer encoding
+"""Python 'uu_codec' Codec - UU content transfer encoding.
- Unlike most of the other codecs which target Unicode, this codec
- will return Python string objects for both encode and decode.
-
- Written by Marc-Andre Lemburg (mal@lemburg.com). Some details were
- adapted from uu.py which was written by Lance Ellinghouse and
- modified by Jack Jansen and Fredrik Lundh.
+This codec de/encodes from bytes to bytes and is therefore usable with
+bytes.transform() and bytes.untransform().
+Written by Marc-Andre Lemburg (mal@lemburg.com). Some details were
+adapted from uu.py which was written by Lance Ellinghouse and
+modified by Jack Jansen and Fredrik Lundh.
"""
-import codecs, binascii
-
-### Codec APIs
-def uu_encode(input,errors='strict',filename='<data>',mode=0666):
+import codecs
+import binascii
+from io import BytesIO
- """ Encodes the object input and returns a tuple (output
- object, length consumed).
-
- errors defines the error handling to apply. It defaults to
- 'strict' handling which is the only currently supported
- error handling for this codec.
+### Codec APIs
- """
+def uu_encode(input, errors='strict', filename='<data>', mode=0o666):
assert errors == 'strict'
- from cStringIO import StringIO
- from binascii import b2a_uu
- # using str() because of cStringIO's Unicode undesired Unicode behavior.
- infile = StringIO(str(input))
- outfile = StringIO()
+ infile = BytesIO(input)
+ outfile = BytesIO()
read = infile.read
write = outfile.write
# Encode
- write('begin %o %s\n' % (mode & 0777, filename))
+ write(('begin %o %s\n' % (mode & 0o777, filename)).encode('ascii'))
chunk = read(45)
while chunk:
- write(b2a_uu(chunk))
+ write(binascii.b2a_uu(chunk))
chunk = read(45)
- write(' \nend\n')
+ write(b' \nend\n')
return (outfile.getvalue(), len(input))
-def uu_decode(input,errors='strict'):
-
- """ Decodes the object input and returns a tuple (output
- object, length consumed).
-
- input must be an object which provides the bf_getreadbuf
- buffer slot. Python strings, buffer objects and memory
- mapped files are examples of objects providing this slot.
-
- errors defines the error handling to apply. It defaults to
- 'strict' handling which is the only currently supported
- error handling for this codec.
-
- Note: filename and file mode information in the input data is
- ignored.
-
- """
+def uu_decode(input, errors='strict'):
assert errors == 'strict'
- from cStringIO import StringIO
- from binascii import a2b_uu
- infile = StringIO(str(input))
- outfile = StringIO()
+ infile = BytesIO(input)
+ outfile = BytesIO()
readline = infile.readline
write = outfile.write
@@ -70,36 +42,34 @@ def uu_decode(input,errors='strict'):
while 1:
s = readline()
if not s:
- raise ValueError, 'Missing "begin" line in input data'
- if s[:5] == 'begin':
+ raise ValueError('Missing "begin" line in input data')
+ if s[:5] == b'begin':
break
# Decode
- while 1:
+ while True:
s = readline()
- if not s or \
- s == 'end\n':
+ if not s or s == b'end\n':
break
try:
- data = a2b_uu(s)
- except binascii.Error, v:
+ data = binascii.a2b_uu(s)
+ except binascii.Error as v:
# Workaround for broken uuencoders by /Fredrik Lundh
nbytes = (((ord(s[0])-32) & 63) * 4 + 5) / 3
- data = a2b_uu(s[:nbytes])
+ data = binascii.a2b_uu(s[:nbytes])
#sys.stderr.write("Warning: %s\n" % str(v))
write(data)
if not s:
- raise ValueError, 'Truncated input data'
+ raise ValueError('Truncated input data')
return (outfile.getvalue(), len(input))
class Codec(codecs.Codec):
+ def encode(self, input, errors='strict'):
+ return uu_encode(input, errors)
- def encode(self,input,errors='strict'):
- return uu_encode(input,errors)
-
- def decode(self,input,errors='strict'):
- return uu_decode(input,errors)
+ def decode(self, input, errors='strict'):
+ return uu_decode(input, errors)
class IncrementalEncoder(codecs.IncrementalEncoder):
def encode(self, input, final=False):
@@ -109,11 +79,11 @@ class IncrementalDecoder(codecs.IncrementalDecoder):
def decode(self, input, final=False):
return uu_decode(input, self.errors)[0]
-class StreamWriter(Codec,codecs.StreamWriter):
- pass
+class StreamWriter(Codec, codecs.StreamWriter):
+ charbuffertype = bytes
-class StreamReader(Codec,codecs.StreamReader):
- pass
+class StreamReader(Codec, codecs.StreamReader):
+ charbuffertype = bytes
### encodings module API