svn-gvsig-desktop / tags / v1_1_Build_1002 / extensions / extScripting / scripts / jython / Lib / base64.py @ 12070
History | View | Annotate | Download (1.97 KB)
1 | 5782 | jmvivo | #! /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() |