comparison bitsyblog/blog.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 bcc3a59713c3
children 0c98d1c2c6df
comparison
equal deleted inserted replaced
69:bcc3a59713c3 70:f6a6a4b072e7
45 def datestamp(self): 45 def datestamp(self):
46 return utils.datestamp(self.date) 46 return utils.datestamp(self.date)
47 47
48 class Blog(object): 48 class Blog(object):
49 """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
58 50
59 def __call__(self, user, permissions=('public',), number=None): 51 def __call__(self, user, permissions=('public',), number=None):
60 return self.blog(user, permissions, number=number) 52 return self.blog(user, permissions, number=number)
61 53
62 def latest(self, users, number): 54 def latest(self, users, number):
85 """return entries by date""" 77 """return entries by date"""
86 78
87 79
88 def post(self, user, date, text, privacy): 80 def post(self, user, date, text, privacy):
89 """post a new blog entry""" 81 """post a new blog entry"""
90 entry = BlogEntry(date, body, privacy, user): 82 return BlogEntry(date, text, privacy, user):
91 for handler in self.handlers:
92 handler(entry)
93 83
94 def delete(self, user, datestamp): 84 def delete(self, user, datestamp):
95 """remove a blog entry""" 85 """remove a blog entry"""
96 86
97 class FileBlog(Blog): 87 class FileBlog(Blog):
98 """a blog that lives on the filesystem""" 88 """a blog that lives on the filesystem"""
99 89
100 def __init__(self, directory): 90 def __init__(self, directory):
101 Blog.__init__(self)
102 self.directory = directory 91 self.directory = directory
103 92
104 def location(self, user, permission, *path): 93 def location(self, user, permission, *path):
105 """returns which directory files are in based on permission""" 94 """returns which directory files are in based on permission"""
106 return os.path.join(self.directory, user, 'entries', permission, *path) 95 return os.path.join(self.directory, user, 'entries', permission, *path)
157 return [ self.get_entry(user, x[0], x[1]) for x in entries ] 146 return [ self.get_entry(user, x[0], x[1]) for x in entries ]
158 147
159 def post(self, user, datestamp, body, privacy): 148 def post(self, user, datestamp, body, privacy):
160 blog = file(self.location(user, privacy, datestamp), 'w') 149 blog = file(self.location(user, privacy, datestamp), 'w')
161 print >> blog, body 150 print >> blog, body
151 return Blog.post(user, datestamp, body, privacy)
162 152
163 def delete(self, user, datestamp): 153 def delete(self, user, datestamp):
164 for permission in 'public', 'secret', 'private': 154 for permission in 'public', 'secret', 'private':
165 path = self.location(user, permission, datestamp) 155 path = self.location(user, permission, datestamp)
166 if os.path.exists(path): 156 if os.path.exists(path):