コード例 #1
0
def metadata(recid, of='hd', ot=None):
    """Display formated record metadata."""
    # TODO add signal support
    if get_output_format_content_type(of) != 'text/html':
        return response_formated_records([g.record],
                                         of,
                                         collections=g.collection)

    return render_template('records/metadata.html', of=of, ot=ot)
コード例 #2
0
ファイル: views.py プロジェクト: inspirehep/invenio-records
def metadata(recid, of='hd', ot=None):
    """Display formated record metadata."""
    # TODO add signal support
    if get_output_format_content_type(of) != 'text/html':
        return response_formated_records(
            [g.record], of, collections=g.collection
        )

    return render_template('records/metadata.html', of=of, ot=ot)
コード例 #3
0
ファイル: search.py プロジェクト: inspirehep/invenio-search
def rss(collection, p, jrec, so, rm, rg):
    """Render RSS feed."""
    response = Query(p).search(collection=collection.name)
    response.body.update({
        'size': int(rg),
        'from': jrec - 1,
    })

    return response_formated_records(
        response.records(), 'xr',
        collection=collection,
        rg=rg,
    )
コード例 #4
0
ファイル: views.py プロジェクト: inspirehep/invenio-records
def export(collection, of, ot):
    """
    Export requested records to defined output format.

    It uses following request values:
        * of (string): output format
        * recid ([int]): list of record IDs

    """
    from .api import get_record
    # Get list of integers with record IDs.
    recids = request.values.getlist('recid', type=int)
    return response_formated_records([get_record(recid) for recid in recids],
                                     of, ot=ot, collection=collection)
コード例 #5
0
ファイル: views.py プロジェクト: Panos512/invenio-records
def metadata(recid, of='hd', ot=None):
    """Display formated record metadata."""
    # TODO add signal support
    if get_output_format_content_type(of) != 'text/html':
        return response_formated_records([g.record],
                                         of,
                                         collections=g.collection)

    # Send the signal 'document viewed'
    record_viewed.send(current_app._get_current_object(),
                       recid=recid,
                       id_user=current_user.get_id(),
                       request=request)

    return render_template('records/metadata.html', of=of, ot=ot)
コード例 #6
0
def export(collection, of, ot):
    """
    Export requested records to defined output format.

    It uses following request values:
        * of (string): output format
        * recid ([int]): list of record IDs

    """
    from .api import get_record
    # Get list of integers with record IDs.
    recids = request.values.getlist('recid', type=int)
    return response_formated_records([get_record(recid) for recid in recids],
                                     of,
                                     ot=ot,
                                     collection=collection)
コード例 #7
0
ファイル: views.py プロジェクト: jirikuncar/invenio-records
def metadata(recid, of='hd', ot=None):
    """Display formated record metadata."""
    # TODO add signal support
    if get_output_format_content_type(of) != 'text/html':
        return response_formated_records(
            [g.record], of, collections=g.collection
        )

    # Send the signal 'document viewed'
    record_viewed.send(
        current_app._get_current_object(),
        recid=recid,
        id_user=current_user.get_id(),
        request=request)

    return render_template('records/metadata.html', of=of, ot=ot)
コード例 #8
0
def metadata(recid, of='hd', ot=None):
    """Display formated record metadata."""
    # from invenio.legacy.bibrank.downloads_similarity import \
    #     register_page_view_event
    # register_page_view_event(recid, current_user.get_id(),
    #                          str(request.remote_addr))
    if get_output_format_content_type(of) != 'text/html':
        return response_formated_records([g.record],
                                         of,
                                         collections=g.collection)

    # Send the signal 'document viewed'
    record_viewed.send(current_app._get_current_object(),
                       recid=recid,
                       id_user=current_user.get_id(),
                       request=request)

    return render_template('records/metadata.html', of=of, ot=ot)
コード例 #9
0
ファイル: views.py プロジェクト: dset0x/invenio-records
def metadata(recid, of='hd', ot=None):
    """Display formated record metadata."""
    # from invenio.legacy.bibrank.downloads_similarity import \
    #     register_page_view_event
    # register_page_view_event(recid, current_user.get_id(),
    #                          str(request.remote_addr))
    if get_output_format_content_type(of) != 'text/html':
        return response_formated_records(
            [g.record], of, collections=g.collection
        )

    # Send the signal 'document viewed'
    record_viewed.send(
        current_app._get_current_object(),
        recid=recid,
        id_user=current_user.get_id(),
        request=request)

    return render_template('records/metadata.html', of=of, ot=ot)
コード例 #10
0
def search(collection, p, of, ot, so, sf, sp, rm, rg, jrec):
    """Render search page."""
    if 'action_browse' in request.args \
            or request.args.get('action', '') == 'browse':
        return browse()

    if 'c' in request.args and len(request.args) == 1 \
            and len(request.args.getlist('c')) == 1:
        return redirect(url_for('.collection', name=request.args.get('c')))

    if 'f' in request.args:
        args = request.args.copy()
        args['p'] = "{0}:{1}".format(args['f'], args['p'])
        del args['f']
        return redirect(url_for('.search', **args))

    # fix for queries like `/search?p=+ellis`
    p = p.strip().encode('utf-8')

    collection_breadcrumbs(collection)

    response = Query(p).search(collection=collection.name)
    response.body.update({
        'size': int(rg),
        'from': jrec-1,
        'aggs': {
            "collection": {"terms": {"field": "_collections"}},
            "author": {"terms": {"field": "authors.raw"}},
        },
    })

    # FIXME refactor to separate search hook
    filtered_facets = ''
    from invenio_search.walkers.elasticsearch import ElasticSearchDSL
    if 'post_filter' in request.values:
        parsed_post_filter = Query(request.values.get('post_filter'))
        post_filter = parsed_post_filter.query.accept(
            ElasticSearchDSL()
        )
        response.body['post_filter'] = post_filter
        # extracting the facet filtering
        from invenio_search.walkers.facets import FacetsVisitor
        filtered_facets = parsed_post_filter.query.accept(
            FacetsVisitor()
        )
        # sets cannot be converted to json. use facetsVisitor to convert them to
        # lists
        filtered_facets = FacetsVisitor.jsonable(filtered_facets)

    if len(response) and jrec > len(response):
        args = request.args.copy()
        args['jrec'] = 1
        return redirect(url_for('.search', **args))

    pagination = Pagination((jrec-1) // rg + 1, rg, len(response))

    ctx = dict(
        facets={},  # facets.get_facets_config(collection, qid),
        filtered_facets=filtered_facets,
        response=response,
        rg=rg,
        create_nearest_terms_box=lambda: _("Try to modify the query."),
        easy_search_form=EasySearchForm(csrf_enabled=False),
        ot=ot,
        pagination=pagination,
        collection=collection,
    )

    # TODO add search services
    # TODO add external collection search

    return response_formated_records(response.records(), of, **ctx)
コード例 #11
0
ファイル: search.py プロジェクト: inspirehep/invenio-search
def search(collection, p, of, ot, so, sf, sp, rm, rg, jrec):
    """Render search page."""
    if 'action_browse' in request.args \
            or request.args.get('action', '') == 'browse':
        return browse()

    if 'c' in request.args and len(request.args) == 1 \
            and len(request.args.getlist('c')) == 1:
        return redirect(url_for('.collection', name=request.args.get('c')))

    if 'f' in request.args:
        args = request.args.copy()
        args['p'] = "{0}:{1}".format(args['f'], args['p'])
        del args['f']
        return redirect(url_for('.search', **args))

    # fix for queries like `/search?p=+ellis`
    p = p.strip().encode('utf-8')

    response = Query(p).search(collection=collection.name)
    response.body.update({
        'size': int(rg),
        'from': jrec-1,
        'aggs': cfg['SEARCH_ELASTIC_AGGREGATIONS'].get(
            collection.name.lower(), {}
        )
    })

    if sf in cfg['SEARCH_ELASTIC_SORT_FIELDS']:
        so = so if so in ('asc', 'desc') else ''
        sorting = {
            'sort': {
                sf: {
                    'order': so
                }
            }
        }
        response.body.update(sorting)

    # FIXME refactor to separate search hook
    filtered_facets = ''
    from invenio_search.walkers.elasticsearch import ElasticSearchDSL
    if 'post_filter' in request.values and request.values['post_filter']:
        parsed_post_filter = Query(request.values.get('post_filter'))
        post_filter = parsed_post_filter.query.accept(
            ElasticSearchDSL()
        )
        response.body['query'] = {
            "filtered": {
                'query': response.body['query'],
                'filter': post_filter
            }
        }
        # extracting the facet filtering
        from invenio_search.walkers.facets import FacetsVisitor
        filtered_facets = parsed_post_filter.query.accept(
            FacetsVisitor()
        )
        # sets cannot be converted to json. use facetsVisitor to convert them
        # to lists
        filtered_facets = FacetsVisitor.jsonable(filtered_facets)
    else:
        # Save current query and number of hits in the user session
        session_key = 'last-query' + p + collection.name
        if not session.get(session_key):
            session[session_key] = {}

        session[session_key] = {
            "p": p,
            "collection": collection.name,
            "number_of_hits": len(response),
            "timestamp": datetime.datetime.utcnow()
        }

    number_of_hits = len(response)

    if number_of_hits and jrec > number_of_hits:
        args = request.args.copy()
        args['jrec'] = 1
        return redirect(url_for('.search', **args))

    pagination = Pagination((jrec-1) // rg + 1, rg, number_of_hits)

    ctx = dict(
        facets={},  # facets.get_facets_config(collection, qid),
        filtered_facets=filtered_facets,
        response=response,
        rg=rg,
        ot=ot,
        pagination=pagination,
        collection=collection,
    )

    # TODO add search services
    # TODO add external collection search

    return response_formated_records(response.records(), of, **ctx)
コード例 #12
0
ファイル: search.py プロジェクト: nharraud/invenio-search
def search(collection, p, of, ot, so, sf, sp, rm, rg, jrec):
    """Render search page."""
    if 'action_browse' in request.args \
            or request.args.get('action', '') == 'browse':
        return browse()

    if 'c' in request.args and len(request.args) == 1 \
            and len(request.args.getlist('c')) == 1:
        return redirect(url_for('.collection', name=request.args.get('c')))

    if 'f' in request.args:
        args = request.args.copy()
        args['p'] = "{0}:{1}".format(args['f'], args['p'])
        del args['f']
        return redirect(url_for('.search', **args))

    # fix for queries like `/search?p=+ellis`
    p = p.strip().encode('utf-8')

    collection_breadcrumbs(collection)

    response = Query(p).search(collection=collection.name)
    response.body.update({
        'size': int(rg),
        'from': jrec-1,
        'aggs': {
            "collection": {"terms": {"field": "_collections"}},
            "author": {"terms": {"field": "authors.raw"}},
        },
    })

    # FIXME refactor to separate search hook
    filtered_facets = ''
    from invenio_search.walkers.elasticsearch import ElasticSearchDSL
    if 'post_filter' in request.values:
        parsed_post_filter = Query(request.values.get('post_filter'))
        post_filter = parsed_post_filter.query.accept(
            ElasticSearchDSL()
        )
        response.body['post_filter'] = post_filter
        # extracting the facet filtering
        from invenio_search.walkers.facets import FacetsVisitor
        filtered_facets = parsed_post_filter.query.accept(
            FacetsVisitor()
        )
        # sets cannot be converted to json. use facetsVisitor to convert them to
        # lists
        filtered_facets = FacetsVisitor.jsonable(filtered_facets)

    if len(response) and jrec > len(response):
        args = request.args.copy()
        args['jrec'] = 1
        return redirect(url_for('.search', **args))

    pagination = Pagination((jrec-1) // rg + 1, rg, len(response))

    ctx = dict(
        facets={},  # facets.get_facets_config(collection, qid),
        filtered_facets=filtered_facets,
        response=response,
        rg=rg,
        create_nearest_terms_box=lambda: _("Try to modify the query."),
        easy_search_form=EasySearchForm(csrf_enabled=False),
        ot=ot,
        pagination=pagination,
        collection=collection,
    )

    # TODO add search services
    # TODO add external collection search

    return response_formated_records(response.records(), of, **ctx)
コード例 #13
0
ファイル: search.py プロジェクト: nharraud/invenio-search
def rss(collection, p, jrec, so, rm, rg):
    """Render RSS feed."""
    response = Query(p).search(collection=collection.name)
    response.body.update({"size": rg, "from": jrec - 1})

    return response_formated_records(response.records(), "xr", records=len(response), collection=collection, rg=rg)