from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.utils.importlib import import_module def get_storage(import_path): """ Imports the message storage class described by import_path, where import_path is the full Python path to the class. """ try: dot = import_path.rindex('.') except ValueError: raise ImproperlyConfigured("%s isn't a Python path." % import_path) module, classname = import_path[:dot], import_path[dot + 1:] try: mod = import_module(module) except ImportError, e: raise ImproperlyConfigured('Error importing module %s: "%s"' % (module, e)) try: return getattr(mod, classname) except AttributeError: raise ImproperlyConfigured('Module "%s" does not define a "%s" ' 'class.' % (module, classname)) # Callable with the same interface as the storage classes i.e. accepts a # 'request' object. It is wrapped in a lambda to stop 'settings' being used at # the module level default_storage = lambda request: get_storage(settings.MESSAGE_STORAGE)(request)