From 976fa5e945381e6e96b28866d2b088d92b89611e Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 18 Jun 2012 09:29:12 +0200 Subject: [PATCH] reporting: introduce 'limits' parameter as basis for batching and other kinds of reducing report output after selection and sorting --- composer/report/base.py | 1 + composer/report/result.py | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/composer/report/base.py b/composer/report/base.py index fddcdb0..eb171f7 100644 --- a/composer/report/base.py +++ b/composer/report/base.py @@ -82,6 +82,7 @@ class Report(Template): queryCriteria = None outputFields = () sortCriteria = () + limits = None def __init__(self, name): diff --git a/composer/report/result.py b/composer/report/result.py index 2d3943f..637f17f 100644 --- a/composer/report/result.py +++ b/composer/report/result.py @@ -80,12 +80,14 @@ class GroupHeaderRow(BaseRow): class ResultSet(object): def __init__(self, context, data, rowFactory=Row, - sortCriteria=None, queryCriteria=BaseQueryCriteria()): + sortCriteria=None, queryCriteria=BaseQueryCriteria(), + limits=None): self.context = context # the report or report instance self.data = data self.rowFactory = rowFactory self.sortCriteria = sortCriteria self.queryCriteria = queryCriteria + self.limits = limits self.totals = BaseRow(None, self) def getResult(self): @@ -93,6 +95,9 @@ class ResultSet(object): result = [row for row in result if self.queryCriteria.check(row)] if self.sortCriteria: result.sort(key=lambda x: [f.getSortValue(x) for f in self.sortCriteria]) + if self.limits: + start, stop = self.limits + result = result[start:stop] for idx, row in enumerate(result): row.sequenceNumber = idx + 1 return result