From: Raymond Hettinger Date: Tue, 15 Jan 2008 03:02:37 +0000 (+0000) Subject: Issue 1820: structseq objects did not work with the % formatting operator or isinsta... X-Git-Tag: v2.6a1~608 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c216df9288d03d43462c87dd9ee2ae3c340376a5;p=python Issue 1820: structseq objects did not work with the % formatting operator or isinstance(t, tuple). Orignal patch (without tests) by Leif Walsh. --- diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py index 83c7ccf57d..02c2f72fdf 100644 --- a/Lib/test/test_structseq.py +++ b/Lib/test/test_structseq.py @@ -26,6 +26,12 @@ class StructSeqTest(unittest.TestCase): for i in xrange(-len(t), len(t)-1): self.assertEqual(t[i], astuple[i]) + def test_tuple_subclass(self): + # Issue 1820 + t = time.localtime() + s = ('%s ' * len(t)) % t # This used to fail because t was not a tuple subclass + self.assert_(isinstance(t, tuple)) + def test_repr(self): t = time.gmtime() self.assert_(repr(t)) diff --git a/Misc/ACKS b/Misc/ACKS index 2ae4528b0a..2090f85a19 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -686,6 +686,7 @@ Wojtek Walczak Charles Waldman Richard Walker Larry Wall +Leif Walsh Greg Ward Barry Warsaw Steve Waterbury diff --git a/Misc/NEWS b/Misc/NEWS index 32dab1059c..048e9842b6 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -975,6 +975,10 @@ Library Extension Modules ----------------- +- Issue 1820: structseq objects did not subclass from tuple so they did + not pass isinstance(t, tuple) tests and they could not be passed to + the % string formatting operator as an input tuple. + - _winreg's HKEY object has gained __enter__ and __exit__ methods to support the context manager protocol. The _winreg module also gained a new function ``ExpandEnvironmentStrings`` to expand REG_EXPAND_SZ keys. diff --git a/Objects/structseq.c b/Objects/structseq.c index b6126bae46..6b1b590589 100644 --- a/Objects/structseq.c +++ b/Objects/structseq.c @@ -460,7 +460,7 @@ static PyTypeObject _struct_sequence_template = { structseq_methods, /* tp_methods */ NULL, /* tp_members */ 0, /* tp_getset */ - 0, /* tp_base */ + &PyTuple_Type, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */