63 lines
1.6 KiB
Python
63 lines
1.6 KiB
Python
from __future__ import absolute_import
|
|
|
|
import logging
|
|
|
|
from django.db import models
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.utils.translation import ugettext
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TranslatableLabelMixin(models.Model):
|
|
_labels = {}
|
|
|
|
@property
|
|
def label(self):
|
|
try:
|
|
return self.__class__._labels[self.pk]
|
|
except KeyError:
|
|
return unicode(self.__class__)
|
|
|
|
def __setattr__(self, attr, value):
|
|
if attr == 'label':
|
|
self.__class__._labels[self.pk] = value
|
|
else:
|
|
return super(TranslatableLabelMixin, self).__setattr__(attr, value)
|
|
|
|
def __unicode__(self):
|
|
return unicode(self.label)
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
|
|
class LiveObjectsManager(models.Manager):
|
|
def get_query_set(self):
|
|
return super(LiveObjectsManager, self).get_query_set().filter(pk__in=(entry.pk for entry in self.model._registry))
|
|
|
|
|
|
class LiveObjectMixin(models.Model):
|
|
_registry = []
|
|
|
|
def save(self, *args, **kwargs):
|
|
super(LiveObjectMixin, self).save(*args, **kwargs)
|
|
self.__class__._registry.append(self)
|
|
return self
|
|
|
|
live = LiveObjectsManager()
|
|
objects = models.Manager()
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
|
|
class App(TranslatableLabelMixin, LiveObjectMixin, models.Model):
|
|
name = models.CharField(max_length=64, verbose_name=_(u'name'), unique=True)
|
|
icon = models.CharField(max_length=64, verbose_name=_(u'icon'), blank=True)
|
|
|
|
class Meta:
|
|
ordering = ('name', )
|
|
verbose_name = _(u'app')
|
|
verbose_name_plural = _(u'apps')
|