def get_context_data(self, **kwargs): context = super(SearchView, self).get_context_data(**kwargs) q = self.request.GET.get('q', '').strip() sort_by = self.request.GET.get('sort_by', DEFAULT_SORT_BY) offset, limit = paginator_params(self.request) # will be saved to cookie in get method self.paginator_limit = limit filters = get_filters_dict(self.request.GET) # set offset to zero if no results returned for offset in (offset, 0): if q: # search by ids first search = SearchByIDs( ids=[q], filters=filters, request_cls=RequestDetail) if not search.is_empty(): results = search.get_results() context['results'] = results[offset:offset + limit] context['num_results'] = len(results) return context else: # FIXME: temporary hack to work around GNOS not quoting Solr query if browser_text_search.useAllMetadataIndex: filters.update({'all_metadata': browser_text_search.ws_query(q)}) else: filters.update({'xml_text': '(%s)' % q}) context['search_notification'] = ('<strong>Warning:</strong> ' 'these results were produced by a free text ' 'word search of the metadata. The results maybe ' 'be incomplete or inconsistent due to limited ' 'amount of textual metadata available. Use the ' 'filters to get a consistent set of results or ' 'search for a particular identifier.') api_request = RequestDetail( query=filters, sort_by=sort_by, offset=offset, limit=limit) results = [] for result in api_request.call(): results.append(result) context['num_results'] = api_request.hits context['results'] = results if api_request.hits != 0: break if context['num_results'] == 0: context['message'] = 'No results found.' return context
def cart_add_all_files(request): # 'Add all to cart' pressed form = AllItemsForm(request.POST) if form.is_valid(): try: # calculate query raw_filters = form.cleaned_data['filters'] filters = get_filters_dict(raw_filters) q = raw_filters.get('q') queries = [] if q: # FIXME: temporary hack to work around GNOS not quoting Solr query # FIXME: this is temporary hack, need for multiple requests will be fixed at CGHub if browser_text_search.useAllMetadataIndex: query = {'all_metadata': browser_text_search.ws_query(q)} query.update(filters) queries = [query] else: query = {'xml_text': u"(%s)" % q} query.update(filters) queries = [query, {'analysis_id': q}] if not queries: queries = [filters] message_id = add_message( request, 'info', settings.ADDING_TO_CART_IN_PROGRESS_NOTIFICATION) try: with transaction.commit_on_success(): cart = Cart(request.session) for query in queries: api_request = RequestMinimal(query=query) for result in api_request.call(): cart.add(result) cart.update_stats() remove_message(request, message_id) except DatabaseError: remove_message(request, message_id) return { 'action': 'message', 'title': settings.DATABASE_ERROR_NOTIFICATION_TITLE, 'content': settings.DATABASE_ERROR_NOTIFICATION} return {'action': 'redirect', 'redirect': reverse('cart_page')} except Exception as e: cart_logger.error('Error while adding all files to cart: %s' % unicode(e)) else: cart_logger.error('AllItemsForm not valid: %s' % unicode(form.errors))