2021-03-12 13:45:07 +11:00

49 lines
1.4 KiB
Python

from django.conf import settings
from django.db import models
from django.core.files.storage import get_storage_class
import json
STORAGE_CLASSES = getattr(settings, 'STORAGE_CLASSES', [])
STORAGE_CLASSES.extend([
'django.core.files.storage.FileSystemStorage',
])
try:
import storages
STORAGE_CLASSES.append('storages.backends.s3boto3.S3Boto3Storage')
except ImportError:
pass
STORAGE_CLASS_OPTIONS = [ (x, x) for x in STORAGE_CLASSES ]
class UserStorage(models.Model):
""" A user defined storage
"""
owner = models.ForeignKey('auth.User',
on_delete=models.CASCADE,
null=True, blank=True)
name = models.SlugField(max_length=20,
unique=True,
help_text="Storage tag")
storage = models.CharField(max_length=255,
choices=STORAGE_CLASS_OPTIONS,
help_text="Storage class for this instance")
settings_data = models.TextField(help_text="JSON dict with key/value settings")
def instance(self):
return get_storage_class(self.storage)(**self.settings)
@property
def settings(self):
if not self.settings_data:
return {}
return json.loads(self.settings_data)
def save(self, *args, **kwargs):
# check the settings are valid
self.settings
super(UserStorage, self).save(*args, **kwargs)
def __str__(self):
return self.name