]> granicus.if.org Git - python/commitdiff
Fixup repr for dict_proxy objects.
authorRaymond Hettinger <python@rcn.com>
Wed, 29 Jun 2011 23:44:36 +0000 (00:44 +0100)
committerRaymond Hettinger <python@rcn.com>
Wed, 29 Jun 2011 23:44:36 +0000 (00:44 +0100)
Lib/test/test_descr.py
Misc/NEWS
Objects/descrobject.c

index dc18f336dfccc8b382902a4c296d51de53ed1f30..b5d98900e23ab3547fa739439164111a7501c8df 100644 (file)
@@ -4589,6 +4589,10 @@ class DictProxyTests(unittest.TestCase):
                 pass
         self.C = C
 
+    def test_repr(self):
+        self.assertIn('dict_proxy({', repr(vars(self.C)))
+        self.assertIn("'meth':", repr(vars(self.C)))
+
     def test_iter_keys(self):
         # Testing dict-proxy iterkeys...
         keys = [ key for key in self.C.__dict__.iterkeys() ]
index 024d38d06aa0287b6bd23a8bd0c5678e5dc783ee..9f4ecc9e6675fa3a9f6d4778a4cfdffd886c37c9 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,6 +13,8 @@ Core and Builtins
   the following case: sys.stdin.read() stopped with CTRL+d (end of file),
   raw_input() interrupted by CTRL+c.
 
+- dict_proxy objects now display their contents rather than just the class name.
+
 Library
 -------
 
index 135b6d2a9aa7284d206dd9337f1e90037883b7fc..8e7ea7d25f4bdc9b32286ee588c41045189528ae 100644 (file)
@@ -801,6 +801,20 @@ proxy_str(proxyobject *pp)
     return PyObject_Str(pp->dict);
 }
 
+static PyObject *
+proxy_repr(proxyobject *pp)
+{
+    PyObject *dictrepr;
+    PyObject *result;
+
+    dictrepr = PyObject_Repr(pp->dict);
+    if (dictrepr == NULL)
+        return NULL;
+    result = PyString_FromFormat("dict_proxy(%s)", PyString_AS_STRING(dictrepr));
+    Py_DECREF(dictrepr);
+    return result;
+}
+
 static int
 proxy_traverse(PyObject *self, visitproc visit, void *arg)
 {
@@ -832,7 +846,7 @@ PyTypeObject PyDictProxy_Type = {
     0,                                          /* tp_getattr */
     0,                                          /* tp_setattr */
     (cmpfunc)proxy_compare,                     /* tp_compare */
-    0,                                          /* tp_repr */
+    (reprfunc)proxy_repr,                       /* tp_repr */
     0,                                          /* tp_as_number */
     &proxy_as_sequence,                         /* tp_as_sequence */
     &proxy_as_mapping,                          /* tp_as_mapping */