work in progress: generic report configuration: basic field definitions

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3776 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-03-21 16:11:55 +00:00
parent 16e724b8d2
commit b41175ed3a
4 changed files with 131 additions and 3 deletions

View file

@ -9,3 +9,14 @@ Report Management
>>> manager = ReportManager()
>>> rep01 = manager.addReport(Report('testreport'))
The base report provides a fairly basic collection of field definitions:
>>> len(rep01.fields)
1
>>> rep01.fields.keys()
['label']
>>> rep01.fields.get('label')
<cybertools.composer.report.field.Field object ...>
>>> rep01.fields.get('title')

View file

@ -26,6 +26,7 @@ from zope.interface import implements
from cybertools.composer.base import Component, Element, Compound
from cybertools.composer.base import Template
from cybertools.composer.report.field import Field
from cybertools.composer.report.interfaces import IReportManager, IReport
from cybertools.util.jeep import Jeep
from cybertools.util.randomname import generateName
@ -56,6 +57,10 @@ class ReportManager(object):
return id not in self.reports.keys()
label = Field('label', u'Label',
u'A short text that identifies a row for humans.')
class Report(Template):
implements(IReport)
@ -64,5 +69,8 @@ class Report(Template):
type = 'generic'
manager = None
fields = Jeep((label,))
def __init__(self, name):
self.name = name

59
composer/report/field.py Normal file
View file

@ -0,0 +1,59 @@
#
# Copyright (c) 2010 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
Implementation of report field definitions.
$Id$
"""
from datetime import datetime
from time import strptime, strftime
from zope.interface import implements
from zope.cachedescriptors.property import Lazy
from zope.component import adapts
from zope import component
from zope.i18n.locales import locales
from cybertools.composer.base import Component
from cybertools.composer.report.interfaces import IField
from cybertools.composer.report.interfaces import fieldTypes
class Field(Component):
implements(IField)
vocabulary = None
default = None
instance_name = None
def __init__(self, name, title=None, fieldType='textline', **kw):
assert name
self.__name__ = name
title = title or name
self.fieldType = fieldType
super(Field, self).__init__(title, __name__=name, **kw)
self.title = title
for k, v in kw.items():
setattr(self, k, v)
@property
def name(self):
return self.__name__

View file

@ -25,6 +25,7 @@ $Id$
from zope.interface import Interface, Attribute
from zope.i18nmessageid import MessageFactory
from zope import schema
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
from cybertools.composer.interfaces import ITemplate, IComponent
from cybertools.composer.interfaces import IInstance
@ -33,7 +34,7 @@ _ = MessageFactory('cybertools.composer')
class IReportManager(Interface):
""" A manager (or container) for complex messages.
""" A manager (or container) for reports.
"""
title = schema.TextLine(
@ -47,9 +48,13 @@ class IReportManager(Interface):
""" Add a report.
"""
def getReport(id):
""" Retrieve a report.
"""
class IReport(Interface):
""" A complex message that may be expanded using instance data.
class IReport(ITemplate):
""" A configurable report.
"""
identifier = schema.ASCIILine(
@ -71,3 +76,48 @@ class IReport(Interface):
manager = Attribute('The manager of this message object')
fields = Attribute('An ordered collection of all field definitions '
'available for this report.')
renderers = Attribute('An ordered collection of renderers for this report.')
class FieldType(SimpleTerm):
instanceName = ''
def __init__(self, value, token=None, title=None, **kw):
super(FieldType, self).__init__(value, token, title)
self.name = value
for k, v in kw.items():
setattr(self, k, v)
fieldTypes = SimpleVocabulary((
FieldType('textline', 'textline', u'Textline'),
FieldType('number', 'number', u'Number', instanceName='number'),
FieldType('date', 'date', u'Date', instanceName='date'),
))
class IField(IComponent):
""" Describes a field that may be used in query criteria, for specifying
columns or cells for display, or for sorting.
"""
name = schema.ASCII(
title=_(u'Field name'),
description=_(u'The internal name of the field'),
required=True,)
title = schema.TextLine(
title=_(u'Title'),
description=_(u'The title or label of the field'),
required=True,)
description = schema.Text(
title=_(u'Description'),
description=_(u'A brief description of the field'),
required=False,)
fieldType = schema.Choice(
title=_(u'Field type'),
description=_(u'The type of the field'),
required=True,
default='textline',
vocabulary=fieldTypes,)