From: Berker Peksag <berker.peksag@gmail.com>
Date: Thu, 15 Dec 2016 02:21:44 +0000 (+0300)
Subject: Issue #28919: Simplify _copy_func_details() in unittest.mock
X-Git-Tag: v3.7.0a1~1753
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=161a4dd495dbf5cb12364e8f6e2d113cfd0633fc;p=python

Issue #28919: Simplify _copy_func_details() in unittest.mock

Patch by Jiajun Huang.
---

diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index f134919888..367c1e19ce 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):