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:
parent
16e724b8d2
commit
b41175ed3a
4 changed files with 131 additions and 3 deletions
|
@ -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')
|
||||
|
|
|
@ -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
59
composer/report/field.py
Normal 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__
|
||||
|
|
@ -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,)
|
||||
|
|
Loading…
Add table
Reference in a new issue