71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from django.apps import apps
|
|
from django.utils.encoding import force_text
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from actstream import action
|
|
|
|
|
|
class Event(object):
|
|
_registry = {}
|
|
|
|
@classmethod
|
|
def all(cls):
|
|
return Event.sort(event_type_list=cls._registry.values())
|
|
|
|
@classmethod
|
|
def get(cls, name):
|
|
try:
|
|
return cls._registry[name]
|
|
except KeyError:
|
|
raise KeyError(
|
|
_('Unknown or obsolete event type: {0}'.format(name))
|
|
)
|
|
|
|
@classmethod
|
|
def get_label(cls, name):
|
|
try:
|
|
return cls.get(name=name).label
|
|
except KeyError as exception:
|
|
return force_text(exception)
|
|
|
|
@classmethod
|
|
def refresh(cls):
|
|
for event_type in cls.all():
|
|
event_type.get_type()
|
|
|
|
@staticmethod
|
|
def sort(event_type_list):
|
|
return sorted(
|
|
event_type_list, key=lambda x: x.label
|
|
)
|
|
|
|
def __init__(self, name, label):
|
|
self.name = name
|
|
self.label = label
|
|
self.event_type = None
|
|
self.__class__._registry[name] = self
|
|
|
|
def get_type(self):
|
|
if not self.event_type:
|
|
EventType = apps.get_model('events', 'EventType')
|
|
|
|
self.event_type, created = EventType.objects.get_or_create(
|
|
name=self.name
|
|
)
|
|
|
|
return self.event_type
|
|
|
|
def commit(self, actor=None, action_object=None, target=None):
|
|
if not self.event_type:
|
|
EventType = apps.get_model('events', 'EventType')
|
|
self.event_type, created = EventType.objects.get_or_create(
|
|
name=self.name
|
|
)
|
|
|
|
action.send(
|
|
actor or target, actor=actor, verb=self.name,
|
|
action_object=action_object, target=target
|
|
)
|