comparison bitsyblog/blog.py @ 69:bcc3a59713c3

1st steps to have blog post entry handler plugins
author Jeff Hammel <jhammel@mozilla.com>
date Wed, 07 Jul 2010 13:58:21 -0700
parents e3823be6a423
children f6a6a4b072e7
comparison
equal deleted inserted replaced
68:3550159184cf 69:bcc3a59713c3
3 import os 3 import os
4 import utils 4 import utils
5 5
6 from cStringIO import StringIO 6 from cStringIO import StringIO
7 from glob import glob 7 from glob import glob
8 from pkg_resources import iter_entry_points
8 9
9 class BlogEntry(object): 10 class BlogEntry(object):
10 """interface class for a blog entry""" 11 """interface class for a blog entry"""
11 def __init__(self, date, body, privacy, user): 12 def __init__(self, date, body, privacy, user):
12 self.date = date 13 self.date = date
44 def datestamp(self): 45 def datestamp(self):
45 return utils.datestamp(self.date) 46 return utils.datestamp(self.date)
46 47
47 class Blog(object): 48 class Blog(object):
48 """abstract class for a users' blog""" 49 """abstract class for a users' blog"""
50 def __init__(self):
51 self.handlers = [] # handlers for blog post event
52 for entry_point in iter_entry_points('bitsyblog.listeners'):
53 try:
54 handler = entry_point.load()
55 self.handlers.append(handler)
56 except:
57 continue
49 58
50 def __call__(self, user, permissions=('public',), number=None): 59 def __call__(self, user, permissions=('public',), number=None):
51 return self.blog(user, permissions, number=number) 60 return self.blog(user, permissions, number=number)
52 61
53 def latest(self, users, number): 62 def latest(self, users, number):
76 """return entries by date""" 85 """return entries by date"""
77 86
78 87
79 def post(self, user, date, text, privacy): 88 def post(self, user, date, text, privacy):
80 """post a new blog entry""" 89 """post a new blog entry"""
81 90 entry = BlogEntry(date, body, privacy, user):
91 for handler in self.handlers:
92 handler(entry)
82 93
83 def delete(self, user, datestamp): 94 def delete(self, user, datestamp):
84 """remove a blog entry""" 95 """remove a blog entry"""
85 96
86 class FileBlog(Blog): 97 class FileBlog(Blog):
87 """a blog that lives on the filesystem""" 98 """a blog that lives on the filesystem"""
88 99
89 def __init__(self, directory): 100 def __init__(self, directory):
101 Blog.__init__(self)
90 self.directory = directory 102 self.directory = directory
91 103
92 def location(self, user, permission, *path): 104 def location(self, user, permission, *path):
93 """returns which directory files are in based on permission""" 105 """returns which directory files are in based on permission"""
94 return os.path.join(self.directory, user, 'entries', permission, *path) 106 return os.path.join(self.directory, user, 'entries', permission, *path)