Files
mayan-edms/mayan/apps/events/models.py
Roberto Rosario b6976210a5 Add docstrings for almost all models
Also adds docstring to some managers and model methods.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2019-04-15 15:19:38 -04:00

127 lines
3.7 KiB
Python

from __future__ import unicode_literals
from django.conf import settings
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from actstream.models import Action
from .classes import EventType
from .managers import (
EventSubscriptionManager, ObjectEventSubscriptionManager
)
@python_2_unicode_compatible
class StoredEventType(models.Model):
"""
Model to mirror the real event classes as database objects.
"""
name = models.CharField(
max_length=64, unique=True, verbose_name=_('Name')
)
class Meta:
verbose_name = _('Stored event type')
verbose_name_plural = _('Stored event types')
def __str__(self):
return force_text(self.get_class())
def get_class(self):
return EventType.get(name=self.name)
@property
def label(self):
return self.get_class().label
@property
def namespace(self):
return self.get_class().namespace
@python_2_unicode_compatible
class EventSubscription(models.Model):
"""
This model stores the event subscriptions of an user for the entire
system.
"""
user = models.ForeignKey(
db_index=True, on_delete=models.CASCADE,
related_name='event_subscriptions', to=settings.AUTH_USER_MODEL,
verbose_name=_('User')
)
stored_event_type = models.ForeignKey(
on_delete=models.CASCADE, related_name='event_subscriptions',
to=StoredEventType, verbose_name=_('Event type')
)
objects = EventSubscriptionManager()
class Meta:
verbose_name = _('Event subscription')
verbose_name_plural = _('Event subscriptions')
def __str__(self):
return force_text(self.stored_event_type)
@python_2_unicode_compatible
class Notification(models.Model):
"""
This model keeps track of the notifications for an user. Notifications are
created when an event to which this user has been subscribed, are
commited elsewhere in the system.
"""
user = models.ForeignKey(
db_index=True, on_delete=models.CASCADE,
related_name='notifications', to=settings.AUTH_USER_MODEL,
verbose_name=_('User')
)
action = models.ForeignKey(
on_delete=models.CASCADE, related_name='notifications', to=Action,
verbose_name=_('Action')
)
read = models.BooleanField(default=False, verbose_name=_('Read'))
class Meta:
ordering = ('-action__timestamp',)
verbose_name = _('Notification')
verbose_name_plural = _('Notifications')
def __str__(self):
return force_text(self.action)
@python_2_unicode_compatible
class ObjectEventSubscription(models.Model):
content_type = models.ForeignKey(
on_delete=models.CASCADE, to=ContentType,
)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey(
ct_field='content_type',
fk_field='object_id',
)
user = models.ForeignKey(
db_index=True, on_delete=models.CASCADE,
related_name='object_subscriptions', to=settings.AUTH_USER_MODEL,
verbose_name=_('User')
)
stored_event_type = models.ForeignKey(
on_delete=models.CASCADE, related_name='object_subscriptions',
to=StoredEventType, verbose_name=_('Event type')
)
objects = ObjectEventSubscriptionManager()
class Meta:
verbose_name = _('Object event subscription')
verbose_name_plural = _('Object event subscriptions')
def __str__(self):
return force_text(self.stored_event_type)