Example #1
0
    def buildListHTML(self, pageNumber, propertyName, parent):
        modelClass, modelClassName = self.modelClass, self.modelClassName
        modelClassDisplayName = modelClass.getPrettyClassName()
        if propertyName and parent:
            gql = 'WHERE %s = :1 ORDER BY %s' % (propertyName,
                                                 modelClass.NAME_PROPERTY)
            #logging.debug(gql + '(' + parent + ')')
            models = (propertyName and modelClass.gql(
                gql, db.get(parent))) or modelClass.get()
        else:
            models = modelClass.all()

        paginator = ObjectPaginator(models, 10, orphans=2)
        if paginator.pages < pageNumber:
            pageNumber = paginator.pages
        pageNumber0 = pageNumber - 1
        models = paginator.get_page(pageNumber0)

        firstOnPage, lastOnPage, numModels = \
            paginator.first_on_page(pageNumber0), paginator.last_on_page(pageNumber0), paginator.hits
        hasPreviousPage, hasNextPage = \
            paginator.has_previous_page(pageNumber0), paginator.has_next_page(pageNumber0)
        previousPage, nextPage = pageNumber - 1, pageNumber + 1

        listItems = []
        for model in models:
            modelToListItemHTML = \
                lambda model, s=self, p=parent, pn=propertyName: s.modelToListItemHTML(model,p,pn)
            cacheKey = 'listItemHTML' + parent
            self.modelClass.setEntityCacheFunctionForKey(
                modelToListItemHTML, cacheKey)
            listItems.append(model.getEntityCache(cacheKey))
        listItems = '\n'.join(listItems)
        return self.renderManagementTemplate(locals(), 'List.html')
Example #2
0
    def __init__(self, searchResults, handler, title, user):
        self.user, self.handler = user, handler
        self.rootNode = rootNode = ElementTree.Element('SearchResults')
        ElementTree.ElementTree.__init__(self, rootNode)

        rootNode.set('title', title)
        rootNode.set('pagelessUrl', self.getPagelessUrlFromHandler(handler))

        # Don't limit the number of results if viewing the characters in a campaign.
        hitsPerPage = handler.request.get('campaign', None) and 100 or self.HITS_PER_PAGE
        paginator = ObjectPaginator(searchResults, hitsPerPage, orphans=self.ORPHANS_PER_PAGE)

        pageNumber = int(handler.request.get('p', '1'))
        numPages = paginator.pages
        pageNumber = min(numPages, pageNumber)
        pageNumber0 = pageNumber - 1

        firstOnPage, lastOnPage, numResults = \
            paginator.first_on_page(pageNumber0), paginator.last_on_page(pageNumber0), paginator.hits
        firstOnPage = lastOnPage and firstOnPage or 0 # so firstOnPage isn't 1 when there are 0 results

        localVars = locals()
        for thisVar in ('numResults', 'numPages', 'pageNumber', 'firstOnPage', 'lastOnPage'):
            rootNode.set(thisVar, str(localVars[thisVar]))

        try:
            [ self.addResult(thisResult, user) for thisResult in paginator.get_page(pageNumber0) ]
        except AttributeError:
            raise
            raise RuntimeError, 'expecting searchResults, got %(searchResults)r' % locals()
Example #3
0
    def buildListHTML(self, pageNumber, propertyName, parent):
        modelClass, modelClassName = self.modelClass, self.modelClassName
        modelClassDisplayName = modelClass.getPrettyClassName()
        if propertyName and parent:
            gql = "WHERE %s = :1 ORDER BY %s" % (propertyName, modelClass.NAME_PROPERTY)
            # logging.debug(gql + '(' + parent + ')')
            models = (propertyName and modelClass.gql(gql, db.get(parent))) or modelClass.get()
        else:
            models = modelClass.all()

        paginator = ObjectPaginator(models, 10, orphans=2)
        if paginator.pages < pageNumber:
            pageNumber = paginator.pages
        pageNumber0 = pageNumber - 1
        models = paginator.get_page(pageNumber0)

        firstOnPage, lastOnPage, numModels = (
            paginator.first_on_page(pageNumber0),
            paginator.last_on_page(pageNumber0),
            paginator.hits,
        )
        hasPreviousPage, hasNextPage = paginator.has_previous_page(pageNumber0), paginator.has_next_page(pageNumber0)
        previousPage, nextPage = pageNumber - 1, pageNumber + 1

        listItems = []
        for model in models:
            modelToListItemHTML = lambda model, s=self, p=parent, pn=propertyName: s.modelToListItemHTML(model, p, pn)
            cacheKey = "listItemHTML" + parent
            self.modelClass.setEntityCacheFunctionForKey(modelToListItemHTML, cacheKey)
            listItems.append(model.getEntityCache(cacheKey))
        listItems = "\n".join(listItems)
        return self.renderManagementTemplate(locals(), "List.html")
Example #4
0
    def wrapper(request, *args, **kwargs):
        page = kwargs.pop('page', None)
        variables = func(request, *args, **kwargs)

        object_list = variables['object_list']
        paginate_by = variables.get('paginate_by', 10)

        paginator = Paginator(object_list, paginate_by)
        if not page:
            page = request.GET.get('page', 1)
        try:
            page_number = int(page)
        except ValueError:
            if page == 'last':
                page_number = paginator.pages
            else:
                # Page is not 'last', nor can it be converted to an int
                raise Http404
    
        try:
            object_list = paginator.get_page(page_number - 1)
        except InvalidPage:
            if page_number == 1 and allow_empty:
                object_list = []
            else:
                raise Http404

        variables.update({
            'object_list': object_list,
            'paginate_by': paginate_by,
            'page': page,
            'is_paginated': paginator.pages > 1,
            'results_per_page': paginate_by,
            'has_next': paginator.has_next_page(page_number - 1),
            'has_previous': paginator.has_previous_page(page_number - 1),
            'page': page_number,
            'next': page_number + 1,
            'previous': page_number - 1,
            'last_on_page': paginator.last_on_page(page_number - 1),
            'first_on_page': paginator.first_on_page(page_number - 1),
            'pages': paginator.pages,
            'hits' : paginator.hits,
            'page_range' : paginator.page_range
            })
        string = django_template_to_string(request, variables, template)
        return HttpResponse(string)