def __getFilteredExperiments(request, searchFilterData): """Filter the list of experiments using the cleaned up searchFilterData. Arguments: request -- the HTTP request searchFilterData -- the cleaned up search experiment form data Returns: A list of experiments as a result of the query or None if the provided search request is invalid """ experiments = authz.get_accessible_experiments(request) if experiments is None: return [] # search for the default experiment fields if searchFilterData['title'] != '': experiments = \ experiments.filter(title__icontains=searchFilterData['title']) if searchFilterData['description'] != '': experiments = \ experiments.filter( description__icontains=searchFilterData['description']) if searchFilterData['institutionName'] != '': experiments = experiments.filter( institution_name__icontains=searchFilterData['institutionName']) if searchFilterData['creator'] != '': experiments = experiments.filter( experimentauthor__author__icontains=searchFilterData['creator']) date = searchFilterData['date'] if date is not None: experiments = \ experiments.filter(start_time__lt=date, end_time__gt=date) # get all the experiment parameters exp_schema_namespaces = Schema.getNamespaces(Schema.EXPERIMENT) parameters = ParameterName.objects.filter( schema__namespace__in=exp_schema_namespaces, is_searchable=True) experiments = __filterParameters( parameters, experiments, searchFilterData, 'experimentparameterset__experimentparameter') # let's sort it in the end experiments = experiments.order_by('title') return experiments
def __getFilteredExperiments(request, searchFilterData): """Filter the list of experiments using the cleaned up searchFilterData. Arguments: request -- the HTTP request searchFilterData -- the cleaned up search experiment form data Returns: list: A list of experiments as a result of the query or None if the provided search request is invalid """ experiments = authz.get_accessible_experiments(request) if experiments is None: return [] # search for the default experiment fields if searchFilterData['title'] != '': experiments = \ experiments.filter(title__icontains=searchFilterData['title']) if searchFilterData['description'] != '': experiments = \ experiments.filter( description__icontains=searchFilterData['description']) if searchFilterData['institutionName'] != '': experiments = experiments.filter( institution_name__icontains=searchFilterData['institutionName']) if searchFilterData['creator'] != '': experiments = experiments.filter( experimentauthor__author__icontains=searchFilterData['creator']) date = searchFilterData['date'] if date is not None: experiments = \ experiments.filter(start_time__lt=date, end_time__gt=date) # get all the experiment parameters exp_schema_namespaces = Schema.getNamespaces(Schema.EXPERIMENT) parameters = ParameterName.objects.filter( schema__namespace__in=exp_schema_namespaces, is_searchable=True) experiments = __filterParameters( parameters, experiments, searchFilterData, 'experimentparameterset__experimentparameter') # let's sort it in the end experiments = experiments.order_by('title') return experiments
def extra_context(self): extra = super(ExperimentSearchView, self).extra_context() # Results may contain Experiments, Datasets and DataFiles. # Group them into experiments, noting whether or not the search # hits were in the Dataset(s) or DataFile(s) results = self.results facets = results.facet_counts() if facets: experiment_facets = facets['fields']['experiment_id_stored'] experiment_ids = [ int(f[0]) for f in experiment_facets if int(f[1]) > 0 ] else: experiment_ids = [] access_list = [] if self.request.user.is_authenticated(): access_list.extend( [e.pk for e in authz.get_accessible_experiments(self.request)]) access_list.extend([ e.pk for e in Experiment.objects.exclude( public_access=Experiment.PUBLIC_ACCESS_NONE).exclude( public_access=Experiment.PUBLIC_ACCESS_EMBARGO) ]) ids = list(set(experiment_ids) & set(access_list)) experiments = Experiment.objects.filter(pk__in=ids)\ .order_by('-update_time') results = [] for e in experiments: result = { 'sr': e, 'dataset_hit': False, 'datafile_hit': False, 'experiment_hit': False } results.append(result) extra['experiments'] = results return extra
def extra_context(self): extra = super(ExperimentSearchView, self).extra_context() # Results may contain Experiments, Datasets and DataFiles. # Group them into experiments, noting whether or not the search # hits were in the Dataset(s) or DataFile(s) results = self.results facets = results.facet_counts() if facets: experiment_facets = facets['fields']['experiment_id_stored'] experiment_ids = [int(f[0]) for f in experiment_facets if int(f[1]) > 0] else: experiment_ids = [] access_list = [] if self.request.user.is_authenticated(): access_list.extend( [e.pk for e in authz.get_accessible_experiments(self.request)]) access_list.extend( [e.pk for e in Experiment.objects .exclude(public_access=Experiment.PUBLIC_ACCESS_NONE) .exclude(public_access=Experiment.PUBLIC_ACCESS_EMBARGO)]) ids = list(set(experiment_ids) & set(access_list)) experiments = Experiment.objects.filter(pk__in=ids)\ .order_by('-update_time') results = [] for e in experiments: result = {'sr': e, 'dataset_hit': False, 'datafile_hit': False, 'experiment_hit': False} results.append(result) extra['experiments'] = results return extra