[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