import persisting_theory class ActivityRegistry(persisting_theory.Registry): look_into = 'activities' def _register_for_model(self, model, attr, value): key = model._meta.label d = self.setdefault(key, {'consumers': []}) d[attr] = value def register_serializer(self, serializer_class): model = serializer_class.Meta.model self._register_for_model(model, 'serializer', serializer_class) return serializer_class def register_consumer(self, label): def decorator(func): consumers = self[label]['consumers'] if func not in consumers: consumers.append(func) return func return decorator registry = ActivityRegistry() def send(obj): conf = registry[obj.__class__._meta.label] consumers = conf['consumers'] if not consumers: return serializer = conf['serializer'](obj) for consumer in consumers: consumer(data=serializer.data, obj=obj)