Skip to content
Snippets Groups Projects
record.py 1007 B
Newer Older
  • Learn to ignore specific revisions
  • import persisting_theory
    
    
    class ActivityRegistry(persisting_theory.Registry):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        look_into = "activities"
    
    
        def _register_for_model(self, model, attr, value):
            key = model._meta.label
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            d = self.setdefault(key, {"consumers": []})
    
            d[attr] = value
    
        def register_serializer(self, serializer_class):
            model = serializer_class.Meta.model
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            self._register_for_model(model, "serializer", serializer_class)
    
            return serializer_class
    
        def register_consumer(self, label):
            def decorator(func):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                consumers = self[label]["consumers"]
    
                if func not in consumers:
                    consumers.append(func)
                return func
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    
    
            return decorator
    
    
    registry = ActivityRegistry()
    
    
    def send(obj):
        conf = registry[obj.__class__._meta.label]
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        consumers = conf["consumers"]
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        serializer = conf["serializer"](obj)
    
        for consumer in consumers:
            consumer(data=serializer.data, obj=obj)