From add1a31bae143a9a4db32e7f058bfd80e3d5cf35 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 27 Nov 2011 19:43:04 +0100 Subject: [PATCH] define row data for report totals --- composer/report/field.py | 2 +- composer/report/result.py | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/composer/report/field.py b/composer/report/field.py index b773fe5..4debe38 100644 --- a/composer/report/field.py +++ b/composer/report/field.py @@ -47,7 +47,7 @@ class Field(Component): renderer = 'standard' operator = 'in' - executionSteps = ['query', 'sort', 'output'] + executionSteps = ['query', 'sort', 'output'] # , 'totals'] operators = [{'token': 'eq', 'label': '=='}, {'token': 'lt', 'label': '<'}, diff --git a/composer/report/result.py b/composer/report/result.py index bfe082b..b033b19 100644 --- a/composer/report/result.py +++ b/composer/report/result.py @@ -26,24 +26,33 @@ from cybertools.composer.interfaces import IInstance from cybertools.composer.report.base import BaseQueryCriteria -def getContextAttr(obj, attr): - return getattr(obj.context, attr) - -class Row(object): - - attributeHandlers = {} +class BaseRow(object): def __init__(self, context, parent): self.context = context self.parent = parent + self.data = {} def __getattr__(self, attr): f = self.parent.context.fields[attr] return f.getValue(self) def getRawValue(self, attr): - return self.attributeHandlers.get(attr, getContextAttr)(self, attr) + return self.data.get(attr) + + +class Row(BaseRow): + + attributeHandlers = {} + + def getRawValue(self, attr): + return self.attributeHandlers.get(attr, Row.getContextAttr)(self, attr) + + @classmethod + def getContextAttr(obj, attr): + return getattr(obj.context, attr) + class ResultSet(object): @@ -55,6 +64,7 @@ class ResultSet(object): self.rowFactory = rowFactory self.sortCriteria = sortCriteria self.queryCriteria = queryCriteria + self.totals = BaseRow(None, self) def getResult(self): result = [self.rowFactory(item, self) for item in self.data]