def test_last_page(self): page = 10 per_page = 10 total_count = 98 pagination = Pagination(page, per_page, total_count) self.assertTrue(pagination.has_prev) self.assertFalse(pagination.has_next) self.assertEqual(list(pagination.iter_pages()), [1, None, 9, 10])
def test_middle_page(self): page = 5 per_page = 10 total_count = 98 pagination = Pagination(page, per_page, total_count) self.assertTrue(pagination.has_prev) self.assertTrue(pagination.has_next) self.assertEqual(list(pagination.iter_pages()), [1, None, 4, 5, 6, 7, None, 10])
def load(page, per_page, sort_key): """Load objects for the table.""" # FIXME: Load tags in this way until wash_arguments handles lists. tags = request.args.getlist("tags[]") or [] # empty to show all sort_key = request.args.get( 'sort_key', session.get('holdingpen_sort_key', "modified") ) response = get_holdingpen_objects(tags, sort_key) current_app.logger.debug(tags) current_app.logger.debug(response) page = max(page, 1) per_page = per_page or session.get('holdingpen_per_page') or 10 pagination = Pagination(page, per_page, len(response)) # Make sure requested page is within limits. if pagination.page > pagination.pages: pagination.page = pagination.pages pages_iteration = [] for iter_page in pagination.iter_pages(): res = {"page": iter_page} if iter_page == pagination.page: res["active"] = True else: res["active"] = False pages_iteration.append(res) table_data = { 'rows': [], 'pagination': { "page": pagination.page, "pages": pagination.pages, "iter_pages": pages_iteration, "per_page": pagination.per_page, "total_count": pagination.total_count } } # Add current ids in table for use by previous/next session['holdingpen_current_ids'] = response session['holdingpen_sort_key'] = sort_key session['holdingpen_per_page'] = per_page session['holdingpen_tags'] = tags display_start = max(pagination.per_page*(pagination.page-1), 0) display_end = min( pagination.per_page*pagination.page, pagination.total_count ) table_data["rows"] = get_rows( response[display_start:display_end] ) table_data["rendered_rows"] = "".join(table_data["rows"]) return jsonify(table_data)
def load(page, per_page, sort_key): """Load objects for the table.""" # FIXME: Load tags in this way until wash_arguments handles lists. tags = request.args.getlist("tags[]") or [] # empty to show all sort_key = request.args.get( 'sort_key', session.get('holdingpen_sort_key', "updated") ) per_page = per_page or session.get('holdingpen_per_page') or 10 object_list = get_holdingpen_objects(tags) object_list = sort_bwolist(object_list, sort_key) page = max(page, 1) pagination = Pagination(page, per_page, len(object_list)) # Make sure requested page is within limits. if pagination.page > pagination.pages: pagination.page = pagination.pages pages_iteration = [] for iter_page in pagination.iter_pages(): res = {"page": iter_page} if iter_page == pagination.page: res["active"] = True else: res["active"] = False pages_iteration.append(res) table_data = { 'rows': [], 'pagination': { "page": pagination.page, "pages": pagination.pages, "iter_pages": pages_iteration, "per_page": pagination.per_page, "total_count": pagination.total_count } } # Add current ids in table for use by previous/next session['holdingpen_current_ids'] = [o.id for o in object_list] session['holdingpen_sort_key'] = sort_key session['holdingpen_per_page'] = per_page session['holdingpen_tags'] = tags display_start = max(pagination.per_page*(pagination.page-1), 0) display_end = min( pagination.per_page*pagination.page, pagination.total_count ) table_data["rows"] = get_rows(object_list[display_start:display_end]) table_data["rendered_rows"] = "".join(table_data["rows"]) return jsonify(table_data)
def index(p, so, page): """Index page with uploader and list of existing depositions.""" ctx = mycommunities_ctx() if not so: so = cfg.get('COMMUNITIES_DEFAULT_SORTING_OPTION') communities = Community.filter_communities(p, so) featured_community = FeaturedCommunity.get_current() form = SearchForm(p=p) per_page = cfg.get('COMMUNITIES_DISPLAYED_PER_PAGE', 10) page = max(page, 1) p = Pagination(page, per_page, communities.count()) ctx.update({ 'r_from': max(p.per_page*(p.page-1), 0), 'r_to': min(p.per_page*p.page, p.total_count), 'r_total': p.total_count, 'pagination': p, 'form': form, 'title': _('Community Collections'), 'communities': communities.slice( per_page*(page-1), per_page*page).all(), 'featured_community': featured_community, 'format_record': format_record, }) return render_template( "communities/index.html", **ctx )
def index_context(): box = lambda: _create_neareset_term_box(argd_orig) pagination = Pagination(int(ceil(jrec / float(rg))), rg, len(records)) breadcrumbs = current_breadcrumbs + collection_breadcrumbs(collection) return dict(collection=collection, create_nearest_terms_box=box, pagination=pagination, rg=rg, p=p, f=f, easy_search_form=EasySearchForm(csrf_enabled=False), breadcrumbs=breadcrumbs)
def print_records(recIDs, of='hb', ln=None, verbose=0, search_pattern='', on_the_fly=False, **ctx): """Return records using Jinja template.""" import time from math import ceil from flask import request from invenio.base.i18n import wash_language from invenio.ext.template import render_template_to_string from invenio.modules.search.models import Format from invenio.utils.pagination import Pagination from invenio.modules.formatter.engine import \ TEMPLATE_CONTEXT_FUNCTIONS_CACHE of = of.lower() jrec = request.values.get('jrec', ctx.get('jrec', 1), type=int) rg = request.values.get('rg', ctx.get('rg', 10), type=int) ln = ln or wash_language(request.values.get('ln', cfg['CFG_SITE_LANG'])) ot = (request.values.get('ot', ctx.get('ot')) or '').split(',') records = ctx.get('records', len(recIDs)) if jrec > records: jrec = rg * (records // rg) + 1 pages = int(ceil(jrec / float(rg))) if rg > 0 else 1 context = dict( of=of, jrec=jrec, rg=rg, ln=ln, ot=ot, facets={}, time=time, recids=recIDs, pagination=Pagination(pages, rg, records), verbose=verbose, export_formats=Format.get_export_formats(), format_record=format_record, **TEMPLATE_CONTEXT_FUNCTIONS_CACHE.template_context_functions ) context.update(ctx) return render_template_to_string( ['format/records/%s.tpl' % of, 'format/records/%s.tpl' % of[0], 'format/records/%s.tpl' % get_output_format_content_type(of). replace('/', '_')], **context)
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.modules.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.modules.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, ) # TODO add search services # TODO add external collection search return response_formated_records(response.records(), collection, of, **ctx)