provide 'descending' flag for sorting

This commit is contained in:
Helmut Merz 2015-03-21 17:10:40 +01:00
parent 3d3013b76c
commit 13da77de0a
2 changed files with 7 additions and 2 deletions

View file

@ -83,6 +83,7 @@ class Report(Template):
queryCriteria = None queryCriteria = None
outputFields = () outputFields = ()
sortCriteria = () sortCriteria = ()
sortDescending = False
limits = None limits = None

View file

@ -81,12 +81,14 @@ class GroupHeaderRow(BaseRow):
class ResultSet(object): class ResultSet(object):
def __init__(self, context, data, rowFactory=Row, def __init__(self, context, data, rowFactory=Row,
sortCriteria=None, queryCriteria=BaseQueryCriteria(), sortCriteria=None, sortDescending=False,
queryCriteria=BaseQueryCriteria(),
limits=None): 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.sortCriteria = sortCriteria self.sortCriteria = sortCriteria
self.sortDescending = sortDescending
self.queryCriteria = queryCriteria self.queryCriteria = queryCriteria
self.limits = limits self.limits = limits
self.totals = BaseRow(None, self) self.totals = BaseRow(None, self)
@ -95,7 +97,9 @@ 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],
reverse=self.sortDescending)
if self.limits: if self.limits:
start, stop = self.limits start, stop = self.limits
result = result[start:stop] result = result[start:stop]