Mercurial > hg > bitsyblog
comparison bitsyblog/blog.py @ 84:e5a23f5ea14e
make cooked bodies depend on file mtime
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Thu, 17 Nov 2011 13:18:51 -0800 |
parents | 666f3051ce31 |
children | c7495fb71045 |
comparison
equal
deleted
inserted
replaced
83:666f3051ce31 | 84:e5a23f5ea14e |
---|---|
1 """blog interfaces to data for bitsy""" | 1 """blog interfaces to data for bitsy""" |
2 | 2 |
3 import datetime | |
3 import os | 4 import os |
4 import utils | 5 import utils |
5 | 6 |
6 from cStringIO import StringIO | 7 from cStringIO import StringIO |
7 from glob import glob | 8 from glob import glob |
8 from pkg_resources import iter_entry_points | 9 from pkg_resources import iter_entry_points |
9 | 10 |
10 class BlogEntry(object): | 11 class BlogEntry(object): |
11 """interface class for a blog entry""" | 12 """interface class for a blog entry""" |
12 def __init__(self, date, body, privacy, user): | 13 def __init__(self, date, body, privacy, user, modified=None): |
13 self.date = date | 14 self.date = date |
14 self.body = body | 15 self.body = body |
15 self.privacy = privacy | 16 self.privacy = privacy |
17 self._modified = modified | |
16 if user is not None: | 18 if user is not None: |
17 self.user = user | 19 self.user = user |
18 | 20 |
19 def title(self, characters=80): | 21 def title(self, characters=80): |
20 | 22 |
46 return self.body | 48 return self.body |
47 return '' | 49 return '' |
48 | 50 |
49 def datestamp(self): | 51 def datestamp(self): |
50 return utils.datestamp(self.date) | 52 return utils.datestamp(self.date) |
53 | |
54 def modified(self): | |
55 """returns the last modification date""" | |
56 return self._modified or self.datestamp() | |
57 | |
51 | 58 |
52 class Blog(object): | 59 class Blog(object): |
53 """abstract class for a users' blog""" | 60 """abstract class for a users' blog""" |
54 | 61 |
55 def __call__(self, user, permissions=('public',), number=None): | 62 def __call__(self, user, permissions=('public',), number=None): |
100 | 107 |
101 def body(self, user, datestamp, permission): | 108 def body(self, user, datestamp, permission): |
102 return file(self.location(user, permission, datestamp)).read() | 109 return file(self.location(user, permission, datestamp)).read() |
103 | 110 |
104 def get_entry(self, user, datestamp, permission): | 111 def get_entry(self, user, datestamp, permission): |
105 return BlogEntry(utils.date(datestamp), | 112 modified = datetime.datetime.fromtimestamp(os.path.getmtime(self.location(user, permission, datestamp))) |
113 return BlogEntry(utils.date(datestamp), | |
106 self.body(user, datestamp, permission), | 114 self.body(user, datestamp, permission), |
107 permission, user) | 115 permission, user, modified=modified) |
108 | 116 |
109 ### interfaces from Blog | 117 ### interfaces from Blog |
110 | 118 |
111 def blog(self, user, permissions, number=None): | 119 def blog(self, user, permissions, number=None): |
112 entries = [] | 120 entries = [] |
113 for permission in permissions: | 121 for permission in permissions: |
114 entries.extend([ (entry, permission) | 122 entries.extend([(entry, permission) |
115 for entry in os.listdir(self.location(user, permission)) ]) | 123 for entry in os.listdir(self.location(user, permission)) ]) |
116 entries.sort(key=lambda x: x[0], reverse=True) | 124 entries.sort(key=lambda x: x[0], reverse=True) |
117 | 125 |
118 if number is not None: | 126 if number is not None: |
119 entries = entries[:number] | 127 entries = entries[:number] |
120 | 128 |
121 return [ self.get_entry(user, x[0], x[1]) for x in entries ] | 129 return [ self.get_entry(user, x[0], x[1]) for x in entries ] |
122 | 130 |
142 index += 1 | 150 index += 1 |
143 | 151 |
144 # get the blog entries | 152 # get the blog entries |
145 entries = [] | 153 entries = [] |
146 for permission in permissions: | 154 for permission in permissions: |
147 entries.extend([ (os.path.split(entry)[-1], permission) | 155 entries.extend([(os.path.split(entry)[-1], permission) |
148 for entry in glob(os.path.join(self.location(user, permission), glob_expr)) ]) | 156 for entry in glob(os.path.join(self.location(user, permission), glob_expr))]) |
149 entries.sort(key=lambda x: x[0], reverse=True) | 157 entries.sort(key=lambda x: x[0], reverse=True) |
150 return [ self.get_entry(user, x[0], x[1]) for x in entries ] | 158 return [ self.get_entry(user, x[0], x[1]) for x in entries ] |
151 | 159 |
152 def post(self, user, datestamp, body, privacy): | 160 def post(self, user, datestamp, body, privacy): |
153 blog = file(self.location(user, privacy, datestamp), 'w') | 161 blog = file(self.location(user, privacy, datestamp), 'w') |