def __init__(self, request): super(MainCalendarViewer, self).__init__(request) self.mgr = BlogManager(self.request.db) caltype = self.request.matchdict['caltype'] if caltype == 'blogs': self.get_ranged_blogs() elif caltype == 'posts': self.get_ranged_posts()
class BlogPostResource(DBResource): def __init__(self, request): super(BlogPostResource, self).__init__(request) self.mgr = BlogManager(self.db) self.mgr.posts.photos.set_local_path('/images') self.limit = 20 self.max_limit = 100 def collection_query(self): pass def serialize_object(self, dbobj): data = dbobj.serialize() if hasattr(dbobj, 'photos'): data['photos'] = list() photos = dbobj.photos for p in photos: filename = os.path.join('/images', p.filename) data['photos'].append(dict(url=p.url, filename=filename)) return data def collection_get(self): offset = 0 limit = self.limit GET = self.request.GET if 'offset' in GET: offset = int(GET['offset']) if 'limit' in GET: limit = int(GET['limit']) if limit > self.max_limit: limit = self.max_limit blog_name = self.request.matchdict['name'] blogpost_query = self.mgr.get_blog_posts_query(blog_name) total_count = blogpost_query.count() posts = self.mgr.get_blog_posts(blog_name, offset=offset, limit=limit) print "Blog %s has %d posts." % (blog_name, total_count) for post in posts: photos = self.mgr.get_post_photos_and_paths(post.id) photos = [u for u,s,p in photos] #photos = [dict(url=u.url, filename=u.filename) for u,s,p in photos] post.photos = photos #import pdb ; pdb.set_trace() objects = posts return dict(total_count=total_count, data=[self.serialize_object(o) for o in objects])
class MainCalendarViewer(BaseView): def __init__(self, request): super(MainCalendarViewer, self).__init__(request) self.mgr = BlogManager(self.request.db) caltype = self.request.matchdict['caltype'] if caltype == 'blogs': self.get_ranged_blogs() elif caltype == 'posts': self.get_ranged_posts() def _get_start_end_from_request(self): start = self.request.GET['start'] #year, month, day = [int(p) for p in start.split('-')] #start = datetime(year, month, day) end = self.request.GET['end'] #year, month, day = [int(p) for p in end.split('-')] #end = datetime(year, month, day) return convert_range_to_datetime(start, end) # json responses should not be lists # this method is for the fullcalendar # widget. Fullcalendar v2 uses yyyy-mm-dd # for start and end parameters, rather than # timestamps. def get_ranged_blogs(self): start, end = self._get_start_end_from_request() blogs = self.mgr.get_ranged_blogs(start, end, timestamps=False) blist = list() for b in blogs: bdata = b.serialize() bdata['title'] = b.info.name bdata['start'] = datetime.isoformat(b.updated_remote) bdata['allDay'] = False bdata['url'] = '#wibblr/viewblogposts/%s' % b.info.name blist.append(bdata) headers = [('Access-Control-Allow-Origin', '*')] self.request.response.headerlist.extend(headers) self.response = blist def get_ranged_posts(self): start = self.request.GET['start'] end = self.request.GET['end'] posts = self.mgr.posts.get_ranged_posts(start, end) blist = list() for p in posts: bdata = p.serialize() bdata['title'] = p.blog_name bdata['start'] = p.timestamp bdata['allDay'] = False blist.append(bdata) headers = [('Access-Control-Allow-Origin', '*')] self.request.response.headerlist.extend(headers) self.response = blist
def __init__(self, request): super(BlogPostResource, self).__init__(request) self.mgr = BlogManager(self.db) self.mgr.posts.photos.set_local_path('/images') self.limit = 20 self.max_limit = 100