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 creationmorpfw.crud.signals.OBJECT_UPDATED
- triggered after resource is updatedmorpfw.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!")