Example #1
0
 def can_update():
     return authz.has_dataset_ownership(request, dataset_id)
Example #2
0
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))
Example #3
0
 def can_update():
     return authz.has_dataset_ownership(request, dataset_id)
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))