annotate Lib/base64.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 43f8db23ef15
children 4f251b8e328f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Conversions to/from base64 transport encoding as per RFC-MIME (Dec 1991
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # version).
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 # Parameters set by RFX-XXXX.
3145
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
5 #
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
6 # Modified 04-Oct-95 by Jack to use binascii module
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
3145
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
8 import binascii
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
3145
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
10 MAXLINESIZE = 76 # Excluding the CRLF
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
11 MAXBINSIZE = (MAXLINESIZE/4)*3
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # Encode a file.
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 def encode(input, output):
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 while 1:
3145
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
16 s = input.read(MAXBINSIZE)
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 if not s: break
3145
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
18 while len(s) < MAXBINSIZE:
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
19 ns = input.read(MAXBINSIZE-len(s))
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
20 if not ns: break
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
21 s = s + ns
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
22 line = binascii.b2a_base64(s)
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
23 output.write(line)
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
24
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # Decode a file.
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 def decode(input, output):
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 while 1:
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 line = input.readline()
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 if not line: break
3145
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
30 s = binascii.a2b_base64(line)
43f8db23ef15 Use binascii module (resulting in a 60-fold speedup:-)
Jack Jansen <jack.jansen@cwi.nl>
parents: 3104
diff changeset
31 output.write(s)
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
32
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 def encodestring(s):
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 import StringIO
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 f = StringIO.StringIO(s)
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 g = StringIO.StringIO()
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 encode(f, g)
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 return g.getvalue()
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 def decodestring(s):
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 import StringIO
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 f = StringIO.StringIO(s)
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 g = StringIO.StringIO()
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 decode(f, g)
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 return g.getvalue()
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
3104
56dba037b8d6 improved test/main program
Guido van Rossum <guido@python.org>
parents: 2950
diff changeset
47 # Small test program
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 def test():
2950
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
49 import sys, getopt
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
50 try:
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
51 opts, args = getopt.getopt(sys.argv[1:], 'deut')
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
52 except getopt.error, msg:
3104
56dba037b8d6 improved test/main program
Guido van Rossum <guido@python.org>
parents: 2950
diff changeset
53 sys.stdout = sys.stderr
2950
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
54 print msg
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
55 print """usage: basd64 [-d] [-e] [-u] [-t] [file|-]
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
56 -d, -u: decode
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
57 -e: encode (default)
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
58 -t: decode string 'Aladdin:open sesame'"""
3104
56dba037b8d6 improved test/main program
Guido van Rossum <guido@python.org>
parents: 2950
diff changeset
59 sys.exit(2)
2950
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
60 func = encode
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
61 for o, a in opts:
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
62 if o == '-e': func = encode
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
63 if o == '-d': func = decode
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
64 if o == '-u': func = decode
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
65 if o == '-t': test1(); return
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
66 if args and args[0] != '-':
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
67 func(open(args[0]), sys.stdout)
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 else:
2950
a1a9b7364bc3 upgdaded the test program
Guido van Rossum <guido@python.org>
parents: 2742
diff changeset
69 func(sys.stdin, sys.stdout)
2742
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
70
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 def test1():
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 s0 = "Aladdin:open sesame"
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 s1 = encodestring(s0)
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 s2 = decodestring(s1)
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 print s0, `s1`, s2
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
76
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 if __name__ == '__main__':
a827801ed963 two mime encoding schemes
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 test()