Example #1
0
    def getGroupUnpublished(self,
                            blogId,
                            groupId,
                            typeId=None,
                            authorId=None,
                            thumbSize=None,
                            offset=None,
                            limit=None,
                            q=None):
        '''
        @see: IBlogPostService.getUnpublished
        '''
        assert q is None or isinstance(
            q, QBlogPostUnpublished), 'Invalid query %s' % q

        updateLastAccessOn(self.session(), groupId)

        sql = self._buildQuery(blogId, typeId, None, authorId, q)
        sql = sql.filter(BlogPostMapped.PublishedOn == None)

        # blog collaborator group
        sql = sql.join(
            BlogCollaboratorGroupMemberMapped,
            BlogCollaboratorGroupMemberMapped.BlogCollaborator ==
            BlogPostMapped.Creator)
        sql = sql.filter(BlogCollaboratorGroupMemberMapped.Group == groupId)

        sql = sql.order_by(desc_op(BlogPostMapped.Creator))
        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._addImages(sql.distinct())
Example #2
0
    def reorder(self, blogId, postId, refPostId, before=True):
        '''
        @see: IBlogPostService.reorder
        '''
        sql = self.session().query(BlogPostMapped.Order)
        sql = sql.filter(BlogPostMapped.Blog == blogId)
        sql = sql.filter(BlogPostMapped.Id == refPostId)
        order = sql.scalar()

        if not order: raise InputError(Ref(_('Invalid before post')))

        sql = self.session().query(BlogPostMapped.Order)
        sql = sql.filter(BlogPostMapped.Blog == blogId)
        sql = sql.filter(BlogPostMapped.Id != postId)
        if before:
            sql = sql.filter(BlogPostMapped.Order > order)
            sql = sql.order_by(BlogPostMapped.Order)
        else:
            sql = sql.filter(BlogPostMapped.Order < order)
            sql = sql.order_by(desc_op(BlogPostMapped.Order))

        sql = sql.limit(1)

        orderPrev = sql.scalar()

        if orderPrev: order = (order + orderPrev) / 2
        elif before: order += 1
        else: order -= 1

        post = self.getById(blogId, postId)
        assert isinstance(post, BlogPostMapped)

        post.Order = order
        post.CId = self._nextCId()
        self.session().merge(post)
Example #3
0
async def get_messages(
        chat_id: int,
        pagination: Pagination = Depends(get_pagination),
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get a list of all messages for a specific chat."""

    chat = crud.get_chat(db, current_user.user_id, chat_id)

    if not chat:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"The chat with id {chat_id} does not exist.",
        )

    messages = (db.query(
        models.Message).filter(models.Message.chat_id == chat_id).order_by(
            desc_op(models.Message.sent_datetime)).limit(
                pagination.count).offset(pagination.page *
                                         pagination.count).all())

    if not messages:
        return []

    return [
        MessageResponse(
            message_id=message.message_id,
            contact_id=message.contact_id,
            sent_datetime=message.sent_datetime,
            message=prepare_message(chat.chat_id, message.message_id,
                                    message.message),
        ) for message in messages
    ]
    def reorder(self, blogTypeId, postId, refPostId, before=True):
        '''
        @see: IBlogPostService.reorder
        '''
        sql = self.session().query(BlogTypePostMapped.Order)
        sql = sql.filter(BlogTypePostMapped.BlogType == blogTypeId)
        sql = sql.filter(BlogTypePostMapped.Id == refPostId)
        order = sql.scalar()

        if order is None: raise InputError(Ref(_('Invalid before post')))

        sql = self.session().query(BlogTypePostMapped.Order)
        sql = sql.filter(BlogTypePostMapped.BlogType == blogTypeId)
        sql = sql.filter(BlogTypePostMapped.Id != postId)
        if before:
            sql = sql.filter(BlogTypePostMapped.Order < order)
            sql = sql.order_by(desc_op(BlogTypePostMapped.Order))
        else:
            sql = sql.filter(BlogTypePostMapped.Order > order)
            sql = sql.order_by(BlogTypePostMapped.Order)
        sql = sql.limit(1)
        orderPrev = sql.scalar()

        if orderPrev is not None: order = (order + orderPrev) / 2
        else: order = order - 1 if before else order + 1

        post = self.getById(blogTypeId, postId)
        assert isinstance(post, BlogTypePostMapped)

        post.Order = order
        self.session().merge(post)
        self.session().flush((post,))
Example #5
0
    def reorder(self, blogTypeId, postId, refPostId, before=True):
        '''
        @see: IBlogPostService.reorder
        '''
        sql = self.session().query(BlogTypePostMapped.Order)
        sql = sql.filter(BlogTypePostMapped.BlogType == blogTypeId)
        sql = sql.filter(BlogTypePostMapped.Id == refPostId)
        order = sql.scalar()

        if order is None: raise InputError(Ref(_('Invalid before post')))

        sql = self.session().query(BlogTypePostMapped.Order)
        sql = sql.filter(BlogTypePostMapped.BlogType == blogTypeId)
        sql = sql.filter(BlogTypePostMapped.Id != postId)
        if before:
            sql = sql.filter(BlogTypePostMapped.Order < order)
            sql = sql.order_by(desc_op(BlogTypePostMapped.Order))
        else:
            sql = sql.filter(BlogTypePostMapped.Order > order)
            sql = sql.order_by(BlogTypePostMapped.Order)
        sql = sql.limit(1)
        orderPrev = sql.scalar()

        if orderPrev is not None: order = (order + orderPrev) / 2
        else: order = order - 1 if before else order + 1

        post = self.getById(blogTypeId, postId)
        assert isinstance(post, BlogTypePostMapped)

        post.Order = order
        self.session().merge(post)
        self.session().flush((post, ))
Example #6
0
    def reorder(self, blogId, postId, refPostId, before=True):
        '''
        @see: IBlogPostService.reorder
        '''
        sql = self.session().query(BlogPostMapped.Order)
        sql = sql.filter(BlogPostMapped.Blog == blogId)
        sql = sql.filter(BlogPostMapped.Id == refPostId)
        order = sql.scalar()

        if not order: raise InputError(Ref(_('Invalid before post')))

        sql = self.session().query(BlogPostMapped.Order)
        sql = sql.filter(BlogPostMapped.Blog == blogId)
        sql = sql.filter(BlogPostMapped.Id != postId)
        if before:
            sql = sql.filter(BlogPostMapped.Order > order)
            sql = sql.order_by(BlogPostMapped.Order)
        else:
            sql = sql.filter(BlogPostMapped.Order < order)
            sql = sql.order_by(desc_op(BlogPostMapped.Order))

        sql = sql.limit(1)

        orderPrev = sql.scalar()

        if orderPrev: order = (order + orderPrev) / 2
        elif before: order += 1
        else: order -= 1

        post = self.getById(blogId, postId)
        assert isinstance(post, BlogPostMapped)

        post.Order = order
        post.CId = self._nextCId()
        self.session().merge(post)
Example #7
0
    def getOwned(self,
                 blogId,
                 creatorId,
                 typeId=None,
                 thumbSize=None,
                 offset=None,
                 limit=None,
                 q=None):
        '''
        @see: IBlogPostService.getOwned
        '''
        assert q is None or isinstance(q, QBlogPost), 'Invalid query %s' % q
        sql = self._buildQuery(blogId, typeId, creatorId, None, q)
        sql = sql.join(CollaboratorMapped,
                       CollaboratorMapped.Id == BlogPostMapped.Author)
        sql = sql.join(SourceMapped,
                       SourceMapped.Id == CollaboratorMapped.Source)
        sql = sql.filter(SourceMapped.Name == self.internal_source_type)

        if q and QBlogPost.isPublished in q:
            if q.isPublished.value:
                sql = sql.filter(BlogPostMapped.PublishedOn != None)
            else:
                sql = sql.filter(BlogPostMapped.PublishedOn == None)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._addImages(sql.all(), thumbSize)
Example #8
0
    def getPublished(self, blogId, typeId=None, creatorId=None, authorId=None, thumbSize=None, offset=None, limit=None,
                     detailed=False, q=None):
        '''
        @see: IBlogPostService.getPublished
        '''
        assert q is None or isinstance(q, QBlogPostPublished), 'Invalid query %s' % q

        sql = self._filterQuery(blogId, typeId, creatorId, authorId)
        sqlMore = None
        if q:
            if QWithCId.cId in q and q.cId:
                sql = sql.filter(BlogPostMapped.CId != None)
#                sql = sql.filter((BlogPostMapped.PublishedOn != None) | ((BlogPostMapped.CId != None) & (BlogPostMapped.DeletedOn == None)))
                sqlMore = buildQuery(sql, q, BlogPostMapped, exclude=QWithCId.cId)
            sql = buildQuery(sql, q, BlogPostMapped)
        if not sqlMore:
            sql = sql.filter((BlogPostMapped.PublishedOn != None) & (BlogPostMapped.DeletedOn == None))

        sql = sql.order_by(desc_op(BlogPostMapped.Order))

        sqlLimit = buildLimits(sql, offset, limit)
        posts = self._addImages(self._trimPosts(sqlLimit.all()), thumbSize)
        if detailed:
            posts = IterPost(posts, sql.count(), offset, limit)

            posts.lastCId = self.session().query(func.MAX(BlogPostMapped.CId)).filter(BlogPostMapped.Blog == blogId).scalar()
            if sqlMore: posts.offsetMore = sqlMore.count()
            else: posts.offsetMore = posts.total
        return posts
Example #9
0
    def getUnpublishedBySource(self, sourceId, thumbSize=None, offset=None, limit=None, detailed=False, q=None):
        '''
        @see: IBlogPostService.getUnpublished
        '''
        assert q is None or isinstance(q, QBlogPostUnpublished), 'Invalid query %s' % q
        
        postVerification = aliased(PostVerificationMapped, name='post_verification_filter')
              
        sql = self.session().query(BlogPostMapped)
        sql = sql.filter(BlogPostMapped.Feed == sourceId)
        
        deleted = False
        if q:
            if QBlogPostUnpublished.isDeleted in q:
                deleted = q.isDeleted.value                
            sql = buildQuery(sql, q, BlogPostMapped)
        
        if q:
            if QWithCId.search in q:
                all = self._processLike(q.search.ilike) if q.search.ilike is not None else self._processLike(q.search.like)
                sql = sql.filter(or_(BlogPostMapped.Meta.ilike(all), BlogPostMapped.CreatedOn.ilike(all), \
                                     BlogPostMapped.Content.ilike(all), BlogPostMapped.ContentPlain.ilike(all), \
                                     ))
                
            if QWithCId.status in q or QWithCId.checker in q:
                sql = sql.join(postVerification, postVerification.Id == BlogPostMapped.Id)     
                sql = sql.join(VerificationStatusMapped, VerificationStatusMapped.id == postVerification.statusId) 
                
            if QWithCId.status in q: 
                sql = sql.filter(VerificationStatusMapped.Key == q.status.equal) 
                
            if QWithCId.checker in q: 
                sql = sql.filter(postVerification.Checker == q.checker.equal)
                
            if (QWithCId.cId not in q) or (QWithCId.cId in q and QWithCId.cId.start not in q \
               and QWithCId.cId.end not in q and QWithCId.cId.since not in q and QWithCId.cId.until not in q):
                
                sql = sql.filter(BlogPostMapped.PublishedOn == None) 
                if deleted: sql = sql.filter(BlogPostMapped.DeletedOn != None)
                else: sql = sql.filter(BlogPostMapped.DeletedOn == None)
                
        else: sql = sql.filter((BlogPostMapped.PublishedOn == None) & (BlogPostMapped.DeletedOn == None))     
                                   
        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sqlLimit = buildLimits(sql, offset, limit)
 
        posts = self._addImages(self._trimPosts(sqlLimit.distinct(), deleted= not deleted, unpublished=False, published=True), thumbSize)
        if detailed:
            posts = IterPost(posts, sql.distinct().count(), offset, limit)
            
            lastCidSql = self.session().query(func.MAX(BlogPostMapped.CId))
            lastCidSql = lastCidSql.join(CollaboratorMapped, BlogPostMapped.Creator == CollaboratorMapped.User)
            lastCidSql = lastCidSql.filter(CollaboratorMapped.Source == sourceId)
            
            posts.lastCId = lastCidSql.scalar()
            
        return posts
Example #10
0
    def getAll(self, blogId, typeId=None, creatorId=None, authorId=None, offset=None, limit=None, q=None):
        '''
        @see: IBlogPostService.getAll
        '''
        assert q is None or isinstance(q, QBlogPost), 'Invalid query %s' % q
        sql = self._buildQuery(blogId, typeId, creatorId, authorId, q)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._trimmDeleted(sql.all())
Example #11
0
    def getGroupUnpublished(self, blogId, groupId, typeId=None, authorId=None, thumbSize=None, offset=None, limit=None, q=None):
        '''
        @see: IBlogPostService.getUnpublished
        '''
        assert q is None or isinstance(q, QBlogPostUnpublished), 'Invalid query %s' % q

        updateLastAccessOn(self.session(), groupId)

        sql = self._buildQuery(blogId, typeId, None, authorId, q)
        sql = sql.filter(BlogPostMapped.PublishedOn == None)

        # blog collaborator group
        sql = sql.join(BlogCollaboratorGroupMemberMapped, BlogCollaboratorGroupMemberMapped.BlogCollaborator == BlogPostMapped.Creator)
        sql = sql.filter(BlogCollaboratorGroupMemberMapped.Group == groupId)

        sql = sql.order_by(desc_op(BlogPostMapped.Creator))
        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._addImages(sql.distinct())
Example #12
0
    def getAll(self, blogId, typeId=None, creatorId=None, authorId=None, thumbSize=None, offset=None, limit=None, q=None):
        '''
        @see: IBlogPostService.getAll
        '''
        assert q is None or isinstance(q, QBlogPost), 'Invalid query %s' % q
        sql = self._buildQuery(blogId, typeId, creatorId, authorId, q)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._addImages(sql.all(), thumbSize)
Example #13
0
    def getAll(self, blogTypeId, typeId=None, offset=None, limit=None, q=None):
        '''
        @see: IBlogPostService.getAll
        '''
        assert q is None or isinstance(q, QBlogTypePost), 'Invalid query %s' % q
        sql = self._buildQuery(blogTypeId, typeId, q)

        sql = sql.order_by(desc_op(BlogTypePostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._trimmDeleted(sql.all())
Example #14
0
def get_last_message(db: Session, user_id: int, chat_id: int):
    model = (db.query(
        models.Message).filter(models.Message.chat_id == chat_id).order_by(
            desc_op(models.Message.sent_datetime)).first())
    return (schemas.MessageResponse(
        message_id=model.message_id,
        contact_id=model.contact_id,
        message=json.loads(model.message),
        sent_datetime=model.sent_datetime,
    ) if model else None)
Example #15
0
    def getUnpublished(self, blogId, typeId=None, creatorId=None, authorId=None, offset=None, limit=None, q=None):
        '''
        @see: IBlogPostService.getUnpublished
        '''
        assert q is None or isinstance(q, QBlogPostUnpublished), 'Invalid query %s' % q
        sql = self._buildQuery(blogId, typeId, creatorId, authorId, q)
        sql = sql.filter(BlogPostMapped.PublishedOn == None)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._trimmDeleted(sql.all())
Example #16
0
    def getOwned(self, blogId, creatorId, typeId=None, thumbSize=None, offset=None, limit=None, q=None):
        '''
        @see: IBlogPostService.getOwned
        '''
        assert q is None or isinstance(q, QBlogPost), 'Invalid query %s' % q
        sql = self._buildQuery(blogId, typeId, creatorId, None, q)
        if q and QBlogPost.isPublished in q:
            if q.isPublished.value: sql = sql.filter(BlogPostMapped.PublishedOn != None)
            else: sql = sql.filter(BlogPostMapped.PublishedOn == None)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._addImages(sql.all(), thumbSize)
Example #17
0
    def getOwned(self, blogId, creatorId, typeId=None, offset=None, limit=None, q=None):
        '''
        @see: IBlogPostService.getOwned
        '''
        assert q is None or isinstance(q, QBlogPost), 'Invalid query %s' % q
        sql = self._buildQuery(blogId, typeId, creatorId, None, q)
        if q and QBlogPost.isPublished in q:
            if q.isPublished.value: sql = sql.filter(BlogPostMapped.PublishedOn != None)
            else: sql = sql.filter(BlogPostMapped.PublishedOn == None)
        #sql = sql.filter(BlogPostMapped.Author == None)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sql = buildLimits(sql, offset, limit)
        return self._trimmDeleted(sql.all())
Example #18
0
    def getPublished(self, blogId, typeId=None, creatorId=None, authorId=None, offset=None, limit=None, detailed=False,
                     q=None):
        '''
        @see: IBlogPostService.getPublished
        '''
        assert q is None or isinstance(q, QBlogPostPublished), 'Invalid query %s' % q

        sql = self._buildQuery(blogId, typeId, creatorId, authorId, q)
        sql = sql.filter(BlogPostMapped.PublishedOn != None)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sqlLimit = buildLimits(sql, offset, limit)
        if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return self._trimmDeleted(sqlLimit.all())
Example #19
0
    def getUnpublished(self, blogId, typeId=None, creatorId=None, authorId=None, thumbSize=None, offset=None, limit=None,
                       detailed=False, q=None):
        '''
        @see: IBlogPostService.getUnpublished
        '''
        assert q is None or isinstance(q, QBlogPostUnpublished), 'Invalid query %s' % q
        
        postVerification = aliased(PostVerificationMapped, name='post_verification_filter')
        
        sql = self._filterQuery(blogId, typeId, creatorId, authorId, q)

        deleted = False
        if q:
            if QBlogPostUnpublished.isDeleted in q:
                deleted = q.isDeleted.value  
                
            if QWithCId.cId in q and q.cId:
                sql = sql.filter(BlogPostMapped.CId != None)
            sql = buildQuery(sql, q, BlogPostMapped)
            
            if QWithCId.status in q or QWithCId.checker in q:
                sql = sql.join(postVerification, postVerification.Id == BlogPostMapped.Id)     
                sql = sql.join(VerificationStatusMapped, VerificationStatusMapped.id == postVerification.statusId) 
                
            if QWithCId.status in q: 
                sql = sql.filter(VerificationStatusMapped.Key == q.status.equal) 
                
            if QWithCId.checker in q: 
                sql = sql.filter(postVerification.Checker == q.checker.equal)
                
            if QWithCId.cId not in q:
                sql = sql.filter(BlogPostMapped.PublishedOn == None) 
                if deleted: sql = sql.filter(BlogPostMapped.DeletedOn != None)
                else: sql = sql.filter(BlogPostMapped.DeletedOn == None)
                
        else: sql = sql.filter((BlogPostMapped.PublishedOn == None) & (BlogPostMapped.DeletedOn == None))    

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        
        sqlLimit = buildLimits(sql, offset, limit)
        posts = self._addImages(self._trimPosts(sqlLimit.distinct(), unpublished=False, published=True), thumbSize)
        if detailed:
            posts = IterPost(posts, sql.distinct().count(), offset, limit)
            posts.lastCId = self.session().query(func.MAX(BlogPostMapped.CId)).filter(BlogPostMapped.Blog == blogId).scalar()
        return posts
Example #20
0
    def getPublished(self,
                     blogId,
                     typeId=None,
                     creatorId=None,
                     authorId=None,
                     thumbSize=None,
                     offset=None,
                     limit=None,
                     detailed=False,
                     q=None):
        '''
        @see: IBlogPostService.getPublished
        '''
        assert q is None or isinstance(
            q, QBlogPostPublished), 'Invalid query %s' % q

        sql = self._filterQuery(blogId, typeId, creatorId, authorId, q)
        sqlMore = None
        if q:
            if QWithCId.cId in q and q.cId:
                sql = sql.filter(BlogPostMapped.CId != None)
                #                sql = sql.filter((BlogPostMapped.PublishedOn != None) | ((BlogPostMapped.CId != None) & (BlogPostMapped.DeletedOn == None)))
                sqlMore = buildQuery(sql,
                                     q,
                                     BlogPostMapped,
                                     exclude=QWithCId.cId)
            sql = buildQuery(sql, q, BlogPostMapped)
        if not sqlMore:
            sql = sql.filter((BlogPostMapped.PublishedOn != None)
                             & (BlogPostMapped.DeletedOn == None))

        sql = sql.order_by(desc_op(BlogPostMapped.Order))

        sqlLimit = buildLimits(sql, offset, limit)
        posts = self._addImages(self._trimPosts(sqlLimit.all()), thumbSize)
        if detailed:
            posts = IterPost(posts, sql.count(), offset, limit)

            posts.lastCId = self.session().query(func.MAX(
                BlogPostMapped.CId)).filter(
                    BlogPostMapped.Blog == blogId).scalar()
            if sqlMore: posts.offsetMore = sqlMore.count()
            else: posts.offsetMore = posts.total
        return posts
Example #21
0
async def get_chats(
        pagination: Pagination = Depends(get_pagination),
        current_user: UserResponse = Depends(get_current_verified_user),
        db: Session = Depends(get_db),
):
    """Get a list of all chats the user has."""

    chats_with_message = (db.query(
        models.Chat,
        models.Connector,
        models.Message,
        func.max(models.Message.sent_datetime),
    ).join(models.Connector).join(models.Message).group_by(
        models.Message.chat_id).filter(
            models.Connector.user_id == current_user.user_id).order_by(
                desc_op(models.Message.sent_datetime)).limit(
                    pagination.count).offset(pagination.page *
                                             pagination.count).all())

    if not chats_with_message:
        return []

    return [
        ChatResponse(
            chat_id=chat_with_message[0].chat_id,
            connector_id=chat_with_message[0].connector_id,
            name=chat_with_message[0].name,
            is_muted=chat_with_message[0].is_muted,
            is_archived=chat_with_message[0].is_archived,
            pin_position=chat_with_message[0].pin_position,
            last_message=schemas.MessageResponse(
                message_id=chat_with_message[2].message_id,
                contact_id=chat_with_message[2].contact_id,
                message=json.loads(chat_with_message[2].message),
                sent_datetime=chat_with_message[2].sent_datetime,
            ) if chat_with_message[2] else None,
        ) for chat_with_message in chats_with_message
    ]
Example #22
0
def history():
    histories = Histories.query.order_by(desc_op(
        Histories.created_time)).limit(20)
    return render_template('history.html', nav='history', histories=histories)
Example #23
0
    def getUnpublishedBySource(self,
                               sourceId,
                               thumbSize=None,
                               offset=None,
                               limit=None,
                               detailed=False,
                               q=None):
        '''
        @see: IBlogPostService.getUnpublished
        '''
        assert q is None or isinstance(
            q, QBlogPostUnpublished), 'Invalid query %s' % q

        postVerification = aliased(PostVerificationMapped,
                                   name='post_verification_filter')

        sql = self.session().query(BlogPostMapped)
        sql = sql.filter(BlogPostMapped.Feed == sourceId)

        deleted = False
        if q:
            if QBlogPostUnpublished.isDeleted in q:
                deleted = q.isDeleted.value
            sql = buildQuery(sql, q, BlogPostMapped)

        if q:
            if QWithCId.search in q:
                all = self._processLike(
                    q.search.ilike
                ) if q.search.ilike is not None else self._processLike(
                    q.search.like)
                sql = sql.filter(or_(BlogPostMapped.Meta.ilike(all), BlogPostMapped.CreatedOn.ilike(all), \
                                     BlogPostMapped.Content.ilike(all), BlogPostMapped.ContentPlain.ilike(all), \
                                     ))

            if QWithCId.status in q or QWithCId.checker in q:
                sql = sql.join(postVerification,
                               postVerification.Id == BlogPostMapped.Id)
                sql = sql.join(
                    VerificationStatusMapped,
                    VerificationStatusMapped.id == postVerification.statusId)

            if QWithCId.status in q:
                sql = sql.filter(
                    VerificationStatusMapped.Key == q.status.equal)

            if QWithCId.checker in q:
                sql = sql.filter(postVerification.Checker == q.checker.equal)

            if (QWithCId.cId not in q) or (QWithCId.cId in q and QWithCId.cId.start not in q \
               and QWithCId.cId.end not in q and QWithCId.cId.since not in q and QWithCId.cId.until not in q):

                sql = sql.filter(BlogPostMapped.PublishedOn == None)
                if deleted: sql = sql.filter(BlogPostMapped.DeletedOn != None)
                else: sql = sql.filter(BlogPostMapped.DeletedOn == None)

        else:
            sql = sql.filter((BlogPostMapped.PublishedOn == None)
                             & (BlogPostMapped.DeletedOn == None))

        sql = sql.order_by(desc_op(BlogPostMapped.Order))
        sqlLimit = buildLimits(sql, offset, limit)

        posts = self._addImages(
            self._trimPosts(sqlLimit.distinct(),
                            deleted=not deleted,
                            unpublished=False,
                            published=True), thumbSize)
        if detailed:
            posts = IterPost(posts, sql.distinct().count(), offset, limit)

            lastCidSql = self.session().query(func.MAX(BlogPostMapped.CId))
            lastCidSql = lastCidSql.join(
                CollaboratorMapped,
                BlogPostMapped.Creator == CollaboratorMapped.User)
            lastCidSql = lastCidSql.filter(
                CollaboratorMapped.Source == sourceId)

            posts.lastCId = lastCidSql.scalar()

        return posts
Example #24
0
    def getPublished(self,
                     blogId,
                     typeId=None,
                     creatorId=None,
                     authorId=None,
                     thumbSize=None,
                     offset=None,
                     limit=None,
                     detailed=False,
                     q=None):
        '''
        @see: IBlogPostService.getPublished
        '''
        assert q is None or isinstance(
            q, QBlogPostPublished), 'Invalid query %s' % q

        postVerification = aliased(PostVerificationMapped,
                                   name='post_verification_filter')

        sinceLastCId = 0
        sql = self._filterQuery(blogId, typeId, creatorId, authorId, q)

        if q:
            if QWithCId.cId in q and q.cId:
                sql = sql.filter(BlogPostMapped.CId != None)
                sinceLastCId = q.cId.since
            sql = buildQuery(sql, q, BlogPostMapped)

            if QWithCId.status in q or QWithCId.checker in q:
                sql = sql.join(postVerification,
                               postVerification.Id == BlogPostMapped.Id)
                sql = sql.join(
                    VerificationStatusMapped,
                    VerificationStatusMapped.id == postVerification.statusId)

            if QWithCId.status in q:
                sql = sql.filter(
                    VerificationStatusMapped.Key == q.status.equal)

            if QWithCId.checker in q:
                sql = sql.filter(postVerification.Checker == q.checker.equal)

        if q is None or QWithCId.cId not in q:
            sql = sql.filter((BlogPostMapped.PublishedOn != None)
                             & (BlogPostMapped.DeletedOn == None))

        #filter updates that were not published yet
        sql = sql.filter(BlogPostMapped.WasPublished == True)

        sql = sql.order_by(desc_op(BlogPostMapped.Order))

        sqlLimit = buildLimits(sql, offset, limit)
        posts = self._addImages(self._trimPosts(sqlLimit.distinct()),
                                thumbSize)
        if detailed:
            posts = IterPost(posts, sql.distinct().count(), offset, limit)
            posts.lastCId = self.session().query(func.MAX(
                BlogPostMapped.CId)).filter(
                    BlogPostMapped.Blog == blogId).scalar()
            posts.sinceLastCId = sinceLastCId
        return posts