Mercurial > hg > bitsyblog
diff bitsyblog/bitsyblog.py @ 70:f6a6a4b072e7
complete overhaul to allow event handlers
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Wed, 07 Jul 2010 16:18:19 -0700 |
parents | 0f25fe665367 |
children | 0c98d1c2c6df |
line wrap: on
line diff
--- a/bitsyblog/bitsyblog.py Wed Jul 07 13:58:21 2010 -0700 +++ b/bitsyblog/bitsyblog.py Wed Jul 07 16:18:19 2010 -0700 @@ -60,7 +60,7 @@ cooked_bodies = {} - def __init__(self, **kw): + def __init__(self, kw, handler_args): for key in self.defaults: setattr(self, key, kw.get(key, self.defaults[key])) self.n_links = int(self.n_links) # could be a string from the .ini @@ -73,7 +73,7 @@ from user import FilespaceUsers self.users = FilespaceUsers(self.file_dir) - self.blog = FileBlog(self.file_dir) + self.blog = FileBlog(self, self.file_dir) self.cooker = self.restructuredText self.feed_items = int(self.feed_items) @@ -105,6 +105,17 @@ # for BitsyAuth self.newuser = self.users.new + # post handlers + self.handlers = [] # handlers for blog post event + for entry_point in iter_entry_points('bitsyblog.listeners'): + try: + handler = entry_point.load()(self, **handler_args.get(entry_point.name, {})) + self.handlers.append(handler) + except: + print 'Cant load entry point %s' entry_point.name + continue + + ### methods dealing with HTTP def __call__(self, environ, start_response): @@ -326,7 +337,12 @@ # write the file now = utils.datestamp(datetime.datetime.now()) location = self.user_url(request, user, now) - self.blog.post(user, now, body, privacy) + blog_entry = self.blog.post(user, now, body, privacy) + + # fire event handlers + # XXX could be done asynchronously + for handler in self.handlers: + handler(blog_entry) # point the user at the post return exc.HTTPSeeOther("Post blogged by bitsy", location=location)