2009-12-10 00:57:23 +08:00
|
|
|
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)
|
2012-04-29 00:09:37 +08:00
|
|
|
except ImportError as e:
|
2009-12-10 00:57:23 +08:00
|
|
|
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)
|