[pypy-svn] r10000 - pypy/dist/pypy/lib

jacob at codespeak.net jacob at codespeak.net
Mon Mar 21 17:41:28 CET 2005


Author: jacob
Date: Mon Mar 21 17:41:28 2005
New Revision: 10000

Added:
   pypy/dist/pypy/lib/binascii.py
Log:
First revsion. Onlu supports uu-encode/decode.

Added: pypy/dist/pypy/lib/binascii.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/lib/binascii.py	Mon Mar 21 17:41:28 2005
@@ -0,0 +1,64 @@
+class Error(Exception):
+    pass
+
+class Incomplete(Exception):
+    pass
+
+def a2b_uu(s):
+    length = ord(s[0]) - 0x20
+    a = quadruplets(s[1:])
+    '''
+    for A, B, C, D in a:
+        print chr((A - 0x20) << 2 | (((B - 0x20) >> 4) & 0x3))
+        print chr(((B - 0x20) & 0xF) << 4 | (((C - 0x20) >> 2) & 0xF))
+        print chr(((C - 0x20) & 0x3) << 6 | ((D - 0x20) & 0x3F))
+    '''
+
+    result = [''.join(
+        [chr((A - 0x20) << 2 | (((B - 0x20) >> 4) & 0x3)),
+         chr(((B - 0x20) & 0xF) << 4 | (((C - 0x20) >> 2) & 0xF)),
+         chr(((C - 0x20) & 0x3) << 6 | ((D - 0x20) & 0x3F))
+        ]) for A, B, C, D in a]
+    return ''.join(result)[:length]
+
+def quadruplets(s):
+    while s:
+        try:
+            a, b, c, d = s[0], s[1], s[2], s[3]
+        except IndexError:
+            s += '\0\0\0'
+            yield ord(s[0]), ord(s[1]), ord(s[2]), ord(s[3])
+            return
+        s = s[4:]
+        yield ord(a), ord(b), ord(c), ord(d)
+                               
+def b2a_uu(s):
+    length = len(s)
+    if length > 45:
+        raise Error, 'At most 45 bytes at once'
+
+    a = triples(s)
+    result = [''.join(
+        [chr(0x20 + (( A >> 2                    ) & 0x3F)),
+         chr(0x20 + (((A << 4) | ((B >> 4) & 0xF)) & 0x3F)),
+         chr(0x20 + (((B << 2) | ((C >> 6) & 0x3)) & 0x3F)),
+         chr(0x20 + (( C                         ) & 0x3F))]) for A, B, C in a]
+    return chr(ord(' ') + (length & 077)) + ''.join(result) + '\\n'
+
+def triples(s):
+    while s:
+        try:
+            a, b, c = s[0], s[1], s[2]
+        except IndexError:
+            s += '\0\0'
+            yield ord(s[0]), ord(s[1]), ord(s[2])
+            return
+        s = s[3:]
+        yield ord(a), ord(b), ord(c)
+
+print b2a_uu('1234567')
+print b2a_uu('123456789012345678901234567890123456789012345')
+#print b2a_uu('1234567890123456789012345678901234567890123456')
+print '"%s"' % a2b_uu(b2a_uu('1234567'))
+print '"%s"' % a2b_uu(b2a_uu('123456789012345678901234567890123456789012345'))
+



More information about the Pypy-commit mailing list