[issue20239] Allow repeated deletion of unittest.mock.Mock attributes
Michael Foord
report at bugs.python.org
Mon Jan 13 12:15:01 CET 2014
New submission from Michael Foord:
Reported as mock issue 221: http://code.google.com/p/mock/issues/detail?id=221
>>> from unittest.mock import Mock
>>> m = Mock()
>>> m.foo = 3
>>> del m.foo
>>> m.foo = 4
>>> del m.foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/compile/py3k-cpython/Lib/unittest/mock.py", line 687, in __delattr__
raise AttributeError(name)
AttributeError: foo
Suggested change:
Previous:
def __delattr__(self, name):
if name in _all_magics and name in type(self).__dict__:
delattr(type(self), name)
if name not in self.__dict__:
# for magic methods that are still MagicProxy objects and
# not set on the instance itself
return
if name in self.__dict__:
object.__delattr__(self, name)
obj = self._mock_children.get(name, _missing)
if obj is _deleted:
raise AttributeError(name)
if obj is not _missing:
del self._mock_children[name]
self._mock_children[name] = _deleted
Change:
def __delattr__(self, name):
if name in _all_magics and name in type(self).__dict__:
delattr(type(self), name)
if name not in self.__dict__:
# for magic methods that are still MagicProxy objects and
# not set on the instance itself
return
obj = self._mock_children.get(name, _missing)
if name in self.__dict__:
object.__delattr__(self, name)
elif obj is _deleted:
raise AttributeError(name)
if obj is not _missing:
del self._mock_children[name]
self._mock_children[name] = _deleted
Incidentally the if ‘obj is not _missing’ line seems superfluous.
----------
assignee: michael.foord
messages: 208019
nosy: michael.foord
priority: normal
severity: normal
stage: needs patch
status: open
title: Allow repeated deletion of unittest.mock.Mock attributes
type: behavior
versions: Python 3.3, Python 3.4
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue20239>
_______________________________________
More information about the Python-bugs-list
mailing list