mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-03 19:39:18 +02:00
37 lines
1,007 B
Python
37 lines
1,007 B
Python
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)
|