]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
fuse/blackmatch: update json handling to support simplejson v2
authorrobk-tahoe <robk-tahoe@allmydata.com>
Fri, 17 Oct 2008 02:59:31 +0000 (19:59 -0700)
committerrobk-tahoe <robk-tahoe@allmydata.com>
Fri, 17 Oct 2008 02:59:31 +0000 (19:59 -0700)
simplejson v2 returns strings as either unicode or str, depending upon its
mood.  thus the interpretation of the node's json repr of a directory, and
the serialisation of strings in the json based rpc both exploded when built
against simplejson v2.  this makes both of these places liberal in their
acceptance of either str or unicode.

contrib/fuse/impl_c/blackmatch.py

index b167c71387fff56ad4a441e5f2267f30acf466ac..322df4e220be543abf0f522a30bc106a9e89f690 100644 (file)
@@ -105,9 +105,12 @@ def log(msg):
 
 fuse.flog = log
 
-def unicode_to_utf8(u):
-    precondition(isinstance(u, unicode), repr(u))
-    return u.encode('utf-8')
+def unicode_to_utf8_or_str(u):
+    if isinstance(u, unicode):
+        return u.encode('utf-8')
+    else:
+        precondition(isinstance(u, str), repr(u))
+        return u
 
 def do_http(method, url, body=''):
     resp = do_http_req(method, url, body)
@@ -834,7 +837,7 @@ class Directory(object):
         assert nodetype == 'dirnode'
         self.children.clear()
         for cname,details in d['children'].items():
-            cname = unicode_to_utf8(cname)
+            cname = unicode_to_utf8_or_str(cname)
             ctype, cattrs = details
             metadata = cattrs.get('metadata', {})
             if ctype == 'dirnode':
@@ -1142,7 +1145,7 @@ def print_tree():
 def unmarshal(obj):
     if obj is None or isinstance(obj, int) or isinstance(obj, long) or isinstance(obj, float):
         return obj
-    elif isinstance(obj, unicode):
+    elif isinstance(obj, unicode) or isinstance(obj, str):
         #log('unmarshal(%r)' % (obj,))
         return base64.b64decode(obj)
     elif isinstance(obj, list):