split up instance processing, allowing for fine-grained overriding by subclasses
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3374 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
c59fc50291
commit
2531f575e2
1 changed files with 24 additions and 8 deletions
|
@ -41,11 +41,15 @@ from cybertools.util.jeep import Jeep
|
||||||
|
|
||||||
class DataProvider(object):
|
class DataProvider(object):
|
||||||
|
|
||||||
|
extensions = {}
|
||||||
|
|
||||||
def __init__(self, context, data):
|
def __init__(self, context, data):
|
||||||
self.context = context
|
self.context = context
|
||||||
self.data = data
|
self.data = data
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
|
if key in self.extensions:
|
||||||
|
return self.extensions[key](self)
|
||||||
client = self.context.client
|
client = self.context.client
|
||||||
messageManager = self.context.manager
|
messageManager = self.context.manager
|
||||||
if key.startswith('@@'):
|
if key.startswith('@@'):
|
||||||
|
@ -71,14 +75,7 @@ class DataProvider(object):
|
||||||
messageManager)
|
messageManager)
|
||||||
return mi.applyTemplate(self.data)['text']
|
return mi.applyTemplate(self.data)['text']
|
||||||
elif '.' in key:
|
elif '.' in key:
|
||||||
if client is None:
|
return self.getSubfieldValue(key)
|
||||||
return '$' + key
|
|
||||||
schemaName, fieldName = key.split('.', 1)
|
|
||||||
schema = client.manager.getClientSchemas()[schemaName]
|
|
||||||
instance = IInstance(client)
|
|
||||||
instance.template = schema
|
|
||||||
data = instance.applyTemplate()
|
|
||||||
return data[fieldName]
|
|
||||||
elif key in self.data:
|
elif key in self.data:
|
||||||
return self.data[key]
|
return self.data[key]
|
||||||
else:
|
else:
|
||||||
|
@ -90,6 +87,25 @@ class DataProvider(object):
|
||||||
(self.context.client.manager, request), name=name)
|
(self.context.client.manager, request), name=name)
|
||||||
return view
|
return view
|
||||||
|
|
||||||
|
def getSubfieldValue(self, key):
|
||||||
|
client = self.context.client
|
||||||
|
if client is None:
|
||||||
|
return '$' + key
|
||||||
|
schemaName, fieldName = key.split('.', 1)
|
||||||
|
schema = self.getClientSchemas().get(schemaName)
|
||||||
|
if schema is None:
|
||||||
|
return '$' + key
|
||||||
|
instance = IInstance(self.getSubclient(schemaName))
|
||||||
|
instance.template = schema
|
||||||
|
data = instance.applyTemplate()
|
||||||
|
return data.get(fieldName) or '$' + key
|
||||||
|
|
||||||
|
def getSubclient(self, name):
|
||||||
|
return self.context.client
|
||||||
|
|
||||||
|
def getClientSchemas(self):
|
||||||
|
return self.context.client.manager.getClientSchemas()
|
||||||
|
|
||||||
|
|
||||||
class MessageInstance(Instance):
|
class MessageInstance(Instance):
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue