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