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