Exemplo n.º 1
0
 def _batch_for_page(self, pagenumber):
     """Return a new Batch object for the given pagenumber.
     """
     new_batch = Batch.fromPagenumber(self.batch._sequence,
                                      pagesize=self.b_size,
                                      pagenumber=pagenumber)
     return new_batch
Exemplo n.º 2
0
    def __init__(self, request, results):
        self.request = request

        self.b_start = int(self.request.form.get("b_start", 0))
        self.b_size = int(self.request.form.get("b_size", DEFAULT_BATCH_SIZE))

        self.batch = Batch(results, self.b_size, self.b_start)
    def search(self):
        """ A traversable method to search for users"""
        query = self.request.get('q', None)
        page = int(self.request.get('page', 1))
        pagesize = int(self.request.get('pagesize', 20))

        if not query:
            return json.dumps({})

        source = AllUsersSource(api.portal.get())
        batch = Batch.fromPagenumber(items=source.search(query),
                                     pagesize=pagesize,
                                     pagenumber=page)

        def _term_to_dict(term):
            return {'_resultId': term.token,
                    'id': term.token,
                    'text': term.title and term.title or term.token}

        return json.dumps(
            {
                'results': map(_term_to_dict, batch),
                'total_count': len(batch),
                'page': page,
                'pagination': {'more': (page * pagesize) < len(batch)}
            }
        )
    def search(self):
        """ A traversable method to search for users"""
        query = self.request.get('q', None)
        page = int(self.request.get('page', 1))
        pagesize = int(self.request.get('pagesize', 20))

        if not query:
            return json.dumps({})

        source = self.get_user_source()
        batch = Batch.fromPagenumber(items=source.search(query),
                                     pagesize=pagesize,
                                     pagenumber=page)

        def _term_to_dict(term):
            return {
                '_resultId': term.token,
                'id': term.token,
                'text': term.title and term.title or term.token
            }

        return json.dumps({
            'results': map(_term_to_dict, batch),
            'total_count': len(batch),
            'page': page,
            'pagination': {
                'more': (page * pagesize) < len(batch)
            }
        })
Exemplo n.º 5
0
 def _batch_for_page(self, pagenumber):
     """Return a new Batch object for the given pagenumber.
     """
     new_batch = Batch.fromPagenumber(
         self.batch._sequence,
         pagesize=self.b_size,
         pagenumber=pagenumber)
     return new_batch
    def results(self,
                batch=True,
                b_start=0,
                b_size=None,
                sort_on=None,
                limit=None,
                brains=False,
                custom_query=None):
        if not b_size:
            b_size = self.item_count
        if not sort_on:
            sort_on = self.sort_on
        if not limit:
            limit = self.limit

        # Get all results
        collections = [
            collection for collection in self.listFolderContents()
            if ICollection.providedBy(collection)
        ]
        uuids = set()
        results = []
        for collection in collections:
            collection_results = collection.results(batch=False,
                                                    b_start=0,
                                                    b_size=limit,
                                                    sort_on=sort_on,
                                                    limit=limit,
                                                    brains=brains,
                                                    custom_query=custom_query)
            for result in collection_results:
                # Ensure we get each result only once
                if result.uuid() not in uuids:
                    uuids.add(result.uuid())
                    results.append(result)

        # Order the results and limit it
        if sort_on:
            results.sort(key=lambda o: getattr(o, sort_on, None),
                         reverse=self.sort_reversed)
        if limit:
            results = results[:limit]

        # Batch the results
        results = Batch(results, size=b_size, start=b_start)
        return results
Exemplo n.º 7
0
    def results(self):
        """ Return the list of objects stored in the tile.
        """
        self.set_limit()
        uuids = self.data.get('uuids', None)
        results = []
        if uuids:
            uuids = [uuids] if type(uuids) == str else uuids
            for uid in uuids:
                obj = uuidToObject(uid)
                if obj:
                    results.append(obj)
                else:
                    self.remove_item(uid)

        final_result = []
        batch = Batch.fromPagenumber(items=results, pagesize=4, pagenumber=1)
        for num in batch.navlist:
            batch.pagenumber = num
            final_result.append(list(batch))
        return final_result
    def results(self):
        """ Return the list of objects stored in the tile.
        """
        self.set_limit()
        uuids = self.data.get('uuids', None)
        results = []
        if uuids:
            uuids = [uuids] if type(uuids) == str else uuids
            for uid in uuids:
                obj = uuidToObject(uid)
                if obj:
                    results.append(obj)
                else:
                    self.remove_item(uid)

        final_result = []
        batch = Batch.fromPagenumber(items=results, pagesize=4, pagenumber=1)
        for num in batch.navlist:
            batch.pagenumber = num
            final_result.append(list(batch))
        return final_result
Exemplo n.º 9
0
 def testBatchOrdered(self):
     for x in range(500):
         batch = Batch(sequence=self.ordered.objectValues(),
                       size=SIZE / 10,
                       start=SIZE * 4 / 5)
         [b for b in batch]
Exemplo n.º 10
0
 def testBatchRegular(self):
     for x in range(500):
         batch = Batch(sequence=self.regular.objectValues(),
                       size=SIZE / 10,
                       start=SIZE * 4 / 5)
         [b for b in batch]