[Python-checkins] r70129 - in python/branches/py3k: Lib/test/test_dict.py Misc/NEWS Objects/dictobject.c

raymond.hettinger python-checkins at python.org
Tue Mar 3 11:52:50 CET 2009


Author: raymond.hettinger
Date: Tue Mar  3 11:52:49 2009
New Revision: 70129

Log:
Give dict views a helpful __repr__.

Modified:
   python/branches/py3k/Lib/test/test_dict.py
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Objects/dictobject.c

Modified: python/branches/py3k/Lib/test/test_dict.py
==============================================================================
--- python/branches/py3k/Lib/test/test_dict.py	(original)
+++ python/branches/py3k/Lib/test/test_dict.py	Tue Mar  3 11:52:49 2009
@@ -36,16 +36,16 @@
         k = d.keys()
         self.assert_('a' in d)
         self.assert_('b' in d)
-
         self.assertRaises(TypeError, d.keys, None)
+        self.assertEqual(repr(dict(a=1).keys()), "dict_keys(['a'])")
 
     def test_values(self):
         d = {}
         self.assertEqual(set(d.values()), set())
         d = {1:2}
         self.assertEqual(set(d.values()), {2})
-
         self.assertRaises(TypeError, d.values, None)
+        self.assertEqual(repr(dict(a=1).values()), "dict_values([1])")
 
     def test_items(self):
         d = {}
@@ -53,8 +53,8 @@
 
         d = {1:2}
         self.assertEqual(set(d.items()), {(1, 2)})
-
         self.assertRaises(TypeError, d.items, None)
+        self.assertEqual(repr(dict(a=1).items()), "dict_items([('a', 1)])")
 
     def test_contains(self):
         d = {}

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Tue Mar  3 11:52:49 2009
@@ -13,6 +13,9 @@
 -----------------
 
 =======
+
+- Give dict views an informative __repr__.
+
 - Issue #5247: Improve error message when unknown format codes are
   used when using str.format() with str, int, and float arguments.
 

Modified: python/branches/py3k/Objects/dictobject.c
==============================================================================
--- python/branches/py3k/Objects/dictobject.c	(original)
+++ python/branches/py3k/Objects/dictobject.c	Tue Mar  3 11:52:49 2009
@@ -2563,6 +2563,21 @@
 	return result;
 }
 
+static PyObject *
+dictview_repr(dictviewobject *dv)
+{
+	PyObject *seq;
+	PyObject *result;
+	
+	seq = PySequence_List((PyObject *)dv);
+	if (seq == NULL)
+		return NULL;
+
+	result = PyUnicode_FromFormat("%s(%R)", Py_TYPE(dv)->tp_name, seq);
+	Py_DECREF(seq);
+	return result;
+}
+
 /*** dict_keys ***/
 
 static PyObject *
@@ -2700,7 +2715,7 @@
 	0,					/* tp_getattr */
 	0,					/* tp_setattr */
 	0,					/* tp_reserved */
-	0,					/* tp_repr */
+	(reprfunc)dictview_repr,		/* tp_repr */
 	&dictviews_as_number,			/* tp_as_number */
 	&dictkeys_as_sequence,			/* tp_as_sequence */
 	0,					/* tp_as_mapping */
@@ -2784,7 +2799,7 @@
 	0,					/* tp_getattr */
 	0,					/* tp_setattr */
 	0,					/* tp_reserved */
-	0,					/* tp_repr */
+	(reprfunc)dictview_repr,		/* tp_repr */
 	&dictviews_as_number,			/* tp_as_number */
 	&dictitems_as_sequence,			/* tp_as_sequence */
 	0,					/* tp_as_mapping */
@@ -2849,7 +2864,7 @@
 	0,					/* tp_getattr */
 	0,					/* tp_setattr */
 	0,					/* tp_reserved */
-	0,					/* tp_repr */
+	(reprfunc)dictview_repr,		/* tp_repr */
 	0,					/* tp_as_number */
 	&dictvalues_as_sequence,		/* tp_as_sequence */
 	0,					/* tp_as_mapping */


More information about the Python-checkins mailing list