Commit 4da5bf64 authored by Raymond Hettinger's avatar Raymond Hettinger

Bug #1575169: operator.isSequenceType() now returns False for subclasses of dict.

parent 5a0217ef
...@@ -215,6 +215,8 @@ class OperatorTestCase(unittest.TestCase): ...@@ -215,6 +215,8 @@ class OperatorTestCase(unittest.TestCase):
self.failUnless(operator.isSequenceType(xrange(10))) self.failUnless(operator.isSequenceType(xrange(10)))
self.failUnless(operator.isSequenceType('yeahbuddy')) self.failUnless(operator.isSequenceType('yeahbuddy'))
self.failIf(operator.isSequenceType(3)) self.failIf(operator.isSequenceType(3))
class Dict(dict): pass
self.failIf(operator.isSequenceType(Dict()))
def test_lshift(self): def test_lshift(self):
self.failUnlessRaises(TypeError, operator.lshift) self.failUnlessRaises(TypeError, operator.lshift)
......
...@@ -1157,6 +1157,8 @@ PySequence_Check(PyObject *s) ...@@ -1157,6 +1157,8 @@ PySequence_Check(PyObject *s)
{ {
if (s && PyInstance_Check(s)) if (s && PyInstance_Check(s))
return PyObject_HasAttrString(s, "__getitem__"); return PyObject_HasAttrString(s, "__getitem__");
if (PyObject_IsInstance(s, &PyDict_Type))
return 0;
return s != NULL && s->ob_type->tp_as_sequence && return s != NULL && s->ob_type->tp_as_sequence &&
s->ob_type->tp_as_sequence->sq_item != NULL; s->ob_type->tp_as_sequence->sq_item != NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment