Hi all!

In my Pyramid app I want to implement an event system, basically for plugins to hook to various events that raise in the life of the application. These events are each different, some allow one hook (by raising an exception if another hook tries to register for same event), some many, they handle various kinds of data, etc... My approach is the following:


class SomeEvent(EventBase):
    """Event raised in this or that condition, does X, requires Y, ..."""
    HANDLERS = []

    @classmethod
    Register(cls, callable):
        """Decorator that registers a handler for this event."""
        cls.HANDLERS.append(callable)
        return callable

    def __init__(self, request):
        self.request = request
        ...

    def dispatch(self):
        for h in self.HANDLERS:
            h(self)
        ...


@events.SomeEvent.Register
def some_handler(event):
    ...




So basically we have a plugin with a handler some_handler, which we register for the particular event via its decorator. Now, I don't want to reinvent the wheel, and this approach seems rather straightforward, unit-testable and simple to implement, plus the events are then self-documenting. I was wondering if there is a better solution, or perhaps I can reuse some part of the Pyramid framework? ZCL?

Also, can I reuse Venusian to scan the plugins package and thus do "auto import" of plugins at app startup time, instead of having the requirement to manually import each plugin so that the decorators would trigger and register the handlers (I really want the "plug and play" solution with dropping a module in the plugins package dir and calling it done)?


Thanks.

--

.oO V Oo.

--
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss?hl=en.

Reply via email to