示例#1
0
 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()
示例#2
0
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])
示例#3
0
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
示例#4
0
 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