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
	
	 helmutm
						helmutm