merge branch master - 'limits' parameter for reports

This commit is contained in:
Helmut Merz 2012-06-18 10:28:48 +02:00
commit ff9a2a8fd3
2 changed files with 11 additions and 4 deletions

View file

@ -82,6 +82,7 @@ class Report(Template):
queryCriteria = None queryCriteria = None
outputFields = () outputFields = ()
sortCriteria = () sortCriteria = ()
limits = None
def __init__(self, name): def __init__(self, name):

View file

@ -79,15 +79,17 @@ class GroupHeaderRow(BaseRow):
class ResultSet(object): class ResultSet(object):
def __init__(self, context, data, rowFactory=Row, headerRowFactory=GroupHeaderRow, def __init__(self, context, data,
sortCriteria=None, queryCriteria=BaseQueryCriteria()): rowFactory=Row, headerRowFactory=GroupHeaderRow,
sortCriteria=None, queryCriteria=BaseQueryCriteria(),
limits=None):
self.context = context # the report or report instance self.context = context # the report or report instance
self.data = data self.data = data
self.rowFactory = rowFactory self.rowFactory = rowFactory
self.headerRowFactory = headerRowFactory self.headerRowFactory = headerRowFactory
self.sortCriteria = sortCriteria self.sortCriteria = sortCriteria
self.queryCriteria = queryCriteria self.queryCriteria = queryCriteria
self.limits = limits
self.totals = BaseRow(None, self) self.totals = BaseRow(None, self)
def getHeaderRow(self, row, columns): def getHeaderRow(self, row, columns):
@ -106,7 +108,8 @@ class ResultSet(object):
result = [self.rowFactory(item, self) for item in self.data] result = [self.rowFactory(item, self) for item in self.data]
result = [row for row in result if self.queryCriteria.check(row)] result = [row for row in result if self.queryCriteria.check(row)]
if self.sortCriteria: if self.sortCriteria:
result.sort(key=lambda x: [f.getSortValue(x) for f in self.sortCriteria]) result.sort(key=lambda x:
[f.getSortValue(x) for f in self.sortCriteria])
if self.groupColumns: if self.groupColumns:
res = [] res = []
groupValues = [None for f in self.groupColumns] groupValues = [None for f in self.groupColumns]
@ -118,6 +121,9 @@ class ResultSet(object):
res.append(self.getHeaderRow(row, (f,) + f.outputWith)) res.append(self.getHeaderRow(row, (f,) + f.outputWith))
res.append(row) res.append(row)
result = res result = res
if self.limits:
start, stop = self.limits
result = result[start:stop]
for idx, row in enumerate(result): for idx, row in enumerate(result):
row.sequenceNumber = idx + 1 row.sequenceNumber = idx + 1
return result return result