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)