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 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 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 get_context_data(self, request, dataset, **kwargs): """ Prepares the values to be passed to the default dataset view, respecting authorization rules. Returns a dict of values (the context). :param request: a HTTP request object :type request: :class:`django.http.HttpRequest` :param dataset: the Dataset model instance :type dataset: tardis.tardis_portal.models.dataset.Dataset :return: A dictionary of values for the view/template. :rtype: dict """ def get_datafiles_page(): # pagination was removed by someone in the interface but not here. # need to fix. pgresults = 100 paginator = Paginator(dataset.datafile_set.all(), pgresults) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 # If page request is out of range (eg 9999), deliver last page of # results. try: return paginator.page(page) except (EmptyPage, InvalidPage): return paginator.page(paginator.num_pages) c = super(DatasetView, self).get_context_data(**kwargs) dataset_id = dataset.id upload_method = getattr(settings, "UPLOAD_METHOD", False) max_images_in_carousel = getattr(settings, "MAX_IMAGES_IN_CAROUSEL", 0) if max_images_in_carousel: carousel_slice = ":%s" % max_images_in_carousel else: carousel_slice = ":" c.update( {'dataset': dataset, 'datafiles': get_datafiles_page(), 'parametersets': dataset.getParameterSets().exclude( schema__hidden=True), 'has_download_permissions': authz.has_dataset_download_access( request, dataset_id), 'has_write_permissions': authz.has_dataset_write(request, dataset_id), 'from_experiment': get_experiment_referer(request, dataset_id), 'other_experiments': authz.get_accessible_experiments_for_dataset( request, dataset_id), 'upload_method': upload_method, 'push_to_enabled': PushToConfig.name in settings.INSTALLED_APPS, 'carousel_slice': carousel_slice, } ) # Enables UI elements for the push_to app if c['push_to_enabled']: push_to_args = { 'dataset_id': dataset.pk } c['push_to_url'] = reverse(initiate_push_dataset, kwargs=push_to_args) _add_protocols_and_organizations(request, dataset, c) return c
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 get_context_data(self, request, dataset, **kwargs): """ Prepares the values to be passed to the default dataset view, respecting authorization rules. Returns a dict of values (the context). :param request: a HTTP request object :type request: :class:`django.http.HttpRequest` :param dataset: the Dataset model instance :type dataset: tardis.tardis_portal.models.dataset.Dataset :return: A dictionary of values for the view/template. :rtype: dict """ def get_datafiles_page(): # pagination was removed by someone in the interface but not here. # need to fix. pgresults = 100 paginator = Paginator(dataset.datafile_set.all(), pgresults) try: page = int(request.GET.get('page', '1')) except ValueError: page = 1 # If page request is out of range (eg 9999), deliver last page of # results. try: return paginator.page(page) except (EmptyPage, InvalidPage): return paginator.page(paginator.num_pages) c = super(DatasetView, self).get_context_data(**kwargs) dataset_id = dataset.id upload_method = getattr(settings, "UPLOAD_METHOD", False) max_images_in_carousel = getattr(settings, "MAX_IMAGES_IN_CAROUSEL", 0) if max_images_in_carousel: carousel_slice = ":%s" % max_images_in_carousel else: carousel_slice = ":" c.update({ 'dataset': dataset, 'datafiles': get_datafiles_page(), 'parametersets': dataset.getParameterSets().exclude(schema__hidden=True), 'has_download_permissions': authz.has_dataset_download_access(request, dataset_id), 'has_write_permissions': authz.has_dataset_write(request, dataset_id), 'from_experiment': get_experiment_referer(request, dataset_id), 'other_experiments': authz.get_accessible_experiments_for_dataset(request, dataset_id), 'upload_method': upload_method, 'push_to_enabled': PushToConfig.name in settings.INSTALLED_APPS, 'carousel_slice': carousel_slice, }) # Enables UI elements for the push_to app if c['push_to_enabled']: push_to_args = {'dataset_id': dataset.pk} c['push_to_url'] = reverse(initiate_push_dataset, kwargs=push_to_args) _add_protocols_and_organizations(request, dataset, c) return c
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() 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 == 'datafile' 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 = \ DataFile.objects.filter( dataset__pk=dataset_id, ).order_by('filename') 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(filename__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_download_permissions = authz.has_dataset_download_access( request, dataset_id) has_write_permissions = False if request.user.is_authenticated(): is_owner = authz.has_dataset_ownership(request, dataset_id) has_write_permissions = authz.has_dataset_write(request, dataset_id) immutable = Dataset.objects.get(id=dataset_id).immutable c = { 'datafiles': dataset, 'paginator': paginator, 'immutable': immutable, 'dataset': Dataset.objects.get(id=dataset_id), 'filename_search': filename_search, 'is_owner': is_owner, 'highlighted_datafiles': highlighted_dsf_pks, 'has_download_permissions': has_download_permissions, 'has_write_permissions': has_write_permissions, 'search_query': query, 'params': urlencode(params), } _add_protocols_and_organizations(request, None, c) return HttpResponse(render_response_index(request, template_name, c))
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() 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 == 'datafile' 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 = \ DataFile.objects.filter( dataset__pk=dataset_id, ).order_by('filename') 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(filename__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_download_permissions = authz.has_dataset_download_access(request, dataset_id) has_write_permissions = False if request.user.is_authenticated(): is_owner = authz.has_dataset_ownership(request, dataset_id) has_write_permissions = authz.has_dataset_write(request, dataset_id) immutable = Dataset.objects.get(id=dataset_id).immutable c = { 'datafiles': dataset, 'paginator': paginator, 'immutable': immutable, 'dataset': Dataset.objects.get(id=dataset_id), 'filename_search': filename_search, 'is_owner': is_owner, 'highlighted_datafiles': highlighted_dsf_pks, 'has_download_permissions': has_download_permissions, 'has_write_permissions': has_write_permissions, 'search_query': query, 'params': urlencode(params), } _add_protocols_and_organizations(request, None, c) return HttpResponse(render_response_index(request, template_name, c))