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
评论列表
文章目录