def read(self, request, user_name, criteria, pag=0, offset=0): user = user_authentication(request, user_name) orderby = request.GET.get('orderby', '-creation_date') format = request.GET.get('format', 'default') scope = request.GET.get('scope', 'all') if criteria == 'connectEventSlot': search_criteria = request.GET.getlist('search_criteria') else: search_criteria = request.GET.get('search_criteria') resources = CatalogueResource.objects.none() if criteria == 'and': filters = get_and_filter(search_criteria, user) elif criteria == 'or' or criteria == 'simple_or': filters = get_or_filter(search_criteria, user) elif criteria == 'not': filters = get_not_filter(search_criteria, user) elif criteria == 'event': filters = get_event_filter(search_criteria) elif criteria == 'slot': filters = get_slot_filter(search_criteria) elif criteria == 'tag': filters = get_tag_filter(search_criteria) elif criteria == 'connectSlot': # get all resource compatible with the given events search_criteria = search_criteria.split() for e in search_criteria: resources = CatalogueResource.objects.filter( Q(gadgetwiring__friendcode=e), Q(gadgetwiring__wiring='out')) elif criteria == 'connectEvent': # get all resource compatible with the given slots search_criteria = search_criteria.split() filters = Q() for e in search_criteria: filters = filters | Q(gadgetwiring__friendcode=e) filters = filters & Q(gadgetwiring__wiring='out') resources = CatalogueResource.objects.filter(filters) resources = filter_resources_by_scope(resources, scope) resources = resources.order_by(orderby) resources = group_resources(resources) resources = filter_resources_by_organization(user, resources, user.groups.all()) items = len(resources) resources = get_paginatedlist(resources, pag, offset) return get_resource_response(resources, format, items, user)
def read(self, request, user_name, pag=0, offset=0): user = user_authentication(request, user_name) orderby = request.GET.get('orderby', '-creation_date') format = request.GET.get('format', 'default') scope = request.GET.get('scope', 'all') search_criteria = request.GET.getlist('search_criteria') search_boolean = request.GET.get('search_boolean') if search_boolean == 'AND': join_filters = lambda x, y: x & y else: join_filters = lambda x, y: x | y filters = Q() if search_criteria[0] != "": filters = get_and_filter(search_criteria[0], user) if search_criteria[1] != "": filters = join_filters(filters, get_or_filter(search_criteria[1], user)) if search_criteria[2] != "": filters = join_filters(filters, get_not_filter(search_criteria[2], user)) if search_criteria[3] != "": filters = join_filters(filters, get_tag_filter(search_criteria[3])) if search_criteria[4] != "": filters = join_filters(filters, get_event_filter(search_criteria[4])) if search_criteria[5] != "": filters = join_filters(filters, get_slot_filter(search_criteria[5])) resources = CatalogueResource.objects.filter(filters) resources = filter_resources_by_scope(resources, scope).distinct() resources = resources.order_by(orderby) resources = group_resources(resources) resources = filter_resources_by_organization(user, resources, user.groups.all()) items = len(resources) resources = get_paginatedlist(resources, pag, offset) return get_resource_response(resources, format, items, user)