Statistics
| Revision:

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()