summaryrefslogtreecommitdiff
path: root/Lib/unittest/mock.py
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2017-01-31 23:31:20 -0800
committerBenjamin Peterson <benjamin@python.org>2017-01-31 23:31:20 -0800
commit75a56cd1847142d9c893b6df5fb674f54b34d9ed (patch)
tree73d254a7d8ed4bc2f76293a2b2e223c3f48e7dd4 /Lib/unittest/mock.py
parentbff21dc9e43eaf9549abe72a32d98a6c20de8c5b (diff)
parentfcd15724f28a5249f13690af32dc12628ab186c6 (diff)
downloadcpython-75a56cd1847142d9c893b6df5fb674f54b34d9ed.tar.gz
merge 3.6 (#29398)
Diffstat (limited to 'Lib/unittest/mock.py')
-rw-r--r--Lib/unittest/mock.py32
1 files changed, 14 insertions, 18 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index b6b3836234..315b61157b 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -104,26 +104,16 @@ def _check_signature(func, mock, skipfirst, instance=False):
def _copy_func_details(func, funcopy):
- funcopy.__name__ = func.__name__
- funcopy.__doc__ = func.__doc__
- try:
- funcopy.__text_signature__ = func.__text_signature__
- except AttributeError:
- pass
# we explicitly don't copy func.__dict__ into this copy as it would
# expose original attributes that should be mocked
- try:
- funcopy.__module__ = func.__module__
- except AttributeError:
- pass
- try:
- funcopy.__defaults__ = func.__defaults__
- except AttributeError:
- pass
- try:
- funcopy.__kwdefaults__ = func.__kwdefaults__
- except AttributeError:
- pass
+ for attribute in (
+ '__name__', '__doc__', '__text_signature__',
+ '__module__', '__defaults__', '__kwdefaults__',
+ ):
+ try:
+ setattr(funcopy, attribute, getattr(func, attribute))
+ except AttributeError:
+ pass
def _callable(obj):
@@ -248,6 +238,9 @@ class _SentinelObject(object):
def __repr__(self):
return 'sentinel.%s' % self.name
+ def __reduce__(self):
+ return 'sentinel.%s' % self.name
+
class _Sentinel(object):
"""Access attributes to return a named object, usable as a sentinel."""
@@ -260,6 +253,9 @@ class _Sentinel(object):
raise AttributeError
return self._sentinels.setdefault(name, _SentinelObject(name))
+ def __reduce__(self):
+ return 'sentinel'
+
sentinel = _Sentinel()