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
	
	 helmutm
						helmutm