Event Signal

Key events in resource management lifecycle would trigger signals which can be subscribed to. Key signals triggered by the type system includes:

  • morpfw.crud.signals.OBJECT_CREATED - triggered after resource creation

  • morpfw.crud.signals.OBJECT_UPDATED - triggered after resource is updated

  • morpfw.crud.signals.OBJECT_TOBEDELETED - triggered before deletion of resource

Registering Signal Subscriber

To hook up a function that subscribe to a signal, you can use the subscribe method on your App object:

from morpfw.crud import signals
from .app import App
from .model import PageModel


@App.subscribe(model=PageModel, signal=signals.OBJECT_CREATED)
def handle_create(request, context, signal):
    print("Object created")


@App.subscribe(model=PageModel, signal=signals.OBJECT_UPDATED)
def handle_update(request, context, signal):
    print("Object updated")


@App.subscribe(model=PageModel, signal=signals.OBJECT_TOBEDELETED)
def handle_deleted(request, context, signal):
    print("Deleting object")
    # raising exception here will prevent the deletion

Publishing Custom Event Signal

Custom event signal can be triggered using signal_publish method of App:

from morpfw.crud import signals
from .app import App
from .model import PageModel

MYSIGNAL = 'my_signal'


@App.view(model=PageModel, name='dispatch')
def dispatch(request, context):
    request.app.dispatcher(MYSIGNAL).dispatch(request, context)


@App.subscribe(model=PageModel, signal=MYSIGNAL)
def handle_signal(request, context, signal):
    print("hello world!")