starting the cybertools.reporter package...
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1113 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									ed8c66ce15
								
							
						
					
					
						commit
						b258964967
					
				
					 11 changed files with 287 additions and 0 deletions
				
			
		
							
								
								
									
										37
									
								
								reporter/README.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								reporter/README.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | Quickstart Instructions | ||||||
|  | ======================= | ||||||
|  | 
 | ||||||
|  |   ($Id$) | ||||||
|  | 
 | ||||||
|  |   >>> from zope.app import zapi | ||||||
|  |   >>> from zope.app.testing import ztapi | ||||||
|  |   >>> from zope.interface import directlyProvides | ||||||
|  | 
 | ||||||
|  | A Basic API for Reports and Listings | ||||||
|  | ==================================== | ||||||
|  | 
 | ||||||
|  |   >>> from cybertools.reporter.data import DataSource | ||||||
|  |   >>> from cybertools.reporter.interfaces import IResultSet | ||||||
|  | 
 | ||||||
|  | Let's start with the Person class from the example package - we will | ||||||
|  | then provide a listing of persons... | ||||||
|  | 
 | ||||||
|  |   >>> from cybertools.reporter.example.contact import Person, Contacts | ||||||
|  |   >>> from cybertools.reporter.example.interfaces import IContactsDataSource | ||||||
|  | 
 | ||||||
|  |   >>> import time | ||||||
|  |   >>> format = '%Y-%m-%d' | ||||||
|  |   >>> pdata = ((u'John', u'Smith', '1956-08-01'), | ||||||
|  |   ...          (u'David', u'Waters', '1972-12-24'), | ||||||
|  |   ...          (u'Carla', u'Myers', '1981-10-11')) | ||||||
|  |   >>> persons = DataSource([Person(f, s, time.strptime(b, format)) | ||||||
|  |   ...                         for f, s, b in pdata]) | ||||||
|  |   >>> directlyProvides(persons, IContactsDataSource) | ||||||
|  | 
 | ||||||
|  |   >>> ztapi.provideAdapter(IContactsDataSource, IResultSet, Contacts) | ||||||
|  |   >>> rset = IResultSet(persons) | ||||||
|  | 
 | ||||||
|  | For the browser presentation we can also use a browser view providing | ||||||
|  | the result set with extended attributes: | ||||||
|  | 
 | ||||||
|  |   >>> #rsView = zapi.getMultiAdapter((context, TestRequest()), IBrowserView) | ||||||
							
								
								
									
										4
									
								
								reporter/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								reporter/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | """ | ||||||
|  | $Id$ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
							
								
								
									
										4
									
								
								reporter/browser/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								reporter/browser/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | """ | ||||||
|  | $Id$ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
							
								
								
									
										8
									
								
								reporter/configure.zcml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								reporter/configure.zcml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | <!-- $Id$ --> | ||||||
|  | 
 | ||||||
|  | <configure | ||||||
|  |    xmlns="http://namespaces.zope.org/zope" | ||||||
|  |    xmlns:browser="http://namespaces.zope.org/browser" | ||||||
|  |    i18n_domain="zope"> | ||||||
|  | 
 | ||||||
|  | </configure> | ||||||
							
								
								
									
										1
									
								
								reporter/cybertools.reporter-configure.zcml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								reporter/cybertools.reporter-configure.zcml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | <include package="cybertools.reporter" /> | ||||||
							
								
								
									
										37
									
								
								reporter/data.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								reporter/data.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | # | ||||||
|  | #  Copyright (c) 2006 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 | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | Basic data / data source implementations. | ||||||
|  | 
 | ||||||
|  | $Id$ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | from zope.interface import implements | ||||||
|  | from cybertools.reporter.interfaces import IDataSource | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class DataSource(object): | ||||||
|  | 
 | ||||||
|  |     implements(IDataSource) | ||||||
|  | 
 | ||||||
|  |     def __init__(self, iterable): | ||||||
|  |         self.data = iterable | ||||||
|  | 
 | ||||||
|  |     def __iter__(self): | ||||||
|  |         return iter(self.data) | ||||||
							
								
								
									
										4
									
								
								reporter/example/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								reporter/example/__init__.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | """ | ||||||
|  | $Id$ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
							
								
								
									
										48
									
								
								reporter/example/contact.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								reporter/example/contact.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | ||||||
|  | # | ||||||
|  | #  Copyright (c) 2006 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 | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | A set of simple application classes for contact management to be used | ||||||
|  | as an example for the cybertools.reporter package. | ||||||
|  | 
 | ||||||
|  | $Id$ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | from zope.component import adapts | ||||||
|  | from zope.interface import implements | ||||||
|  | from cybertools.reporter.interfaces import IResultSet | ||||||
|  | from cybertools.reporter.example.interfaces import IContactsDataSource | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Person(object): | ||||||
|  |      | ||||||
|  |     def __init__(self, firstName, lastName, birthDate): | ||||||
|  |         self.firstName = firstName | ||||||
|  |         self.lastName = lastName | ||||||
|  |         self.birthDate = birthDate | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Contacts(object): | ||||||
|  | 
 | ||||||
|  |     implements(IResultSet) | ||||||
|  |     adapts(IContactsDataSource) | ||||||
|  | 
 | ||||||
|  |     def __init__(self, context): | ||||||
|  |         self.context = context | ||||||
|  | 
 | ||||||
|  |          | ||||||
							
								
								
									
										31
									
								
								reporter/example/interfaces.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								reporter/example/interfaces.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | ||||||
|  | # | ||||||
|  | #  Copyright (c) 2006 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 | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | Interfaces for a simple contact management framework to be used | ||||||
|  | as an example for the cybertools.reporter package. | ||||||
|  | 
 | ||||||
|  | $Id$ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | from zope.interface import Interface | ||||||
|  | 
 | ||||||
|  | class IContactsDataSource(Interface): | ||||||
|  |     """ A data source marker interface for contacts. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
							
								
								
									
										86
									
								
								reporter/interfaces.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								reporter/interfaces.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,86 @@ | ||||||
|  | # | ||||||
|  | #  Copyright (c) 2006 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 | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | interface definitions for the reporter package. | ||||||
|  | 
 | ||||||
|  | $Id$ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | import zope | ||||||
|  | from zope.interface import Interface, Attribute | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # result set | ||||||
|  | 
 | ||||||
|  | class IResultSet(Interface): | ||||||
|  |     """A sequence of rows provided by a data source, report or | ||||||
|  |         similar object, together with a schema that describes the columns | ||||||
|  |         (fields, cells). | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     schema = zope.schema.Iterable(title=u'Schema', | ||||||
|  |                     description=u'Collection of field specifications based ' | ||||||
|  |                                  'on the interfaces defined by zope.schema.') | ||||||
|  |     rows = zope.schema.Iterable(title=u'Rows', | ||||||
|  |                     description=u'Sequence of row objects') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class IRow(Interface): | ||||||
|  |     """ A sequence of cells containing the real data objects. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     cells = zope.schema.Dict(zope.schema.ASCIILine(), | ||||||
|  |                     title=u'Cells', | ||||||
|  |                     description=u'Mapping of data elements addressed by a name ' | ||||||
|  |                                  'that is the key to the mapping.') | ||||||
|  | 
 | ||||||
|  |     resultSet = Attribute('The result set this row belongs to.') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ICell(Interface): | ||||||
|  |     """ A single cell of a listing or table. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     text = zope.schema.Text(title=u'Text', | ||||||
|  |                     description=u'Text to be displayed') | ||||||
|  |     value = zope.schema.Object(Interface, | ||||||
|  |                     title=u'Value', | ||||||
|  |                     description=u'The real object, often identical to text.') | ||||||
|  |     token = zope.schema.ASCIILine(title=u'Token', | ||||||
|  |                     description=u'May be used to identify a cell within' | ||||||
|  |                                  'the result set, e.g. in forms') | ||||||
|  | 
 | ||||||
|  |     row = Attribute('The row this cell belongs to.') | ||||||
|  | 
 | ||||||
|  |     def sortKey(): | ||||||
|  |         """ Returns a value (typically a string or a sequence) that will | ||||||
|  |             be used for comparing cells in order to sort rows. | ||||||
|  |         """ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # data source | ||||||
|  | 
 | ||||||
|  | class IDataSource(Interface): | ||||||
|  |     """ An iterable that may be used as a data source. | ||||||
|  |     """ | ||||||
|  | 
 | ||||||
|  |     def __iter__(): | ||||||
|  |         """ Return an iterable that provides the data to be evaluated. | ||||||
|  |         """ | ||||||
|  | 
 | ||||||
							
								
								
									
										27
									
								
								reporter/tests.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								reporter/tests.py
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | # $Id$ | ||||||
|  | 
 | ||||||
|  | import unittest | ||||||
|  | from zope.testing.doctestunit import DocFileSuite | ||||||
|  | from zope.app.testing import ztapi | ||||||
|  | from zope.interface.verify import verifyClass | ||||||
|  | from zope.interface import implements | ||||||
|  | from zope.app import zapi | ||||||
|  | 
 | ||||||
|  | from cybertools.reporter.interfaces import IResultSet, IRow, ICell | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class TestReporter(unittest.TestCase): | ||||||
|  |     "Basic tests for the reporter package." | ||||||
|  | 
 | ||||||
|  |     def testInterfaces(self): | ||||||
|  |         pass | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_suite(): | ||||||
|  |     return unittest.TestSuite(( | ||||||
|  |                 unittest.makeSuite(TestReporter), | ||||||
|  |                 DocFileSuite('README.txt'), | ||||||
|  |             )) | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     unittest.main(defaultTest='test_suite') | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm