macfuse: fix unicode handling
authorrobk-tahoe <robk-tahoe@allmydata.com>
Fri, 7 Mar 2008 00:43:25 +0000 (17:43 -0700)
committerrobk-tahoe <robk-tahoe@allmydata.com>
Fri, 7 Mar 2008 00:43:25 +0000 (17:43 -0700)
at one point I'd thrown in a 'str' since fuse api bits required a str instance
but tahoe returns unicode objects from its json parsing.  that, naturally
enough should really be a utf8 encoded str of the unicode object...

mac/tahoefuse.py

index 94fbff5c29ea343984c839575928483b31f25718..fe97577cc1ca86a8d4ad2549a7a5145382f6ca14 100644 (file)
@@ -4,6 +4,7 @@
 from allmydata.uri import CHKFileURI, NewDirectoryURI, LiteralFileURI
 from allmydata.scripts.common_http import do_http as do_http_req
 from allmydata.util.hashutil import tagged_hash
+from allmydata.util.assertutil import precondition
 from allmydata.util import base32
 
 import base64
@@ -46,6 +47,10 @@ def log(msg):
 
 fuse.flog = log
 
+def unicode_to_utf8(u):
+    precondition(isinstance(u, unicode), repr(u))
+    return u.encode('utf-8')
+
 def do_http(method, url, body=''):
     resp = do_http_req(method, url, body)
     log('do_http(%s, %s) -> %s, %s' % (method, url, resp.status, resp.reason))
@@ -487,7 +492,7 @@ class Directory(object):
         assert nodetype == 'dirnode'
         self.children.clear()
         for cname,details in d['children'].items():
-            cname = str(cname)
+            cname = unicode_to_utf8(cname)
             ctype, cattrs = details
             metadata = cattrs.get('metadata', {})
             if ctype == 'dirnode':