work in progress: new data table concept type
This commit is contained in:
		
							parent
							
								
									5e1df6fb4d
								
							
						
					
					
						commit
						8789a3fccd
					
				
					 1 changed files with 89 additions and 0 deletions
				
			
		
							
								
								
									
										89
									
								
								table.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								table.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,89 @@
 | 
			
		|||
#
 | 
			
		||||
#  Copyright (c) 2011 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
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
Data (keyword-based) table definition and implementation.
 | 
			
		||||
 | 
			
		||||
$Id$
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from BTrees.OOBTree import OOBTree
 | 
			
		||||
from zope import schema, component
 | 
			
		||||
from zope.interface import Interface, Attribute, implements
 | 
			
		||||
from zope.cachedescriptors.property import Lazy
 | 
			
		||||
 | 
			
		||||
from cybertools.composer.schema.grid.interfaces import Records
 | 
			
		||||
from loops.common import AdapterBase
 | 
			
		||||
from loops.interfaces import IConcept, IConceptSchema, ILoopsAdapter
 | 
			
		||||
from loops.type import TypeInterfaceSourceList
 | 
			
		||||
from loops import util
 | 
			
		||||
from loops.util import _
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class IDataTable(IConceptSchema, ILoopsAdapter):
 | 
			
		||||
    """ The schema for the data table type.
 | 
			
		||||
    """
 | 
			
		||||
 | 
			
		||||
    viewName = schema.TextLine(
 | 
			
		||||
        title=_(u'Adapter/View name'),
 | 
			
		||||
        description=_(u'Optional name of the view '
 | 
			
		||||
                      u'to be used for presenting '
 | 
			
		||||
                      u'the data of the table.'),
 | 
			
		||||
        default=u'',
 | 
			
		||||
        required=False)
 | 
			
		||||
 | 
			
		||||
    # better: specify column names (and possibly labels, types)
 | 
			
		||||
    # in Python code and reference by name here
 | 
			
		||||
    columns = schema.List(
 | 
			
		||||
        title=_(u'Columns'),
 | 
			
		||||
        description=_(u'The names of the columns of the data table. '
 | 
			
		||||
                      u'The first name is the name of the key column.'),
 | 
			
		||||
        value_type=schema.BytesLine(),
 | 
			
		||||
        default=['key', 'value'],
 | 
			
		||||
        required=True)
 | 
			
		||||
 | 
			
		||||
    data = Records(title=_(u'Table Data'),
 | 
			
		||||
        description=_(u'Table Data'),
 | 
			
		||||
        required=False)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DataTable(AdapterBase):
 | 
			
		||||
 | 
			
		||||
    implements(IDataTable)
 | 
			
		||||
 | 
			
		||||
    _contextAttributes = list(IDataTable)
 | 
			
		||||
    _adapterAttributes = AdapterBase._adapterAttributes + ('columns', 'data')
 | 
			
		||||
 | 
			
		||||
    def getColumns(self):
 | 
			
		||||
        return getattr(self.context, '_columns', ['key', 'value'])
 | 
			
		||||
    def setColumns(self, value):
 | 
			
		||||
        self.context._columns = value
 | 
			
		||||
    columns = property(getColumns, setColumns)
 | 
			
		||||
 | 
			
		||||
    def getData(self):
 | 
			
		||||
        data = getattr(self.context, '_data', None)
 | 
			
		||||
        if data is None:
 | 
			
		||||
            data = OOBTree()
 | 
			
		||||
            self.context._data = data
 | 
			
		||||
        return data
 | 
			
		||||
    def setData(self, data):
 | 
			
		||||
        self.context._data = OOBTree(data)
 | 
			
		||||
    data = property(getData, setData)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TypeInterfaceSourceList.typeInterfaces += (IDataTable,)
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue