From e700d4cf7e342bbb1a4d4cff4a3d835b9dbddd19 Mon Sep 17 00:00:00 2001 From: Thomas Junk Date: Fri, 30 Jun 2017 16:39:23 +0200 Subject: [PATCH] suggested refactoring --- formbar/fields.py | 32 ++++++++++++++++++++++---------- formbar/form.py | 4 ++-- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/formbar/fields.py b/formbar/fields.py index 54490f3..05e2472 100644 --- a/formbar/fields.py +++ b/formbar/fields.py @@ -731,18 +731,30 @@ class SelectionField(CollectionField): def get_options(self): options = [] user_defined_options = self._config.options - if isinstance(user_defined_options, list) and \ - len(user_defined_options) > 0: - for option in self.filter_options(user_defined_options): - options.append((option[0], option[1], option[2])) - elif isinstance(user_defined_options, str): - for option in self._form.merged_data.get(user_defined_options): - options.append((option[0], option[1], True)) - elif self._form._item and hasattr(self._form._item, "get_options"): - for option in self._form._item.get_options(self.name): - options.append((option[0], option[1], True)) + is_option_list = isinstance(user_defined_options, list) and len(user_defined_options) + is_string_options = isinstance(user_defined_options, str) + is_provided_by_formdataprovider = self._form._item and hasattr(self._form._item, "get_options") + + if is_option_list: + self.add_options_from_list(options, user_defined_options) + elif is_string_options: + self.add_string_options(options, user_defined_options) + elif is_provided_by_formdataprovider: + self.add_formdata_options(options) return self.sort_options(options) + def add_formdata_options(self, options): + for option in self._form._item.get_options(self.name): + options.append((option[0], option[1], True)) + + def add_string_options(self, options, user_defined_options): + for option in self._form.merged_data.get(user_defined_options): + options.append((option[0], option[1], True)) + + def add_options_from_list(self, options, user_defined_options): + for option in self.filter_options(user_defined_options): + options.append((option[0], option[1], option[2])) + def _from_python(self, value): value = super(CollectionField, self)._from_python(value) # Special handling for multiple values (multiselect in diff --git a/formbar/form.py b/formbar/form.py index 0dbf6d6..070861d 100644 --- a/formbar/form.py +++ b/formbar/form.py @@ -75,12 +75,12 @@ class ValidationException(Exception): class FormDataprovider(object): - """Dummy class which can be used to provided dynamic data to the + """Dummy class which can be used to provide dynamic data to the form. It can be provided as item on the form init to provide dynamically loaded options and values. As said the dataprovider can be user to provide `options` and `values`. - Both are provided by defining propertys. + Both are provided by defining properties. 1. Value The function should simply return the pythonic value of the field: