util/base32: allow unicode inputs to a2b() or could_be_base32_encoded(), and encode...
authorZooko O'Whielacronx <zooko@zooko.com>
Tue, 23 Dec 2008 00:47:13 +0000 (17:47 -0700)
committerZooko O'Whielacronx <zooko@zooko.com>
Tue, 23 Dec 2008 00:47:13 +0000 (17:47 -0700)
src/allmydata/util/base32.py

index 148a869c8e321b9433c2dffe2e60c890f1666fd3..26661b7b7a67ce673f21a5da0e659ac761812532 100644 (file)
@@ -180,12 +180,16 @@ s5 = init_s5()
 
 def could_be_base32_encoded(s, s8=s8, tr=string.translate, identitytranstable=identitytranstable, chars=chars):
     precondition(isinstance(s, (str, unicode)), s)
+    if isinstance(s, unicode):
+        s = s.encode('utf-8')
     if s == '':
         return True
     return s8[len(s)%8][ord(s[-1])] and not tr(s, identitytranstable, chars)
 
 def could_be_base32_encoded_l(s, lengthinbits, s5=s5, tr=string.translate, identitytranstable=identitytranstable, chars=chars):
     precondition(isinstance(s, (str, unicode)), s)
+    if isinstance(s, unicode):
+        s = s.encode('utf-8')
     if s == '':
         return True
     assert lengthinbits%5 < len(s5), lengthinbits
@@ -201,6 +205,9 @@ def a2b(cs):
     @param cs the base-32 encoded data (a string)
     """
     precondition(could_be_base32_encoded(cs), "cs is required to be possibly base32 encoded data.", cs=cs)
+    precondition(isinstance(cs, (str, unicode)), cs)
+    if isinstance(cs, unicode):
+        cs = cs.encode('utf-8')
 
     return a2b_l(cs, num_octets_that_encode_to_this_many_quintets(len(cs))*8)
 
@@ -225,6 +232,9 @@ def a2b_l(cs, lengthinbits):
     @return the data encoded in cs
     """
     precondition(could_be_base32_encoded_l(cs, lengthinbits), "cs is required to be possibly base32 encoded data.", cs=cs, lengthinbits=lengthinbits)
+    precondition(isinstance(cs, (str, unicode)), cs)
+    if isinstance(cs, unicode):
+        cs = cs.encode('utf-8')
     if cs == '':
         return ''