Home | History | Annotate | Download | only in test
      1 # mock.py
      2 # Test tools for mocking and patching.
      3 # Maintained by Michael Foord
      4 # Backport for other versions of Python available from
      5 # http://pypi.python.org/pypi/mock
      6 
      7 __all__ = (
      8     'Mock',
      9     'MagicMock',
     10     'patch',
     11     'sentinel',
     12     'DEFAULT',
     13     'ANY',
     14     'call',
     15     'create_autospec',
     16     'FILTER_DIR',
     17     'NonCallableMock',
     18     'NonCallableMagicMock',
     19     'mock_open',
     20     'PropertyMock',
     21 )
     22 
     23 
     24 __version__ = '1.0'
     25 
     26 
     27 import __builtin__
     28 import inspect
     29 import pprint
     30 import sys
     31 
     32 from types import ModuleType
     33 from functools import wraps, partial
     34 
     35 
     36 _builtins = {name for name in dir(__builtin__) if not name.startswith('_')}
     37 
     38 BaseExceptions = (BaseException,)
     39 if 'java' in sys.platform:
     40     # jython
     41     import java
     42     BaseExceptions = (BaseException, java.lang.Throwable)
     43 
     44 
     45 FILTER_DIR = True
     46 
     47 # Workaround for issue #12370
     48 # Without this, the __class__ properties wouldn't be set correctly
     49 _safe_super = super
     50 
     51 def _is_instance_mock(obj):
     52     # can't use isinstance on Mock objects because they override __class__
     53     # The base class for all mocks is NonCallableMock
     54     return issubclass(type(obj), NonCallableMock)
     55 
     56 
     57 def _is_exception(obj):
     58     return (
     59         isinstance(obj, BaseExceptions) or
     60         isinstance(obj, type) and issubclass(obj, BaseExceptions)
     61     )
     62 
     63 
     64 class _slotted(object):
     65     __slots__ = ['a']
     66 
     67 
     68 DescriptorTypes = (
     69     type(_slotted.a),
     70     property,
     71 )
     72 
     73 
     74 def _get_signature_object(func, as_instance, eat_self):
     75     """
     76     Given an arbitrary, possibly callable object, try to create a suitable
     77     signature object.
     78     Return a (reduced func, signature) tuple, or None.
     79     """
     80     if isinstance(func, type) and not as_instance:
     81         # If it's a type and should be modelled as a type, use __init__.
     82         try:
     83             func = func.__init__
     84         except AttributeError:
     85             return None
     86         # Skip the `self` argument in __init__
     87         eat_self = True
     88     elif not isinstance(func, FunctionTypes):
     89         # If we really want to model an instance of the passed type,
     90         # __call__ should be looked up, not __init__.
     91         try:
     92             func = func.__call__
     93         except AttributeError:
     94             return None
     95     if eat_self:
     96         sig_func = partial(func, None)
     97     else:
     98         sig_func = func
     99     try:
    100         return func, inspect.signature(sig_func)
    101     except ValueError:
    102         # Certain callable types are not supported by inspect.signature()
    103         return None
    104 
    105 
    106 def _check_signature(func, mock, skipfirst, instance=False):
    107     sig = _get_signature_object(func, instance, skipfirst)
    108     if sig is None:
    109         return
    110     func, sig = sig
    111     def checksig(_mock_self, *args, **kwargs):
    112         sig.bind(*args, **kwargs)
    113     _copy_func_details(func, checksig)
    114     type(mock)._mock_check_sig = checksig
    115 
    116 
    117 def _copy_func_details(func, funcopy):
    118     funcopy.__name__ = func.__name__
    119     funcopy.__doc__ = func.__doc__
    120     try:
    121         funcopy.__text_signature__ = func.__text_signature__
    122     except AttributeError:
    123         pass
    124     # we explicitly don't copy func.__dict__ into this copy as it would
    125     # expose original attributes that should be mocked
    126     try:
    127         funcopy.__module__ = func.__module__
    128     except AttributeError:
    129         pass
    130     try:
    131         funcopy.__defaults__ = func.__defaults__
    132     except AttributeError:
    133         pass
    134     try:
    135         funcopy.__kwdefaults__ = func.__kwdefaults__
    136     except AttributeError:
    137         pass
    138 
    139 
    140 def _callable(obj):
    141     if isinstance(obj, type):
    142         return True
    143     if getattr(obj, '__call__', None) is not None:
    144         return True
    145     return False
    146 
    147 
    148 def _is_list(obj):
    149     # checks for list or tuples
    150     # XXXX badly named!
    151     return type(obj) in (list, tuple)
    152 
    153 
    154 def _instance_callable(obj):
    155     """Given an object, return True if the object is callable.
    156     For classes, return True if instances would be callable."""
    157     if not isinstance(obj, type):
    158         # already an instance
    159         return getattr(obj, '__call__', None) is not None
    160 
    161     # *could* be broken by a class overriding __mro__ or __dict__ via
    162     # a metaclass
    163     for base in (obj,) + obj.__mro__:
    164         if base.__dict__.get('__call__') is not None:
    165             return True
    166     return False
    167 
    168 
    169 def _set_signature(mock, original, instance=False):
    170     # creates a function with signature (*args, **kwargs) that delegates to a
    171     # mock. It still does signature checking by calling a lambda with the same
    172     # signature as the original.
    173     if not _callable(original):
    174         return
    175 
    176     skipfirst = isinstance(original, type)
    177     result = _get_signature_object(original, instance, skipfirst)
    178     if result is None:
    179         return
    180     func, sig = result
    181     def checksig(*args, **kwargs):
    182         sig.bind(*args, **kwargs)
    183     _copy_func_details(func, checksig)
    184 
    185     name = original.__name__
    186     if not name.isidentifier():
    187         name = 'funcopy'
    188     context = {'_checksig_': checksig, 'mock': mock}
    189     src = """def %s(*args, **kwargs):
    190     _checksig_(*args, **kwargs)
    191     return mock(*args, **kwargs)""" % name
    192     exec (src, context)
    193     funcopy = context[name]
    194     _setup_func(funcopy, mock)
    195     return funcopy
    196 
    197 
    198 def _setup_func(funcopy, mock):
    199     funcopy.mock = mock
    200 
    201     # can't use isinstance with mocks
    202     if not _is_instance_mock(mock):
    203         return
    204 
    205     def assert_called_with(*args, **kwargs):
    206         return mock.assert_called_with(*args, **kwargs)
    207     def assert_called_once_with(*args, **kwargs):
    208         return mock.assert_called_once_with(*args, **kwargs)
    209     def assert_has_calls(*args, **kwargs):
    210         return mock.assert_has_calls(*args, **kwargs)
    211     def assert_any_call(*args, **kwargs):
    212         return mock.assert_any_call(*args, **kwargs)
    213     def reset_mock():
    214         funcopy.method_calls = _CallList()
    215         funcopy.mock_calls = _CallList()
    216         mock.reset_mock()
    217         ret = funcopy.return_value
    218         if _is_instance_mock(ret) and not ret is mock:
    219             ret.reset_mock()
    220 
    221     funcopy.called = False
    222     funcopy.call_count = 0
    223     funcopy.call_args = None
    224     funcopy.call_args_list = _CallList()
    225     funcopy.method_calls = _CallList()
    226     funcopy.mock_calls = _CallList()
    227 
    228     funcopy.return_value = mock.return_value
    229     funcopy.side_effect = mock.side_effect
    230     funcopy._mock_children = mock._mock_children
    231 
    232     funcopy.assert_called_with = assert_called_with
    233     funcopy.assert_called_once_with = assert_called_once_with
    234     funcopy.assert_has_calls = assert_has_calls
    235     funcopy.assert_any_call = assert_any_call
    236     funcopy.reset_mock = reset_mock
    237 
    238     mock._mock_delegate = funcopy
    239 
    240 
    241 def _is_magic(name):
    242     return '__%s__' % name[2:-2] == name
    243 
    244 
    245 class _SentinelObject(object):
    246     "A unique, named, sentinel object."
    247     def __init__(self, name):
    248         self.name = name
    249 
    250     def __repr__(self):
    251         return 'sentinel.%s' % self.name
    252 
    253 
    254 class _Sentinel(object):
    255     """Access attributes to return a named object, usable as a sentinel."""
    256     def __init__(self):
    257         self._sentinels = {}
    258 
    259     def __getattr__(self, name):
    260         if name == '__bases__':
    261             # Without this help(unittest.mock) raises an exception
    262             raise AttributeError
    263         return self._sentinels.setdefault(name, _SentinelObject(name))
    264 
    265 
    266 sentinel = _Sentinel()
    267 
    268 DEFAULT = sentinel.DEFAULT
    269 _missing = sentinel.MISSING
    270 _deleted = sentinel.DELETED
    271 
    272 
    273 def _copy(value):
    274     if type(value) in (dict, list, tuple, set):
    275         return type(value)(value)
    276     return value
    277 
    278 
    279 _allowed_names = set(
    280     [
    281         'return_value', '_mock_return_value', 'side_effect',
    282         '_mock_side_effect', '_mock_parent', '_mock_new_parent',
    283         '_mock_name', '_mock_new_name'
    284     ]
    285 )
    286 
    287 
    288 def _delegating_property(name):
    289     _allowed_names.add(name)
    290     _the_name = '_mock_' + name
    291     def _get(self, name=name, _the_name=_the_name):
    292         sig = self._mock_delegate
    293         if sig is None:
    294             return getattr(self, _the_name)
    295         return getattr(sig, name)
    296     def _set(self, value, name=name, _the_name=_the_name):
    297         sig = self._mock_delegate
    298         if sig is None:
    299             self.__dict__[_the_name] = value
    300         else:
    301             setattr(sig, name, value)
    302 
    303     return property(_get, _set)
    304 
    305 
    306 
    307 class _CallList(list):
    308 
    309     def __contains__(self, value):
    310         if not isinstance(value, list):
    311             return list.__contains__(self, value)
    312         len_value = len(value)
    313         len_self = len(self)
    314         if len_value > len_self:
    315             return False
    316 
    317         for i in range(0, len_self - len_value + 1):
    318             sub_list = self[i:i+len_value]
    319             if sub_list == value:
    320                 return True
    321         return False
    322 
    323     def __repr__(self):
    324         return pprint.pformat(list(self))
    325 
    326 
    327 def _check_and_set_parent(parent, value, name, new_name):
    328     if not _is_instance_mock(value):
    329         return False
    330     if ((value._mock_name or value._mock_new_name) or
    331         (value._mock_parent is not None) or
    332         (value._mock_new_parent is not None)):
    333         return False
    334 
    335     _parent = parent
    336     while _parent is not None:
    337         # setting a mock (value) as a child or return value of itself
    338         # should not modify the mock
    339         if _parent is value:
    340             return False
    341         _parent = _parent._mock_new_parent
    342 
    343     if new_name:
    344         value._mock_new_parent = parent
    345         value._mock_new_name = new_name
    346     if name:
    347         value._mock_parent = parent
    348         value._mock_name = name
    349     return True
    350 
    351 # Internal class to identify if we wrapped an iterator object or not.
    352 class _MockIter(object):
    353     def __init__(self, obj):
    354         self.obj = iter(obj)
    355     def __iter__(self):
    356         return self
    357     def __next__(self):
    358         return next(self.obj)
    359 
    360 class Base(object):
    361     _mock_return_value = DEFAULT
    362     _mock_side_effect = None
    363     def __init__(self, *args, **kwargs):
    364         pass
    365 
    366 
    367 
    368 class NonCallableMock(Base):
    369     """A non-callable version of `Mock`"""
    370 
    371     def __new__(cls, *args, **kw):
    372         # every instance has its own class
    373         # so we can create magic methods on the
    374         # class without stomping on other mocks
    375         new = type(cls.__name__, (cls,), {'__doc__': cls.__doc__})
    376         instance = object.__new__(new)
    377         return instance
    378 
    379 
    380     def __init__(
    381             self, spec=None, wraps=None, name=None, spec_set=None,
    382             parent=None, _spec_state=None, _new_name='', _new_parent=None,
    383             _spec_as_instance=False, _eat_self=None, unsafe=False, **kwargs
    384         ):
    385         if _new_parent is None:
    386             _new_parent = parent
    387 
    388         __dict__ = self.__dict__
    389         __dict__['_mock_parent'] = parent
    390         __dict__['_mock_name'] = name
    391         __dict__['_mock_new_name'] = _new_name
    392         __dict__['_mock_new_parent'] = _new_parent
    393 
    394         if spec_set is not None:
    395             spec = spec_set
    396             spec_set = True
    397         if _eat_self is None:
    398             _eat_self = parent is not None
    399 
    400         self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    401 
    402         __dict__['_mock_children'] = {}
    403         __dict__['_mock_wraps'] = wraps
    404         __dict__['_mock_delegate'] = None
    405 
    406         __dict__['_mock_called'] = False
    407         __dict__['_mock_call_args'] = None
    408         __dict__['_mock_call_count'] = 0
    409         __dict__['_mock_call_args_list'] = _CallList()
    410         __dict__['_mock_mock_calls'] = _CallList()
    411 
    412         __dict__['method_calls'] = _CallList()
    413         __dict__['_mock_unsafe'] = unsafe
    414 
    415         if kwargs:
    416             self.configure_mock(**kwargs)
    417 
    418         _safe_super(NonCallableMock, self).__init__(
    419             spec, wraps, name, spec_set, parent,
    420             _spec_state
    421         )
    422 
    423 
    424     def attach_mock(self, mock, attribute):
    425         """
    426         Attach a mock as an attribute of this one, replacing its name and
    427         parent. Calls to the attached mock will be recorded in the
    428         `method_calls` and `mock_calls` attributes of this one."""
    429         mock._mock_parent = None
    430         mock._mock_new_parent = None
    431         mock._mock_name = ''
    432         mock._mock_new_name = None
    433 
    434         setattr(self, attribute, mock)
    435 
    436 
    437     def mock_add_spec(self, spec, spec_set=False):
    438         """Add a spec to a mock. `spec` can either be an object or a
    439         list of strings. Only attributes on the `spec` can be fetched as
    440         attributes from the mock.
    441 
    442         If `spec_set` is True then only attributes on the spec can be set."""
    443         self._mock_add_spec(spec, spec_set)
    444 
    445 
    446     def _mock_add_spec(self, spec, spec_set, _spec_as_instance=False,
    447                        _eat_self=False):
    448         _spec_class = None
    449         _spec_signature = None
    450 
    451         if spec is not None and not _is_list(spec):
    452             if isinstance(spec, type):
    453                 _spec_class = spec
    454             else:
    455                 _spec_class = _get_class(spec)
    456             res = _get_signature_object(spec,
    457                                         _spec_as_instance, _eat_self)
    458             _spec_signature = res and res[1]
    459 
    460             spec = dir(spec)
    461 
    462         __dict__ = self.__dict__
    463         __dict__['_spec_class'] = _spec_class
    464         __dict__['_spec_set'] = spec_set
    465         __dict__['_spec_signature'] = _spec_signature
    466         __dict__['_mock_methods'] = spec
    467 
    468 
    469     def __get_return_value(self):
    470         ret = self._mock_return_value
    471         if self._mock_delegate is not None:
    472             ret = self._mock_delegate.return_value
    473 
    474         if ret is DEFAULT:
    475             ret = self._get_child_mock(
    476                 _new_parent=self, _new_name='()'
    477             )
    478             self.return_value = ret
    479         return ret
    480 
    481 
    482     def __set_return_value(self, value):
    483         if self._mock_delegate is not None:
    484             self._mock_delegate.return_value = value
    485         else:
    486             self._mock_return_value = value
    487             _check_and_set_parent(self, value, None, '()')
    488 
    489     __return_value_doc = "The value to be returned when the mock is called."
    490     return_value = property(__get_return_value, __set_return_value,
    491                             __return_value_doc)
    492 
    493 
    494     @property
    495     def __class__(self):
    496         if self._spec_class is None:
    497             return type(self)
    498         return self._spec_class
    499 
    500     called = _delegating_property('called')
    501     call_count = _delegating_property('call_count')
    502     call_args = _delegating_property('call_args')
    503     call_args_list = _delegating_property('call_args_list')
    504     mock_calls = _delegating_property('mock_calls')
    505 
    506 
    507     def __get_side_effect(self):
    508         delegated = self._mock_delegate
    509         if delegated is None:
    510             return self._mock_side_effect
    511         sf = delegated.side_effect
    512         if sf is not None and not callable(sf) and not isinstance(sf, _MockIter):
    513             sf = _MockIter(sf)
    514             delegated.side_effect = sf
    515         return sf
    516 
    517     def __set_side_effect(self, value):
    518         value = _try_iter(value)
    519         delegated = self._mock_delegate
    520         if delegated is None:
    521             self._mock_side_effect = value
    522         else:
    523             delegated.side_effect = value
    524 
    525     side_effect = property(__get_side_effect, __set_side_effect)
    526 
    527 
    528     def reset_mock(self):
    529         "Restore the mock object to its initial state."
    530         self.called = False
    531         self.call_args = None
    532         self.call_count = 0
    533         self.mock_calls = _CallList()
    534         self.call_args_list = _CallList()
    535         self.method_calls = _CallList()
    536 
    537         for child in self._mock_children.values():
    538             if isinstance(child, _SpecState):
    539                 continue
    540             child.reset_mock()
    541 
    542         ret = self._mock_return_value
    543         if _is_instance_mock(ret) and ret is not self:
    544             ret.reset_mock()
    545 
    546 
    547     def configure_mock(self, **kwargs):
    548         """Set attributes on the mock through keyword arguments.
    549 
    550         Attributes plus return values and side effects can be set on child
    551         mocks using standard dot notation and unpacking a dictionary in the
    552         method call:
    553 
    554         >>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError}
    555         >>> mock.configure_mock(**attrs)"""
    556         for arg, val in sorted(kwargs.items(),
    557                                # we sort on the number of dots so that
    558                                # attributes are set before we set attributes on
    559                                # attributes
    560                                key=lambda entry: entry[0].count('.')):
    561             args = arg.split('.')
    562             final = args.pop()
    563             obj = self
    564             for entry in args:
    565                 obj = getattr(obj, entry)
    566             setattr(obj, final, val)
    567 
    568 
    569     def __getattr__(self, name):
    570         if name in {'_mock_methods', '_mock_unsafe'}:
    571             raise AttributeError(name)
    572         elif self._mock_methods is not None:
    573             if name not in self._mock_methods or name in _all_magics:
    574                 raise AttributeError("Mock object has no attribute %r" % name)
    575         elif _is_magic(name):
    576             raise AttributeError(name)
    577         if not self._mock_unsafe:
    578             if name.startswith(('assert', 'assret')):
    579                 raise AttributeError(name)
    580 
    581         result = self._mock_children.get(name)
    582         if result is _deleted:
    583             raise AttributeError(name)
    584         elif result is None:
    585             wraps = None
    586             if self._mock_wraps is not None:
    587                 # XXXX should we get the attribute without triggering code
    588                 # execution?
    589                 wraps = getattr(self._mock_wraps, name)
    590 
    591             result = self._get_child_mock(
    592                 parent=self, name=name, wraps=wraps, _new_name=name,
    593                 _new_parent=self
    594             )
    595             self._mock_children[name]  = result
    596 
    597         elif isinstance(result, _SpecState):
    598             result = create_autospec(
    599                 result.spec, result.spec_set, result.instance,
    600                 result.parent, result.name
    601             )
    602             self._mock_children[name]  = result
    603 
    604         return result
    605 
    606 
    607     def __repr__(self):
    608         _name_list = [self._mock_new_name]
    609         _parent = self._mock_new_parent
    610         last = self
    611 
    612         dot = '.'
    613         if _name_list == ['()']:
    614             dot = ''
    615         seen = set()
    616         while _parent is not None:
    617             last = _parent
    618 
    619             _name_list.append(_parent._mock_new_name + dot)
    620             dot = '.'
    621             if _parent._mock_new_name == '()':
    622                 dot = ''
    623 
    624             _parent = _parent._mock_new_parent
    625 
    626             # use ids here so as not to call __hash__ on the mocks
    627             if id(_parent) in seen:
    628                 break
    629             seen.add(id(_parent))
    630 
    631         _name_list = list(reversed(_name_list))
    632         _first = last._mock_name or 'mock'
    633         if len(_name_list) > 1:
    634             if _name_list[1] not in ('()', '().'):
    635                 _first += '.'
    636         _name_list[0] = _first
    637         name = ''.join(_name_list)
    638 
    639         name_string = ''
    640         if name not in ('mock', 'mock.'):
    641             name_string = ' name=%r' % name
    642 
    643         spec_string = ''
    644         if self._spec_class is not None:
    645             spec_string = ' spec=%r'
    646             if self._spec_set:
    647                 spec_string = ' spec_set=%r'
    648             spec_string = spec_string % self._spec_class.__name__
    649         return "<%s%s%s id='%s'>" % (
    650             type(self).__name__,
    651             name_string,
    652             spec_string,
    653             id(self)
    654         )
    655 
    656 
    657     def __dir__(self):
    658         """Filter the output of `dir(mock)` to only useful members."""
    659         if not FILTER_DIR:
    660             return object.__dir__(self)
    661 
    662         extras = self._mock_methods or []
    663         from_type = dir(type(self))
    664         from_dict = list(self.__dict__)
    665 
    666         from_type = [e for e in from_type if not e.startswith('_')]
    667         from_dict = [e for e in from_dict if not e.startswith('_') or
    668                      _is_magic(e)]
    669         return sorted(set(extras + from_type + from_dict +
    670                           list(self._mock_children)))
    671 
    672 
    673     def __setattr__(self, name, value):
    674         if name in _allowed_names:
    675             # property setters go through here
    676             return object.__setattr__(self, name, value)
    677         elif (self._spec_set and self._mock_methods is not None and
    678             name not in self._mock_methods and
    679             name not in self.__dict__):
    680             raise AttributeError("Mock object has no attribute '%s'" % name)
    681         elif name in _unsupported_magics:
    682             msg = 'Attempting to set unsupported magic method %r.' % name
    683             raise AttributeError(msg)
    684         elif name in _all_magics:
    685             if self._mock_methods is not None and name not in self._mock_methods:
    686                 raise AttributeError("Mock object has no attribute '%s'" % name)
    687 
    688             if not _is_instance_mock(value):
    689                 setattr(type(self), name, _get_method(name, value))
    690                 original = value
    691                 value = lambda *args, **kw: original(self, *args, **kw)
    692             else:
    693                 # only set _new_name and not name so that mock_calls is tracked
    694                 # but not method calls
    695                 _check_and_set_parent(self, value, None, name)
    696                 setattr(type(self), name, value)
    697                 self._mock_children[name] = value
    698         elif name == '__class__':
    699             self._spec_class = value
    700             return
    701         else:
    702             if _check_and_set_parent(self, value, name, name):
    703                 self._mock_children[name] = value
    704         return object.__setattr__(self, name, value)
    705 
    706 
    707     def __delattr__(self, name):
    708         if name in _all_magics and name in type(self).__dict__:
    709             delattr(type(self), name)
    710             if name not in self.__dict__:
    711                 # for magic methods that are still MagicProxy objects and
    712                 # not set on the instance itself
    713                 return
    714 
    715         if name in self.__dict__:
    716             object.__delattr__(self, name)
    717 
    718         obj = self._mock_children.get(name, _missing)
    719         if obj is _deleted:
    720             raise AttributeError(name)
    721         if obj is not _missing:
    722             del self._mock_children[name]
    723         self._mock_children[name] = _deleted
    724 
    725 
    726     def _format_mock_call_signature(self, args, kwargs):
    727         name = self._mock_name or 'mock'
    728         return _format_call_signature(name, args, kwargs)
    729 
    730 
    731     def _format_mock_failure_message(self, args, kwargs):
    732         message = 'Expected call: %s\nActual call: %s'
    733         expected_string = self._format_mock_call_signature(args, kwargs)
    734         call_args = self.call_args
    735         if len(call_args) == 3:
    736             call_args = call_args[1:]
    737         actual_string = self._format_mock_call_signature(*call_args)
    738         return message % (expected_string, actual_string)
    739 
    740 
    741     def _call_matcher(self, _call):
    742         """
    743         Given a call (or simply an (args, kwargs) tuple), return a
    744         comparison key suitable for matching with other calls.
    745         This is a best effort method which relies on the spec's signature,
    746         if available, or falls back on the arguments themselves.
    747         """
    748         sig = self._spec_signature
    749         if sig is not None:
    750             if len(_call) == 2:
    751                 name = ''
    752                 args, kwargs = _call
    753             else:
    754                 name, args, kwargs = _call
    755             try:
    756                 return name, sig.bind(*args, **kwargs)
    757             except TypeError as e:
    758                 return e.with_traceback(None)
    759         else:
    760             return _call
    761 
    762     def assert_not_called(_mock_self):
    763         """assert that the mock was never called.
    764         """
    765         self = _mock_self
    766         if self.call_count != 0:
    767             msg = ("Expected '%s' to not have been called. Called %s times." %
    768                    (self._mock_name or 'mock', self.call_count))
    769             raise AssertionError(msg)
    770 
    771     def assert_called_with(_mock_self, *args, **kwargs):
    772         """assert that the mock was called with the specified arguments.
    773 
    774         Raises an AssertionError if the args and keyword args passed in are
    775         different to the last call to the mock."""
    776         self = _mock_self
    777         if self.call_args is None:
    778             expected = self._format_mock_call_signature(args, kwargs)
    779             raise AssertionError('Expected call: %s\nNot called' % (expected,))
    780 
    781         def _error_message():
    782             msg = self._format_mock_failure_message(args, kwargs)
    783             return msg
    784         expected = self._call_matcher((args, kwargs))
    785         actual = self._call_matcher(self.call_args)
    786         if expected != actual:
    787             raise AssertionError(_error_message())
    788 
    789 
    790     def assert_called_once_with(_mock_self, *args, **kwargs):
    791         """assert that the mock was called exactly once and with the specified
    792         arguments."""
    793         self = _mock_self
    794         if not self.call_count == 1:
    795             msg = ("Expected '%s' to be called once. Called %s times." %
    796                    (self._mock_name or 'mock', self.call_count))
    797             raise AssertionError(msg)
    798         return self.assert_called_with(*args, **kwargs)
    799 
    800 
    801     def assert_has_calls(self, calls, any_order=False):
    802         """assert the mock has been called with the specified calls.
    803         The `mock_calls` list is checked for the calls.
    804 
    805         If `any_order` is False (the default) then the calls must be
    806         sequential. There can be extra calls before or after the
    807         specified calls.
    808 
    809         If `any_order` is True then the calls can be in any order, but
    810         they must all appear in `mock_calls`."""
    811         expected = [self._call_matcher(c) for c in calls]
    812         all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)
    813         if not any_order:
    814             if expected not in all_calls:
    815                 raise AssertionError(
    816                     'Calls not found.\nExpected: %r\n'
    817                     'Actual: %r' % (calls, self.mock_calls)
    818                 )
    819             return
    820 
    821         all_calls = list(all_calls)
    822 
    823         not_found = []
    824         for kall in expected:
    825             try:
    826                 all_calls.remove(kall)
    827             except ValueError:
    828                 not_found.append(kall)
    829         if not_found:
    830             raise AssertionError(
    831                 '%r not all found in call list' % (tuple(not_found),)
    832             )
    833 
    834 
    835     def assert_any_call(self, *args, **kwargs):
    836         """assert the mock has been called with the specified arguments.
    837 
    838         The assert passes if the mock has *ever* been called, unlike
    839         `assert_called_with` and `assert_called_once_with` that only pass if
    840         the call is the most recent one."""
    841         expected = self._call_matcher((args, kwargs))
    842         actual = [self._call_matcher(c) for c in self.call_args_list]
    843         if expected not in actual:
    844             expected_string = self._format_mock_call_signature(args, kwargs)
    845             raise AssertionError(
    846                 '%s call not found' % expected_string
    847             )
    848 
    849 
    850     def _get_child_mock(self, **kw):
    851         """Create the child mocks for attributes and return value.
    852         By default child mocks will be the same type as the parent.
    853         Subclasses of Mock may want to override this to customize the way
    854         child mocks are made.
    855 
    856         For non-callable mocks the callable variant will be used (rather than
    857         any custom subclass)."""
    858         _type = type(self)
    859         if not issubclass(_type, CallableMixin):
    860             if issubclass(_type, NonCallableMagicMock):
    861                 klass = MagicMock
    862             elif issubclass(_type, NonCallableMock) :
    863                 klass = Mock
    864         else:
    865             klass = _type.__mro__[1]
    866         return klass(**kw)
    867 
    868 
    869 
    870 def _try_iter(obj):
    871     if obj is None:
    872         return obj
    873     if _is_exception(obj):
    874         return obj
    875     if _callable(obj):
    876         return obj
    877     try:
    878         return iter(obj)
    879     except TypeError:
    880         # XXXX backwards compatibility
    881         # but this will blow up on first call - so maybe we should fail early?
    882         return obj
    883 
    884 
    885 
    886 class CallableMixin(Base):
    887 
    888     def __init__(self, spec=None, side_effect=None, return_value=DEFAULT,
    889                  wraps=None, name=None, spec_set=None, parent=None,
    890                  _spec_state=None, _new_name='', _new_parent=None, **kwargs):
    891         self.__dict__['_mock_return_value'] = return_value
    892 
    893         _safe_super(CallableMixin, self).__init__(
    894             spec, wraps, name, spec_set, parent,
    895             _spec_state, _new_name, _new_parent, **kwargs
    896         )
    897 
    898         self.side_effect = side_effect
    899 
    900 
    901     def _mock_check_sig(self, *args, **kwargs):
    902         # stub method that can be replaced with one with a specific signature
    903         pass
    904 
    905 
    906     def __call__(_mock_self, *args, **kwargs):
    907         # can't use self in-case a function / method we are mocking uses self
    908         # in the signature
    909         _mock_self._mock_check_sig(*args, **kwargs)
    910         return _mock_self._mock_call(*args, **kwargs)
    911 
    912 
    913     def _mock_call(_mock_self, *args, **kwargs):
    914         self = _mock_self
    915         self.called = True
    916         self.call_count += 1
    917         _new_name = self._mock_new_name
    918         _new_parent = self._mock_new_parent
    919 
    920         _call = _Call((args, kwargs), two=True)
    921         self.call_args = _call
    922         self.call_args_list.append(_call)
    923         self.mock_calls.append(_Call(('', args, kwargs)))
    924 
    925         seen = set()
    926         skip_next_dot = _new_name == '()'
    927         do_method_calls = self._mock_parent is not None
    928         name = self._mock_name
    929         while _new_parent is not None:
    930             this_mock_call = _Call((_new_name, args, kwargs))
    931             if _new_parent._mock_new_name:
    932                 dot = '.'
    933                 if skip_next_dot:
    934                     dot = ''
    935 
    936                 skip_next_dot = False
    937                 if _new_parent._mock_new_name == '()':
    938                     skip_next_dot = True
    939 
    940                 _new_name = _new_parent._mock_new_name + dot + _new_name
    941 
    942             if do_method_calls:
    943                 if _new_name == name:
    944                     this_method_call = this_mock_call
    945                 else:
    946                     this_method_call = _Call((name, args, kwargs))
    947                 _new_parent.method_calls.append(this_method_call)
    948 
    949                 do_method_calls = _new_parent._mock_parent is not None
    950                 if do_method_calls:
    951                     name = _new_parent._mock_name + '.' + name
    952 
    953             _new_parent.mock_calls.append(this_mock_call)
    954             _new_parent = _new_parent._mock_new_parent
    955 
    956             # use ids here so as not to call __hash__ on the mocks
    957             _new_parent_id = id(_new_parent)
    958             if _new_parent_id in seen:
    959                 break
    960             seen.add(_new_parent_id)
    961 
    962         ret_val = DEFAULT
    963         effect = self.side_effect
    964         if effect is not None:
    965             if _is_exception(effect):
    966                 raise effect
    967 
    968             if not _callable(effect):
    969                 result = next(effect)
    970                 if _is_exception(result):
    971                     raise result
    972                 if result is DEFAULT:
    973                     result = self.return_value
    974                 return result
    975 
    976             ret_val = effect(*args, **kwargs)
    977 
    978         if (self._mock_wraps is not None and
    979              self._mock_return_value is DEFAULT):
    980             return self._mock_wraps(*args, **kwargs)
    981         if ret_val is DEFAULT:
    982             ret_val = self.return_value
    983         return ret_val
    984 
    985 
    986 
    987 class Mock(CallableMixin, NonCallableMock):
    988     """
    989     Create a new `Mock` object. `Mock` takes several optional arguments
    990     that specify the behaviour of the Mock object:
    991 
    992     * `spec`: This can be either a list of strings or an existing object (a
    993       class or instance) that acts as the specification for the mock object. If
    994       you pass in an object then a list of strings is formed by calling dir on
    995       the object (excluding unsupported magic attributes and methods). Accessing
    996       any attribute not in this list will raise an `AttributeError`.
    997 
    998       If `spec` is an object (rather than a list of strings) then
    999       `mock.__class__` returns the class of the spec object. This allows mocks
   1000       to pass `isinstance` tests.
   1001 
   1002     * `spec_set`: A stricter variant of `spec`. If used, attempting to *set*
   1003       or get an attribute on the mock that isn't on the object passed as
   1004       `spec_set` will raise an `AttributeError`.
   1005 
   1006     * `side_effect`: A function to be called whenever the Mock is called. See
   1007       the `side_effect` attribute. Useful for raising exceptions or
   1008       dynamically changing return values. The function is called with the same
   1009       arguments as the mock, and unless it returns `DEFAULT`, the return
   1010       value of this function is used as the return value.
   1011 
   1012       If `side_effect` is an iterable then each call to the mock will return
   1013       the next value from the iterable. If any of the members of the iterable
   1014       are exceptions they will be raised instead of returned.
   1015 
   1016     * `return_value`: The value returned when the mock is called. By default
   1017       this is a new Mock (created on first access). See the
   1018       `return_value` attribute.
   1019 
   1020     * `wraps`: Item for the mock object to wrap. If `wraps` is not None then
   1021       calling the Mock will pass the call through to the wrapped object
   1022       (returning the real result). Attribute access on the mock will return a
   1023       Mock object that wraps the corresponding attribute of the wrapped object
   1024       (so attempting to access an attribute that doesn't exist will raise an
   1025       `AttributeError`).
   1026 
   1027       If the mock has an explicit `return_value` set then calls are not passed
   1028       to the wrapped object and the `return_value` is returned instead.
   1029 
   1030     * `name`: If the mock has a name then it will be used in the repr of the
   1031       mock. This can be useful for debugging. The name is propagated to child
   1032       mocks.
   1033 
   1034     Mocks can also be called with arbitrary keyword arguments. These will be
   1035     used to set attributes on the mock after it is created.
   1036     """
   1037 
   1038 
   1039 
   1040 def _dot_lookup(thing, comp, import_path):
   1041     try:
   1042         return getattr(thing, comp)
   1043     except AttributeError:
   1044         __import__(import_path)
   1045         return getattr(thing, comp)
   1046 
   1047 
   1048 def _importer(target):
   1049     components = target.split('.')
   1050     import_path = components.pop(0)
   1051     thing = __import__(import_path)
   1052 
   1053     for comp in components:
   1054         import_path += ".%s" % comp
   1055         thing = _dot_lookup(thing, comp, import_path)
   1056     return thing
   1057 
   1058 
   1059 def _is_started(patcher):
   1060     # XXXX horrible
   1061     return hasattr(patcher, 'is_local')
   1062 
   1063 
   1064 class _patch(object):
   1065 
   1066     attribute_name = None
   1067     _active_patches = []
   1068 
   1069     def __init__(
   1070             self, getter, attribute, new, spec, create,
   1071             spec_set, autospec, new_callable, kwargs
   1072         ):
   1073         if new_callable is not None:
   1074             if new is not DEFAULT:
   1075                 raise ValueError(
   1076                     "Cannot use 'new' and 'new_callable' together"
   1077                 )
   1078             if autospec is not None:
   1079                 raise ValueError(
   1080                     "Cannot use 'autospec' and 'new_callable' together"
   1081                 )
   1082 
   1083         self.getter = getter
   1084         self.attribute = attribute
   1085         self.new = new
   1086         self.new_callable = new_callable
   1087         self.spec = spec
   1088         self.create = create
   1089         self.has_local = False
   1090         self.spec_set = spec_set
   1091         self.autospec = autospec
   1092         self.kwargs = kwargs
   1093         self.additional_patchers = []
   1094 
   1095 
   1096     def copy(self):
   1097         patcher = _patch(
   1098             self.getter, self.attribute, self.new, self.spec,
   1099             self.create, self.spec_set,
   1100             self.autospec, self.new_callable, self.kwargs
   1101         )
   1102         patcher.attribute_name = self.attribute_name
   1103         patcher.additional_patchers = [
   1104             p.copy() for p in self.additional_patchers
   1105         ]
   1106         return patcher
   1107 
   1108 
   1109     def __call__(self, func):
   1110         if isinstance(func, type):
   1111             return self.decorate_class(func)
   1112         return self.decorate_callable(func)
   1113 
   1114 
   1115     def decorate_class(self, klass):
   1116         for attr in dir(klass):
   1117             if not attr.startswith(patch.TEST_PREFIX):
   1118                 continue
   1119 
   1120             attr_value = getattr(klass, attr)
   1121             if not hasattr(attr_value, "__call__"):
   1122                 continue
   1123 
   1124             patcher = self.copy()
   1125             setattr(klass, attr, patcher(attr_value))
   1126         return klass
   1127 
   1128 
   1129     def decorate_callable(self, func):
   1130         if hasattr(func, 'patchings'):
   1131             func.patchings.append(self)
   1132             return func
   1133 
   1134         @wraps(func)
   1135         def patched(*args, **keywargs):
   1136             extra_args = []
   1137             entered_patchers = []
   1138 
   1139             exc_info = tuple()
   1140             try:
   1141                 for patching in patched.patchings:
   1142                     arg = patching.__enter__()
   1143                     entered_patchers.append(patching)
   1144                     if patching.attribute_name is not None:
   1145                         keywargs.update(arg)
   1146                     elif patching.new is DEFAULT:
   1147                         extra_args.append(arg)
   1148 
   1149                 args += tuple(extra_args)
   1150                 return func(*args, **keywargs)
   1151             except:
   1152                 if (patching not in entered_patchers and
   1153                     _is_started(patching)):
   1154                     # the patcher may have been started, but an exception
   1155                     # raised whilst entering one of its additional_patchers
   1156                     entered_patchers.append(patching)
   1157                 # Pass the exception to __exit__
   1158                 exc_info = sys.exc_info()
   1159                 # re-raise the exception
   1160                 raise
   1161             finally:
   1162                 for patching in reversed(entered_patchers):
   1163                     patching.__exit__(*exc_info)
   1164 
   1165         patched.patchings = [self]
   1166         return patched
   1167 
   1168 
   1169     def get_original(self):
   1170         target = self.getter()
   1171         name = self.attribute
   1172 
   1173         original = DEFAULT
   1174         local = False
   1175 
   1176         try:
   1177             original = target.__dict__[name]
   1178         except (AttributeError, KeyError):
   1179             original = getattr(target, name, DEFAULT)
   1180         else:
   1181             local = True
   1182 
   1183         if name in _builtins and isinstance(target, ModuleType):
   1184             self.create = True
   1185 
   1186         if not self.create and original is DEFAULT:
   1187             raise AttributeError(
   1188                 "%s does not have the attribute %r" % (target, name)
   1189             )
   1190         return original, local
   1191 
   1192 
   1193     def __enter__(self):
   1194         """Perform the patch."""
   1195         new, spec, spec_set = self.new, self.spec, self.spec_set
   1196         autospec, kwargs = self.autospec, self.kwargs
   1197         new_callable = self.new_callable
   1198         self.target = self.getter()
   1199 
   1200         # normalise False to None
   1201         if spec is False:
   1202             spec = None
   1203         if spec_set is False:
   1204             spec_set = None
   1205         if autospec is False:
   1206             autospec = None
   1207 
   1208         if spec is not None and autospec is not None:
   1209             raise TypeError("Can't specify spec and autospec")
   1210         if ((spec is not None or autospec is not None) and
   1211             spec_set not in (True, None)):
   1212             raise TypeError("Can't provide explicit spec_set *and* spec or autospec")
   1213 
   1214         original, local = self.get_original()
   1215 
   1216         if new is DEFAULT and autospec is None:
   1217             inherit = False
   1218             if spec is True:
   1219                 # set spec to the object we are replacing
   1220                 spec = original
   1221                 if spec_set is True:
   1222                     spec_set = original
   1223                     spec = None
   1224             elif spec is not None:
   1225                 if spec_set is True:
   1226                     spec_set = spec
   1227                     spec = None
   1228             elif spec_set is True:
   1229                 spec_set = original
   1230 
   1231             if spec is not None or spec_set is not None:
   1232                 if original is DEFAULT:
   1233                     raise TypeError("Can't use 'spec' with create=True")
   1234                 if isinstance(original, type):
   1235                     # If we're patching out a class and there is a spec
   1236                     inherit = True
   1237 
   1238             Klass = MagicMock
   1239             _kwargs = {}
   1240             if new_callable is not None:
   1241                 Klass = new_callable
   1242             elif spec is not None or spec_set is not None:
   1243                 this_spec = spec
   1244                 if spec_set is not None:
   1245                     this_spec = spec_set
   1246                 if _is_list(this_spec):
   1247                     not_callable = '__call__' not in this_spec
   1248                 else:
   1249                     not_callable = not callable(this_spec)
   1250                 if not_callable:
   1251                     Klass = NonCallableMagicMock
   1252 
   1253             if spec is not None:
   1254                 _kwargs['spec'] = spec
   1255             if spec_set is not None:
   1256                 _kwargs['spec_set'] = spec_set
   1257 
   1258             # add a name to mocks
   1259             if (isinstance(Klass, type) and
   1260                 issubclass(Klass, NonCallableMock) and self.attribute):
   1261                 _kwargs['name'] = self.attribute
   1262 
   1263             _kwargs.update(kwargs)
   1264             new = Klass(**_kwargs)
   1265 
   1266             if inherit and _is_instance_mock(new):
   1267                 # we can only tell if the instance should be callable if the
   1268                 # spec is not a list
   1269                 this_spec = spec
   1270                 if spec_set is not None:
   1271                     this_spec = spec_set
   1272                 if (not _is_list(this_spec) and not
   1273                     _instance_callable(this_spec)):
   1274                     Klass = NonCallableMagicMock
   1275 
   1276                 _kwargs.pop('name')
   1277                 new.return_value = Klass(_new_parent=new, _new_name='()',
   1278                                          **_kwargs)
   1279         elif autospec is not None:
   1280             # spec is ignored, new *must* be default, spec_set is treated
   1281             # as a boolean. Should we check spec is not None and that spec_set
   1282             # is a bool?
   1283             if new is not DEFAULT:
   1284                 raise TypeError(
   1285                     "autospec creates the mock for you. Can't specify "
   1286                     "autospec and new."
   1287                 )
   1288             if original is DEFAULT:
   1289                 raise TypeError("Can't use 'autospec' with create=True")
   1290             spec_set = bool(spec_set)
   1291             if autospec is True:
   1292                 autospec = original
   1293 
   1294             new = create_autospec(autospec, spec_set=spec_set,
   1295                                   _name=self.attribute, **kwargs)
   1296         elif kwargs:
   1297             # can't set keyword args when we aren't creating the mock
   1298             # XXXX If new is a Mock we could call new.configure_mock(**kwargs)
   1299             raise TypeError("Can't pass kwargs to a mock we aren't creating")
   1300 
   1301         new_attr = new
   1302 
   1303         self.temp_original = original
   1304         self.is_local = local
   1305         setattr(self.target, self.attribute, new_attr)
   1306         if self.attribute_name is not None:
   1307             extra_args = {}
   1308             if self.new is DEFAULT:
   1309                 extra_args[self.attribute_name] =  new
   1310             for patching in self.additional_patchers:
   1311                 arg = patching.__enter__()
   1312                 if patching.new is DEFAULT:
   1313                     extra_args.update(arg)
   1314             return extra_args
   1315 
   1316         return new
   1317 
   1318 
   1319     def __exit__(self, *exc_info):
   1320         """Undo the patch."""
   1321         if not _is_started(self):
   1322             raise RuntimeError('stop called on unstarted patcher')
   1323 
   1324         if self.is_local and self.temp_original is not DEFAULT:
   1325             setattr(self.target, self.attribute, self.temp_original)
   1326         else:
   1327             delattr(self.target, self.attribute)
   1328             if not self.create and not hasattr(self.target, self.attribute):
   1329                 # needed for proxy objects like django settings
   1330                 setattr(self.target, self.attribute, self.temp_original)
   1331 
   1332         del self.temp_original
   1333         del self.is_local
   1334         del self.target
   1335         for patcher in reversed(self.additional_patchers):
   1336             if _is_started(patcher):
   1337                 patcher.__exit__(*exc_info)
   1338 
   1339 
   1340     def start(self):
   1341         """Activate a patch, returning any created mock."""
   1342         result = self.__enter__()
   1343         self._active_patches.append(self)
   1344         return result
   1345 
   1346 
   1347     def stop(self):
   1348         """Stop an active patch."""
   1349         try:
   1350             self._active_patches.remove(self)
   1351         except ValueError:
   1352             # If the patch hasn't been started this will fail
   1353             pass
   1354 
   1355         return self.__exit__()
   1356 
   1357 
   1358 
   1359 def _get_target(target):
   1360     try:
   1361         target, attribute = target.rsplit('.', 1)
   1362     except (TypeError, ValueError):
   1363         raise TypeError("Need a valid target to patch. You supplied: %r" %
   1364                         (target,))
   1365     getter = lambda: _importer(target)
   1366     return getter, attribute
   1367 
   1368 
   1369 def _patch_object(
   1370         target, attribute, new=DEFAULT, spec=None,
   1371         create=False, spec_set=None, autospec=None,
   1372         new_callable=None, **kwargs
   1373     ):
   1374     """
   1375     patch the named member (`attribute`) on an object (`target`) with a mock
   1376     object.
   1377 
   1378     `patch.object` can be used as a decorator, class decorator or a context
   1379     manager. Arguments `new`, `spec`, `create`, `spec_set`,
   1380     `autospec` and `new_callable` have the same meaning as for `patch`. Like
   1381     `patch`, `patch.object` takes arbitrary keyword arguments for configuring
   1382     the mock object it creates.
   1383 
   1384     When used as a class decorator `patch.object` honours `patch.TEST_PREFIX`
   1385     for choosing which methods to wrap.
   1386     """
   1387     getter = lambda: target
   1388     return _patch(
   1389         getter, attribute, new, spec, create,
   1390         spec_set, autospec, new_callable, kwargs
   1391     )
   1392 
   1393 
   1394 def _patch_multiple(target, spec=None, create=False, spec_set=None,
   1395                     autospec=None, new_callable=None, **kwargs):
   1396     """Perform multiple patches in a single call. It takes the object to be
   1397     patched (either as an object or a string to fetch the object by importing)
   1398     and keyword arguments for the patches::
   1399 
   1400         with patch.multiple(settings, FIRST_PATCH='one', SECOND_PATCH='two'):
   1401             ...
   1402 
   1403     Use `DEFAULT` as the value if you want `patch.multiple` to create
   1404     mocks for you. In this case the created mocks are passed into a decorated
   1405     function by keyword, and a dictionary is returned when `patch.multiple` is
   1406     used as a context manager.
   1407 
   1408     `patch.multiple` can be used as a decorator, class decorator or a context
   1409     manager. The arguments `spec`, `spec_set`, `create`,
   1410     `autospec` and `new_callable` have the same meaning as for `patch`. These
   1411     arguments will be applied to *all* patches done by `patch.multiple`.
   1412 
   1413     When used as a class decorator `patch.multiple` honours `patch.TEST_PREFIX`
   1414     for choosing which methods to wrap.
   1415     """
   1416     if type(target) is str:
   1417         getter = lambda: _importer(target)
   1418     else:
   1419         getter = lambda: target
   1420 
   1421     if not kwargs:
   1422         raise ValueError(
   1423             'Must supply at least one keyword argument with patch.multiple'
   1424         )
   1425     # need to wrap in a list for python 3, where items is a view
   1426     items = list(kwargs.items())
   1427     attribute, new = items[0]
   1428     patcher = _patch(
   1429         getter, attribute, new, spec, create, spec_set,
   1430         autospec, new_callable, {}
   1431     )
   1432     patcher.attribute_name = attribute
   1433     for attribute, new in items[1:]:
   1434         this_patcher = _patch(
   1435             getter, attribute, new, spec, create, spec_set,
   1436             autospec, new_callable, {}
   1437         )
   1438         this_patcher.attribute_name = attribute
   1439         patcher.additional_patchers.append(this_patcher)
   1440     return patcher
   1441 
   1442 
   1443 def patch(
   1444         target, new=DEFAULT, spec=None, create=False,
   1445         spec_set=None, autospec=None, new_callable=None, **kwargs
   1446     ):
   1447     """
   1448     `patch` acts as a function decorator, class decorator or a context
   1449     manager. Inside the body of the function or with statement, the `target`
   1450     is patched with a `new` object. When the function/with statement exits
   1451     the patch is undone.
   1452 
   1453     If `new` is omitted, then the target is replaced with a
   1454     `MagicMock`. If `patch` is used as a decorator and `new` is
   1455     omitted, the created mock is passed in as an extra argument to the
   1456     decorated function. If `patch` is used as a context manager the created
   1457     mock is returned by the context manager.
   1458 
   1459     `target` should be a string in the form `'package.module.ClassName'`. The
   1460     `target` is imported and the specified object replaced with the `new`
   1461     object, so the `target` must be importable from the environment you are
   1462     calling `patch` from. The target is imported when the decorated function
   1463     is executed, not at decoration time.
   1464 
   1465     The `spec` and `spec_set` keyword arguments are passed to the `MagicMock`
   1466     if patch is creating one for you.
   1467 
   1468     In addition you can pass `spec=True` or `spec_set=True`, which causes
   1469     patch to pass in the object being mocked as the spec/spec_set object.
   1470 
   1471     `new_callable` allows you to specify a different class, or callable object,
   1472     that will be called to create the `new` object. By default `MagicMock` is
   1473     used.
   1474 
   1475     A more powerful form of `spec` is `autospec`. If you set `autospec=True`
   1476     then the mock with be created with a spec from the object being replaced.
   1477     All attributes of the mock will also have the spec of the corresponding
   1478     attribute of the object being replaced. Methods and functions being
   1479     mocked will have their arguments checked and will raise a `TypeError` if
   1480     they are called with the wrong signature. For mocks replacing a class,
   1481     their return value (the 'instance') will have the same spec as the class.
   1482 
   1483     Instead of `autospec=True` you can pass `autospec=some_object` to use an
   1484     arbitrary object as the spec instead of the one being replaced.
   1485 
   1486     By default `patch` will fail to replace attributes that don't exist. If
   1487     you pass in `create=True`, and the attribute doesn't exist, patch will
   1488     create the attribute for you when the patched function is called, and
   1489     delete it again afterwards. This is useful for writing tests against
   1490     attributes that your production code creates at runtime. It is off by
   1491     default because it can be dangerous. With it switched on you can write
   1492     passing tests against APIs that don't actually exist!
   1493 
   1494     Patch can be used as a `TestCase` class decorator. It works by
   1495     decorating each test method in the class. This reduces the boilerplate
   1496     code when your test methods share a common patchings set. `patch` finds
   1497     tests by looking for method names that start with `patch.TEST_PREFIX`.
   1498     By default this is `test`, which matches the way `unittest` finds tests.
   1499     You can specify an alternative prefix by setting `patch.TEST_PREFIX`.
   1500 
   1501     Patch can be used as a context manager, with the with statement. Here the
   1502     patching applies to the indented block after the with statement. If you
   1503     use "as" then the patched object will be bound to the name after the
   1504     "as"; very useful if `patch` is creating a mock object for you.
   1505 
   1506     `patch` takes arbitrary keyword arguments. These will be passed to
   1507     the `Mock` (or `new_callable`) on construction.
   1508 
   1509     `patch.dict(...)`, `patch.multiple(...)` and `patch.object(...)` are
   1510     available for alternate use-cases.
   1511     """
   1512     getter, attribute = _get_target(target)
   1513     return _patch(
   1514         getter, attribute, new, spec, create,
   1515         spec_set, autospec, new_callable, kwargs
   1516     )
   1517 
   1518 
   1519 class _patch_dict(object):
   1520     """
   1521     Patch a dictionary, or dictionary like object, and restore the dictionary
   1522     to its original state after the test.
   1523 
   1524     `in_dict` can be a dictionary or a mapping like container. If it is a
   1525     mapping then it must at least support getting, setting and deleting items
   1526     plus iterating over keys.
   1527 
   1528     `in_dict` can also be a string specifying the name of the dictionary, which
   1529     will then be fetched by importing it.
   1530 
   1531     `values` can be a dictionary of values to set in the dictionary. `values`
   1532     can also be an iterable of `(key, value)` pairs.
   1533 
   1534     If `clear` is True then the dictionary will be cleared before the new
   1535     values are set.
   1536 
   1537     `patch.dict` can also be called with arbitrary keyword arguments to set
   1538     values in the dictionary::
   1539 
   1540         with patch.dict('sys.modules', mymodule=Mock(), other_module=Mock()):
   1541             ...
   1542 
   1543     `patch.dict` can be used as a context manager, decorator or class
   1544     decorator. When used as a class decorator `patch.dict` honours
   1545     `patch.TEST_PREFIX` for choosing which methods to wrap.
   1546     """
   1547 
   1548     def __init__(self, in_dict, values=(), clear=False, **kwargs):
   1549         if isinstance(in_dict, str):
   1550             in_dict = _importer(in_dict)
   1551         self.in_dict = in_dict
   1552         # support any argument supported by dict(...) constructor
   1553         self.values = dict(values)
   1554         self.values.update(kwargs)
   1555         self.clear = clear
   1556         self._original = None
   1557 
   1558 
   1559     def __call__(self, f):
   1560         if isinstance(f, type):
   1561             return self.decorate_class(f)
   1562         @wraps(f)
   1563         def _inner(*args, **kw):
   1564             self._patch_dict()
   1565             try:
   1566                 return f(*args, **kw)
   1567             finally:
   1568                 self._unpatch_dict()
   1569 
   1570         return _inner
   1571 
   1572 
   1573     def decorate_class(self, klass):
   1574         for attr in dir(klass):
   1575             attr_value = getattr(klass, attr)
   1576             if (attr.startswith(patch.TEST_PREFIX) and
   1577                  hasattr(attr_value, "__call__")):
   1578                 decorator = _patch_dict(self.in_dict, self.values, self.clear)
   1579                 decorated = decorator(attr_value)
   1580                 setattr(klass, attr, decorated)
   1581         return klass
   1582 
   1583 
   1584     def __enter__(self):
   1585         """Patch the dict."""
   1586         self._patch_dict()
   1587 
   1588 
   1589     def _patch_dict(self):
   1590         values = self.values
   1591         in_dict = self.in_dict
   1592         clear = self.clear
   1593 
   1594         try:
   1595             original = in_dict.copy()
   1596         except AttributeError:
   1597             # dict like object with no copy method
   1598             # must support iteration over keys
   1599             original = {}
   1600             for key in in_dict:
   1601                 original[key] = in_dict[key]
   1602         self._original = original
   1603 
   1604         if clear:
   1605             _clear_dict(in_dict)
   1606 
   1607         try:
   1608             in_dict.update(values)
   1609         except AttributeError:
   1610             # dict like object with no update method
   1611             for key in values:
   1612                 in_dict[key] = values[key]
   1613 
   1614 
   1615     def _unpatch_dict(self):
   1616         in_dict = self.in_dict
   1617         original = self._original
   1618 
   1619         _clear_dict(in_dict)
   1620 
   1621         try:
   1622             in_dict.update(original)
   1623         except AttributeError:
   1624             for key in original:
   1625                 in_dict[key] = original[key]
   1626 
   1627 
   1628     def __exit__(self, *args):
   1629         """Unpatch the dict."""
   1630         self._unpatch_dict()
   1631         return False
   1632 
   1633     start = __enter__
   1634     stop = __exit__
   1635 
   1636 
   1637 def _clear_dict(in_dict):
   1638     try:
   1639         in_dict.clear()
   1640     except AttributeError:
   1641         keys = list(in_dict)
   1642         for key in keys:
   1643             del in_dict[key]
   1644 
   1645 
   1646 def _patch_stopall():
   1647     """Stop all active patches. LIFO to unroll nested patches."""
   1648     for patch in reversed(_patch._active_patches):
   1649         patch.stop()
   1650 
   1651 
   1652 patch.object = _patch_object
   1653 patch.dict = _patch_dict
   1654 patch.multiple = _patch_multiple
   1655 patch.stopall = _patch_stopall
   1656 patch.TEST_PREFIX = 'test'
   1657 
   1658 magic_methods = (
   1659     "lt le gt ge eq ne "
   1660     "getitem setitem delitem "
   1661     "len contains iter "
   1662     "hash str sizeof "
   1663     "enter exit "
   1664     "divmod neg pos abs invert "
   1665     "complex int float index "
   1666     "trunc floor ceil "
   1667     "bool next "
   1668 )
   1669 
   1670 numerics = (
   1671     "add sub mul div floordiv mod lshift rshift and xor or pow truediv"
   1672 )
   1673 inplace = ' '.join('i%s' % n for n in numerics.split())
   1674 right = ' '.join('r%s' % n for n in numerics.split())
   1675 
   1676 # not including __prepare__, __instancecheck__, __subclasscheck__
   1677 # (as they are metaclass methods)
   1678 # __del__ is not supported at all as it causes problems if it exists
   1679 
   1680 _non_defaults = set('__%s__' % method for method in [
   1681     'get', 'set', 'delete', 'reversed', 'missing', 'reduce', 'reduce_ex',
   1682     'getinitargs', 'getnewargs', 'getstate', 'setstate', 'getformat',
   1683     'setformat', 'repr', 'dir', 'subclasses', 'format',
   1684 ])
   1685 
   1686 
   1687 def _get_method(name, func):
   1688     "Turns a callable object (like a mock) into a real function"
   1689     def method(self, *args, **kw):
   1690         return func(self, *args, **kw)
   1691     method.__name__ = name
   1692     return method
   1693 
   1694 
   1695 _magics = set(
   1696     '__%s__' % method for method in
   1697     ' '.join([magic_methods, numerics, inplace, right]).split()
   1698 )
   1699 
   1700 _all_magics = _magics | _non_defaults
   1701 
   1702 _unsupported_magics = set([
   1703     '__getattr__', '__setattr__',
   1704     '__init__', '__new__', '__prepare__'
   1705     '__instancecheck__', '__subclasscheck__',
   1706     '__del__'
   1707 ])
   1708 
   1709 _calculate_return_value = {
   1710     '__hash__': lambda self: object.__hash__(self),
   1711     '__str__': lambda self: object.__str__(self),
   1712     '__sizeof__': lambda self: object.__sizeof__(self),
   1713 }
   1714 
   1715 _return_values = {
   1716     '__lt__': NotImplemented,
   1717     '__gt__': NotImplemented,
   1718     '__le__': NotImplemented,
   1719     '__ge__': NotImplemented,
   1720     '__int__': 1,
   1721     '__contains__': False,
   1722     '__len__': 0,
   1723     '__exit__': False,
   1724     '__complex__': 1j,
   1725     '__float__': 1.0,
   1726     '__bool__': True,
   1727     '__index__': 1,
   1728 }
   1729 
   1730 
   1731 def _get_eq(self):
   1732     def __eq__(other):
   1733         ret_val = self.__eq__._mock_return_value
   1734         if ret_val is not DEFAULT:
   1735             return ret_val
   1736         return self is other
   1737     return __eq__
   1738 
   1739 def _get_ne(self):
   1740     def __ne__(other):
   1741         if self.__ne__._mock_return_value is not DEFAULT:
   1742             return DEFAULT
   1743         return self is not other
   1744     return __ne__
   1745 
   1746 def _get_iter(self):
   1747     def __iter__():
   1748         ret_val = self.__iter__._mock_return_value
   1749         if ret_val is DEFAULT:
   1750             return iter([])
   1751         # if ret_val was already an iterator, then calling iter on it should
   1752         # return the iterator unchanged
   1753         return iter(ret_val)
   1754     return __iter__
   1755 
   1756 _side_effect_methods = {
   1757     '__eq__': _get_eq,
   1758     '__ne__': _get_ne,
   1759     '__iter__': _get_iter,
   1760 }
   1761 
   1762 
   1763 
   1764 def _set_return_value(mock, method, name):
   1765     fixed = _return_values.get(name, DEFAULT)
   1766     if fixed is not DEFAULT:
   1767         method.return_value = fixed
   1768         return
   1769 
   1770     return_calulator = _calculate_return_value.get(name)
   1771     if return_calulator is not None:
   1772         try:
   1773             return_value = return_calulator(mock)
   1774         except AttributeError:
   1775             # XXXX why do we return AttributeError here?
   1776             #      set it as a side_effect instead?
   1777             return_value = AttributeError(name)
   1778         method.return_value = return_value
   1779         return
   1780 
   1781     side_effector = _side_effect_methods.get(name)
   1782     if side_effector is not None:
   1783         method.side_effect = side_effector(mock)
   1784 
   1785 
   1786 
   1787 class MagicMixin(object):
   1788     def __init__(self, *args, **kw):
   1789         _safe_super(MagicMixin, self).__init__(*args, **kw)
   1790         self._mock_set_magics()
   1791 
   1792 
   1793     def _mock_set_magics(self):
   1794         these_magics = _magics
   1795 
   1796         if self._mock_methods is not None:
   1797             these_magics = _magics.intersection(self._mock_methods)
   1798 
   1799             remove_magics = set()
   1800             remove_magics = _magics - these_magics
   1801 
   1802             for entry in remove_magics:
   1803                 if entry in type(self).__dict__:
   1804                     # remove unneeded magic methods
   1805                     delattr(self, entry)
   1806 
   1807         # don't overwrite existing attributes if called a second time
   1808         these_magics = these_magics - set(type(self).__dict__)
   1809 
   1810         _type = type(self)
   1811         for entry in these_magics:
   1812             setattr(_type, entry, MagicProxy(entry, self))
   1813 
   1814 
   1815 
   1816 class NonCallableMagicMock(MagicMixin, NonCallableMock):
   1817     """A version of `MagicMock` that isn't callable."""
   1818     def mock_add_spec(self, spec, spec_set=False):
   1819         """Add a spec to a mock. `spec` can either be an object or a
   1820         list of strings. Only attributes on the `spec` can be fetched as
   1821         attributes from the mock.
   1822 
   1823         If `spec_set` is True then only attributes on the spec can be set."""
   1824         self._mock_add_spec(spec, spec_set)
   1825         self._mock_set_magics()
   1826 
   1827 
   1828 
   1829 class MagicMock(MagicMixin, Mock):
   1830     """
   1831     MagicMock is a subclass of Mock with default implementations
   1832     of most of the magic methods. You can use MagicMock without having to
   1833     configure the magic methods yourself.
   1834 
   1835     If you use the `spec` or `spec_set` arguments then *only* magic
   1836     methods that exist in the spec will be created.
   1837 
   1838     Attributes and the return value of a `MagicMock` will also be `MagicMocks`.
   1839     """
   1840     def mock_add_spec(self, spec, spec_set=False):
   1841         """Add a spec to a mock. `spec` can either be an object or a
   1842         list of strings. Only attributes on the `spec` can be fetched as
   1843         attributes from the mock.
   1844 
   1845         If `spec_set` is True then only attributes on the spec can be set."""
   1846         self._mock_add_spec(spec, spec_set)
   1847         self._mock_set_magics()
   1848 
   1849 
   1850 
   1851 class MagicProxy(object):
   1852     def __init__(self, name, parent):
   1853         self.name = name
   1854         self.parent = parent
   1855 
   1856     def __call__(self, *args, **kwargs):
   1857         m = self.create_mock()
   1858         return m(*args, **kwargs)
   1859 
   1860     def create_mock(self):
   1861         entry = self.name
   1862         parent = self.parent
   1863         m = parent._get_child_mock(name=entry, _new_name=entry,
   1864                                    _new_parent=parent)
   1865         setattr(parent, entry, m)
   1866         _set_return_value(parent, m, entry)
   1867         return m
   1868 
   1869     def __get__(self, obj, _type=None):
   1870         return self.create_mock()
   1871 
   1872 
   1873 
   1874 class _ANY(object):
   1875     "A helper object that compares equal to everything."
   1876 
   1877     __hash__ = object.__hash__
   1878 
   1879     def __eq__(self, other):
   1880         return True
   1881 
   1882     def __ne__(self, other):
   1883         return False
   1884 
   1885     def __repr__(self):
   1886         return '<ANY>'
   1887 
   1888 ANY = _ANY()
   1889 
   1890 
   1891 
   1892 def _format_call_signature(name, args, kwargs):
   1893     message = '%s(%%s)' % name
   1894     formatted_args = ''
   1895     args_string = ', '.join([repr(arg) for arg in args])
   1896     kwargs_string = ', '.join([
   1897         '%s=%r' % (key, value) for key, value in sorted(kwargs.items())
   1898     ])
   1899     if args_string:
   1900         formatted_args = args_string
   1901     if kwargs_string:
   1902         if formatted_args:
   1903             formatted_args += ', '
   1904         formatted_args += kwargs_string
   1905 
   1906     return message % formatted_args
   1907 
   1908 
   1909 
   1910 class _Call(tuple):
   1911     """
   1912     A tuple for holding the results of a call to a mock, either in the form
   1913     `(args, kwargs)` or `(name, args, kwargs)`.
   1914 
   1915     If args or kwargs are empty then a call tuple will compare equal to
   1916     a tuple without those values. This makes comparisons less verbose::
   1917 
   1918         _Call(('name', (), {})) == ('name',)
   1919         _Call(('name', (1,), {})) == ('name', (1,))
   1920         _Call(((), {'a': 'b'})) == ({'a': 'b'},)
   1921 
   1922     The `_Call` object provides a useful shortcut for comparing with call::
   1923 
   1924         _Call(((1, 2), {'a': 3})) == call(1, 2, a=3)
   1925         _Call(('foo', (1, 2), {'a': 3})) == call.foo(1, 2, a=3)
   1926 
   1927     If the _Call has no name then it will match any name.
   1928     """
   1929 
   1930     __hash__ = object.__hash__
   1931 
   1932     def __new__(cls, value=(), name=None, parent=None, two=False,
   1933                 from_kall=True):
   1934         name = ''
   1935         args = ()
   1936         kwargs = {}
   1937         _len = len(value)
   1938         if _len == 3:
   1939             name, args, kwargs = value
   1940         elif _len == 2:
   1941             first, second = value
   1942             if isinstance(first, str):
   1943                 name = first
   1944                 if isinstance(second, tuple):
   1945                     args = second
   1946                 else:
   1947                     kwargs = second
   1948             else:
   1949                 args, kwargs = first, second
   1950         elif _len == 1:
   1951             value, = value
   1952             if isinstance(value, str):
   1953                 name = value
   1954             elif isinstance(value, tuple):
   1955                 args = value
   1956             else:
   1957                 kwargs = value
   1958 
   1959         if two:
   1960             return tuple.__new__(cls, (args, kwargs))
   1961 
   1962         return tuple.__new__(cls, (name, args, kwargs))
   1963 
   1964 
   1965     def __init__(self, value=(), name=None, parent=None, two=False,
   1966                  from_kall=True):
   1967         self.name = name
   1968         self.parent = parent
   1969         self.from_kall = from_kall
   1970 
   1971 
   1972     def __eq__(self, other):
   1973         if other is ANY:
   1974             return True
   1975         try:
   1976             len_other = len(other)
   1977         except TypeError:
   1978             return False
   1979 
   1980         self_name = ''
   1981         if len(self) == 2:
   1982             self_args, self_kwargs = self
   1983         else:
   1984             self_name, self_args, self_kwargs = self
   1985 
   1986         other_name = ''
   1987         if len_other == 0:
   1988             other_args, other_kwargs = (), {}
   1989         elif len_other == 3:
   1990             other_name, other_args, other_kwargs = other
   1991         elif len_other == 1:
   1992             value, = other
   1993             if isinstance(value, tuple):
   1994                 other_args = value
   1995                 other_kwargs = {}
   1996             elif isinstance(value, str):
   1997                 other_name = value
   1998                 other_args, other_kwargs = (), {}
   1999             else:
   2000                 other_args = ()
   2001                 other_kwargs = value
   2002         else:
   2003             # len 2
   2004             # could be (name, args) or (name, kwargs) or (args, kwargs)
   2005             first, second = other
   2006             if isinstance(first, str):
   2007                 other_name = first
   2008                 if isinstance(second, tuple):
   2009                     other_args, other_kwargs = second, {}
   2010                 else:
   2011                     other_args, other_kwargs = (), second
   2012             else:
   2013                 other_args, other_kwargs = first, second
   2014 
   2015         if self_name and other_name != self_name:
   2016             return False
   2017 
   2018         # this order is important for ANY to work!
   2019         return (other_args, other_kwargs) == (self_args, self_kwargs)
   2020 
   2021 
   2022     def __ne__(self, other):
   2023         return not self.__eq__(other)
   2024 
   2025 
   2026     def __call__(self, *args, **kwargs):
   2027         if self.name is None:
   2028             return _Call(('', args, kwargs), name='()')
   2029 
   2030         name = self.name + '()'
   2031         return _Call((self.name, args, kwargs), name=name, parent=self)
   2032 
   2033 
   2034     def __getattr__(self, attr):
   2035         if self.name is None:
   2036             return _Call(name=attr, from_kall=False)
   2037         name = '%s.%s' % (self.name, attr)
   2038         return _Call(name=name, parent=self, from_kall=False)
   2039 
   2040 
   2041     def count(self, *args, **kwargs):
   2042         return self.__getattr__('count')(*args, **kwargs)
   2043 
   2044     def index(self, *args, **kwargs):
   2045         return self.__getattr__('index')(*args, **kwargs)
   2046 
   2047     def __repr__(self):
   2048         if not self.from_kall:
   2049             name = self.name or 'call'
   2050             if name.startswith('()'):
   2051                 name = 'call%s' % name
   2052             return name
   2053 
   2054         if len(self) == 2:
   2055             name = 'call'
   2056             args, kwargs = self
   2057         else:
   2058             name, args, kwargs = self
   2059             if not name:
   2060                 name = 'call'
   2061             elif not name.startswith('()'):
   2062                 name = 'call.%s' % name
   2063             else:
   2064                 name = 'call%s' % name
   2065         return _format_call_signature(name, args, kwargs)
   2066 
   2067 
   2068     def call_list(self):
   2069         """For a call object that represents multiple calls, `call_list`
   2070         returns a list of all the intermediate calls as well as the
   2071         final call."""
   2072         vals = []
   2073         thing = self
   2074         while thing is not None:
   2075             if thing.from_kall:
   2076                 vals.append(thing)
   2077             thing = thing.parent
   2078         return _CallList(reversed(vals))
   2079 
   2080 
   2081 call = _Call(from_kall=False)
   2082 
   2083 
   2084 
   2085 def create_autospec(spec, spec_set=False, instance=False, _parent=None,
   2086                     _name=None, **kwargs):
   2087     """Create a mock object using another object as a spec. Attributes on the
   2088     mock will use the corresponding attribute on the `spec` object as their
   2089     spec.
   2090 
   2091     Functions or methods being mocked will have their arguments checked
   2092     to check that they are called with the correct signature.
   2093 
   2094     If `spec_set` is True then attempting to set attributes that don't exist
   2095     on the spec object will raise an `AttributeError`.
   2096 
   2097     If a class is used as a spec then the return value of the mock (the
   2098     instance of the class) will have the same spec. You can use a class as the
   2099     spec for an instance object by passing `instance=True`. The returned mock
   2100     will only be callable if instances of the mock are callable.
   2101 
   2102     `create_autospec` also takes arbitrary keyword arguments that are passed to
   2103     the constructor of the created mock."""
   2104     if _is_list(spec):
   2105         # can't pass a list instance to the mock constructor as it will be
   2106         # interpreted as a list of strings
   2107         spec = type(spec)
   2108 
   2109     is_type = isinstance(spec, type)
   2110 
   2111     _kwargs = {'spec': spec}
   2112     if spec_set:
   2113         _kwargs = {'spec_set': spec}
   2114     elif spec is None:
   2115         # None we mock with a normal mock without a spec
   2116         _kwargs = {}
   2117     if _kwargs and instance:
   2118         _kwargs['_spec_as_instance'] = True
   2119 
   2120     _kwargs.update(kwargs)
   2121 
   2122     Klass = MagicMock
   2123     if type(spec) in DescriptorTypes:
   2124         # descriptors don't have a spec
   2125         # because we don't know what type they return
   2126         _kwargs = {}
   2127     elif not _callable(spec):
   2128         Klass = NonCallableMagicMock
   2129     elif is_type and instance and not _instance_callable(spec):
   2130         Klass = NonCallableMagicMock
   2131 
   2132     _name = _kwargs.pop('name', _name)
   2133 
   2134     _new_name = _name
   2135     if _parent is None:
   2136         # for a top level object no _new_name should be set
   2137         _new_name = ''
   2138 
   2139     mock = Klass(parent=_parent, _new_parent=_parent, _new_name=_new_name,
   2140                  name=_name, **_kwargs)
   2141 
   2142     if isinstance(spec, FunctionTypes):
   2143         # should only happen at the top level because we don't
   2144         # recurse for functions
   2145         mock = _set_signature(mock, spec)
   2146     else:
   2147         _check_signature(spec, mock, is_type, instance)
   2148 
   2149     if _parent is not None and not instance:
   2150         _parent._mock_children[_name] = mock
   2151 
   2152     if is_type and not instance and 'return_value' not in kwargs:
   2153         mock.return_value = create_autospec(spec, spec_set, instance=True,
   2154                                             _name='()', _parent=mock)
   2155 
   2156     for entry in dir(spec):
   2157         if _is_magic(entry):
   2158             # MagicMock already does the useful magic methods for us
   2159             continue
   2160 
   2161         # XXXX do we need a better way of getting attributes without
   2162         # triggering code execution (?) Probably not - we need the actual
   2163         # object to mock it so we would rather trigger a property than mock
   2164         # the property descriptor. Likewise we want to mock out dynamically
   2165         # provided attributes.
   2166         # XXXX what about attributes that raise exceptions other than
   2167         # AttributeError on being fetched?
   2168         # we could be resilient against it, or catch and propagate the
   2169         # exception when the attribute is fetched from the mock
   2170         try:
   2171             original = getattr(spec, entry)
   2172         except AttributeError:
   2173             continue
   2174 
   2175         kwargs = {'spec': original}
   2176         if spec_set:
   2177             kwargs = {'spec_set': original}
   2178 
   2179         if not isinstance(original, FunctionTypes):
   2180             new = _SpecState(original, spec_set, mock, entry, instance)
   2181             mock._mock_children[entry] = new
   2182         else:
   2183             parent = mock
   2184             if isinstance(spec, FunctionTypes):
   2185                 parent = mock.mock
   2186 
   2187             skipfirst = _must_skip(spec, entry, is_type)
   2188             kwargs['_eat_self'] = skipfirst
   2189             new = MagicMock(parent=parent, name=entry, _new_name=entry,
   2190                             _new_parent=parent,
   2191                             **kwargs)
   2192             mock._mock_children[entry] = new
   2193             _check_signature(original, new, skipfirst=skipfirst)
   2194 
   2195         # so functions created with _set_signature become instance attributes,
   2196         # *plus* their underlying mock exists in _mock_children of the parent
   2197         # mock. Adding to _mock_children may be unnecessary where we are also
   2198         # setting as an instance attribute?
   2199         if isinstance(new, FunctionTypes):
   2200             setattr(mock, entry, new)
   2201 
   2202     return mock
   2203 
   2204 
   2205 def _must_skip(spec, entry, is_type):
   2206     """
   2207     Return whether we should skip the first argument on spec's `entry`
   2208     attribute.
   2209     """
   2210     if not isinstance(spec, type):
   2211         if entry in getattr(spec, '__dict__', {}):
   2212             # instance attribute - shouldn't skip
   2213             return False
   2214         spec = spec.__class__
   2215 
   2216     for klass in spec.__mro__:
   2217         result = klass.__dict__.get(entry, DEFAULT)
   2218         if result is DEFAULT:
   2219             continue
   2220         if isinstance(result, (staticmethod, classmethod)):
   2221             return False
   2222         elif isinstance(getattr(result, '__get__', None), MethodWrapperTypes):
   2223             # Normal method => skip if looked up on type
   2224             # (if looked up on instance, self is already skipped)
   2225             return is_type
   2226         else:
   2227             return False
   2228 
   2229     # shouldn't get here unless function is a dynamically provided attribute
   2230     # XXXX untested behaviour
   2231     return is_type
   2232 
   2233 
   2234 def _get_class(obj):
   2235     try:
   2236         return obj.__class__
   2237     except AttributeError:
   2238         # it is possible for objects to have no __class__
   2239         return type(obj)
   2240 
   2241 
   2242 class _SpecState(object):
   2243 
   2244     def __init__(self, spec, spec_set=False, parent=None,
   2245                  name=None, ids=None, instance=False):
   2246         self.spec = spec
   2247         self.ids = ids
   2248         self.spec_set = spec_set
   2249         self.parent = parent
   2250         self.instance = instance
   2251         self.name = name
   2252 
   2253 
   2254 FunctionTypes = (
   2255     # python function
   2256     type(create_autospec),
   2257     # instance method
   2258     type(ANY.__eq__),
   2259 )
   2260 
   2261 MethodWrapperTypes = (
   2262     type(ANY.__eq__.__get__),
   2263 )
   2264 
   2265 
   2266 file_spec = None
   2267 
   2268 def _iterate_read_data(read_data):
   2269     # Helper for mock_open:
   2270     # Retrieve lines from read_data via a generator so that separate calls to
   2271     # readline, read, and readlines are properly interleaved
   2272     data_as_list = ['{}\n'.format(l) for l in read_data.split('\n')]
   2273 
   2274     if data_as_list[-1] == '\n':
   2275         # If the last line ended in a newline, the list comprehension will have an
   2276         # extra entry that's just a newline.  Remove this.
   2277         data_as_list = data_as_list[:-1]
   2278     else:
   2279         # If there wasn't an extra newline by itself, then the file being
   2280         # emulated doesn't have a newline to end the last line  remove the
   2281         # newline that our naive format() added
   2282         data_as_list[-1] = data_as_list[-1][:-1]
   2283 
   2284     for line in data_as_list:
   2285         yield line
   2286 
   2287 def mock_open(mock=None, read_data=''):
   2288     """
   2289     A helper function to create a mock to replace the use of `open`. It works
   2290     for `open` called directly or used as a context manager.
   2291 
   2292     The `mock` argument is the mock object to configure. If `None` (the
   2293     default) then a `MagicMock` will be created for you, with the API limited
   2294     to methods or attributes available on standard file handles.
   2295 
   2296     `read_data` is a string for the `read` methoddline`, and `readlines` of the
   2297     file handle to return.  This is an empty string by default.
   2298     """
   2299     def _readlines_side_effect(*args, **kwargs):
   2300         if handle.readlines.return_value is not None:
   2301             return handle.readlines.return_value
   2302         return list(_data)
   2303 
   2304     def _read_side_effect(*args, **kwargs):
   2305         if handle.read.return_value is not None:
   2306             return handle.read.return_value
   2307         return ''.join(_data)
   2308 
   2309     def _readline_side_effect():
   2310         if handle.readline.return_value is not None:
   2311             while True:
   2312                 yield handle.readline.return_value
   2313         for line in _data:
   2314             yield line
   2315 
   2316 
   2317     global file_spec
   2318     if file_spec is None:
   2319         import _io
   2320         file_spec = list(set(dir(_io.TextIOWrapper)).union(set(dir(_io.BytesIO))))
   2321 
   2322     if mock is None:
   2323         mock = MagicMock(name='open', spec=open)
   2324 
   2325     handle = MagicMock(spec=file_spec)
   2326     handle.__enter__.return_value = handle
   2327 
   2328     _data = _iterate_read_data(read_data)
   2329 
   2330     handle.write.return_value = None
   2331     handle.read.return_value = None
   2332     handle.readline.return_value = None
   2333     handle.readlines.return_value = None
   2334 
   2335     handle.read.side_effect = _read_side_effect
   2336     handle.readline.side_effect = _readline_side_effect()
   2337     handle.readlines.side_effect = _readlines_side_effect
   2338 
   2339     mock.return_value = handle
   2340     return mock
   2341 
   2342 
   2343 class PropertyMock(Mock):
   2344     """
   2345     A mock intended to be used as a property, or other descriptor, on a class.
   2346     `PropertyMock` provides `__get__` and `__set__` methods so you can specify
   2347     a return value when it is fetched.
   2348 
   2349     Fetching a `PropertyMock` instance from an object calls the mock, with
   2350     no args. Setting it calls the mock with the value being set.
   2351     """
   2352     def _get_child_mock(self, **kwargs):
   2353         return MagicMock(**kwargs)
   2354 
   2355     def __get__(self, obj, obj_type):
   2356         return self()
   2357     def __set__(self, obj, val):
   2358         self(val)
   2359