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()
|
>>> 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 Component, Element, Compound
|
||||||
from cybertools.composer.base import Template
|
from cybertools.composer.base import Template
|
||||||
|
from cybertools.composer.report.field import Field
|
||||||
from cybertools.composer.report.interfaces import IReportManager, IReport
|
from cybertools.composer.report.interfaces import IReportManager, IReport
|
||||||
from cybertools.util.jeep import Jeep
|
from cybertools.util.jeep import Jeep
|
||||||
from cybertools.util.randomname import generateName
|
from cybertools.util.randomname import generateName
|
||||||
|
@ -56,6 +57,10 @@ class ReportManager(object):
|
||||||
return id not in self.reports.keys()
|
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):
|
class Report(Template):
|
||||||
|
|
||||||
implements(IReport)
|
implements(IReport)
|
||||||
|
@ -64,5 +69,8 @@ class Report(Template):
|
||||||
type = 'generic'
|
type = 'generic'
|
||||||
manager = None
|
manager = None
|
||||||
|
|
||||||
|
fields = Jeep((label,))
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
self.name = 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.interface import Interface, Attribute
|
||||||
from zope.i18nmessageid import MessageFactory
|
from zope.i18nmessageid import MessageFactory
|
||||||
from zope import schema
|
from zope import schema
|
||||||
|
from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
|
||||||
|
|
||||||
from cybertools.composer.interfaces import ITemplate, IComponent
|
from cybertools.composer.interfaces import ITemplate, IComponent
|
||||||
from cybertools.composer.interfaces import IInstance
|
from cybertools.composer.interfaces import IInstance
|
||||||
|
@ -33,7 +34,7 @@ _ = MessageFactory('cybertools.composer')
|
||||||
|
|
||||||
|
|
||||||
class IReportManager(Interface):
|
class IReportManager(Interface):
|
||||||
""" A manager (or container) for complex messages.
|
""" A manager (or container) for reports.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
title = schema.TextLine(
|
title = schema.TextLine(
|
||||||
|
@ -47,9 +48,13 @@ class IReportManager(Interface):
|
||||||
""" Add a report.
|
""" 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(
|
identifier = schema.ASCIILine(
|
||||||
|
@ -71,3 +76,48 @@ class IReport(Interface):
|
||||||
|
|
||||||
manager = Attribute('The manager of this message object')
|
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