1

The question here is whether something like this already exists or, if not, whether there's a better way to achieve it than what I describe below.

I need to allow an arbitrary Principal (User, Group, Site Admin) to add Event Sinks (like email addresses, Webhook URLs, etc.) to the system (through the web interface) and, for each one, specify which kinds of <Event Source, Event Type> should be sent to it. Since I'm doing this for ReviewBoard, I'll give a concrete example with a hypothetical implementation:

  1. John creates a new event_sink (a webhook), identified by postbin1;
  2. John specifies that postbin1 will receive events of type publish on ReviewRequests (a class-level subscription -- the source_id is unspecified);
  3. When a new review_request is created, the Event Manager, lists (through a JOIN with subscriptions) all event_sinks interested in ReviewRequests and creates a (instance-level) subscription binding them as a listener to their particular event_type (the name of a django signal) of interest and to the specific review_request;
  4. When that review_request gets published, the Event Manager (who listens to the publish signal) lists all event_sinks interested in that review_request instance and the publish signal and dispatches the signal parameters to their sink method.
  5. The Webhook event_sink marshals the data however pleases it and POSTs it to its URL.

This is the schema I thought of: alt text http://bayimg.com/image/aadgoaacd.jpg

I'm about to start implementing this myself, but I just want to make sure I'm not reinventing the wheel. Couldn't find anything on Google. Ready-to-use package names, half-way package names that will help me, and/or criticism to my DIY approach are all welcome.

agentofuser
  • 8,987
  • 11
  • 54
  • 85

1 Answers1

1

django-notification by James Tauber gets you a good chunk of the way there. I would love to see that app mature if you're willing to work off of that codebase it would be great.

Adam Nelson
  • 7,932
  • 11
  • 44
  • 64