add support for category rows/ execution steps

This commit is contained in:
hplattner 2012-03-29 16:05:06 +02:00
parent be53682e0d
commit 5fbb588743
2 changed files with 28 additions and 1 deletions

View file

@ -133,6 +133,9 @@ class Report(Template):
def getPresentationFormats(self): def getPresentationFormats(self):
return [dict(renderer='default', title='Default')] return [dict(renderer='default', title='Default')]
def getCategoryFields(self):
return [f for f in self.fields if 'category' in f.executionSteps]
class BaseQueryCriteria(Component): class BaseQueryCriteria(Component):

View file

@ -53,21 +53,41 @@ class Row(BaseRow):
@staticmethod @staticmethod
def getContextAttr(obj, attr): def getContextAttr(obj, attr):
return getattr(obj.context, attr) return getattr(obj.context, attr)
def getCategories(self):
return [self.getRawValue(f.__name__) for f in
self.parent.context.fields if 'category' in f.executionSteps]
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, queryCriteria=BaseQueryCriteria(),
filterDublicate=False):
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.queryCriteria = queryCriteria self.queryCriteria = queryCriteria
self.filterDublicate = filterDublicate
self.totals = BaseRow(None, self) self.totals = BaseRow(None, self)
def filterDublicateRows(self, result):
res = []
for row in result:
add = True
for r in res:
for f in self.categoryColumns:
if row.getRawValue(f.__name__) == r.getRawValue(f.__name__):
add = False
if add:
res.append(row)
return res
def getResult(self): def getResult(self):
result = [self.rowFactory(item, self) for item in self.data] result = [self.rowFactory(item, self) for item in self.data]
if self.filterDublicate:
result = [row for row in self.filterDublicateRows(result)]
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])
@ -82,3 +102,7 @@ class ResultSet(object):
def displayedColumns(self): def displayedColumns(self):
return self.context.getActiveOutputFields() return self.context.getActiveOutputFields()
@Lazy
def categoryColumns(self):
return self.context.getCategoryFields()