From 8c3118e333c1f2ac7c2ee9a8c50eeb76e876bd5e Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 14 Nov 2011 15:08:33 +0100 Subject: [PATCH] provide field instance with context and request information, e.g. for use in persistent vocabularies --- composer/schema/field.py | 8 +++++--- composer/schema/instance.py | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/composer/schema/field.py b/composer/schema/field.py index 13223bc..75002be 100644 --- a/composer/schema/field.py +++ b/composer/schema/field.py @@ -157,12 +157,14 @@ class Field(Component): def getFieldTypeInfo(self): return self.fieldTypeInfo or fieldTypes.getTerm(self.fieldType) - def getFieldInstance(self, clientInstance=None): + def getFieldInstance(self, clientInstance=None, context=None, request=None): instanceName = self.instance_name or self.getFieldTypeInfo().instanceName fi = component.queryAdapter(self, IFieldInstance, name=instanceName) if fi is None: fi = component.getAdapter(self, IFieldInstance, name='') fi.clientInstance = clientInstance + fi.clientContext = context + fi.request = request return fi def getContextProperties(self): @@ -174,7 +176,7 @@ class FieldInstance(object): implements(IFieldInstance) adapts(IField) - clientInstance = None + clientInstance = clientContext = request = None value = undefined def __init__(self, context): @@ -388,7 +390,7 @@ class CheckBoxesFieldInstance(ListFieldInstance): class DropdownFieldInstance(FieldInstance): def display(self, value): - items = self.context.getVocabularyItems() + items = self.context.getVocabularyItems(self.clientContext, self.request) for item in items: if item['token'] == value: return item['title'] diff --git a/composer/schema/instance.py b/composer/schema/instance.py index 682898f..1c5ffbf 100644 --- a/composer/schema/instance.py +++ b/composer/schema/instance.py @@ -52,7 +52,8 @@ class Instance(BaseInstance): if not f.storeData: # a dummy field, e.g. a spacer continue - fi = f.getFieldInstance(self) + fi = f.getFieldInstance(self, context=kw.get('context'), + request=kw.get('request')) name = f.name value = getattr(self.context, name) or fi.default if mode in ('view', 'preview'):