Merge 3.2

This commit is contained in:
Michael Foord 2011-12-18 22:09:27 +00:00
commit a699a2d0c1
3 changed files with 14 additions and 4 deletions

View File

@ -1109,7 +1109,7 @@ def _check_instance(obj, attr):
def _check_class(klass, attr): def _check_class(klass, attr):
for entry in _static_getmro(klass): for entry in _static_getmro(klass):
if not _shadowed_dict(type(entry)): if _shadowed_dict(type(entry)) is _sentinel:
try: try:
return entry.__dict__[attr] return entry.__dict__[attr]
except KeyError: except KeyError:
@ -1134,8 +1134,8 @@ def _shadowed_dict(klass):
if not (type(class_dict) is types.GetSetDescriptorType and if not (type(class_dict) is types.GetSetDescriptorType and
class_dict.__name__ == "__dict__" and class_dict.__name__ == "__dict__" and
class_dict.__objclass__ is entry): class_dict.__objclass__ is entry):
return True return class_dict
return False return _sentinel
def getattr_static(obj, attr, default=_sentinel): def getattr_static(obj, attr, default=_sentinel):
"""Retrieve attributes without triggering dynamic lookup via the """Retrieve attributes without triggering dynamic lookup via the
@ -1151,7 +1151,9 @@ def getattr_static(obj, attr, default=_sentinel):
instance_result = _sentinel instance_result = _sentinel
if not _is_type(obj): if not _is_type(obj):
klass = type(obj) klass = type(obj)
if not _shadowed_dict(klass): dict_attr = _shadowed_dict(klass)
if (dict_attr is _sentinel or
type(dict_attr) is types.MemberDescriptorType):
instance_result = _check_instance(obj, attr) instance_result = _check_instance(obj, attr)
else: else:
klass = obj klass = obj

View File

@ -1004,6 +1004,11 @@ class TestGetattrStatic(unittest.TestCase):
self.assertEqual(inspect.getattr_static(instance, "spam"), 42) self.assertEqual(inspect.getattr_static(instance, "spam"), 42)
self.assertFalse(Thing.executed) self.assertFalse(Thing.executed)
def test_module(self):
sentinel = object()
self.assertIsNot(inspect.getattr_static(sys, "version", sentinel),
sentinel)
class TestGetGeneratorState(unittest.TestCase): class TestGetGeneratorState(unittest.TestCase):
def setUp(self): def setUp(self):

View File

@ -419,6 +419,9 @@ Core and Builtins
Library Library
------- -------
- Issue #11813: Fix inspect.getattr_static for modules. Patch by Andreas
Stührk.
- Issue #7502: Fix equality comparison for DocTestCase instances. Patch by - Issue #7502: Fix equality comparison for DocTestCase instances. Patch by
Cédric Krier. Cédric Krier.