diff --git a/pyramid_formalchemy/events.py b/pyramid_formalchemy/events.py new file mode 100644 index 0000000..3fadd16 --- /dev/null +++ b/pyramid_formalchemy/events.py @@ -0,0 +1,71 @@ +import zope.component + +class IBeforeValidateEvent(zope.component.interfaces.IObjectEvent): + """A model will be validated""" + + +class IAfterSyncEvent(zope.component.interfaces.IObjectEvent): + """A model was synced with DB""" + + +class IBeforeDeleteEvent(zope.component.interfaces.IObjectEvent): + """A model will be deleted""" + + +class IBeforeRenderEvent(zope.component.interfaces.IObjectEvent): + """A model will rendered""" + + +class IBeforeShowRenderEvent(IBeforeRenderEvent): + """Show will be rendered""" + + +class IBeforeEditRenderEvent(IBeforeRenderEvent): + """Show will be rendered""" + + +class BeforeValidateEvent(zope.component.interfaces.ObjectEvent): + """A model will be validated""" + zope.interface.implements(IBeforeValidateEvent) + + def __init__(self, object, fs, request): + self.object = object + self.fs = fs + self.request = request + + +class AfterSyncEvent(zope.component.interfaces.ObjectEvent): + """A model was synced with DB""" + zope.interface.implements(IAfterSyncEvent) + + def __init__(self, object, fs, request): + self.object = object + self.fs = fs + self.request = request + +class BeforeDeleteEvent(zope.component.interfaces.ObjectEvent): + """A model will be deleted""" + zope.interface.implements(IBeforeDeleteEvent) + + def __init__(self, object, request): + self.object = object + self.request = request + + +class BeforeRenderEvent(zope.component.interfaces.ObjectEvent): + """A model will rendered""" + zope.interface.implements(IBeforeRenderEvent) + + def __init__(self, object, request, **kwargs): + self.object = object + self.request = request + self.kwargs = kwargs + +class subscriber(object): + """event subscriber decorator""" + + def __init__(self, ifaces): + self.ifaces = ifaces + + def __call__(self, func): + zope.component.provideHandler(func, self.ifaces) diff --git a/pyramidapp/pyramidapp/events.py b/pyramidapp/pyramidapp/events.py new file mode 100644 index 0000000..40851e5 --- /dev/null +++ b/pyramidapp/pyramidapp/events.py @@ -0,0 +1,29 @@ +from pyramid_formalchemy import events +from pyramidapp.models import Foo +import logging + +log = logging.getLogger(__name__) + +@events.subscriber([Foo, events.IBeforeValidateEvent]) +def before_foo_validate(context, event): + log.info("%r will be validated" % context) + +@events.subscriber([Foo, events.IAfterSyncEvent]) +def after_foo_sync(context, event): + log.info("%r foo has been synced" % context) + +@events.subscriber([Foo, events.IBeforeDeleteEvent]) +def before_foo_delete(context, event): + log.info("%r foo will be deleted" % context) + +@events.subscriber([Foo, events.IBeforeRenderEvent]) +def before_foo_render(context, event): + log.info("%r foo will be rendered" % event.object) + +@events.subscriber([Foo, events.IBeforeShowRenderEvent]) +def before_foo_show_render(context, event): + log.info("%r foo show will be rendered" % event.object) + +@events.subscriber([Foo, events.IBeforeEditRenderEvent]) +def before_foo_edit_render(context, event): + log.info("%r foo edit will be rendered" % event.object)