33 lines
886 B
Python
33 lines
886 B
Python
from django.db.models.signals import post_save
|
|
|
|
from .models import UserStorage
|
|
from .multi import MultiStorage
|
|
|
|
class BYOStorage(MultiStorage):
|
|
''' Database driven Bring-Your-Own-Storage
|
|
|
|
Multiple storages can
|
|
'''
|
|
|
|
def __init__(self, config=None):
|
|
super(BYOStorage, self).__init__(config)
|
|
|
|
post_save.connect(self.handle_change, sender=UserStorage)
|
|
|
|
|
|
def handle_change(self, instance, **kwargs):
|
|
try:
|
|
del(self._cache[instance.name])
|
|
except KeyError:
|
|
pass
|
|
|
|
def get_storage(self, name):
|
|
if name not in self._cache:
|
|
|
|
# use storage from config by default
|
|
if name in self.config:
|
|
return super(BYOStorage, self).get_storage(name)
|
|
|
|
obj = UserStorage.objects.get(name=name)
|
|
self._cache[name] = obj.instance()
|
|
return self._cache[name] |