 66faec4a38
			
		
	
	
		66faec4a38
		
	
	
	
	
		
			
			git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2743 fd906abe-77d9-0310-91a1-e0d9ade77398
		
			
				
	
	
		
			127 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #
 | |
| #  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 sets, rows, cells...
 | |
| 
 | |
| 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 = Attribute(u'Collection of field specifications from zope.schema.')
 | |
|     rows = Attribute(u'Sequence of row objects.')
 | |
| 
 | |
|     view = Attribute(u'The view the result set was created for.')
 | |
| 
 | |
| 
 | |
| class IRow(Interface):
 | |
|     """ A sequence of cells containing the real data objects.
 | |
|     """
 | |
| 
 | |
|     cells = Attribute(u'Mapping of data elements addressed by field names.')
 | |
| 
 | |
|     context = Attribute(u'The object that is the base of this row.')
 | |
| 
 | |
|     resultSet = Attribute('The result set this row belongs to.')
 | |
|     schema = Attribute(u'The schema of the result set this row belongs to')
 | |
| 
 | |
| 
 | |
| class ICell(Interface):
 | |
|     """ A single cell of a listing or table.
 | |
|     """
 | |
|     # TODO: replace Cell by FieldInstance
 | |
| 
 | |
|     field = Attribute(u'The schema field the cell belongs to.')
 | |
| 
 | |
|     text = Attribute(u'Text to be displayed.')
 | |
|     value = Attribute(u'The real object, often identical to text.')
 | |
|     token = Attribute(u'May be used to identify a cell within '
 | |
|                        'the result set, e.g. in forms.')
 | |
|     url = Attribute(u'An optional URL for a link to place on the cell.')
 | |
|     # string:${view/url}/.target${row/uniqueId}
 | |
|     urlTitle = Attribute(u'Optional title for this link.')
 | |
| 
 | |
|     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 on the
 | |
|             corresponding column.
 | |
|         """
 | |
| 
 | |
| 
 | |
| # 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.
 | |
|         """
 | |
| 
 | |
| 
 | |
| # iterable stuff for batching, sorting, filtering of results
 | |
| 
 | |
| class IBatch(Interface):
 | |
|     """ Represents a part (sort of a slice) of an iterable.
 | |
|     """
 | |
| 
 | |
|     iterable = Attribute(u'The iterable this batch belongs to')
 | |
| 
 | |
|     start = Attribute(u'The current start index of the batch in the parent iterable')
 | |
| 
 | |
|     def __getitem__(idx):
 | |
|         """ Return the item at index idx on the current page.
 | |
|         """
 | |
| 
 | |
|     def next():
 | |
|         """ Return the next item on the current page. Raise StopIteration if
 | |
|             the end of the batch is reached.
 | |
|         """
 | |
| 
 | |
|     def __len__():
 | |
|         """ Return the number of items on the current page.
 | |
|         """
 | |
| 
 | |
|     def getIndexRelative(relativePageNumber):
 | |
|         """ Return the absolute page index based on the current page of
 | |
|             the batch object.
 | |
|             Using +1 or -1 retrieves the next or previous batch.
 | |
|             If a page before the first one is addressed return 0,
 | |
|             if a page after the last one is addressed return the index
 | |
|             of the last page.
 | |
|         """
 | |
| 
 | |
|     def getIndexAbsolute(pageNumber):
 | |
|         """ Return the absolute page index.
 | |
|             0 addresses the first batch page, -1 the last.
 | |
|             Return None if the corresponding page does not exist.
 | |
|         """
 | |
| 
 |