From 3bdd1ed0435e9e692b1ca2f51855a39a357a9e4a Mon Sep 17 00:00:00 2001 From: Alex Charlton Date: Tue, 5 Jun 2018 16:29:27 -0700 Subject: [PATCH] Change DictRow representation to match that of dict --- lib/extras.py | 3 +++ tests/test_extras_dictcursor.py | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/extras.py b/lib/extras.py index ff32ab6a..7bb5b468 100644 --- a/lib/extras.py +++ b/lib/extras.py @@ -175,6 +175,9 @@ class DictRow(list): x = self._index[x] super(DictRow, self).__setitem__(x, v) + def __repr__(self): + return repr(dict(self)) + def items(self): g = super(DictRow, self).__getitem__ return ((n, g(self._index[n])) for n in self._index) diff --git a/tests/test_extras_dictcursor.py b/tests/test_extras_dictcursor.py index 1d5dfd03..c52bd51e 100755 --- a/tests/test_extras_dictcursor.py +++ b/tests/test_extras_dictcursor.py @@ -215,6 +215,11 @@ class ExtrasDictCursorTests(_DictCursorBase): self.assertEqual(list(r1.itervalues()), list(r.itervalues())) self.assertEqual(list(r1.iteritems()), list(r.iteritems())) + def testDictCursorRepresentation(self): + curs = self.conn.cursor(cursor_factory=psycopg2.extras.DictCursor) + curs.execute("select 5 as foo, 4 as bar, 33 as baz, 2 as qux") + r = curs.fetchone() + self.assertEqual(repr(r), repr({'foo': 5, 'bar': 4, 'baz': 33, 'qux': 2})) class ExtrasDictCursorRealTests(_DictCursorBase): def testDictCursorWithPlainCursorRealFetchOne(self): @@ -354,6 +359,12 @@ class ExtrasDictCursorRealTests(_DictCursorBase): self.assertEqual(list(r1.itervalues()), list(r.itervalues())) self.assertEqual(list(r1.iteritems()), list(r.iteritems())) + def testRealDictCursorRepresentation(self): + curs = self.conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) + curs.execute("select 5 as foo, 4 as bar, 33 as baz, 2 as qux") + r = curs.fetchone() + self.assertEqual(repr(r), repr({'foo': 5, 'bar': 4, 'baz': 33, 'qux': 2})) + class NamedTupleCursorTest(ConnectingTestCase): def setUp(self):