mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-23 01:57:00 +03:00
Be more informative when reporting import errors.
This commit is contained in:
parent
152e6d5c0a
commit
c736b80290
|
@ -115,8 +115,8 @@ def import_from_string(val, setting_name):
|
||||||
module_path, class_name = '.'.join(parts[:-1]), parts[-1]
|
module_path, class_name = '.'.join(parts[:-1]), parts[-1]
|
||||||
module = importlib.import_module(module_path)
|
module = importlib.import_module(module_path)
|
||||||
return getattr(module, class_name)
|
return getattr(module, class_name)
|
||||||
except:
|
except ImportError as e:
|
||||||
msg = "Could not import '%s' for API setting '%s'" % (val, setting_name)
|
msg = "Could not import '%s' for API setting '%s'. %s: %s." % (val, setting_name, e.__class__.__name__, e)
|
||||||
raise ImportError(msg)
|
raise ImportError(msg)
|
||||||
|
|
||||||
|
|
||||||
|
|
0
rest_framework/tests/extras/__init__.py
Normal file
0
rest_framework/tests/extras/__init__.py
Normal file
1
rest_framework/tests/extras/bad_import.py
Normal file
1
rest_framework/tests/extras/bad_import.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
raise ValueError
|
21
rest_framework/tests/settings.py
Normal file
21
rest_framework/tests/settings.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
"""Tests for the settings module"""
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
from rest_framework.settings import APISettings, DEFAULTS, IMPORT_STRINGS
|
||||||
|
|
||||||
|
|
||||||
|
class TestSettings(TestCase):
|
||||||
|
"""Tests relating to the api settings"""
|
||||||
|
|
||||||
|
def test_non_import_errors(self):
|
||||||
|
"""Make sure other errors aren't suppressed."""
|
||||||
|
settings = APISettings({'DEFAULT_MODEL_SERIALIZER_CLASS': 'rest_framework.tests.extras.bad_import.ModelSerializer'}, DEFAULTS, IMPORT_STRINGS)
|
||||||
|
with self.assertRaises(ValueError):
|
||||||
|
settings.DEFAULT_MODEL_SERIALIZER_CLASS
|
||||||
|
|
||||||
|
def test_import_error_message_maintained(self):
|
||||||
|
"""Make sure real import errors are captured and raised sensibly."""
|
||||||
|
settings = APISettings({'DEFAULT_MODEL_SERIALIZER_CLASS': 'rest_framework.tests.extras.not_here.ModelSerializer'}, DEFAULTS, IMPORT_STRINGS)
|
||||||
|
with self.assertRaises(ImportError) as cm:
|
||||||
|
settings.DEFAULT_MODEL_SERIALIZER_CLASS
|
||||||
|
self.assertTrue('ImportError' in str(cm.exception))
|
Loading…
Reference in New Issue
Block a user