diff options
author | David Cramer <dcramer@gmail.com> | 2015-07-13 02:38:18 -0700 |
---|---|---|
committer | David Cramer <dcramer@gmail.com> | 2015-07-13 02:38:18 -0700 |
commit | 87b203419793698bdf7ac0fec974a742bee3feab (patch) | |
tree | b0878845d2f2d60cae1be0283f2b5dc76fbde7d1 | |
parent | 88f1dfd3eaf4f532d6614bad4bd2bcaa5014b3c1 (diff) | |
download | raven-87b203419793698bdf7ac0fec974a742bee3feab.tar.gz |
Handle unicode strings with import_string (refs GH-627)
-rw-r--r-- | raven/utils/imports.py | 8 | ||||
-rw-r--r-- | tests/utils/test_imports.py | 22 |
2 files changed, 29 insertions, 1 deletions
diff --git a/raven/utils/imports.py b/raven/utils/imports.py index 0b1a009..56ef18a 100644 --- a/raven/utils/imports.py +++ b/raven/utils/imports.py @@ -1,10 +1,16 @@ from __future__ import absolute_import +from . import six + def import_string(key): + # HACK(dcramer): Ensure a unicode key is still importable + if not six.PY3: + key = str(key) + if '.' not in key: return __import__(key) module_name, class_name = key.rsplit('.', 1) - module = __import__(module_name, {}, {}, [class_name]) + module = __import__(module_name, {}, {}, [class_name], 0) return getattr(module, class_name) diff --git a/tests/utils/test_imports.py b/tests/utils/test_imports.py new file mode 100644 index 0000000..e131abc --- /dev/null +++ b/tests/utils/test_imports.py @@ -0,0 +1,22 @@ +from __future__ import absolute_import + +import raven + +from raven.utils import six +from raven.utils.imports import import_string + + +def test_import_string(): + new_raven = import_string('raven') + assert new_raven is raven + + # this will test unicode on python2 + new_raven = import_string(six.text_type('raven')) + assert new_raven is raven + + new_client = import_string('raven.Client') + assert new_client is raven.Client + + # this will test unicode on python2 + new_client = import_string(six.text_type('raven.Client')) + assert new_client is raven.Client |