From 5190ebb728aea4cadb4c66b76dd8fe34ba172984 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 24 Jul 2011 16:58:15 +0200 Subject: [PATCH] provide special dropdown field instance in order to correctly display vocabulary values; make field instance lookabe more tolerant: use default field instance if named adapter not found --- composer/schema/field.py | 17 +++++++++++++++-- composer/schema/interfaces.py | 3 ++- organize/tests.py | 1 + 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/composer/schema/field.py b/composer/schema/field.py index 531be50..56ec452 100644 --- a/composer/schema/field.py +++ b/composer/schema/field.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2010 Helmut Merz helmutm@cy55.de +# 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 @@ -142,7 +142,9 @@ class Field(Component): def getFieldInstance(self, clientInstance=None): instanceName = self.instance_name or self.getFieldTypeInfo().instanceName - fi = component.getAdapter(self, IFieldInstance, name=instanceName) + fi = component.queryAdapter(self, IFieldInstance, name=instanceName) + if fi is None: + fi = component.getAdapter(self, IFieldInstance, name='') fi.clientInstance = clientInstance return fi @@ -361,3 +363,14 @@ class CheckBoxesFieldInstance(ListFieldInstance): def ummarshal(self, value): return value + + +class DropdownFieldInstance(FieldInstance): + + def display(self, value): + items = self.context.getVocabularyItems() + for item in items: + if item['token'] == value: + return item['title'] + return value + diff --git a/composer/schema/interfaces.py b/composer/schema/interfaces.py index 2ee2ab4..6ed3551 100644 --- a/composer/schema/interfaces.py +++ b/composer/schema/interfaces.py @@ -107,7 +107,8 @@ fieldTypes = SimpleVocabulary(( FieldType('fileupload', 'fileupload', u'File upload', instanceName='fileupload'), FieldType('checkbox', 'checkbox', u'Checkbox', instanceName='boolean'), - FieldType('dropdown', 'dropdown', u'Drop-down selection'), + FieldType('dropdown', 'dropdown', u'Drop-down selection', + instanceName='dropdown'), FieldType('radiobuttons', 'radiobuttons', u'Radiobutton Group'), #FieldType('listbox', 'listbox', u'List box (multiple selection)'), FieldType('list', 'list', u'List', instanceName='list'), diff --git a/organize/tests.py b/organize/tests.py index 7a586aa..59742e6 100755 --- a/organize/tests.py +++ b/organize/tests.py @@ -30,6 +30,7 @@ def setUp(site): component.provideAdapter(field.FieldInstance) component.provideAdapter(field.NumberFieldInstance, name='number') component.provideAdapter(field.EmailFieldInstance, name='email') + #component.provideAdapter(field.DropdownFieldInstance, name='dropdown') component.provideAdapter(service.StatefulRegistration)