summaryrefslogtreecommitdiffstats
path: root/Lib/unittest
diff options
context:
space:
mode:
authorThomas Grainger <tagrain@gmail.com>2021-07-21 11:47:44 (GMT)
committerGitHub <noreply@github.com>2021-07-21 11:47:44 (GMT)
commitab7fcc8fbdc11091370deeb000a787fb02f9b13d (patch)
tree65c03b95e2e331d79311c39a872ed11c14e3893c /Lib/unittest
parent64f54b7ccd49764b0304e076bfd79b5482988f53 (diff)
downloadcpython-ab7fcc8fbdc11091370deeb000a787fb02f9b13d.zip
cpython-ab7fcc8fbdc11091370deeb000a787fb02f9b13d.tar.gz
cpython-ab7fcc8fbdc11091370deeb000a787fb02f9b13d.tar.bz2
bpo-44686 replace unittest.mock._importer with pkgutil.resolve_name (GH-18544)
Automerge-Triggered-By: GH:cjw296
Diffstat (limited to 'Lib/unittest')
-rw-r--r--Lib/unittest/mock.py27
1 files changed, 4 insertions, 23 deletions
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index 5be9120..ecf84d2 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -30,6 +30,7 @@ import inspect
import pprint
import sys
import builtins
+import pkgutil
from asyncio import iscoroutinefunction
from types import CodeType, ModuleType, MethodType
from unittest.util import safe_repr
@@ -1239,25 +1240,6 @@ class Mock(CallableMixin, NonCallableMock):
"""
-def _dot_lookup(thing, comp, import_path):
- try:
- return getattr(thing, comp)
- except AttributeError:
- __import__(import_path)
- return getattr(thing, comp)
-
-
-def _importer(target):
- components = target.split('.')
- import_path = components.pop(0)
- thing = __import__(import_path)
-
- for comp in components:
- import_path += ".%s" % comp
- thing = _dot_lookup(thing, comp, import_path)
- return thing
-
-
# _check_spec_arg_typos takes kwargs from commands like patch and checks that
# they don't contain common misspellings of arguments related to autospeccing.
def _check_spec_arg_typos(kwargs_to_check):
@@ -1611,8 +1593,7 @@ def _get_target(target):
except (TypeError, ValueError):
raise TypeError("Need a valid target to patch. You supplied: %r" %
(target,))
- getter = lambda: _importer(target)
- return getter, attribute
+ return partial(pkgutil.resolve_name, target), attribute
def _patch_object(
@@ -1667,7 +1648,7 @@ def _patch_multiple(target, spec=None, create=False, spec_set=None,
for choosing which methods to wrap.
"""
if type(target) is str:
- getter = lambda: _importer(target)
+ getter = partial(pkgutil.resolve_name, target)
else:
getter = lambda: target
@@ -1847,7 +1828,7 @@ class _patch_dict(object):
def _patch_dict(self):
values = self.values
if isinstance(self.in_dict, str):
- self.in_dict = _importer(self.in_dict)
+ self.in_dict = pkgutil.resolve_name(self.in_dict)
in_dict = self.in_dict
clear = self.clear