Fixed #21335 -- Use importlib from python3 when using python3

This commit is contained in:
Andrey Antukh 2013-10-26 01:07:40 +02:00 committed by Claude Paroz
parent 9d740eb8b1
commit 3351e94ffa
1 changed files with 22 additions and 17 deletions

View File

@ -2,6 +2,8 @@
import warnings import warnings
import sys import sys
from django.utils import six
warnings.warn("django.utils.importlib will be removed in Django 1.9.", warnings.warn("django.utils.importlib will be removed in Django 1.9.",
PendingDeprecationWarning, stacklevel=2) PendingDeprecationWarning, stacklevel=2)
@ -20,22 +22,25 @@ def _resolve_name(name, package, level):
return "%s.%s" % (package[:dot], name) return "%s.%s" % (package[:dot], name)
def import_module(name, package=None): if six.PY3:
"""Import a module. from importlib import import_module
else:
def import_module(name, package=None):
"""Import a module.
The 'package' argument is required when performing a relative import. It The 'package' argument is required when performing a relative import. It
specifies the package to use as the anchor point from which to resolve the specifies the package to use as the anchor point from which to resolve the
relative import to an absolute import. relative import to an absolute import.
""" """
if name.startswith('.'): if name.startswith('.'):
if not package: if not package:
raise TypeError("relative imports require the 'package' argument") raise TypeError("relative imports require the 'package' argument")
level = 0 level = 0
for character in name: for character in name:
if character != '.': if character != '.':
break break
level += 1 level += 1
name = _resolve_name(name[level:], package, level) name = _resolve_name(name[level:], package, level)
__import__(name) __import__(name)
return sys.modules[name] return sys.modules[name]