From 1ec981f04a7673d5ad208a1887a6580d021b43a0 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 11 Feb 2012 15:56:44 +0100 Subject: [PATCH 1/5] add definition for CalculatedField (direct attribute of row); use for sequential numbering of rows --- composer/report/field.py | 12 +++++++++--- composer/report/result.py | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/composer/report/field.py b/composer/report/field.py index 4debe38..6257e00 100644 --- a/composer/report/field.py +++ b/composer/report/field.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2010 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,8 +18,6 @@ """ Implementation of report field definitions. - -$Id$ """ from datetime import datetime @@ -93,6 +91,14 @@ class Field(Component): #return self.getValue(row) +class CalculatedField(Field): + + def getRawValue(self, row): + return getattr(row, self.name) + + +# sample field + label = Field('label', u'Label', u'A short text that identifies a row for humans.') diff --git a/composer/report/result.py b/composer/report/result.py index 9af877f..4401563 100644 --- a/composer/report/result.py +++ b/composer/report/result.py @@ -33,6 +33,7 @@ class BaseRow(object): self.context = context self.parent = parent self.data = {} + self.sequenceNumber = 0 def __getattr__(self, attr): f = self.parent.context.fields[attr] @@ -71,6 +72,8 @@ 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]) + for idx, row in enumerate(result): + row.sequenceNumber = idx + 1 return result def __iter__(self): From 1ef004cd1c3835ecfddbcebfb3e2b7cbb620fc93 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sat, 11 Feb 2012 15:57:35 +0100 Subject: [PATCH 2/5] document generation: use ISO encoding; work in progress: CSS classes --- docgen/base.py | 6 ++++-- docgen/word_page.pt | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docgen/base.py b/docgen/base.py index bc205fb..012c663 100644 --- a/docgen/base.py +++ b/docgen/base.py @@ -30,7 +30,8 @@ word_template = ViewPageTemplateFile('word_page.pt') class Base(BrowserPage): - encoding = 'UTF-8' + #encoding = 'UTF-8' + encoding = 'ISO8859-15' def __call__(self, *args, **kw): data = self.index(*args, **kw).encode(self.encoding) @@ -48,7 +49,8 @@ class WordDocument(Base): response = self.request.response response.setHeader('Cache-Control', '') response.setHeader('Pragma', '') - response.setHeader('Content-Type', 'application/msword;charset=utf-8') + response.setHeader('Content-Type', + 'application/msword;charset=%s' % self.encoding) response.setHeader('Content-Length', len(data)) response.setHeader('Content-Disposition', 'filename="%s"' % fn) diff --git a/docgen/word_page.pt b/docgen/word_page.pt index 3d64f45..c97fa12 100644 --- a/docgen/word_page.pt +++ b/docgen/word_page.pt @@ -17,7 +17,9 @@ - +
+ +
From 180ab86be6ca3f2edc517ce5471a7f63fe085296 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 13 Feb 2012 18:31:47 +0100 Subject: [PATCH 3/5] records field: evaluate style properties in edit form; use correct display macro --- composer/schema/grid/grid_macros.pt | 26 ++++++++++++++++---------- composer/schema/grid/interfaces.py | 1 + 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/composer/schema/grid/grid_macros.pt b/composer/schema/grid/grid_macros.pt index 751e627..aaf16f7 100755 --- a/composer/schema/grid/grid_macros.pt +++ b/composer/schema/grid/grid_macros.pt @@ -42,37 +42,43 @@ tal:define="fieldInstance python: field.getFieldInstance(view.instance); columns fieldInstance/columnTypes; rows data/?name"> - +
- - + name string:$name.$cname:records; + style string:width: ${column/baseField/width|string:auto};" /> - + tal:attributes="name string:$name.$cname:records; + style string:width: ${column/baseField/width|string:auto};" /> - + tal:attributes="name string:$name.$cname:records; + style string:width: ${column/baseField/width|string:auto};" /> diff --git a/composer/schema/grid/interfaces.py b/composer/schema/grid/interfaces.py index b653d42..1979be0 100644 --- a/composer/schema/grid/interfaces.py +++ b/composer/schema/grid/interfaces.py @@ -46,6 +46,7 @@ class Records(Grid): __typeInfo__ = ('records', FieldType('records', 'records', u'A series of records or rows.', + displayRenderer='display_records', instanceName='records',)) From d5690fafa24dbebbbe65d92fd3eea3ba3ddc65b3 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 26 Feb 2012 10:19:05 +0100 Subject: [PATCH 4/5] use correct getContextAttr() method: from object, not class --- composer/report/result.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/composer/report/result.py b/composer/report/result.py index 4401563..5b3a13a 100644 --- a/composer/report/result.py +++ b/composer/report/result.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2010 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -48,14 +48,13 @@ class Row(BaseRow): attributeHandlers = {} def getRawValue(self, attr): - return self.attributeHandlers.get(attr, Row.getContextAttr)(self, attr) + return self.attributeHandlers.get(attr, self.getContextAttr)(self, attr) @staticmethod def getContextAttr(obj, attr): return getattr(obj.context, attr) - class ResultSet(object): def __init__(self, context, data, rowFactory=Row, From 1be9a85798acfe2cb8d45e324ba343236c364882 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 26 Feb 2012 10:20:50 +0100 Subject: [PATCH 5/5] use correct getContextAttr() method: from object, not class --- composer/report/result.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer/report/result.py b/composer/report/result.py index 9af877f..7055c40 100644 --- a/composer/report/result.py +++ b/composer/report/result.py @@ -47,7 +47,7 @@ class Row(BaseRow): attributeHandlers = {} def getRawValue(self, attr): - return self.attributeHandlers.get(attr, Row.getContextAttr)(self, attr) + return self.attributeHandlers.get(attr, self.getContextAttr)(self, attr) @staticmethod def getContextAttr(obj, attr):
Column Title
- +
+
- +