comparison bitsyblog/blog.py @ 106:c7495fb71045

more output
author Jeff Hammel <k0scist@gmail.com>
date Thu, 21 Apr 2016 15:17:39 -0700
parents e5a23f5ea14e
children 6e7544e256b6
comparison
equal deleted inserted replaced
105:67e01fc5e360 106:c7495fb71045
1 """blog interfaces to data for bitsy""" 1 """
2 blog models
3 """
2 4
5 # imports
3 import datetime 6 import datetime
4 import os 7 import os
8 import sys
5 import utils 9 import utils
6
7 from cStringIO import StringIO 10 from cStringIO import StringIO
8 from glob import glob 11 from glob import glob
9 from pkg_resources import iter_entry_points 12 from pkg_resources import iter_entry_points
10 13
14
11 class BlogEntry(object): 15 class BlogEntry(object):
12 """interface class for a blog entry""" 16 """interface class for a blog entry"""
17
13 def __init__(self, date, body, privacy, user, modified=None): 18 def __init__(self, date, body, privacy, user, modified=None):
14 self.date = date 19 self.date = date
15 self.body = body 20 self.body = body
16 self.privacy = privacy 21 self.privacy = privacy
17 self._modified = modified 22 self._modified = modified
68 for user in users: 73 for user in users:
69 blog.extend(self.blog(user, ('public',), number)) 74 blog.extend(self.blog(user, ('public',), number))
70 blog.sort(key=lambda entry: entry.date, reverse=True) 75 blog.sort(key=lambda entry: entry.date, reverse=True)
71 return blog[:number] 76 return blog[:number]
72 77
73 # interfaces for subclasses 78 ### interfaces for subclasses
74 79
75 def blog(self, user, permissions, number=None): 80 def blog(self, user, permissions, number=None):
76 """ 81 """
77 return the user's blog sorted in reverse date order 82 return the user's blog sorted in reverse date order
78 if number is None, the entire blog is returned 83 if number is None, the entire blog is returned
93 return BlogEntry(date, text, privacy, user) 98 return BlogEntry(date, text, privacy, user)
94 99
95 def delete(self, user, datestamp): 100 def delete(self, user, datestamp):
96 """remove a blog entry""" 101 """remove a blog entry"""
97 102
103
98 class FileBlog(Blog): 104 class FileBlog(Blog):
99 """a blog that lives on the filesystem""" 105 """a blog that lives on the filesystem"""
100 106
101 def __init__(self, directory): 107 def __init__(self, directory):
102 self.directory = directory 108 self.directory = directory
108 def body(self, user, datestamp, permission): 114 def body(self, user, datestamp, permission):
109 return file(self.location(user, permission, datestamp)).read() 115 return file(self.location(user, permission, datestamp)).read()
110 116
111 def get_entry(self, user, datestamp, permission): 117 def get_entry(self, user, datestamp, permission):
112 modified = datetime.datetime.fromtimestamp(os.path.getmtime(self.location(user, permission, datestamp))) 118 modified = datetime.datetime.fromtimestamp(os.path.getmtime(self.location(user, permission, datestamp)))
113 return BlogEntry(utils.date(datestamp), 119 try:
114 self.body(user, datestamp, permission), 120 return BlogEntry(utils.date(datestamp),
115 permission, user, modified=modified) 121 self.body(user, datestamp, permission),
122 permission,
123 user,
124 modified=modified)
125 except Exception:
126 sys.stderr.write("Error getting blog entry for datestamp: '{0}'\n".format(datestamp))
127 raise
116 128
117 ### interfaces from Blog 129 ### interfaces from Blog
118 130
119 def blog(self, user, permissions, number=None): 131 def blog(self, user, permissions, number=None):
120 entries = [] 132 entries = []