2022-09-10 14:47:17 +10:00

32 lines
859 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
'''
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]