summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2015-07-13 02:38:18 -0700
committerDavid Cramer <dcramer@gmail.com>2015-07-13 02:38:18 -0700
commit87b203419793698bdf7ac0fec974a742bee3feab (patch)
treeb0878845d2f2d60cae1be0283f2b5dc76fbde7d1
parent88f1dfd3eaf4f532d6614bad4bd2bcaa5014b3c1 (diff)
downloadraven-87b203419793698bdf7ac0fec974a742bee3feab.tar.gz
Handle unicode strings with import_string (refs GH-627)
-rw-r--r--raven/utils/imports.py8
-rw-r--r--tests/utils/test_imports.py22
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