def search(request): if request.method == 'POST': form = EquipmentSearchForm(request.POST) if form.is_valid(): data = form.cleaned_data q = Equipment.objects.all() if data['key']: q = q.filter(key__icontains=data['key']) if data['description']: q = q.filter(description__icontains=data['description']) if data['make']: q = q.filter(make__icontains=data['make']) if data['serial']: q = q.filter(serial__icontains=data['serial']) if data['type']: q = q.filter(type__icontains=data['type']) c = {'header': 'Search Equipment', 'object_list': q} url = 'equipment/equipment_list.html' return render_response_search(request, url, c) else: form = EquipmentSearchForm() c = {'form': form} url = 'equipment/equipment_search.html' return render_response_search(request, url, c)
def search(request): if request.method == 'POST': form = EquipmentSearchForm(request.POST) if form.is_valid(): data = form.cleaned_data q = Equipment.objects.all() if data['key']: q = q.filter(key__icontains=data['key']) if data['description']: q = q.filter(description__icontains=data['description']) if data['make']: q = q.filter(make__icontains=data['make']) if data['serial']: q = q.filter(serial__icontains=data['serial']) if data['type']: q = q.filter(type__icontains=data['type']) c = Context({'header': 'Search Equipment', 'object_list': q}) url = 'equipment/equipment_list.html' return HttpResponse(render_response_search(request, url, c)) else: form = EquipmentSearchForm() c = Context({'form': form}) url = 'equipment/equipment_search.html' return HttpResponse(render_response_search(request, url, c))
def search_experiment(request): """Either show the search experiment form or the result of the search experiment query. """ if not request.GET: return __forwardToSearchExperimentFormPage(request) form = __getSearchExperimentForm(request) experiments = __processExperimentParameters(request, form) # check if the submitted form is valid if experiments is not None: bodyclass = 'list' else: return __forwardToSearchExperimentFormPage(request) results = [] for e in experiments: result = {} result['sr'] = e result['dataset_hit'] = False result['experiment_hit'] = True results.append(result) c = {'header': 'Search Experiment', 'experiments': results, 'bodyclass': bodyclass} url = 'tardis_portal/search_experiment_results.html' return render_response_search(request, url, c)
def __forwardToSearchExperimentFormPage(request): """Forward to the search experiment form page.""" searchForm = __getSearchExperimentForm(request) c = {'searchForm': searchForm} url = 'tardis_portal/search_experiment_form.html' return HttpResponse(render_response_search(request, url, c))
def __forwardToSearchExperimentFormPage(request): """Forward to the search experiment form page.""" searchForm = __getSearchExperimentForm(request) c = {'searchForm': searchForm} url = 'tardis_portal/search_experiment_form.html' return HttpResponse(render_response_search(request, url, c))
def experiment_list_shared(request): c = { 'subtitle': 'Shared Experiments', 'can_see_private': True, 'experiments': authz.get_shared_experiments(request) .order_by('-update_time'), } # TODO actually change loaders to load this based on stuff return HttpResponse(render_response_search(request, 'tardis_portal/experiment/list_shared.html', c))
def experiment_list_shared(request): c = { 'subtitle': 'Shared Experiments', 'can_see_private': True, 'experiments': authz.get_shared_experiments(request) .order_by('-update_time'), } # TODO actually change loaders to load this based on stuff return HttpResponse(render_response_search(request, 'tardis_portal/experiment/list_shared.html', c))
def __forwardToSearchDatafileFormPage(request, searchQueryType, searchForm=None): """Forward to the search data file form page.""" # TODO: remove this later on when we have a more generic search form if searchQueryType == 'mx': url = 'tardis_portal/search_datafile_form_mx.html' searchForm = MXDatafileSearchForm() c = {'header': 'Search Datafile', 'searchForm': searchForm} return HttpResponse(render_response_search(request, url, c)) url = 'tardis_portal/search_datafile_form.html' if not searchForm: # if searchQueryType == 'saxs': SearchDatafileForm = createSearchDatafileForm(searchQueryType) searchForm = SearchDatafileForm() # pylint: disable=R0204 # else: # # TODO: what do we need to do if the user didn't provide a page to # display? # pass from itertools import groupby # sort the fields in the form as it will make grouping the related fields # together in the next step easier sortedSearchForm = sorted(searchForm, lambda x, y: cmp(x.name, y.name)) # modifiedSearchForm will be used to customise how the range type of fields # will be displayed. range type of fields will be displayed side by side. modifiedSearchForm = [list(g) for k, g in groupby( sortedSearchForm, lambda x: x.name.rsplit('To')[0].rsplit('From')[0])] # the searchForm will be used by custom written templates whereas the # modifiedSearchForm will be used by the 'generic template' that the # dynamic search datafiles form uses. c = {'header': 'Search Datafile', 'searchForm': searchForm, 'modifiedSearchForm': modifiedSearchForm} return HttpResponse(render_response_search(request, url, c))
def __forwardToSearchDatafileFormPage(request, searchQueryType, searchForm=None): """Forward to the search data file form page.""" # TODO: remove this later on when we have a more generic search form if searchQueryType == 'mx': url = 'tardis_portal/search_datafile_form_mx.html' searchForm = MXDatafileSearchForm() c = {'header': 'Search Datafile', 'searchForm': searchForm} return HttpResponse(render_response_search(request, url, c)) url = 'tardis_portal/search_datafile_form.html' if not searchForm: # if searchQueryType == 'saxs': SearchDatafileForm = createSearchDatafileForm(searchQueryType) searchForm = SearchDatafileForm() # else: # # TODO: what do we need to do if the user didn't provide a page to # display? # pass from itertools import groupby # sort the fields in the form as it will make grouping the related fields # together in the next step easier sortedSearchForm = sorted(searchForm, lambda x, y: cmp(x.name, y.name)) # modifiedSearchForm will be used to customise how the range type of fields # will be displayed. range type of fields will be displayed side by side. modifiedSearchForm = [list(g) for k, g in groupby( sortedSearchForm, lambda x: x.name.rsplit('To')[0].rsplit('From')[0])] # the searchForm will be used by custom written templates whereas the # modifiedSearchForm will be used by the 'generic template' that the # dynamic search datafiles form uses. c = {'header': 'Search Datafile', 'searchForm': searchForm, 'modifiedSearchForm': modifiedSearchForm} return HttpResponse(render_response_search(request, url, c))
def experiment_list_public(request): private_filter = Q(public_access=Experiment.PUBLIC_ACCESS_NONE) c = { 'subtitle': 'Public Experiments', 'can_see_private': False, 'experiments': Experiment.objects.exclude(private_filter) .order_by('-update_time'), } return HttpResponse(render_response_search(request, 'tardis_portal/experiment/list_public.html', c))
def experiment_list_public(request): private_filter = Q(public_access=Experiment.PUBLIC_ACCESS_NONE) c = { 'subtitle': 'Public Experiments', 'can_see_private': False, 'experiments': Experiment.objects.exclude(private_filter) .order_by('-update_time'), } return HttpResponse(render_response_search(request, 'tardis_portal/experiment/list_public.html', c))
def search_experiment(request): """Either show the search experiment form or the result of the search experiment query. """ if len(request.GET) == 0: return __forwardToSearchExperimentFormPage(request) form = __getSearchExperimentForm(request) experiments = __processExperimentParameters(request, form) # check if the submitted form is valid if experiments is not None: bodyclass = 'list' else: return __forwardToSearchExperimentFormPage(request) # remove information from previous searches from session if 'datafileResults' in request.session: del request.session['datafileResults'] results = [] for e in experiments: result = {} result['sr'] = e result['dataset_hit'] = False result['datafile_hit'] = False result['experiment_hit'] = True results.append(result) c = { 'header': 'Search Experiment', 'experiments': results, 'bodyclass': bodyclass } url = 'tardis_portal/search_experiment_results.html' return HttpResponse(render_response_search(request, url, c))
def search_experiment(request): """Either show the search experiment form or the result of the search experiment query. """ if len(request.GET) == 0: return __forwardToSearchExperimentFormPage(request) form = __getSearchExperimentForm(request) experiments = __processExperimentParameters(request, form) # check if the submitted form is valid if experiments is not None: bodyclass = 'list' else: return __forwardToSearchExperimentFormPage(request) # remove information from previous searches from session if 'datafileResults' in request.session: del request.session['datafileResults'] results = [] for e in experiments: result = {} result['sr'] = e result['dataset_hit'] = False result['datafile_hit'] = False result['experiment_hit'] = True results.append(result) c = {'header': 'Search Experiment', 'experiments': results, 'bodyclass': bodyclass} url = 'tardis_portal/search_experiment_results.html' return HttpResponse(render_response_search(request, url, c))
def search_datafile(request): # too complex # noqa """Either show the search datafile form or the result of the search datafile query. """ if 'type' in request.GET: searchQueryType = request.GET.get('type') else: # for now we'll default to MX if nothing is provided # TODO: should we forward the page to experiment search page if # nothing is provided in the future? searchQueryType = 'mx' logger.info('search_datafile: searchQueryType {0}'.format(searchQueryType)) # TODO: check if going to /search/datafile will flag an error in unit test bodyclass = None if 'page' not in request.GET and 'type' in request.GET and \ len(request.GET) > 1: # display the 1st page of the results form = __getSearchDatafileForm(request, searchQueryType) datafile_results = __processDatafileParameters( request, searchQueryType, form) if datafile_results is not None: bodyclass = 'list' else: return __forwardToSearchDatafileFormPage( request, searchQueryType, form) else: if 'page' in request.GET: # succeeding pages of pagination if 'datafileResults' in request.session: datafile_results = request.session['datafileResults'] else: form = __getSearchDatafileForm(request, searchQueryType) datafile_results = __processDatafileParameters( request, searchQueryType, form) if datafile_results is not None: bodyclass = 'list' else: return __forwardToSearchDatafileFormPage( request, searchQueryType, form) else: # display the form if 'datafileResults' in request.session: del request.session['datafileResults'] return __forwardToSearchDatafileFormPage(request, searchQueryType) # process the files to be displayed by the paginator... # paginator = Paginator(datafile_results, # constants.DATAFILE_RESULTS_PER_PAGE) # try: # page = int(request.GET.get('page', '1')) # except ValueError: # page = 1 # If page request (9999) is out of :range, deliver last page of results. # try: # datafiles = paginator.page(page) # except (EmptyPage, InvalidPage): # datafiles = paginator.page(paginator.num_pages) import re cleanedUpQueryString = re.sub('&page=\d+', '', request.META['QUERY_STRING']) # get experiments associated with datafiles if datafile_results: experiment_pks = list(set(datafile_results.values_list( 'dataset__experiments', flat=True))) experiments = Experiment.safe.in_bulk(experiment_pks) else: experiments = {} results = [] for key, e in experiments.items(): result = {} result['sr'] = e result['dataset_hit'] = False result['datafile_hit'] = True result['experiment_hit'] = False results.append(result) c = { 'experiments': results, 'datafiles': datafile_results, # 'paginator': paginator, 'query_string': cleanedUpQueryString, 'subtitle': 'Search Datafiles', 'nav': [{'name': 'Search Datafile', 'link': '/search/datafile/'}], 'bodyclass': bodyclass, 'search_pressed': True, 'searchDatafileSelectionForm': getNewSearchDatafileSelectionForm()} url = 'tardis_portal/search_experiment_results.html' return HttpResponse(render_response_search(request, url, c))