def share(request, experiment_id): ''' Choose access rights and licence. ''' experiment = Experiment.objects.get(id=experiment_id) user = request.user c = {} c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment_id) c['has_download_permissions'] = \ authz.has_experiment_download_access(request, experiment_id) if user.is_authenticated(): c['is_owner'] = authz.has_experiment_ownership(request, experiment_id) c['is_superuser'] = user.is_superuser c['is_staff'] = user.is_staff domain = Site.objects.get_current().domain public_link = experiment.public_access >= Experiment.PUBLIC_ACCESS_METADATA c['experiment'] = experiment c['public_link'] = public_link c['domain'] = domain return HttpResponse(render_response_index(request, 'tardis_portal/ajax/share.html', c))
def update_detail(self, object_list, bundle): if not bundle.request.user.is_authenticated(): return False if type(bundle.obj) == Experiment: return bundle.request.user.has_perm( 'tardis_portal.change_experiment') and \ has_write_permissions(bundle.request, bundle.obj.id) elif type(bundle.obj) == ExperimentParameterSet: return bundle.request.user.has_perm( 'tardis_portal.change_experiment') # and \ # has_write_permissions(bundle.request, bundle.obj.experiment.id) elif type(bundle.obj) == ExperimentParameter: return bundle.request.user.has_perm( 'tardis_portal.change_experiment') elif type(bundle.obj) == Dataset: return False elif type(bundle.obj) == DatasetParameterSet: return False elif type(bundle.obj) == DatasetParameter: return False elif type(bundle.obj) == Dataset_File: return False elif type(bundle.obj) == DatafileParameterSet: return False elif type(bundle.obj) == DatafileParameter: return False elif type(bundle.obj) == Schema: return False raise NotImplementedError(type(bundle.obj))
def experiment_description(request, experiment_id): """View an existing experiment's description. To be loaded via ajax. :param request: a HTTP Request instance :type request: :class:`django.http.HttpRequest` :param experiment_id: the ID of the experiment to be edited :type experiment_id: string :rtype: :class:`django.http.HttpResponse` """ c = {} try: experiment = Experiment.safe.get(request.user, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c['experiment'] = experiment c['subtitle'] = experiment.title c['nav'] = [{ 'name': 'Data', 'link': '/experiment/view/' }, { 'name': experiment.title, 'link': experiment.get_absolute_url() }] c['authors'] = experiment.experimentauthor_set.all() c['datafiles'] = \ DataFile.objects.filter(dataset__experiments=experiment_id) c['owners'] = experiment.get_owners() # calculate the sum of the datafile sizes c['size'] = DataFile.sum_sizes(c['datafiles']) c['has_download_permissions'] = \ authz.has_experiment_download_access(request, experiment_id) c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment_id) if request.user.is_authenticated(): c['is_owner'] = authz.has_experiment_ownership(request, experiment_id) _add_protocols_and_organizations(request, experiment, c) if 'status' in request.GET: c['status'] = request.GET['status'] if 'error' in request.GET: c['error'] = request.GET['error'] return HttpResponse( render_response_index( request, 'tardis_portal/ajax/experiment_description.html', c))
def add_experiment_par(request, experiment_id): parentObject = Experiment.objects.get(id=experiment_id) if authz.has_write_permissions(request, parentObject.id): return add_par(request, parentObject, otype="experiment", stype=Schema.EXPERIMENT) else: return return_response_error(request)
def retrieve_datasets(request, sample_id): datasetwrappers = DatasetWrapper.objects.filter(sample=sample_id).order_by('pk') datasets = [wrapper.dataset for wrapper in datasetwrappers] sample = Sample.objects.get(pk=sample_id) has_write_permissions = \ authz.has_write_permissions(request, sample.experiment.id) c = Context({'datasets' : datasets, 'has_write_permissions' : has_write_permissions}) return HttpResponse(render_response_index(request, 'tardis_portal/ajax/dataset.html', c))
def delete_detail(self, object_list, bundle): if isinstance(bundle.obj, ObjectACL): # must be allowed to delete ObjectACLs and change the associated # Experiment to be able to delete the ObjectACL return bundle.request.user.has_perm( 'tardis_portal.delete_objectacl') and \ has_write_permissions(bundle.request, bundle.obj.object_id) return super(tardis.tardis_portal.api.ACLAuthorization, self).delete_detail(object_list, bundle)
def delete_detail(self, object_list, bundle): if isinstance(bundle.obj, ObjectACL): # must be allowed to delete ObjectACLs and change the associated # Experiment to be able to delete the ObjectACL return bundle.request.user.has_perm( 'tardis_portal.delete_objectacl') and \ has_write_permissions(bundle.request, bundle.obj.object_id) return super(tardis_api.ACLAuthorization, self).delete_detail(object_list, bundle)
def experiment_description(request, experiment_id): """View an existing experiment's description. To be loaded via ajax. :param request: a HTTP Request instance :type request: :class:`django.http.HttpRequest` :param experiment_id: the ID of the experiment to be edited :type experiment_id: string :rtype: :class:`django.http.HttpResponse` """ c = {} try: experiment = Experiment.safe.get(request.user, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c['experiment'] = experiment c['subtitle'] = experiment.title c['nav'] = [{'name': 'Data', 'link': '/experiment/view/'}, {'name': experiment.title, 'link': experiment.get_absolute_url()}] c['authors'] = experiment.experimentauthor_set.all() c['datafiles'] = \ DataFile.objects.filter(dataset__experiments=experiment_id) c['owners'] = experiment.get_owners() # calculate the sum of the datafile sizes c['size'] = DataFile.sum_sizes(c['datafiles']) c['has_download_permissions'] = \ authz.has_experiment_download_access(request, experiment_id) c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment_id) if request.user.is_authenticated(): c['is_owner'] = authz.has_experiment_ownership(request, experiment_id) _add_protocols_and_organizations(request, experiment, c) if 'status' in request.GET: c['status'] = request.GET['status'] if 'error' in request.GET: c['error'] = request.GET['error'] return HttpResponse(render_response_index(request, 'tardis_portal/ajax/experiment_description.html', c))
def retrieve_experiment_metadata(request, experiment_id): experiment = Experiment.objects.get(pk=experiment_id) has_write_permissions = \ authz.has_write_permissions(request, experiment_id) parametersets = experiment.experimentparameterset_set\ .exclude(schema__hidden=True) c = {'experiment': experiment, 'parametersets': parametersets, 'has_write_permissions': has_write_permissions} return HttpResponse(render_response_index(request, 'tardis_portal/ajax/experiment_metadata.html', c))
def index(request, experiment_id): template = 'related_info/index.html' c = Context() if request.user.is_authenticated(): c['has_write_permissions'] = authz.has_write_permissions(request, experiment_id) rih = RelatedInfoHandler(experiment_id) c['related_info_list'] = rih.info_list() c['experiment_id'] = int(experiment_id) c['other_info'] = ExperimentParameter.objects.filter(name__schema__namespace=auxiliary_schema_namespace, parameterset__experiment=experiment_id) return HttpResponse(render_response_index(request, template, c))
def _create_related_info(request, experiment_id): if not authz.has_write_permissions(request, experiment_id): return return_response_error(request) form = RelatedInfoForm(json.loads(request.body)) if not form.is_valid(): return HttpResponse('', status=400) ps = ExperimentParameterSet(experiment_id=experiment_id, schema=_get_schema()) ps.save() ParameterSetManager(ps).set_params_from_dict(form.cleaned_data) return HttpResponse(json.dumps(_get_dict_from_ps(ps)), content_type='application/json; charset=utf-8', status=201)
def _delete_related_info(request, experiment_id, related_info_id): if not authz.has_write_permissions(request, experiment_id): return return_response_error(request) try: ps = ExperimentParameterSet.objects.get(experiment_id=experiment_id, id=related_info_id) except ExperimentParameterSet.DoesNotExist: return HttpResponse('', status=404) obj = _get_dict_from_ps(ps) ps.delete() return HttpResponse(json.dumps(obj), content_type='application/json; charset=utf-8')
def index(request, experiment_id): try: experiment = Experiment.safe.get(request, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c = Context({'experiment': experiment}) if authz.has_write_permissions(request, experiment_id): template = 'related_info/index.html' else: template = 'related_info/index_ro.html' return HttpResponse(render_response_index(request, template, c))
def index(request, experiment_id): try: experiment = Experiment.safe.get(request.user, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c = {'experiment': experiment} if authz.has_write_permissions(request, experiment_id): template = 'related_info/index.html' else: template = 'related_info/index_ro.html' return HttpResponse(render_response_index(request, template, c))
def retrieve_experiment_metadata(request, experiment_id): experiment = Experiment.objects.get(pk=experiment_id) has_write_permissions = \ authz.has_write_permissions(request, experiment_id) parametersets = experiment.experimentparameterset_set\ .exclude(schema__hidden=True) c = { 'experiment': experiment, 'parametersets': parametersets, 'has_write_permissions': has_write_permissions } return HttpResponse( render_response_index(request, 'tardis_portal/ajax/experiment_metadata.html', c))
def index(request, experiment_id): try: experiment = Experiment.safe.get(request.user, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c = {'experiment': experiment, 'for_code_json': json.dumps(_get_for_codes(), sort_keys=True)} if authz.has_write_permissions(request, experiment_id): template = 'anzsrc_codes/index.html' else: template = 'anzsrc_codes/index_ro.html' return HttpResponse(render_response_index(request, template, c))
def _update_related_info(request, experiment_id, related_info_id): if not authz.has_write_permissions(request, experiment_id): return return_response_error(request) form = RelatedInfoForm(json.loads(request.body)) if not form.is_valid(): return HttpResponse('', status=400) try: ps = ExperimentParameterSet.objects.get(experiment_id=experiment_id, id=related_info_id) except ExperimentParameterSet.DoesNotExist: return HttpResponse('', status=404) ParameterSetManager(ps).set_params_from_dict(form.cleaned_data) return HttpResponse(json.dumps(_get_dict_from_ps(ps)), content_type='application/json; charset=utf-8', status=201)
def index(request, experiment_id): try: experiment = Experiment.safe.get(request, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c = Context({ 'experiment': experiment, 'for_code_json': json.dumps(_get_for_codes(), sort_keys=True) }) if authz.has_write_permissions(request, experiment_id): template = 'anzsrc_codes/index.html' else: template = 'anzsrc_codes/index_ro.html' return HttpResponse(render_response_index(request, template, c))
def update_detail(self, object_list, bundle): # noqa # too complex if not bundle.request.user.is_authenticated(): return False if isinstance(bundle.obj, Experiment): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') and \ has_write_permissions(bundle.request, bundle.obj.id) elif isinstance(bundle.obj, ExperimentParameterSet): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') # and \ # has_write_permissions(bundle.request, bundle.obj.experiment.id) elif isinstance(bundle.obj, ExperimentParameter): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') elif isinstance(bundle.obj, Dataset): return False elif isinstance(bundle.obj, DatasetParameterSet): return False elif isinstance(bundle.obj, DatasetParameter): return False elif isinstance(bundle.obj, DataFile): return bundle.request.user.has_perm( 'tardis_portal.change_datafile') elif isinstance(bundle.obj, DatafileParameterSet): return False elif isinstance(bundle.obj, DatafileParameter): return False elif isinstance(bundle.obj, Schema): return False elif isinstance(bundle.obj, Group): return False elif isinstance(bundle.obj, Facility): return False elif isinstance(bundle.obj, Instrument): facilities = facilities_managed_by(bundle.request.user) return bundle.obj.facility in facilities and \ bundle.request.user.has_perm('tardis_portal.change_instrument') raise NotImplementedError(type(bundle.obj))
def update_detail(self, object_list, bundle): # noqa # too complex if not bundle.request.user.is_authenticated(): return False if isinstance(bundle.obj, Experiment): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') and \ has_write_permissions(bundle.request, bundle.obj.id) elif isinstance(bundle.obj, ExperimentParameterSet): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') # and \ # has_write_permissions(bundle.request, bundle.obj.experiment.id) elif isinstance(bundle.obj, ExperimentParameter): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') elif isinstance(bundle.obj, Dataset): return False elif isinstance(bundle.obj, DatasetParameterSet): return False elif isinstance(bundle.obj, DatasetParameter): return False elif isinstance(bundle.obj, DataFile): return bundle.request.user.has_perm('tardis_portal.change_datafile') elif isinstance(bundle.obj, DatafileParameterSet): return False elif isinstance(bundle.obj, DatafileParameter): return False elif isinstance(bundle.obj, Schema): return False elif isinstance(bundle.obj, Group): return False elif isinstance(bundle.obj, Facility): return False elif isinstance(bundle.obj, Instrument): facilities = facilities_managed_by(bundle.request.user) return bundle.obj.facility in facilities and \ bundle.request.user.has_perm('tardis_portal.change_instrument') raise NotImplementedError(type(bundle.obj))
def retrieve_datafile_list(request, dataset_id, template_name='tardis_portal/ajax/datafile_list.html'): params = {} query = None highlighted_dsf_pks = [] if 'query' in request.GET: search_query = FacetFixedSearchQuery(backend=HighlightSearchBackend()) sqs = SearchQuerySet(query=search_query) query = SearchQueryString(request.GET['query']) results = sqs.raw_search(query.query_string() + ' AND dataset_id_stored:%i' % (int(dataset_id))).load_all() highlighted_dsf_pks = [int(r.pk) for r in results if r.model_name == 'dataset_file' and r.dataset_id_stored == int(dataset_id)] params['query'] = query.query_string() elif 'datafileResults' in request.session and 'search' in request.GET: highlighted_dsf_pks = [r.pk for r in request.session['datafileResults']] dataset_results = \ Dataset_File.objects.filter( dataset__pk=dataset_id, ).order_by('filename') # microtardis change start if 'session_show_hidden' not in request.session: request.session['session_show_hidden'] = False if 'session_hidden_text' not in request.session: request.session['session_hidden_text'] = "Show Hidden Datasets and Files" if not request.session['session_show_hidden']: # hide hidden objects hidden_datafiles = Datafile_Hidden.objects.filter(hidden=True).values_list('datafile', flat=True) dataset_results = dataset_results.exclude(pk__in=hidden_datafiles) # microtardis change end if request.GET.get('limit', False) and len(highlighted_dsf_pks): dataset_results = \ dataset_results.filter(pk__in=highlighted_dsf_pks) params['limit'] = request.GET['limit'] filename_search = None if 'filename' in request.GET and len(request.GET['filename']): filename_search = request.GET['filename'] dataset_results = \ dataset_results.filter(url__icontains=filename_search) params['filename'] = filename_search # pagination was removed by someone in the interface but not here. # need to fix. pgresults = 100 paginator = Paginator(dataset_results, pgresults) 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: dataset = paginator.page(page) except (EmptyPage, InvalidPage): dataset = paginator.page(paginator.num_pages) is_owner = False has_write_permissions = False if request.user.is_authenticated(): experiment_id = Experiment.objects.get(dataset__id=dataset_id).id is_owner = authz.has_experiment_ownership(request, experiment_id) has_write_permissions = \ authz.has_write_permissions(request, experiment_id) immutable = Dataset.objects.get(id=dataset_id).immutable params = urlencode(params) c = Context({ 'dataset': dataset, 'paginator': paginator, 'immutable': immutable, 'dataset_id': dataset_id, 'filename_search': filename_search, 'is_owner': is_owner, 'highlighted_dataset_files': highlighted_dsf_pks, 'has_write_permissions': has_write_permissions, 'search_query' : query, 'params' : params }) # microtardis change start if request.session['session_show_hidden']: # show all objects # highlight hidden objects hidden_datafiles = Datafile_Hidden.objects.filter(hidden=True).values_list('datafile', flat=True) objects = Dataset_File.objects.filter(dataset__pk=dataset_id, pk__in=hidden_datafiles) c['linethrough_dataset_files'] = [ obj.pk for obj in objects ] # microtardis change end return HttpResponse(render_response_index(request, template_name, c))
def experiment_datasets(request, experiment_id): """View a listing of dataset of an existing experiment as ajax loaded tab. :param request: a HTTP Request instance :type request: :class:`django.http.HttpRequest` :param experiment_id: the ID of the experiment to be edited :type experiment_id: string :param template_name: the path of the template to render :type template_name: string :rtype: :class:`django.http.HttpResponse` """ c = Context({'upload_complete_url': reverse('tardis.tardis_portal.views.upload_complete'), 'searchDatafileSelectionForm': getNewSearchDatafileSelectionForm(), }) try: experiment = Experiment.safe.get(request, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c['experiment'] = experiment if 'query' in request.GET: # We've been passed a query to get back highlighted results. # Only pass back matching datafiles # search_query = FacetFixedSearchQuery(backend=HighlightSearchBackend()) sqs = SearchQuerySet(query=search_query) query = SearchQueryString(request.GET['query']) facet_counts = sqs.raw_search(query.query_string() + ' AND experiment_id_stored:%i' % (int(experiment_id)), end_offset=1).facet('dataset_id_stored').highlight().facet_counts() if facet_counts: dataset_id_facets = facet_counts['fields']['dataset_id_stored'] else: dataset_id_facets = [] c['highlighted_datasets'] = [ int(f[0]) for f in dataset_id_facets ] c['file_matched_datasets'] = [] c['search_query'] = query # replace '+'s with spaces elif 'datafileResults' in request.session and 'search' in request.GET: c['highlighted_datasets'] = None c['highlighted_dataset_files'] = [r.pk for r in request.session['datafileResults']] c['file_matched_datasets'] = \ list(set(r.dataset.pk for r in request.session['datafileResults'])) c['search'] = True else: c['highlighted_datasets'] = None c['highlighted_dataset_files'] = None c['file_matched_datasets'] = None # microtardis change start if 'session_show_hidden' not in request.session: request.session['session_show_hidden'] = False if 'session_hidden_text' not in request.session: request.session['session_hidden_text'] = "Show Hidden Datasets and Files" if not request.session['session_show_hidden']: # hide hidden objects hidden_datasets = Dataset_Hidden.objects.filter(hidden=True).values_list('dataset', flat=True) c['datasets'] = Dataset.objects.filter(experiment=experiment_id).exclude(pk__in=hidden_datasets) hidden_datafiles = Datafile_Hidden.objects.filter(hidden=True).values_list('datafile', flat=True) datafiles = {} for dataset in c['datasets']: datafiles[dataset] = Dataset_File.objects.filter(dataset=dataset.id).exclude(pk__in=hidden_datafiles).count() c['datafiles'] = datafiles else: # show all objects c['datasets'] = Dataset.objects.filter(experiment=experiment_id) datafiles = {} for dataset in c['datasets']: datafiles[dataset] = Dataset_File.objects.filter(dataset=dataset.id).count() c['datafiles'] = datafiles # highlight hidden datasets hidden_datasets = Dataset_Hidden.objects.filter(hidden=True).values_list('dataset', flat=True) dataset_objects = Dataset.objects.filter(experiment=experiment_id, pk__in=hidden_datasets) c['linethrough_datasets'] = [ obj.pk for obj in dataset_objects ] # highlight datasets which have hidden datafiles hidden_datafiles = Datafile_Hidden.objects.filter(hidden=True).values_list('datafile', flat=True) experiment_dataset_objects = Dataset.objects.filter(experiment=experiment_id) hidden_datafiles_objects = Dataset_File.objects.filter(pk__in=hidden_datafiles, dataset__in=experiment_dataset_objects) c['file_hidden_datasets'] = list(set(obj.dataset.pk for obj in hidden_datafiles_objects)) # microtardis change end c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment_id) c['protocol'] = [] download_urls = experiment.get_download_urls() for key, value in download_urls.iteritems(): c['protocol'] += [[key, value]] if 'status' in request.GET: c['status'] = request.GET['status'] if 'error' in request.GET: c['error'] = request.GET['error'] return HttpResponse(render_response_index(request, 'tardis_portal/ajax/experiment_datasets.html', c))
def experiment_description(request, experiment_id): """View an existing experiment's description. To be loaded via ajax. :param request: a HTTP Request instance :type request: :class:`django.http.HttpRequest` :param experiment_id: the ID of the experiment to be edited :type experiment_id: string :rtype: :class:`django.http.HttpResponse` """ c = Context({}) try: experiment = Experiment.safe.get(request, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c['experiment'] = experiment c['subtitle'] = experiment.title c['nav'] = [{'name': 'Data', 'link': '/experiment/view/'}, {'name': experiment.title, 'link': experiment.get_absolute_url()}] c['authors'] = experiment.author_experiment_set.all() # microtardis change start if 'session_show_hidden' not in request.session: request.session['session_show_hidden'] = False if 'session_hidden_text' not in request.session: request.session['session_hidden_text'] = "Show Hidden Datasets and Files" if not request.session['session_show_hidden']: # hide hidden objects hidden_datasets = Dataset_Hidden.objects.filter(hidden=True).values_list('dataset', flat=True) c['datasets'] = Dataset.objects.filter(experiment=experiment_id).exclude(pk__in=hidden_datasets) hidden_datafiles = Datafile_Hidden.objects.filter(hidden=True).values_list('datafile', flat=True) c['datafiles'] = Dataset_File.objects.filter(dataset__experiment=experiment_id).exclude(pk__in=hidden_datafiles) else: # show all objects c['datasets'] = Dataset.objects.filter(experiment=experiment_id) c['datafiles'] = Dataset_File.objects.filter(dataset__experiment=experiment_id) # microtardis change end acl = ExperimentACL.objects.filter(pluginId=django_user, experiment=experiment, isOwner=True) # TODO: resolve usernames through UserProvider! # Right now there are exceptions every time for ldap users.. c['owners'] = [] for a in acl: try: c['owners'].append(User.objects.get(pk=str(a.entityId))) except User.DoesNotExist: #logger.exception('user for acl %i does not exist' % a.id) pass # calculate the sum of the datafile sizes size = 0 for df in c['datafiles']: try: size = size + long(df.size) except: pass c['size'] = size c['has_read_or_owner_ACL'] = \ authz.has_read_or_owner_ACL(request, experiment_id) c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment_id) if request.user.is_authenticated(): c['is_owner'] = authz.has_experiment_ownership(request, experiment_id) c['protocol'] = [] download_urls = experiment.get_download_urls() for key, value in download_urls.iteritems(): c['protocol'] += [[key, value]] if 'status' in request.GET: c['status'] = request.GET['status'] if 'error' in request.GET: c['error'] = request.GET['error'] return HttpResponse(render_response_index(request, 'tardis_portal/ajax/experiment_description.html', c))
def view_experiment(request, experiment_id): """View an existing experiment. :param request: a HTTP Request instance :type request: :class:`django.http.HttpRequest` :param experiment_id: the ID of the experiment to be edited :type experiment_id: string :rtype: :class:`django.http.HttpResponse` """ c = Context({}) try: experiment = Experiment.safe.get(request, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) # microtardis change start if 'session_show_hidden' not in request.session: request.session['session_show_hidden'] = False if 'session_hidden_text' not in request.session: request.session['session_hidden_text'] = "Show Hidden Datasets and Files" if not request.session['session_show_hidden']: # hide hidden objects hidden_datasets = Dataset_Hidden.objects.filter(hidden=True).values_list('dataset', flat=True) c['datasets'] = Dataset.objects.filter(experiment=experiment_id).exclude(pk__in=hidden_datasets) else: # show all datasets c['datasets'] = Dataset.objects.filter(experiment=experiment_id) # microtardis change end c['experiment'] = experiment c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment_id) if request.user.is_authenticated(): c['is_owner'] = authz.has_experiment_ownership(request, experiment_id) c['subtitle'] = experiment.title c['nav'] = [{'name': 'Data', 'link': '/experiment/view/'}, {'name': experiment.title, 'link': experiment.get_absolute_url()}] if 'status' in request.POST: c['status'] = request.POST['status'] if 'error' in request.POST: c['error'] = request.POST['error'] if 'query' in request.GET: c['search_query'] = SearchQueryString(request.GET['query']) if 'search' in request.GET: c['search'] = request.GET['search'] if 'load' in request.GET: c['load'] = request.GET['load'] import sys appnames = [] appurls = [] for app in getTardisApps(): try: appnames.append(sys.modules['%s.%s.settings' % (settings.TARDIS_APP_ROOT, app)].NAME) appurls.append('%s.%s.views.index' % (settings.TARDIS_APP_ROOT, app)) except: pass c['apps'] = zip(appurls, appnames) return HttpResponse(render_response_index(request, 'tardis_portal/view_experiment.html', c))
def experiment_samples(request, experiment_id): """View a listing of dataset of an existing experiment as ajax loaded tab. :param request: a HTTP Request instance :type request: :class:`django.http.HttpRequest` :param experiment_id: the ID of the experiment to be edited :type experiment_id: string :param template_name: the path of the template to render :type template_name: string :rtype: :class:`django.http.HttpResponse` """ c = Context({'upload_complete_url': reverse('tardis.tardis_portal.views.upload_complete'), 'searchDatafileSelectionForm': getNewSearchDatafileSelectionForm(), }) try: experiment = Experiment.safe.get(request, experiment_id) except PermissionDenied: return return_response_error(request) except Experiment.DoesNotExist: return return_response_not_found(request) c['experiment'] = experiment if 'query' in request.GET: # We've been passed a query to get back highlighted results. # Only pass back matching datafiles # search_query = FacetFixedSearchQuery(backend=HighlightSearchBackend()) sqs = SearchQuerySet(query=search_query) query = SearchQueryString(request.GET['query']) facet_counts = sqs.raw_search(query.query_string() + ' AND experiment_id_stored:%i' % (int(experiment_id)), end_offset=1).facet('dataset_id_stored').highlight().facet_counts() if facet_counts: dataset_id_facets = facet_counts['fields']['dataset_id_stored'] else: dataset_id_facets = [] c['highlighted_datasets'] = [ int(f[0]) for f in dataset_id_facets ] c['file_matched_datasets'] = [] c['search_query'] = query # replace '+'s with spaces elif 'datafileResults' in request.session and 'search' in request.GET: c['highlighted_datasets'] = None c['highlighted_dataset_files'] = [r.pk for r in request.session['datafileResults']] c['file_matched_datasets'] = \ list(set(r.dataset.pk for r in request.session['datafileResults'])) c['search'] = True else: c['highlighted_datasets'] = None c['highlighted_dataset_files'] = None c['file_matched_datasets'] = None c['samples'] = \ Sample.objects.filter(experiment=experiment_id).order_by("id") c['datasets'] = \ Dataset.objects.filter(experiment=experiment_id) c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment_id) c['protocol'] = [] download_urls = experiment.get_download_urls() for key, value in download_urls.iteritems(): c['protocol'] += [[key, value]] if 'status' in request.GET: c['status'] = request.GET['status'] if 'error' in request.GET: c['error'] = request.GET['error'] return HttpResponse(render_response_index(request, 'tardis_portal/ajax/experiment_samples.html', c))
def create_detail(self, object_list, bundle): # noqa # too complex if not bundle.request.user.is_authenticated(): return False if bundle.request.user.is_authenticated() and \ bundle.request.user.is_superuser: return True if isinstance(bundle.obj, Experiment): return bundle.request.user.has_perm('tardis_portal.add_experiment') elif isinstance(bundle.obj, ExperimentParameterSet): if not bundle.request.user.has_perm( 'tardis_portal.change_experiment'): return False experiment_uri = bundle.data.get('experiment', None) if experiment_uri is not None: experiment = ExperimentResource.get_via_uri( ExperimentResource(), experiment_uri, bundle.request) return has_write_permissions(bundle.request, experiment.id) elif getattr(bundle.obj.experiment, 'id', False): return has_write_permissions(bundle.request, bundle.obj.experiment.id) return False elif isinstance(bundle.obj, ExperimentParameter): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') and \ has_write_permissions(bundle.request, bundle.obj.parameterset.experiment.id) elif isinstance(bundle.obj, Dataset): if not bundle.request.user.has_perm( 'tardis_portal.change_dataset'): return False perm = False for exp_uri in bundle.data.get('experiments', []): try: this_exp = ExperimentResource.get_via_uri( ExperimentResource(), exp_uri, bundle.request) except: return False if has_write_permissions(bundle.request, this_exp.id): perm = True else: return False return perm elif isinstance(bundle.obj, DatasetParameterSet): if not bundle.request.user.has_perm( 'tardis_portal.change_dataset'): return False dataset_uri = bundle.data.get('dataset', None) if dataset_uri is not None: dataset = DatasetResource.get_via_uri( DatasetResource(), dataset_uri, bundle.request) return has_dataset_write(bundle.request, dataset.id) elif getattr(bundle.obj.dataset, 'id', False): return has_dataset_write(bundle.request, bundle.obj.dataset.id) return False elif isinstance(bundle.obj, DatasetParameter): return bundle.request.user.has_perm( 'tardis_portal.change_dataset') and \ has_dataset_write(bundle.request, bundle.obj.parameterset.dataset.id) elif isinstance(bundle.obj, DataFile): dataset = DatasetResource.get_via_uri(DatasetResource(), bundle.data['dataset'], bundle.request) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, dataset.id), ]) elif isinstance(bundle.obj, DatafileParameterSet): dataset = Dataset.objects.get( pk=bundle.obj.datafile.dataset.id) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, dataset.id), ]) elif isinstance(bundle.obj, DatafileParameter): dataset = Dataset.objects.get( pk=bundle.obj.parameterset.datafile.dataset.id) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, dataset.id), ]) elif isinstance(bundle.obj, DataFileObject): return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, bundle.obj.datafile.dataset.id), ]) elif isinstance(bundle.obj, ObjectACL): return bundle.request.user.has_perm('tardis_portal.add_objectacl') elif isinstance(bundle.obj, Group): return bundle.request.user.has_perm('tardis_portal.add_group') elif isinstance(bundle.obj, Facility): return bundle.request.user.has_perm('tardis_portal.add_facility') elif isinstance(bundle.obj, Instrument): facilities = facilities_managed_by(bundle.request.user) return all([ bundle.request.user.has_perm('tardis_portal.add_instrument'), bundle.obj.facility in facilities ]) raise NotImplementedError(type(bundle.obj))
def edit_experiment_par(request, parameterset_id): parameterset = ExperimentParameterSet.objects.get(id=parameterset_id) if authz.has_write_permissions(request, parameterset.experiment.id): return edit_parameters(request, parameterset, otype="experiment") return return_response_error(request)
def create_detail(self, object_list, bundle): # noqa # too complex if not bundle.request.user.is_authenticated(): return False if bundle.request.user.is_authenticated() and \ bundle.request.user.is_superuser: return True if isinstance(bundle.obj, Experiment): return bundle.request.user.has_perm('tardis_portal.add_experiment') elif isinstance(bundle.obj, ExperimentParameterSet): if not bundle.request.user.has_perm( 'tardis_portal.change_experiment'): return False experiment_uri = bundle.data.get('experiment', None) if experiment_uri is not None: experiment = ExperimentResource.get_via_uri( ExperimentResource(), experiment_uri, bundle.request) return has_write_permissions(bundle.request, experiment.id) elif getattr(bundle.obj.experiment, 'id', False): return has_write_permissions(bundle.request, bundle.obj.experiment.id) return False elif isinstance(bundle.obj, ExperimentParameter): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') and \ has_write_permissions(bundle.request, bundle.obj.parameterset.experiment.id) elif isinstance(bundle.obj, Dataset): if not bundle.request.user.has_perm( 'tardis_portal.change_dataset'): return False perm = False for exp_uri in bundle.data.get('experiments', []): try: this_exp = ExperimentResource.get_via_uri( ExperimentResource(), exp_uri, bundle.request) except: return False if has_write_permissions(bundle.request, this_exp.id): perm = True else: return False return perm elif isinstance(bundle.obj, DatasetParameterSet): if not bundle.request.user.has_perm( 'tardis_portal.change_dataset'): return False dataset_uri = bundle.data.get('dataset', None) if dataset_uri is not None: dataset = DatasetResource.get_via_uri(DatasetResource(), dataset_uri, bundle.request) return has_dataset_write(bundle.request, dataset.id) elif getattr(bundle.obj.dataset, 'id', False): return has_dataset_write(bundle.request, bundle.obj.dataset.id) return False elif isinstance(bundle.obj, DatasetParameter): return bundle.request.user.has_perm( 'tardis_portal.change_dataset') and \ has_dataset_write(bundle.request, bundle.obj.parameterset.dataset.id) elif isinstance(bundle.obj, DataFile): dataset = DatasetResource.get_via_uri(DatasetResource(), bundle.data['dataset'], bundle.request) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, dataset.id), ]) elif isinstance(bundle.obj, DatafileParameterSet): dataset = Dataset.objects.get(pk=bundle.obj.datafile.dataset.id) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, dataset.id), ]) elif isinstance(bundle.obj, DatafileParameter): dataset = Dataset.objects.get( pk=bundle.obj.parameterset.datafile.dataset.id) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, dataset.id), ]) elif isinstance(bundle.obj, DataFileObject): return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_datafile'), has_dataset_write(bundle.request, bundle.obj.datafile.dataset.id), ]) elif isinstance(bundle.obj, ObjectACL): return bundle.request.user.has_perm('tardis_portal.add_objectacl') elif isinstance(bundle.obj, Group): return bundle.request.user.has_perm('tardis_portal.add_group') elif isinstance(bundle.obj, Facility): return bundle.request.user.has_perm('tardis_portal.add_facility') elif isinstance(bundle.obj, Instrument): facilities = facilities_managed_by(bundle.request.user) return all([ bundle.request.user.has_perm('tardis_portal.add_instrument'), bundle.obj.facility in facilities ]) raise NotImplementedError(type(bundle.obj))
def add_experiment_par(request, experiment_id): parentObject = Experiment.objects.get(id=experiment_id) if authz.has_write_permissions(request, parentObject.id): return add_par(request, parentObject, otype="experiment", stype=Schema.EXPERIMENT) return return_response_error(request)
def get_context_data(self, request, experiment, **kwargs): """ Prepares the values to be passed to the default experiment view, respecting authorization rules. Returns a dict of values (the context). :param request: a HTTP request object :type request: :class:`django.http.HttpRequest` :param experiment: the experiment model instance :type experiment: tardis.tardis_portal.models.experiment.Experiment :return: A dictionary of values for the view/template. :rtype: dict """ c = super(ExperimentView, self).get_context_data(**kwargs) c['experiment'] = experiment c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment.id) c['has_download_permissions'] = \ authz.has_experiment_download_access(request, experiment.id) if request.user.is_authenticated(): c['is_owner'] = authz.has_experiment_ownership(request, experiment.id) c['has_read_or_owner_ACL'] = authz.has_read_or_owner_ACL(request, experiment.id) # Enables UI elements for the publication form c['pub_form_enabled'] = 'tardis.apps.publication_forms' in \ settings.INSTALLED_APPS # Enables UI elements for the push_to app c['push_to_enabled'] = PushToConfig.name in settings.INSTALLED_APPS if c['push_to_enabled']: push_to_args = { 'experiment_id': experiment.pk } c['push_to_url'] = reverse(initiate_push_experiment, kwargs=push_to_args) c['subtitle'] = experiment.title c['nav'] = [{'name': 'Data', 'link': '/experiment/view/'}, {'name': experiment.title, 'link': experiment.get_absolute_url()}] if 'status' in request.POST: c['status'] = request.POST['status'] if 'error' in request.POST: c['error'] = request.POST['error'] if 'query' in request.GET: c['search_query'] = SearchQueryString(request.GET['query']) if 'search' in request.GET: c['search'] = request.GET['search'] if 'load' in request.GET: c['load'] = request.GET['load'] _add_protocols_and_organizations(request, experiment, c) default_apps = [ {'name': 'Description', 'viewfn': 'tardis.tardis_portal.views.experiment_description'}, {'name': 'Metadata', 'viewfn': 'tardis.tardis_portal.views.retrieve_experiment_metadata'}, {'name': 'Sharing', 'viewfn': 'tardis.tardis_portal.views.share'}, {'name': 'Transfer Datasets', 'viewfn': 'tardis.tardis_portal.views.experiment_dataset_transfer'}, ] appnames = [] appurls = [] for app in getattr(settings, 'EXPERIMENT_APPS', default_apps): try: appnames.append(app['name']) if 'viewfn' in app: appurls.append(reverse(app['viewfn'], args=[experiment.id])) elif 'url' in app: appurls.append(app['url']) except: logger.debug('error when loading default exp apps') from tardis.app_config import get_tardis_apps for app_name, app in get_tardis_apps(): try: appnames.append( sys.modules['%s.settings' % app].NAME) appurls.append( reverse('%s.views.index' % app, args=[experiment.id])) except: logger.debug("No tab for %s" % app) c['apps'] = zip(appurls, appnames) return c
def edit_experiment_par(request, parameterset_id): parameterset = ExperimentParameterSet.objects.get(id=parameterset_id) if authz.has_write_permissions(request, parameterset.experiment.id): return edit_parameters(request, parameterset, otype="experiment") else: return return_response_error(request)
def create_detail(self, object_list, bundle): if not bundle.request.user.is_authenticated(): return False if bundle.request.user.is_authenticated() and \ bundle.request.user.is_superuser: return True if type(bundle.obj) == Experiment: return bundle.request.user.has_perm('tardis_portal.add_experiment') elif type(bundle.obj) in (ExperimentParameterSet,): if not bundle.request.user.has_perm( 'tardis_portal.change_experiment'): return False experiment_uri = bundle.data.get('experiment', None) if experiment_uri is not None: experiment = ExperimentResource.get_via_uri( ExperimentResource(), experiment_uri, bundle.request) return has_write_permissions(bundle.request, experiment.id) elif getattr(bundle.obj.experiment, 'id', False): return has_write_permissions(bundle.request, bundle.obj.experiment.id) return False elif type(bundle.obj) in (ExperimentParameter,): return bundle.request.user.has_perm( 'tardis_portal.change_experiment') and \ has_write_permissions(bundle.request, bundle.obj.parameterset.experiment.id) elif type(bundle.obj) == Dataset: if not bundle.request.user.has_perm( 'tardis_portal.change_dataset'): return False perm = False for exp_uri in bundle.data.get('experiments', []): try: this_exp = ExperimentResource.get_via_uri( ExperimentResource(), exp_uri, bundle.request) except: return False if has_write_permissions(bundle.request, this_exp.id): perm = True else: return False return perm elif type(bundle.obj) in (DatasetParameterSet,): if not bundle.request.user.has_perm( 'tardis_portal.change_dataset'): return False dataset_uri = bundle.data.get('dataset', None) if dataset_uri is not None: dataset = DatasetResource.get_via_uri( DatasetResource(), dataset_uri, bundle.request) return has_dataset_write(bundle.request, dataset.id) elif getattr(bundle.obj.dataset, 'id', False): return has_dataset_write(bundle.request, bundle.obj.dataset.id) return False elif type(bundle.obj) in (DatasetParameter,): return bundle.request.user.has_perm( 'tardis_portal.change_dataset') and \ has_dataset_write(bundle.request, bundle.obj.parameterset.dataset.id) elif type(bundle.obj) == Dataset_File: dataset = DatasetResource.get_via_uri(DatasetResource(), bundle.data['dataset'], bundle.request) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_dataset_file'), has_dataset_write(bundle.request, dataset.id), ]) elif type(bundle.obj) == DatafileParameterSet: dataset = Dataset.objects.get( pk=bundle.obj.dataset_file.dataset.id) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_dataset_file'), has_dataset_write(bundle.request, dataset.id), ]) elif type(bundle.obj) == DatafileParameter: dataset = Dataset.objects.get( pk=bundle.obj.parameterset.dataset_file.dataset.id) return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_dataset_file'), has_dataset_write(bundle.request, dataset.id), ]) elif type(bundle.obj) == Replica: return all([ bundle.request.user.has_perm('tardis_portal.change_dataset'), bundle.request.user.has_perm('tardis_portal.add_dataset_file'), has_dataset_write(bundle.request, bundle.obj.datafile.dataset.id), ]) raise NotImplementedError(type(bundle.obj))
def get_context_data(self, request, experiment, **kwargs): """ Prepares the values to be passed to the default experiment view, respecting authorization rules. Returns a dict of values (the context). :param request: a HTTP request object :type request: :class:`django.http.HttpRequest` :param experiment: the experiment model instance :type experiment: tardis.tardis_portal.models.experiment.Experiment :return: A dictionary of values for the view/template. :rtype: dict """ c = super(ExperimentView, self).get_context_data(**kwargs) c['experiment'] = experiment c['has_write_permissions'] = \ authz.has_write_permissions(request, experiment.id) c['has_download_permissions'] = \ authz.has_experiment_download_access(request, experiment.id) if request.user.is_authenticated(): c['is_owner'] = authz.has_experiment_ownership( request, experiment.id) c['has_read_or_owner_ACL'] = authz.has_read_or_owner_ACL( request, experiment.id) # Enables UI elements for the publication form c['pub_form_enabled'] = 'tardis.apps.publication_forms' in \ settings.INSTALLED_APPS # Enables UI elements for the push_to app c['push_to_enabled'] = PushToConfig.name in settings.INSTALLED_APPS if c['push_to_enabled']: push_to_args = {'experiment_id': experiment.pk} c['push_to_url'] = reverse(initiate_push_experiment, kwargs=push_to_args) c['subtitle'] = experiment.title c['nav'] = [{ 'name': 'Data', 'link': '/experiment/view/' }, { 'name': experiment.title, 'link': experiment.get_absolute_url() }] if 'status' in request.POST: c['status'] = request.POST['status'] if 'error' in request.POST: c['error'] = request.POST['error'] if 'query' in request.GET: c['search_query'] = SearchQueryString(request.GET['query']) if 'search' in request.GET: c['search'] = request.GET['search'] if 'load' in request.GET: c['load'] = request.GET['load'] _add_protocols_and_organizations(request, experiment, c) default_apps = [ { 'name': 'Description', 'viewfn': 'tardis.tardis_portal.views.experiment_description' }, { 'name': 'Metadata', 'viewfn': 'tardis.tardis_portal.views.retrieve_experiment_metadata' }, { 'name': 'Sharing', 'viewfn': 'tardis.tardis_portal.views.share' }, { 'name': 'Transfer Datasets', 'viewfn': 'tardis.tardis_portal.views.experiment_dataset_transfer' }, ] appnames = [] appurls = [] for app in getattr(settings, 'EXPERIMENT_APPS', default_apps): try: appnames.append(app['name']) if 'viewfn' in app: appurls.append(reverse(app['viewfn'], args=[experiment.id])) elif 'url' in app: appurls.append(app['url']) except: logger.debug('error when loading default exp apps') from tardis.app_config import get_tardis_apps for app_name, app in get_tardis_apps(): try: appnames.append(sys.modules['%s.settings' % app].NAME) appurls.append( reverse('%s.views.index' % app, args=[experiment.id])) except: logger.debug("No tab for %s" % app) c['apps'] = zip(appurls, appnames) return c