use data table as basis for vocabularies

This commit is contained in:
Helmut Merz 2011-12-27 20:11:00 +01:00
parent e4b4ca2634
commit 0162adea94
4 changed files with 42 additions and 6 deletions

View file

@ -137,7 +137,7 @@ class BaseRelationView(BaseView):
return self.getData()
def getData(self):
return self.instance.applyTemplate()
return self.instance.applyTemplate(context=self.context, request=self.request)
@Lazy
def instance(self):
@ -248,7 +248,7 @@ class ConceptView(BaseView):
return None
def getData(self, omit=('title', 'description')):
data = self.instance.applyTemplate()
data = self.instance.applyTemplate(context=self.context, request=self.request)
for k in omit:
if k in data:
del data[k]

View file

@ -50,10 +50,14 @@
<tal:row repeat="field fields">
<tr tal:define="fieldName field/name;
value nocall:data/?fieldName;
renderer field/displayRenderer"
fieldInstance python:field.getFieldInstance(
context=context, request=request);
rendererName field/displayRenderer;
renderer python:fieldInstance.getRenderer(rendererName) or
view.concept_macros[rendererName]"
tal:condition="nocall:value">
<td><b tal:content="field/title" i18n:translate="" />:</td>
<td><span metal:use-macro="view/concept_macros/?renderer" /></td>
<td><span metal:use-macro="renderer" /></td>
</tr>
</tal:row>
</table>

View file

@ -693,6 +693,10 @@
for="loops.view.NodeTypeSourceList
zope.publisher.interfaces.browser.IBrowserRequest" />
<zope:adapter factory="loops.browser.common.SimpleTerms"
for="loops.table.DataTableSourceList
zope.publisher.interfaces.browser.IBrowserRequest" />
<zope:view factory="loops.browser.node.NodeTraverser"
for="loops.interfaces.INode"
type="zope.publisher.interfaces.http.IHTTPRequest"

View file

@ -21,14 +21,15 @@ Data (keyword-based) table definition and implementation.
"""
from BTrees.OOBTree import OOBTree
from zope.cachedescriptors.property import Lazy
from zope import component, schema
from zope.component import adapts
from zope.interface import implements, Interface, Attribute
from zope.cachedescriptors.property import Lazy
from zope.schema.interfaces import IContextSourceBinder, IIterableSource
from cybertools.composer.schema.factory import SchemaFactory
from cybertools.composer.schema.grid.interfaces import KeyTable
from loops.common import AdapterBase
from loops.common import AdapterBase, adapted, baseObject
from loops.interfaces import IConcept, IConceptSchema, ILoopsAdapter
from loops.type import TypeInterfaceSourceList
from loops import util
@ -101,3 +102,30 @@ class DataTableSchemaFactory(SchemaFactory):
schema.fields.remove('viewName')
return schema
class DataTableSourceBinder(object):
implements(IContextSourceBinder)
def __init__(self, tableName):
self.tableName = tableName
def __call__(self, context):
context = baseObject(context)
dt = context.getLoopsRoot().getConceptManager()[self.tableName]
return DataTableSourceList(adapted(dt))
class DataTableSourceList(object):
implements(IIterableSource)
def __init__(self, context):
self.context = context
def __iter__(self):
items = [(k, v[0]) for k, v in self.context.data.items()]
return iter(sorted(items, key=lambda x: x[1]))
def __len__(self):
return len(self.context.data)