Files
mayan-edms/mayan/apps/quotas/models.py
2017-08-02 04:10:55 -04:00

85 lines
2.4 KiB
Python

from __future__ import unicode_literals
import json
import logging
from django.db import models
from django.utils.encoding import force_text
from django.utils.module_loading import import_string
from django.utils.translation import ugettext_lazy as _
from .handlers import handler_process_signal
logger = logging.getLogger(__name__)
class Quota(models.Model):
backend_path = models.CharField(
max_length=255,
help_text=_('The dotted Python path to the backend class.'),
verbose_name=_('Backend path')
)
backend_data = models.TextField(
blank=True, verbose_name=_('Backend data')
)
enabled = models.BooleanField(default=True, verbose_name=_('Enabled'))
editable = models.BooleanField(
default=True, editable=False, verbose_name=_('Editable')
)
class Meta:
verbose_name = _('Quota')
verbose_name_plural = _('Quotas')
def __str__(self):
return force_text(self.backend_label())
def save(self, *args, **kwargs):
result = super(Quota, self).save(*args, **kwargs)
self.update_receiver()
return result
def backend_display(self):
return self.get_backend_instance().display()
def backend_label(self):
return self.get_backend_instance().label
def backend_usage(self):
return self.get_backend_instance().usage()
def dispatch_uid(self):
return 'quote_{}'.format(self.pk)
def dumps(self, data):
self.backend_data = json.dumps(data)
self.save()
def get_backend_class(self):
return import_string(self.backend_path)
def get_backend_instance(self):
return self.get_backend_class()(**self.loads())
def loads(self):
return json.loads(self.backend_data)
def update_receiver(self):
backend_instance = self.get_backend_instance()
if self.enabled:
backend_instance.signal.disconnect(
dispatch_uid=self.dispatch_uid(),
sender=backend_instance.sender
)
backend_instance.signal.connect(
handler_process_signal,
dispatch_uid=self.dispatch_uid(),
sender=backend_instance.sender
)
else:
backend_instance.signal.disconnect(
dispatch_uid=self.dispatch_uid(),
sender=backend_instance.sender
)