ReportsController.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:cerberus-core 作者: ovh 项目源码 文件源码
def __generate_request_filters(filters, user):
    """ Generates filters base on filter query string
    """
    # Add SearchService results if fulltext search
    try:
        for field in filters['where']['like']:
            for key, value in field.iteritems():
                if key == 'fulltext':
                    if ImplementationFactory.instance.is_implemented('SearchServiceBase'):
                        _add_search_filters(filters, value[0])
                    filters['where']['like'].remove({key: value})
                    break
    except KeyError:
        pass

    # Generates Django query filter
    where = [Q()]
    if 'where' in filters and len(filters['where']):
        keys = set(k for k in filters['where'])
        if 'in' in keys:
            for i in filters['where']['in']:
                for key, val in i.iteritems():
                    field = reduce(lambda a, kv: a.replace(*kv), REPORT_FILTER_MAPPING, key)
                    where.append(reduce(operator.or_, [Q(**{field: i}) for i in val]))
        if 'like' in keys:
            like = []
            for i in filters['where']['like']:
                for key, val in i.iteritems():
                    field = reduce(lambda a, kv: a.replace(*kv), REPORT_FILTER_MAPPING, key)
                    field = field + '__icontains'
                    like.append(Q(**{field: val[0]}))
            if len(like):
                where.append(reduce(operator.or_, like))
    else:
        # All except closed
        where.append(~Q(status='Archived'))

    allowed = AbusePermission.objects.filter(user=user.id).values_list('category', flat=True)
    where.append(Q(category__in=allowed))
    where = reduce(operator.and_, where)
    return where
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号