瀏覽代碼

Removed utils.module_loading.import_by_path() per deprecation timeline; refs #21674.

Tim Graham 10 年之前
父節點
當前提交
d029fafea1
共有 4 個文件被更改,包括 4 次插入70 次删除
  1. 0 21
      django/utils/module_loading.py
  2. 0 9
      docs/ref/utils.txt
  3. 2 2
      docs/releases/1.7.txt
  4. 2 38
      tests/utils_tests/test_module_loading.py

+ 0 - 21
django/utils/module_loading.py

@@ -4,11 +4,8 @@ import copy
 from importlib import import_module
 from importlib import import_module
 import os
 import os
 import sys
 import sys
-import warnings
 
 
-from django.core.exceptions import ImproperlyConfigured
 from django.utils import six
 from django.utils import six
-from django.utils.deprecation import RemovedInDjango19Warning
 
 
 
 
 def import_string(dotted_path):
 def import_string(dotted_path):
@@ -32,24 +29,6 @@ def import_string(dotted_path):
         six.reraise(ImportError, ImportError(msg), sys.exc_info()[2])
         six.reraise(ImportError, ImportError(msg), sys.exc_info()[2])
 
 
 
 
-def import_by_path(dotted_path, error_prefix=''):
-    """
-    Import a dotted module path and return the attribute/class designated by the
-    last name in the path. Raise ImproperlyConfigured if something goes wrong.
-    """
-    warnings.warn(
-        'import_by_path() has been deprecated. Use import_string() instead.',
-        RemovedInDjango19Warning, stacklevel=2)
-    try:
-        attr = import_string(dotted_path)
-    except ImportError as e:
-        msg = '%sError importing module %s: "%s"' % (
-            error_prefix, dotted_path, e)
-        six.reraise(ImproperlyConfigured, ImproperlyConfigured(msg),
-                    sys.exc_info()[2])
-    return attr
-
-
 def autodiscover_modules(*args, **kwargs):
 def autodiscover_modules(*args, **kwargs):
     """
     """
     Auto-discover INSTALLED_APPS modules and fail silently when
     Auto-discover INSTALLED_APPS modules and fail silently when

+ 0 - 9
docs/ref/utils.txt

@@ -755,15 +755,6 @@ Functions for working with Python modules.
 
 
         from django.core.exceptions import ValidationError
         from django.core.exceptions import ValidationError
 
 
-.. function:: import_by_path(dotted_path, error_prefix='')
-
-    .. deprecated:: 1.7
-       Use :meth:`~django.utils.module_loading.import_string` instead.
-
-    Imports a dotted module path and returns the attribute/class designated by
-    the last name in the path. Raises :exc:`~django.core.exceptions.ImproperlyConfigured`
-    if something goes wrong.
-
 ``django.utils.safestring``
 ``django.utils.safestring``
 ===========================
 ===========================
 
 

+ 2 - 2
docs/releases/1.7.txt

@@ -1481,8 +1481,8 @@ versions prior to 2.7. They have been deprecated.
 ``django.utils.module_loading.import_by_path``
 ``django.utils.module_loading.import_by_path``
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
-The current :meth:`~django.utils.module_loading.import_by_path` function
-catches ``AttributeError``, ``ImportError`` and ``ValueError`` exceptions,
+The current ``django.utils.module_loading.import_by_path`` function
+catches ``AttributeError``, ``ImportError``, and ``ValueError`` exceptions,
 and re-raises :exc:`~django.core.exceptions.ImproperlyConfigured`. Such
 and re-raises :exc:`~django.core.exceptions.ImproperlyConfigured`. Such
 exception masking makes it needlessly hard to diagnose circular import
 exception masking makes it needlessly hard to diagnose circular import
 problems, because it makes it look like the problem comes from inside Django.
 problems, because it makes it look like the problem comes from inside Django.

+ 2 - 38
tests/utils_tests/test_module_loading.py

@@ -3,15 +3,12 @@ from importlib import import_module
 import os
 import os
 import sys
 import sys
 import unittest
 import unittest
-import warnings
 from zipimport import zipimporter
 from zipimport import zipimporter
 
 
-from django.core.exceptions import ImproperlyConfigured
-from django.test import SimpleTestCase, ignore_warnings, modify_settings
+from django.test import SimpleTestCase, modify_settings
 from django.test.utils import extend_sys_path
 from django.test.utils import extend_sys_path
 from django.utils import six
 from django.utils import six
-from django.utils.deprecation import RemovedInDjango19Warning
-from django.utils.module_loading import (autodiscover_modules, import_by_path, import_string,
+from django.utils.module_loading import (autodiscover_modules, import_string,
                                          module_has_submodule)
                                          module_has_submodule)
 from django.utils._os import upath
 from django.utils._os import upath
 
 
@@ -110,39 +107,7 @@ class EggLoader(unittest.TestCase):
             self.assertRaises(ImportError, import_module, 'egg_module.sub1.sub2.no_such_module')
             self.assertRaises(ImportError, import_module, 'egg_module.sub1.sub2.no_such_module')
 
 
 
 
-@ignore_warnings(category=RemovedInDjango19Warning)
 class ModuleImportTestCase(unittest.TestCase):
 class ModuleImportTestCase(unittest.TestCase):
-    def test_import_by_path(self):
-        cls = import_by_path('django.utils.module_loading.import_by_path')
-        self.assertEqual(cls, import_by_path)
-
-        # Test exceptions raised
-        for path in ('no_dots_in_path', 'unexistent.path', 'utils_tests.unexistent'):
-            self.assertRaises(ImproperlyConfigured, import_by_path, path)
-
-        with self.assertRaises(ImproperlyConfigured) as cm:
-            import_by_path('unexistent.module.path', error_prefix="Foo")
-        self.assertTrue(str(cm.exception).startswith('Foo'))
-
-    def test_import_error_traceback(self):
-        """Test preserving the original traceback on an ImportError."""
-        try:
-            import_by_path('test_module.bad_module.content')
-        except ImproperlyConfigured:
-            traceback = sys.exc_info()[2]
-
-        self.assertIsNotNone(traceback.tb_next.tb_next,
-            'Should have more than the calling frame in the traceback.')
-
-    def test_import_by_path_pending_deprecation_warning(self):
-        with warnings.catch_warnings(record=True) as w:
-            warnings.simplefilter('always', category=RemovedInDjango19Warning)
-            cls = import_by_path('django.utils.module_loading.import_by_path')
-            self.assertEqual(cls, import_by_path)
-            self.assertEqual(len(w), 1)
-            self.assertTrue(issubclass(w[-1].category, RemovedInDjango19Warning))
-            self.assertIn('deprecated', str(w[-1].message))
-
     def test_import_string(self):
     def test_import_string(self):
         cls = import_string('django.utils.module_loading.import_string')
         cls = import_string('django.utils.module_loading.import_string')
         self.assertEqual(cls, import_string)
         self.assertEqual(cls, import_string)
@@ -150,7 +115,6 @@ class ModuleImportTestCase(unittest.TestCase):
         # Test exceptions raised
         # Test exceptions raised
         self.assertRaises(ImportError, import_string, 'no_dots_in_path')
         self.assertRaises(ImportError, import_string, 'no_dots_in_path')
         self.assertRaises(ImportError, import_string, 'utils_tests.unexistent')
         self.assertRaises(ImportError, import_string, 'utils_tests.unexistent')
-        self.assertRaises(ImportError, import_string, 'unexistent.path')
 
 
 
 
 @modify_settings(INSTALLED_APPS={'append': 'utils_tests.test_module'})
 @modify_settings(INSTALLED_APPS={'append': 'utils_tests.test_module'})