Skip to content

Commit bbf0bc9

Browse files
committed
Use the exact type name in Record.__repr__
We support Record subclasses, so include the exact type name (rather than just 'Record') in the repr() string.
1 parent 5f908e6 commit bbf0bc9

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

asyncpg/protocol/record/recordobj.c

+10-4
Original file line numberDiff line numberDiff line change
@@ -455,12 +455,12 @@ static PyObject *
455455
record_repr(ApgRecordObject *v)
456456
{
457457
Py_ssize_t i, n;
458-
PyObject *keys_iter;
458+
PyObject *keys_iter, *type_prefix;
459459
_PyUnicodeWriter writer;
460460

461461
n = Py_SIZE(v);
462462
if (n == 0) {
463-
return PyUnicode_FromString("<Record>");
463+
return PyUnicode_FromFormat("<%s>", _PyType_Name(Py_TYPE(v)));
464464
}
465465

466466
keys_iter = PyObject_GetIter(v->desc->keys);
@@ -471,16 +471,22 @@ record_repr(ApgRecordObject *v)
471471
i = Py_ReprEnter((PyObject *)v);
472472
if (i != 0) {
473473
Py_DECREF(keys_iter);
474-
return i > 0 ? PyUnicode_FromString("<Record ...>") : NULL;
474+
if (i > 0) {
475+
return PyUnicode_FromFormat("<%s ...>", _PyType_Name(Py_TYPE(v)));
476+
}
477+
return NULL;
475478
}
476479

477480
_PyUnicodeWriter_Init(&writer);
478481
writer.overallocate = 1;
479482
writer.min_length = 12; /* <Record a=1> */
480483

481-
if (_PyUnicodeWriter_WriteASCIIString(&writer, "<Record ", 8) < 0) {
484+
type_prefix = PyUnicode_FromFormat("<%s ", _PyType_Name(Py_TYPE(v)));
485+
if (_PyUnicodeWriter_WriteStr(&writer, type_prefix) < 0) {
486+
Py_DECREF(type_prefix);
482487
goto error;
483488
}
489+
Py_DECREF(type_prefix);
484490

485491
for (i = 0; i < n; ++i) {
486492
PyObject *key;

tests/test_record.py

+1
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ class MyRecord(asyncpg.Record):
523523
record_class=MyRecord,
524524
)
525525
self.assertIsInstance(r, MyRecord)
526+
self.assertEqual(repr(r), "<MyRecord a=1 b='2'>")
526527

527528
self.assertEqual(list(r.items()), [('a', 1), ('b', '2')])
528529
self.assertEqual(list(r.keys()), ['a', 'b'])

0 commit comments

Comments
 (0)