kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
38 wiersze
1007 B
Python
38 wiersze
1007 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)
|