# Future Imports for py2/3 backwards compat. from __future__ import (absolute_import, division, print_function, unicode_literals) import inspect from future import standard_library standard_library.install_aliases() def is_subclass_of(variable, required_class): return inspect.isclass(variable) and issubclass(variable, required_class) def is_iterable(variable): return hasattr(variable, '__iter__') def remove_front_slash(uri): if uri.startswith('/'): uri = uri[1:] return uri # based on : http://stackoverflow.com/questions/6480723/urllib-urlencode-doesnt-like-unicode-values-how-about-this-workaround def utf8_encoded(data): if isinstance(data, str): return data.encode('utf8') if isinstance(data, str): # ensure now it can be decoded aka 'is valid UTF-8?' data.decode('utf8') return data if isinstance(data, dict): return dict(zip(iter(data.keys()), map(utf8_encoded, iter(data.values())))) if is_iterable(data): return list(map(utf8_encoded, data)) # not sure how to handle this data type, return as-is return data