Example #1
0
 def getPotential(self,
                  blogId,
                  excludeSources=True,
                  offset=None,
                  limit=None,
                  detailed=True,
                  qu=None,
                  qs=None):
     '''
     @see: IBlogCollaboratorService.getPotential
     '''
     sqlBlog = self.session().query(BlogCollaboratorMapped.Id).filter(
         BlogCollaboratorMapped.Blog == blogId)
     sql = self.session().query(CollaboratorMapped)
     sql = sql.join(UserMapped, CollaboratorMapped.User == UserMapped.Id)
     sql = sql.join(SourceMapped,
                    SourceMapped.Id == CollaboratorMapped.Source)
     sql = sql.filter(not_(CollaboratorMapped.Id.in_(sqlBlog)))
     sql = sql.filter(UserMapped.Active == True)
     sql = sql.filter(UserMapped.Type == self.default_user_type_key)
     sql = sql.filter(SourceMapped.Name == self.internal_source_name)
     sql = sql.order_by(CollaboratorMapped.Name)
     if excludeSources: sql = sql.filter(CollaboratorMapped.User != None)
     if qu: sql = buildQuery(sql, qu, UserMapped)
     if qs: sql = buildQuery(sql, qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed:
         return IterPart(sqlLimit.distinct(),
                         sql.distinct().count(), offset, limit)
     return sqlLimit.distinct()
Example #2
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 #3
0
 def getAll(self,
            userId=None,
            sourceId=None,
            offset=None,
            limit=None,
            detailed=False,
            qu=None,
            qs=None):
     '''
     @see: ICollaboratorService.getAll
     '''
     sql = self.session().query(CollaboratorMapped)
     sql = sql.outerjoin(UserMapped).filter(UserMapped.DeletedOn == None)
     if userId is not None:
         sql = sql.filter(CollaboratorMapped.User == userId)
     if sourceId is not None:
         sql = sql.filter(CollaboratorMapped.Source == sourceId)
     if qu is not None:
         sql = buildQuery(sql.join(UserMapped), qu, UserMapped)
     if qs is not None:
         sql = buildQuery(sql.join(SourceMapped), qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed:
         return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #4
0
 def getPotential(self,
                  blogId,
                  excludeSources=True,
                  offset=None,
                  limit=None,
                  detailed=True,
                  qu=None,
                  qs=None):
     '''
     @see: IBlogCollaboratorService.getPotential
     '''
     sqlBlog = self.session().query(BlogCollaboratorMapped.Id).filter(
         BlogCollaboratorMapped.Blog == blogId)
     sql = self.session().query(CollaboratorMapped).join(UserMapped).join(
         SourceMapped)
     sql = sql.filter(not_(CollaboratorMapped.Id.in_(sqlBlog)))
     sql = sql.filter(UserMapped.DeletedOn == None)
     sql = sql.order_by(CollaboratorMapped.Name)
     if excludeSources: sql = sql.filter(CollaboratorMapped.User != None)
     if qu: sql = buildQuery(sql, qu, UserMapped)
     if qs: sql = buildQuery(sql, qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed:
         return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sql.all()
Example #5
0
 def getPluginMessages(self, plugin, offset=None, limit=None, detailed=False, qm=None, qs=None):
     '''
     @see: IMessageService.getPluginMessages
     '''
     sql = self.session().query(Message).join(Source).filter(Source.Plugin == plugin)
     if qm: sql = buildQuery(sql, qm, Message)
     if qs: sql = buildQuery(sql, qs, Source)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #6
0
    def getMetaInfos(self,
                     scheme,
                     offset=None,
                     limit=None,
                     qi=None,
                     qd=None,
                     thumbSize=None):
        '''
        Provides the meta data based on unified multi-plugin criteria.
        '''
        sql = self.session().query(MetaInfoMapped)

        if qi is not None:
            assert isinstance(qi, self.QMetaInfo), 'Invalid query %s' % qi
            metaInfos = self.queryIndexer.metaInfos.copy()
            assert isinstance(metaInfos, set)

            for name in namesForQuery(qi):
                if getattr(self.QMetaInfo, name) not in qi: continue
                criteriaMetaInfos = self.queryIndexer.metaInfoByCriteria.get(
                    name)
                assert criteriaMetaInfos, 'No model class available for %s' % name
                metaInfos.intersection(criteriaMetaInfos)

            sql = buildQuery(sql, qi, MetaInfoMapped)
            for metaInfo in metaInfos:
                sql = sql.join(metaInfo)
                try:
                    sql = buildQuery(sql, qi, metaInfo)
                except:
                    raise Exception('Cannot build query for meta info %s' %
                                    metaInfo)

        if qd is not None:
            assert isinstance(qd, self.QMetaData), 'Invalid query %s' % qd
            metaDatas = self.queryIndexer.metaDatas.copy()
            assert isinstance(metaDatas, set)

            for name in namesForQuery(qd):
                if getattr(self.QMetaData, name) not in qd: continue
                criteriaMetaDatas = self.queryIndexer.metaDataByCriteria.get(
                    name)
                assert criteriaMetaDatas, 'No model class available for %s' % name
                metaDatas.intersection(criteriaMetaDatas)

            sql = sql.join(MetaDataMapped)
            sql = buildQuery(sql, qd, MetaDataMapped)
            for metaData in metaDatas:
                sql = sql.join(metaData)
                sql = buildQuery(sql, qd, metaData)

        sql = buildLimits(sql, offset, limit)

        return sql.all()
Example #7
0
 def getMessages(self, sourceId=None, offset=None, limit=None, detailed=False, qm=None, qs=None):
     '''
     @see: IMessageService.getMessages
     '''
     sql = self.session().query(Message)
     if sourceId: sql = sql.filter(Message.Source == sourceId)
     if qm: sql = buildQuery(sql, qm, Message)
     if qs: sql = buildQuery(sql.join(Source), qs, Source)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #8
0
 def getAll(self, personId=None, sourceId=None, offset=None, limit=None, detailed=False, qp=None, qs=None):
     '''
     @see: ICollaboratorService.getAll
     '''
     sql = self.session().query(CollaboratorMapped)
     if personId: sql = sql.filter(CollaboratorMapped.Person == personId)
     if sourceId: sql = sql.filter(CollaboratorMapped.Source == sourceId)
     if qp: sql = buildQuery(sql.join(PersonMapped), qp, PersonMapped)
     if qs: sql = buildQuery(sql.join(SourceMapped), qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #9
0
 def getAll(self, userId=None, sourceId=None, offset=None, limit=None, detailed=False, qu=None, qs=None):
     '''
     @see: ICollaboratorService.getAll
     '''
     sql = self.session().query(CollaboratorMapped)
     if userId: sql = sql.filter(CollaboratorMapped.User == userId)
     sql = sql.filter(UserMapped.DeletedOn == None)
     if sourceId: sql = sql.filter(CollaboratorMapped.Source == sourceId)
     if qu: sql = buildQuery(sql.join(UserMapped), qu, UserMapped)
     if qs: sql = buildQuery(sql.join(SourceMapped), qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #10
0
 def getComponentMessages(self, component, offset=None, limit=None, detailed=False, qm=None, qs=None):
     """
     @see: IMessageService.getComponentMessages
     """
     sql = self.session().query(Message).join(Source).filter(Source.Component == component)
     if qm:
         sql = buildQuery(sql, qm, Message)
     if qs:
         sql = buildQuery(sql, qs, Source)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed:
         return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #11
0
    def buildSubquery(self, session, metaInfo, metaData, qa, qi, qd, types):
        sql = session.query(MetaDataMapped)

        if metaInfo == MetaInfoMapped and metaData == MetaDataMapped:
            if types:
                sql = sql.join(MetaTypeMapped,
                               MetaTypeMapped.Id == MetaDataMapped.typeId)
                sql = sql.filter(MetaTypeMapped.Type.in_(types))
        elif metaInfo != MetaInfoMapped:
            sql = sql.join(
                MetaTypeMapped,
                and_(
                    MetaTypeMapped.Id == MetaDataMapped.typeId,
                    MetaTypeMapped.Type == self.queryIndexer.typesByMetaInfo[
                        metaInfo.__name__]))
        elif metaData != MetaDataMapped:
            sql = sql.join(
                MetaTypeMapped,
                and_(
                    MetaTypeMapped.Id == MetaDataMapped.typeId,
                    MetaTypeMapped.Type == self.queryIndexer.typesByMetaData[
                        metaData.__name__]))

        sql = sql.join(MetaInfoMapped,
                       MetaDataMapped.Id == MetaInfoMapped.MetaData)
        sql = sql.add_entity(MetaInfoMapped)

        if qi: sql = buildQuery(sql, qi, metaInfo)
        if qd: sql = buildQuery(sql, qd, metaData)

        if qi and metaInfo != MetaInfoMapped:
            sql = buildQuery(sql, qi, MetaInfoMapped)
        if qd and metaData != MetaDataMapped:
            sql = buildQuery(sql, qd, MetaDataMapped)

        if qi: sql = buildExpressionQuery(sql, qi, metaInfo, qa)
        if qd: sql = buildExpressionQuery(sql, qd, metaData, qa)

        if qi and metaInfo != MetaInfoMapped:
            sql = buildExpressionQuery(sql, qi, MetaInfoMapped, qa)
        if qd and metaData != MetaDataMapped:
            sql = buildExpressionQuery(sql, qd, MetaDataMapped, qa)

        if qa and qa.all:
            assert isinstance(qa, QMetaDataInfo), 'Invalid query %s' % qa
            sql = buildAllQuery(
                sql, qa.all, self.queryIndexer.queryByInfo[metaInfo.__name__],
                metaInfo, self.queryIndexer.queryByData[metaData.__name__],
                metaData)

        return sql
Example #12
0
 def buildSql(self, dataId, languageId, qi, qd):
     '''
     Build the sql alchemy based on the provided data.
     '''
     sql = self.session().query(self.MetaInfo)
     if dataId: sql = sql.filter(self.MetaInfo.MetaData == dataId)
     if languageId: sql = sql.filter(self.MetaInfo.Language == languageId)
     if qi:
         assert isinstance(qi, self.QMetaInfo), 'Invalid meta info query %s' % qi
         sql = buildQuery(sql, qi, self.MetaInfo)
     if qd:
         assert isinstance(qd, self.QMetaData), 'Invalid meta data query %s' % qd
         sql = buildQuery(sql.join(self.MetaData), qd, self.MetaData)
     return sql
Example #13
0
 def buildSql(self, dataId, languageId, qi, qd):
     '''
     Build the sql alchemy based on the provided data.
     '''
     sql = self.session().query(self.MetaInfo)
     if dataId: sql = sql.filter(self.MetaInfo.MetaData == dataId)
     if languageId: sql = sql.filter(self.MetaInfo.Language == languageId)
     if qi:
         assert isinstance(qi, self.QMetaInfo), 'Invalid meta info query %s' % qi
         sql = buildQuery(sql, qi, self.MetaInfo)
     if qd:
         assert isinstance(qd, self.QMetaData), 'Invalid meta data query %s' % qd
         sql = buildQuery(sql.join(self.MetaData), qd, self.MetaData)
     return sql
Example #14
0
 def getPotential(self, blogId, excludeSources=True, offset=None, limit=None, detailed=True, qu=None, qs=None):
     '''
     @see: IBlogCollaboratorService.getPotential
     '''
     sqlBlog = self.session().query(BlogCollaboratorMapped.Id).filter(BlogCollaboratorMapped.Blog == blogId)
     sql = self.session().query(CollaboratorMapped).join(UserMapped).join(SourceMapped)
     sql = sql.filter(not_(CollaboratorMapped.Id.in_(sqlBlog)))
     sql = sql.filter(UserMapped.DeletedOn == None)
     sql = sql.order_by(CollaboratorMapped.Name)
     if excludeSources: sql = sql.filter(CollaboratorMapped.User != None)
     if qu: sql = buildQuery(sql, qu, UserMapped)
     if qs: sql = buildQuery(sql, qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sql.all()
Example #15
0
 def _getAll(self, filter=None, query=None, offset=None, limit=None, sqlQuery=None):
     """
     Provides all the entities for the provided filter, with offset and limit. Also if query is known to the
     service then also a query can be provided.
     
     @param filter: SQL alchemy filtering|None
         The sql alchemy conditions to filter by.
     @param query: query
         The REST query object to provide filtering on.
     @param offset: integer|None
         The offset to fetch elements from.
     @param limit: integer|None
         The limit of elements to get.
     @param sqlQuery: SQL alchemy|None
         The sql alchemy query to use.
     @return: list
         The list of all filtered and limited elements.
     """
     if limit == 0:
         return []
     sqlQuery = sqlQuery or self.session().query(self.Entity)
     if filter is not None:
         sqlQuery = sqlQuery.filter(filter)
     if query:
         assert self.QEntity, "No query provided for the entity service"
         assert self.queryType.isValid(query), "Invalid query %s, expected %s" % (query, self.QEntity)
         sqlQuery = buildQuery(sqlQuery, query, self.Entity)
     sqlQuery = buildLimits(sqlQuery, offset, limit)
     return (entity for entity in sqlQuery.all())
Example #16
0
    def _getAllWithCount(self,
                         filter=None,
                         query=None,
                         offset=None,
                         limit=None,
                         sql=None):
        '''
        Provides all the entities for the provided filter, with offset and limit and the total count. Also if query is
        known to the service then also a query can be provided.

        @param filter: SQL alchemy filtering|None
            The sql alchemy conditions to filter by.
        @param query: query
            The REST query object to provide filtering on.
        @param offset: integer|None
            The offset to fetch elements from.
        @param limit: integer|None
            The limit of elements to get.
        @param sql: SQL alchemy|None
            The sql alchemy query to use.
        @return: tuple(list, integer)
            The list of all filtered and limited elements and the count of the total elements.
        '''
        sql = sql or self.session().query(ItemMapped)
        if filter is not None: sql = sql.filter(filter)
        if query:
            assert self.queryType.isValid(
                query), 'Invalid query %s, expected %s' % (query, QItem)
            sql = buildQuery(sql, query, ItemMapped)
        sqlLimit = buildLimits(sql, offset, limit)
        if limit == 0: return (), sql.count()
        return sqlLimit.all(), sql.count()
Example #17
0
    def getChainedPosts(self,
                        blogId,
                        sourceTypeKey,
                        offset=None,
                        limit=None,
                        detailed=False,
                        q=None):
        '''
        @see: IBlogSourceService.getChainedPosts
        '''
        sql = self.session().query(PostMapped)
        sql = sql.join(CollaboratorMapped).join(SourceMapped).join(
            SourceTypeMapped)
        sql = sql.filter(SourceTypeMapped.Key == sourceTypeKey)
        sql = sql.join(BlogSourceDB,
                       SourceMapped.Id == BlogSourceDB.source).filter(
                           BlogMapped.Id == blogId)

        if q:
            assert isinstance(q, QPostWithPublished), 'Invalid query %s' % q
            sql = buildQuery(sql, q, PostMapped)

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

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed:
            return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #18
0
    def getAll(self, typeKey=None, offset=None, limit=None, detailed=False, q=None):
        """
        @see: ISourceService.getAll
        """
        sql = self.session().query(SourceMapped)
        if typeKey:
            sql = sql.join(SourceTypeMapped).filter(SourceTypeMapped.Key == typeKey)
        if q:
            assert isinstance(q, QSource), "Invalid source query %s" % q
            sql = buildQuery(sql, q, SourceMapped)
            if QSource.all in q:
                filter = None
                if AsLike.like in q.all:
                    for col in ALL_NAMES:
                        filter = col.like(q.all.like) if filter is None else filter | col.like(q.all.like)
                elif AsLike.ilike in q.all:
                    for col in ALL_NAMES:
                        filter = col.ilike(q.all.ilike) if filter is None else filter | col.ilike(q.all.ilike)
                sql = sql.filter(filter)

            # TODO: Hack to be able to get the list of the chained blog sources for a blog;
            # It should be removed when the new version of ally-py is used
            if QSource.blogId in q:
                sqlIn = self.session().query(BlogSourceDB.source).filter(BlogSourceDB.blog == q.blogId.equal)
                sql = sql.filter(SourceMapped.Id.in_(sqlIn))

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed:
            return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #19
0
    def getRights(self,
                  userId,
                  typeId=None,
                  offset=None,
                  limit=None,
                  detailed=False,
                  q=None):
        '''
        @see: IUserRbacService.getRights
        '''
        if limit == 0: entities = ()
        else: entities = None
        if detailed or entities is None:
            rbacId = self.rbacIdFor(userId)
            if not rbacId:
                return IterPart((), 0, offset, limit) if detailed else ()

            sql = self.rbacService.rightsForRbacSQL(rbacId)
            if typeId: sql = sql.filter(RightMapped.Type == typeId)
            if q:
                assert isinstance(q, QRight), 'Invalid query %s' % q
                sql = buildQuery(sql, q, RightMapped)
            if entities is None:
                entities = buildLimits(sql, offset, limit).all()
            if detailed: return IterPart(entities, sql.count(), offset, limit)
        return entities
Example #20
0
    def getAll(self, offset=None, limit=None, detailed=False, q=None):
        '''
        @see: IUserService.getAll
        '''
        if limit == 0: entities = ()
        else: entities = None
        if detailed or entities is None:
            sql = self.session().query(UserMapped)

            activeUsers = True
            if q:
                assert isinstance(q, QUser), 'Invalid query %s' % q
                sql = buildQuery(sql, q, UserMapped)
                if QUser.all in q:
                    filter = None
                    if AsLike.like in q.all:
                        for col in ALL_NAMES:
                            filter = col.like(q.all.like) if filter is None else filter | col.like(q.all.like)
                    elif AsLike.ilike in q.all:
                        for col in ALL_NAMES:
                            filter = col.ilike(q.all.ilike) if filter is None else filter | col.ilike(q.all.ilike)
                    sql = sql.filter(filter)

                if (QUser.inactive in q) and (AsBoolean.value in q.inactive):
                        activeUsers = not q.inactive.value

            sql = sql.filter(UserMapped.Active == activeUsers)
            sql = sql.filter(UserMapped.Type == self.default_user_type_key)

            if entities is None: entities = buildLimits(sql, offset, limit).all()
            if detailed: return IterPart(entities, sql.count(), offset, limit)
        return entities
Example #21
0
    def _buildQuery(self, languageId=None, userId=None, q=None):
        '''
        Builds the general query for blogs.
        '''
        sql = self.session().query(BlogMapped)
        #Hide deleted blogs
        sql = sql.filter(BlogMapped.DeletedOn == None)

        if languageId: sql = sql.filter(BlogMapped.Language == languageId)
        if userId:
            #TODO: change it for the new version of Ally-Py, where it is a complete implementation of security
            qRole = QRole()
            qRole.name = self.admin_role
            isAdmin = len(self.roleService.getRoles(userId, q=qRole))
            if not isAdmin:
                userFilter = (BlogMapped.Creator == userId) | exists().where((CollaboratorMapped.User == userId) \
                                             & (BlogCollaboratorMapped.blogCollaboratorId == CollaboratorMapped.Id) \
                                             & (BlogCollaboratorMapped.Blog == BlogMapped.Id))
                sql = sql.filter(userFilter)

        if q:
            assert isinstance(q, QBlog), 'Invalid query %s' % q
            sql = buildQuery(sql, q, BlogMapped)

            if (QBlog.isOpen in q) and (AsBoolean.value in q.isOpen):
                if q.isOpen.value:
                    sql = sql.filter(BlogMapped.ClosedOn == None)
                else:
                    sql = sql.filter(BlogMapped.ClosedOn != None)

        return sql
Example #22
0
    def getByBlog(self,
                  blogId,
                  offset=None,
                  limit=None,
                  detailed=False,
                  q=None):
        '''
        @see IBlogSyncService.getByBlog
        '''
        sql = self.session().query(BlogSyncMapped)
        if q:
            assert isinstance(q, QBlogSync), 'Invalid blog sync query %s' % q
            sql = buildQuery(sql, q, BlogSyncMapped)

        sql = sql.join(SourceMapped, SourceMapped.Id == BlogSyncMapped.Source)
        sql = sql.join(BlogSourceDB, SourceMapped.Id == BlogSourceDB.source)
        sql = sql.filter(BlogSourceDB.blog == blogId)

        sql_prov = self.session().query(SourceMapped.URI)
        sql_prov = sql_prov.join(SourceTypeMapped,
                                 SourceTypeMapped.id == SourceMapped.typeId)
        sql_prov = sql_prov.filter(
            SourceTypeMapped.Key == self.blog_provider_type)

        sql = sql.filter(SourceMapped.OriginURI.in_(sql_prov))

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed:
            return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #23
0
 def _getAll(self,
             filter=None,
             query=None,
             offset=None,
             limit=None,
             sql=None):
     '''
     Provides all the entities for the provided filter, with offset and limit. Also if query is known to the
     service then also a query can be provided.
     
     @param filter: SQL alchemy filtering|None
         The sql alchemy conditions to filter by.
     @param query: query
         The REST query object to provide filtering on.
     @param offset: integer|None
         The offset to fetch elements from.
     @param limit: integer|None
         The limit of elements to get.
     @param sql: SQL alchemy|None
         The sql alchemy query to use.
     @return: list
         The list of all filtered and limited elements.
     '''
     if limit == 0: return []
     sql = sql or self.session().query(self.Entity)
     if filter is not None: sql = sql.filter(filter)
     if query:
         assert self.QEntity, 'No query provided for the entity service'
         assert self.queryType.isValid(
             query), 'Invalid query %s, expected %s' % (query, self.QEntity)
         sql = buildQuery(sql, query, self.Entity)
     sql = buildLimits(sql, offset, limit)
     return sql.all()
Example #24
0
    def _buildQuery(self, languageId=None, userId=None, q=None):
        '''
        Builds the general query for blogs.
        '''
        sql = self.session().query(BlogMapped)
        #Hide deleted blogs
        sql = sql.filter(BlogMapped.DeletedOn == None)
        
        if languageId: sql = sql.filter(BlogMapped.Language == languageId)
        if userId:
            #TODO: change it for the new version of Ally-Py, where it is a complete implementation of security 
            qRole = QRole()
            qRole.name = self.admin_role
            isAdmin = len(self.roleService.getRoles(userId, q=qRole))
            if not isAdmin:
                userFilter = (BlogMapped.Creator == userId) | exists().where((CollaboratorMapped.User == userId) \
                                             & (BlogCollaboratorMapped.blogCollaboratorId == CollaboratorMapped.Id) \
                                             & (BlogCollaboratorMapped.Blog == BlogMapped.Id))
                sql = sql.filter(userFilter)

        if q:
            assert isinstance(q, QBlog), 'Invalid query %s' % q
            sql = buildQuery(sql, q, BlogMapped)

            if (QBlog.isOpen in q) and (AsBoolean.value in q.isOpen):
                if q.isOpen.value:
                    sql = sql.filter(BlogMapped.ClosedOn == None)
                else:
                    sql = sql.filter(BlogMapped.ClosedOn != None)

        return sql
Example #25
0
    def getAll(self, offset=None, limit=None, detailed=False, q=None):
        '''
        @see: IUserService.getAll
        '''
        if limit == 0: entities = ()
        else: entities = None
        if detailed or entities is None:
            sql = self.session().query(UserMapped)
            sql = sql.filter(UserMapped.DeletedOn == None)
            if q:
                assert isinstance(q, QUser), 'Invalid query %s' % q
                sql = buildQuery(sql, q, UserMapped)
                if QUser.all in q:
                    filter = None
                    if AsLike.like in q.all:
                        for col in ALL_NAMES:
                            filter = col.like(
                                q.all.like
                            ) if filter is None else filter | col.like(
                                q.all.like)
                    elif AsLike.ilike in q.all:
                        for col in ALL_NAMES:
                            filter = col.ilike(
                                q.all.ilike
                            ) if filter is None else filter | col.ilike(
                                q.all.ilike)
                    sql = sql.filter(filter)

            if entities is None:
                entities = buildLimits(sql, offset, limit).all()
            if detailed: return IterPart(entities, sql.count(), offset, limit)
        return entities
Example #26
0
    def getAll(self, adminId, offset=None, limit=None, detailed=False, q=None):
        """
        @see: IUserService.getAll
        """
        if limit == 0:
            entities = ()
        else:
            entities = None
        if detailed or entities is None:
            sql = self.session().query(UserMapped)
            sql = sql.filter(UserMapped.DeletedOn == None)
            if q:
                assert isinstance(q, QUser), "Invalid query %s" % q
                sql = buildQuery(sql, q, UserMapped)
                if QUser.all in q:
                    filter = None
                    if AsLike.like in q.all:
                        for col in ALL_NAMES:
                            filter = col.like(q.all.like) if filter is None else filter | col.like(q.all.like)
                    elif AsLike.ilike in q.all:
                        for col in ALL_NAMES:
                            filter = col.ilike(q.all.ilike) if filter is None else filter | col.ilike(q.all.ilike)
                    sql = sql.filter(filter)

            if entities is None:
                entities = buildLimits(sql, offset, limit).all()
            if detailed:
                return IterPart(entities, sql.count(), offset, limit)
        return entities
Example #27
0
 def _getAllWithCount(self, filter=None, query=None, offset=None, limit=None, sql=None):
     '''
     Provides all the entities for the provided filter, with offset and limit and the total count. Also if query is 
     known to the service then also a query can be provided.
     
     @param filter: SQL alchemy filtering|None
         The sql alchemy conditions to filter by.
     @param query: query
         The REST query object to provide filtering on.
     @param offset: integer|None
         The offset to fetch elements from.
     @param limit: integer|None
         The limit of elements to get.
     @param sql: SQL alchemy|None
         The sql alchemy query to use.
     @return: tuple(list, integer)
         The list of all filtered and limited elements and the count of the total elements.
     '''
     sql = sql or self.session().query(self.Entity)
     if filter is not None: sql = sql.filter(filter)
     if query:
         assert self.QEntity, 'No query provided for the entity service'
         assert self.queryType.isValid(query), 'Invalid query %s, expected %s' % (query, self.QEntity)
         sql = buildQuery(sql, query, self.Entity)
     sqlLimit = buildLimits(sql, offset, limit)
     if limit == 0: return (), sql.count()
     return sqlLimit.all(), sql.count()
Example #28
0
    def getAll(self,
               typeKey=None,
               offset=None,
               limit=None,
               detailed=False,
               q=None):
        '''
        @see: ISourceService.getAll
        '''
        sql = self.session().query(SourceMapped)
        if typeKey:
            sql = sql.join(SourceTypeMapped).filter(
                SourceTypeMapped.Key == typeKey)
        if q:
            assert isinstance(q, QSource), 'Invalid source query %s' % q
            sql = buildQuery(sql, q, SourceMapped)
            if QSource.all in q:
                filter = None
                if AsLike.like in q.all:
                    for col in ALL_NAMES:
                        filter = col.like(
                            q.all.like
                        ) if filter is None else filter | col.like(q.all.like)
                elif AsLike.ilike in q.all:
                    for col in ALL_NAMES:
                        filter = col.ilike(
                            q.all.ilike
                        ) if filter is None else filter | col.ilike(
                            q.all.ilike)
                sql = sql.filter(filter)

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed:
            return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #29
0
    def buildQuery(self, session, offset=None, limit=1000, q=None):
        '''
        @see: IArticleSearchProvider.buildQuery()
        '''

        sql = session.query(ArticleMapped)

        if q:
            sql = buildQuery(sql, q, ArticleMapped)
            sql = sql.join(PersonMapped,
                           ArticleMapped.Author == PersonMapped.Id)
            sql = sql.join(UserMapped, ArticleMapped.Creator == UserMapped.Id)

            if QArticle.search in q:
                all = processLike(
                    q.search.ilike
                ) if q.search.ilike is not None else processLike(q.search.like)
                sql = sql.filter(
                    or_(PersonMapped.FullName.like(all),
                        UserMapped.FullName.like(all),
                        ArticleMapped.Content.like(all)))

        count = sql.count()

        sql = buildLimits(sql, offset, limit)

        return (sql, count)
Example #30
0
    def _getAll(self, filter=None, query=None, offset=None, limit=None, sql=None):
        '''
        Provides all the entities for the provided filter, with offset and limit. Also if query is known to the
        service then also a query can be provided.

        @param filter: SQL alchemy filtering|None
            The sql alchemy conditions to filter by.
        @param query: query
            The REST query object to provide filtering on.
        @param offset: integer|None
            The offset to fetch elements from.
        @param limit: integer|None
            The limit of elements to get.
        @param sql: SQL alchemy|None
            The sql alchemy query to use.
        @return: list
            The list of all filtered and limited elements.
        '''
        if limit == 0: return []
        sql = sql or self.session().query(ItemMapped)
        if filter is not None: sql = sql.filter(filter)
        if query:
            assert self.queryType.isValid(query), 'Invalid query %s, expected %s' % (query, QItem)
            sql = buildQuery(sql, query, ItemMapped)
        sql = buildLimits(sql, offset, limit)
        return sql.all()
    def getMetaInfos(self, scheme, offset=None, limit=None, qi=None, qd=None, thumbSize=None):
        '''
        Provides the meta data based on unified multi-plugin criteria.
        '''
        sql = self.session().query(MetaInfoMapped)

        if qi is not None:
            assert isinstance(qi, self.QMetaInfo), 'Invalid query %s' % qi
            metaInfos = self.queryIndexer.metaInfos.copy()
            assert isinstance(metaInfos, set)

            for name in namesForQuery(qi):
                if getattr(self.QMetaInfo, name) not in qi: continue
                criteriaMetaInfos = self.queryIndexer.metaInfoByCriteria.get(name)
                assert criteriaMetaInfos, 'No model class available for %s' % name
                metaInfos.intersection(criteriaMetaInfos)

            sql = buildQuery(sql, qi, MetaInfoMapped)
            for metaInfo in metaInfos:
                sql = sql.join(metaInfo)
                try:
                    sql = buildQuery(sql, qi, metaInfo)
                except :
                    raise Exception('Cannot build query for meta info %s' % metaInfo)


        if qd is not None:
            assert isinstance(qd, self.QMetaData), 'Invalid query %s' % qd
            metaDatas = self.queryIndexer.metaDatas.copy()
            assert isinstance(metaDatas, set)

            for name in namesForQuery(qd):
                if getattr(self.QMetaData, name) not in qd: continue
                criteriaMetaDatas = self.queryIndexer.metaDataByCriteria.get(name)
                assert criteriaMetaDatas, 'No model class available for %s' % name
                metaDatas.intersection(criteriaMetaDatas)

            sql = sql.join(MetaDataMapped)
            sql = buildQuery(sql, qd, MetaDataMapped)
            for metaData in metaDatas:
                sql = sql.join(metaData)
                sql = buildQuery(sql, qd, metaData)


        sql = buildLimits(sql, offset, limit)

        return sql.all()
Example #32
0
 def getPluginMessages(self,
                       plugin,
                       offset=None,
                       limit=None,
                       detailed=False,
                       qm=None,
                       qs=None):
     '''
     @see: IMessageService.getPluginMessages
     '''
     sql = self.session().query(Message).join(Source).filter(
         Source.Plugin == plugin)
     if qm: sql = buildQuery(sql, qm, Message)
     if qs: sql = buildQuery(sql, qs, Source)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed:
         return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #33
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 #34
0
 def getMessages(self,
                 sourceId=None,
                 offset=None,
                 limit=None,
                 detailed=False,
                 qm=None,
                 qs=None):
     '''
     @see: IMessageService.getMessages
     '''
     sql = self.session().query(Message)
     if sourceId: sql = sql.filter(Message.Source == sourceId)
     if qm: sql = buildQuery(sql, qm, Message)
     if qs: sql = buildQuery(sql.join(Source), qs, Source)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed:
         return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #35
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
 def getPotential(self, blogId, excludeSources=True, offset=None, limit=None, detailed=True, qu=None, qs=None):
     '''
     @see: IBlogCollaboratorService.getPotential
     '''
     sqlBlog = self.session().query(BlogCollaboratorMapped.Id).filter(BlogCollaboratorMapped.Blog == blogId)
     sql = self.session().query(CollaboratorMapped)
     sql = sql.join(UserMapped, CollaboratorMapped.User == UserMapped.Id)
     sql = sql.join(SourceMapped, SourceMapped.Id == CollaboratorMapped.Source)
     sql = sql.filter(not_(CollaboratorMapped.Id.in_(sqlBlog)))
     sql = sql.filter(UserMapped.Active == True)
     sql = sql.filter(UserMapped.Type == self.default_user_type_key)
     sql = sql.filter(SourceMapped.Name == self.internal_source_name)
     sql = sql.order_by(CollaboratorMapped.Name)
     if excludeSources: sql = sql.filter(CollaboratorMapped.User != None)
     if qu: sql = buildQuery(sql, qu, UserMapped)
     if qs: sql = buildQuery(sql, qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed: return IterPart(sqlLimit.distinct(), sql.distinct().count(), offset, limit)
     return sqlLimit.distinct()
Example #37
0
 def buildSql(self, typeId, q):
     '''
     Build the sql alchemy based on the provided data.
     '''
     sql = self.session().query(self.MetaData)
     if typeId: sql = sql.filter(self.MetaData.typeId == typeId)
     if q:
         assert isinstance(q, self.QMetaData)
         sql = buildQuery(sql, q, self.MetaData)
     return sql
Example #38
0
 def buildSql(self, typeId, q):
     '''
     Build the sql alchemy based on the provided data.
     '''
     sql = self.session().query(self.MetaData)
     if typeId: sql = sql.filter(self.MetaData.typeId == typeId)
     if q:
         assert isinstance(q, self.QMetaData)
         sql = buildQuery(sql, q, self.MetaData)
     return sql
Example #39
0
    def _buildQuery(self, blogTypeId, typeId=None, q=None):
        '''
        Builds the general query for posts.
        '''
        sql = self.session().query(BlogTypePostMapped)
        sql = sql.filter(BlogTypePostMapped.BlogType == blogTypeId)

        if typeId: sql = sql.join(PostTypeMapped).filter(PostTypeMapped.Key == typeId)
        if q:
            sql = buildQuery(sql, q, BlogTypePostMapped)
        return sql
Example #40
0
    def _buildQuery(self, blogId, typeId=None, creatorId=None, authorId=None, q=None):
        '''
        Builds the general query for posts.CollaboratorMapped
        '''
        sql = self._filterQuery(blogId, typeId, creatorId, authorId, q)
        if q:
            sql = buildQuery(sql, q, BlogPostMapped)
            if QPostUnpublished.deletedOn not in q and QWithCId.cId not in q:
                sql = sql.filter(BlogPostMapped.DeletedOn == None)

        return sql
Example #41
0
 def getAll(self, typeKey=None, offset=None, limit=None, detailed=False, q=None):
     '''
     @see: ISourceService.getAll
     '''
     sql = self.session().query(SourceMapped)
     if typeKey:
         sql = sql.join(SourceTypeMapped).filter(SourceTypeMapped.Key == typeKey)
     if q: sql = buildQuery(sql, q, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #42
0
 def getAll(self,
            personId=None,
            sourceId=None,
            offset=None,
            limit=None,
            detailed=False,
            qp=None,
            qs=None):
     '''
     @see: ICollaboratorService.getAll
     '''
     sql = self.session().query(CollaboratorMapped)
     if personId: sql = sql.filter(CollaboratorMapped.Person == personId)
     if sourceId: sql = sql.filter(CollaboratorMapped.Source == sourceId)
     if qp: sql = buildQuery(sql.join(PersonMapped), qp, PersonMapped)
     if qs: sql = buildQuery(sql.join(SourceMapped), qs, SourceMapped)
     sqlLimit = buildLimits(sql, offset, limit)
     if detailed:
         return IterPart(sqlLimit.all(), sql.count(), offset, limit)
     return sqlLimit.all()
Example #43
0
    def _buildQuery(self, blogTypeId, typeId=None, q=None):
        '''
        Builds the general query for posts.
        '''
        sql = self.session().query(BlogTypePostMapped)
        sql = sql.filter(BlogTypePostMapped.BlogType == blogTypeId)

        if typeId:
            sql = sql.join(PostTypeMapped).filter(PostTypeMapped.Key == typeId)
        if q:
            sql = buildQuery(sql, q, BlogTypePostMapped)
        return sql
Example #44
0
 def _buildQuery(self, creatorId=None, authorId=None, q=None):
     '''
     Builds the general query for posts.
     '''
     sql = self.session().query(PostMapped)
     if creatorId: sql = sql.filter(PostMapped.Creator == creatorId)
     if authorId: sql = sql.filter(PostMapped.Author == authorId)
     addDeleted = False
     if q:
         sql = buildQuery(sql, q, PostMapped)
         addDeleted = QPostUnpublished.deletedOn in q
     if not addDeleted: sql = sql.filter(PostMapped.DeletedOn == None)
     return sql
Example #45
0
    def buildQuery(self, session, scheme, offset=None, limit=1000, q=None):
        '''
        @see: IArticleSearchProvider.buildQuery()

        Creates the solr query, executes the query against Solr server. Then build a SQL query that will return
        the Solr founded data.
        '''
        
        sql = session.query(Article)
        
        if q:
            sql = buildQuery(sql, q, self.Entity)
        sql = buildLimits(sql, offset, limit)
Example #46
0
 def _buildQuery(self, creatorId=None, authorId=None, q=None):
     '''
     Builds the general query for posts.
     '''
     sql = self.session().query(PostMapped)
     if creatorId: sql = sql.filter(PostMapped.Creator == creatorId)
     if authorId: sql = sql.filter(PostMapped.Author == authorId)
     addDeleted = False
     if q:
         sql = buildQuery(sql, q, PostMapped)
         addDeleted = QPostUnpublished.deletedOn in q
     if not addDeleted: sql = sql.filter(PostMapped.DeletedOn == None)
     return sql
Example #47
0
    def buildQuery(self, session, scheme, offset=None, limit=1000, q=None):
        '''
        @see: IArticleSearchProvider.buildQuery()

        Creates the solr query, executes the query against Solr server. Then build a SQL query that will return
        the Solr founded data.
        '''

        sql = session.query(Article)

        if q:
            sql = buildQuery(sql, q, self.Entity)
        sql = buildLimits(sql, offset, limit)
Example #48
0
 def _buildQueryWithCId(self, q, sql):
     if q:
         if QWithCId.cId in q and q.cId:
             if AsRange.start in q.cId:
                 sql = sql.filter(PostMapped.Id >= q.cId.start)
             if AsRange.since in q.cId:
                 sql = sql.filter(PostMapped.Id > q.cId.since)
             if AsRange.end in q.cId:
                 sql = sql.filter(PostMapped.Id <= q.cId.end)
             if AsRange.until in q.cId:
                 sql = sql.filter(PostMapped.Id < q.cId.until)
         sql = buildQuery(sql, q, PostMapped)
     return sql
Example #49
0
 def _buildQueryWithCId(self, q, sql):
     if q:
         if QWithCId.cId in q and q.cId:
             if AsRange.start in q.cId:
                 sql = sql.filter(PostMapped.Id >= q.cId.start)
             if AsRange.since in q.cId:
                 sql = sql.filter(PostMapped.Id > q.cId.since)
             if AsRange.end in q.cId:
                 sql = sql.filter(PostMapped.Id <= q.cId.end)
             if AsRange.until in q.cId:
                 sql = sql.filter(PostMapped.Id < q.cId.until)
         sql = buildQuery(sql, q, PostMapped)
     return sql
Example #50
0
    def buildSubquery(self, session, metaInfo, metaData, qa, qi, qd, types):
        sql = session.query(MetaDataMapped)

        if metaInfo == MetaInfoMapped and metaData == MetaDataMapped:
            if types:
                sql = sql.join(MetaTypeMapped, MetaTypeMapped.Id == MetaDataMapped.typeId)
                sql = sql.filter(MetaTypeMapped.Type.in_(types))
        elif metaInfo != MetaInfoMapped:
            sql = sql.join(MetaTypeMapped, and_(MetaTypeMapped.Id == MetaDataMapped.typeId, MetaTypeMapped.Type == self.queryIndexer.typesByMetaInfo[metaInfo.__name__]))
        elif metaData != MetaDataMapped:
            sql = sql.join(MetaTypeMapped, and_(MetaTypeMapped.Id == MetaDataMapped.typeId, MetaTypeMapped.Type == self.queryIndexer.typesByMetaData[metaData.__name__]))

        sql = sql.join(MetaInfoMapped, MetaDataMapped.Id == MetaInfoMapped.MetaData)
        sql = sql.add_entity(MetaInfoMapped)


        if qi: sql = buildQuery(sql, qi, metaInfo)
        if qd: sql = buildQuery(sql, qd, metaData)

        if qi and metaInfo != MetaInfoMapped:
            sql = buildQuery(sql, qi, MetaInfoMapped)
        if qd and metaData != MetaDataMapped:
            sql = buildQuery(sql, qd, MetaDataMapped)

        if qi: sql = buildExpressionQuery(sql, qi, metaInfo, qa)
        if qd: sql = buildExpressionQuery(sql, qd, metaData, qa)

        if qi and metaInfo != MetaInfoMapped:
            sql = buildExpressionQuery(sql, qi, MetaInfoMapped, qa)
        if qd and metaData != MetaDataMapped:
            sql = buildExpressionQuery(sql, qd, MetaDataMapped, qa)

        if qa and qa.all:
            assert isinstance(qa, QMetaDataInfo), 'Invalid query %s' % qa
            sql = buildAllQuery(sql, qa.all, self.queryIndexer.queryByInfo[metaInfo.__name__], metaInfo,
                                self.queryIndexer.queryByData[metaData.__name__], metaData)

        return sql
Example #51
0
    def getAll(self, parentId, offset=None, limit=None, detailed=False, q=None):
        '''
        @see: IConfigurationService.getAll
        '''
        sql = self.session().query(self.ConfigurationMapped)
        sql = sql.filter(self.ConfigurationMapped.parent == parentId)

        if q:
            assert isinstance(q, QConfiguration), 'Invalid query'
            sql = buildQuery(sql, q, self.ConfigurationMapped)

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #52
0
 def getRights(self, roleId, offset=None, limit=None, detailed=False, q=None):
     '''
     @see: IRoleService.getRights
     '''
     if limit == 0: entities = ()
     else: entities = None
     if detailed or entities is None:
         sql = self.rbacService.rightsForRbacSQL(roleId)
         if q:
             assert isinstance(q, QRight), 'Invalid query %s' % q
             sql = buildQuery(sql, q, RightMapped)
         if entities is None: entities = buildLimits(sql, offset, limit).all()
         if detailed: return IterPart(entities, sql.count(), offset, limit)
     return entities
Example #53
0
    def getComments(self, blogId, offset=None, limit=None, detailed=False, q=None):
        '''
        @see: IBlogCommentService.getComments
        '''
        sql = self.session().query(BlogPostMapped).filter(BlogPostMapped.Blog == blogId)
        sql = sql.join(CollaboratorMapped).join(SourceMapped).join(SourceTypeMapped)
        sql = sql.filter(SourceTypeMapped.Key == self.source_type_key)
        if q:
            assert isinstance(q, QBlogPost), 'Invalid query %s' % q
            sql = buildQuery(sql, q, BlogPostMapped)

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed: return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #54
0
 def _buildQuery(self, languageId=None, adminId=None, q=None):
     """
     Builds the general query for blogs.
     """
     sql = self.session().query(BlogMapped)
     if languageId:
         sql = sql.filter(BlogMapped.Language == languageId)
     if adminId:
         sql = sql.filter(
             (BlogMapped.Creator == adminId)
             | exists().where((AdminEntry.adminId == adminId) & (AdminEntry.Blog == BlogMapped.Id))
         )
     if q:
         assert isinstance(q, QBlog), "Invalid query %s" % q
         sql = buildQuery(sql, q, BlogMapped)
     return sql
Example #55
0
    def _buildQuery(self, languageId=None, userId=None, q=None):
        '''
        Builds the general query for blogs.
        '''
        sql = self.session().query(BlogMapped)
        if languageId: sql = sql.filter(BlogMapped.Language == languageId)
        if userId:
            userFilter = (BlogMapped.Creator == userId) | exists().where((CollaboratorMapped.User == userId) \
                                         & (BlogCollaboratorMapped.blogCollaboratorId == CollaboratorMapped.Id) \
                                         & (BlogCollaboratorMapped.Blog == BlogMapped.Id))
            sql = sql.filter(userFilter)

        if q:
            assert isinstance(q, QBlog), 'Invalid query %s' % q
            sql = buildQuery(sql, q, BlogMapped)
        return sql
Example #56
0
    def _buildQuery(self,
                    blogId,
                    typeId=None,
                    creatorId=None,
                    authorId=None,
                    q=None):
        '''
        Builds the general query for posts.CollaboratorMapped
        '''
        sql = self._filterQuery(blogId, typeId, creatorId, authorId, q)
        if q:
            sql = buildQuery(sql, q, BlogPostMapped)
            if QPostUnpublished.deletedOn not in q and QWithCId.cId not in q:
                sql = sql.filter(BlogPostMapped.DeletedOn == None)

        return sql
Example #57
0
    def getAll(self,
               typeKey=None,
               offset=None,
               limit=None,
               detailed=False,
               q=None):
        '''
        @see: ISourceService.getAll
        '''
        sql = self.session().query(SourceMapped)
        if typeKey:
            sql = sql.join(SourceTypeMapped).filter(
                SourceTypeMapped.Key == typeKey)
        if q:
            assert isinstance(q, QSource), 'Invalid source query %s' % q
            sql = buildQuery(sql, q, SourceMapped)
            if QSource.all in q:
                filter = None
                if AsLike.like in q.all:
                    for col in ALL_NAMES:
                        filter = col.like(
                            q.all.like
                        ) if filter is None else filter | col.like(q.all.like)
                elif AsLike.ilike in q.all:
                    for col in ALL_NAMES:
                        filter = col.ilike(
                            q.all.ilike
                        ) if filter is None else filter | col.ilike(
                            q.all.ilike)
                sql = sql.filter(filter)

            #TODO: Hack to be able to get the list of the chained blog sources for a blog;
            #It should be removed when the new version of ally-py is used
            if QSource.blogId in q:
                sqlIn = self.session().query(BlogSourceDB.source).filter(
                    BlogSourceDB.blog == q.blogId.equal)
                sql = sql.filter(SourceMapped.Id.in_(sqlIn))

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed:
            return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #58
0
    def getAll(self,
               parentId,
               offset=None,
               limit=None,
               detailed=False,
               q=None):
        '''
        @see: IConfigurationService.getAll
        '''
        sql = self.session().query(self.ConfigurationMapped)
        sql = sql.filter(self.ConfigurationMapped.parent == parentId)

        if q:
            assert isinstance(q, QConfiguration), 'Invalid query'
            sql = buildQuery(sql, q, self.ConfigurationMapped)

        sqlLimit = buildLimits(sql, offset, limit)
        if detailed:
            return IterPart(sqlLimit.all(), sql.count(), offset, limit)
        return sqlLimit.all()
Example #59
0
 def getRights(self,
               roleId,
               offset=None,
               limit=None,
               detailed=False,
               q=None):
     '''
     @see: IRoleService.getRights
     '''
     if limit == 0: entities = ()
     else: entities = None
     if detailed or entities is None:
         sql = self.rbacService.rightsForRbacSQL(roleId)
         if q:
             assert isinstance(q, QRight), 'Invalid query %s' % q
             sql = buildQuery(sql, q, RightMapped)
         if entities is None:
             entities = buildLimits(sql, offset, limit).all()
         if detailed: return IterPart(entities, sql.count(), offset, limit)
     return entities