from core.models.Event import Event


class BaseObserver:

    def subscribe(self, topic, callback):

        callbacks = getattr(self, f'on_{topic}', None)

        if callbacks is None:
            return

        callbacks.append(callback)

    def notify(self, topic, subject = None, meta = None):

        callbacks = getattr(self, f'on_{topic}', None)

        if callbacks is None:
            return

        event = Event(subject, meta)

        for callback in callbacks:
            callback(event)