Allow both unicode and bytes dotted string in utils.import_attr

This commit is contained in:
Valentin Samir 2016-09-18 11:21:33 +02:00
parent 75b3fe4db0
commit 37c975eaf7
2 changed files with 12 additions and 4 deletions

View File

@ -13,6 +13,10 @@ Added
-----
* Add a test for login with missing parameter (username or password or both)
Fixed
-----
* Allow both unicode and bytes dotted string in utils.import_attr
v0.7.4 - 2016-09-07
===================

View File

@ -117,14 +117,18 @@ def import_attr(path):
transform a python dotted path to the attr
:param path: A dotted path to a python object or a python object
:type path: :obj:`unicode` or anything
:type path: :obj:`unicode` or :obj:`str` or anything
:return: The python object pointed by the dotted path or the python object unchanged
"""
if not isinstance(path, str):
# if we got a str, decode it to unicode (normally it should only contain ascii)
if isinstance(path, six.binary_type):
path = path.decode("utf-8")
# if path is not an unicode, return it unchanged (may be it is already the attribute to import)
if not isinstance(path, six.text_type):
return path
if "." not in path:
if u"." not in path:
ValueError("%r should be of the form `module.attr` and we just got `attr`" % path)
module, attr = path.rsplit('.', 1)
module, attr = path.rsplit(u'.', 1)
try:
return getattr(import_module(module), attr)
except ImportError: