Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r62304:c03956a6dd22
Date: 2013-03-11 18:39 -0700
http://bitbucket.org/pypy/pypy/changeset/c03956a6dd22/

Log:    dictproxy works against utf-8 encoded identifiers from type's dict_w

diff --git a/pypy/objspace/std/dictproxyobject.py 
b/pypy/objspace/std/dictproxyobject.py
--- a/pypy/objspace/std/dictproxyobject.py
+++ b/pypy/objspace/std/dictproxyobject.py
@@ -74,15 +74,19 @@
 
     def w_keys(self, w_dict):
         space = self.space
-        return space.newlist_str(self.unerase(w_dict.dstorage).dict_w.keys())
+        w_type = self.unerase(w_dict.dstorage)
+        return space.newlist([_wrapkey(space, key)
+                              for key in w_type.dict_w.iterkeys()])
 
     def values(self, w_dict):
         return [unwrap_cell(self.space, w_value) for w_value in 
self.unerase(w_dict.dstorage).dict_w.itervalues()]
 
     def items(self, w_dict):
         space = self.space
-        return [space.newtuple([space.wrap(key), unwrap_cell(self.space, 
w_value)])
-                    for (key, w_value) in 
self.unerase(w_dict.dstorage).dict_w.iteritems()]
+        w_type = self.unerase(w_dict.dstorage)
+        return [space.newtuple([_wrapkey(space, key),
+                                unwrap_cell(space, w_value)])
+                for (key, w_value) in w_type.dict_w.iteritems()]
 
     def clear(self, w_dict):
         space = self.space
@@ -100,8 +104,12 @@
     def getiteritems(self, w_dict):
         return self.unerase(w_dict.dstorage).dict_w.iteritems()
     def wrapkey(space, key):
-        return space.wrap(key)
+        return _wrapkey(space, key)
     def wrapvalue(space, value):
         return unwrap_cell(space, value)
 
+def _wrapkey(space, key):
+    # keys are utf-8 encoded identifiers from type's dict_w
+    return space.wrap(key.decode('utf-8'))
+
 create_iterator_classes(DictProxyStrategy)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to