svn-gvsig-desktop / tags / v1_1_Build_1002 / extensions / extScripting / scripts / jython / Lib / base64.py @ 12070
History | View | Annotate | Download (1.97 KB)
1 |
#! /usr/bin/env python
|
---|---|
2 |
|
3 |
"""Conversions to/from base64 transport encoding as per RFC-1521."""
|
4 |
|
5 |
# Modified 04-Oct-95 by Jack to use binascii module
|
6 |
|
7 |
import binascii |
8 |
|
9 |
__all__ = ["encode","decode","encodestring","decodestring"] |
10 |
|
11 |
MAXLINESIZE = 76 # Excluding the CRLF |
12 |
MAXBINSIZE = (MAXLINESIZE/4)*3 |
13 |
|
14 |
def encode(input, output): |
15 |
"""Encode a file."""
|
16 |
while 1: |
17 |
s = input.read(MAXBINSIZE)
|
18 |
if not s: break |
19 |
while len(s) < MAXBINSIZE: |
20 |
ns = input.read(MAXBINSIZE-len(s)) |
21 |
if not ns: break |
22 |
s = s + ns |
23 |
line = binascii.b2a_base64(s) |
24 |
output.write(line) |
25 |
|
26 |
def decode(input, output): |
27 |
"""Decode a file."""
|
28 |
while 1: |
29 |
line = input.readline()
|
30 |
if not line: break |
31 |
s = binascii.a2b_base64(line) |
32 |
output.write(s) |
33 |
|
34 |
def encodestring(s): |
35 |
"""Encode a string."""
|
36 |
import StringIO |
37 |
f = StringIO.StringIO(s) |
38 |
g = StringIO.StringIO() |
39 |
encode(f, g) |
40 |
return g.getvalue()
|
41 |
|
42 |
def decodestring(s): |
43 |
"""Decode a string."""
|
44 |
import StringIO |
45 |
f = StringIO.StringIO(s) |
46 |
g = StringIO.StringIO() |
47 |
decode(f, g) |
48 |
return g.getvalue()
|
49 |
|
50 |
def test(): |
51 |
"""Small test program"""
|
52 |
import sys, getopt |
53 |
try:
|
54 |
opts, args = getopt.getopt(sys.argv[1:], 'deut') |
55 |
except getopt.error, msg:
|
56 |
sys.stdout = sys.stderr |
57 |
print msg
|
58 |
print """usage: %s [-d|-e|-u|-t] [file|-] |
59 |
-d, -u: decode
|
60 |
-e: encode (default)
|
61 |
-t: encode and decode string 'Aladdin:open sesame'"""%sys.argv[0] |
62 |
sys.exit(2)
|
63 |
func = encode |
64 |
for o, a in opts: |
65 |
if o == '-e': func = encode |
66 |
if o == '-d': func = decode |
67 |
if o == '-u': func = decode |
68 |
if o == '-t': test1(); return |
69 |
if args and args[0] != '-': |
70 |
func(open(args[0], 'rb'), sys.stdout) |
71 |
else:
|
72 |
func(sys.stdin, sys.stdout) |
73 |
|
74 |
def test1(): |
75 |
s0 = "Aladdin:open sesame"
|
76 |
s1 = encodestring(s0) |
77 |
s2 = decodestring(s1) |
78 |
print s0, `s1`, s2
|
79 |
|
80 |
if __name__ == '__main__': |
81 |
test() |