diff --git a/lib/galaxy/model/__init__.py b/lib/galaxy/model/__init__.py index 9f9b9924612..984dfb883b1 100644 --- a/lib/galaxy/model/__init__.py +++ b/lib/galaxy/model/__init__.py @@ -5,6 +5,7 @@ Naming: try to use class names that have a distinct plural form so that the relationship cardinalities are obvious (e.g. prefer Dataset to Data) """ import errno +import json import logging import numbers import operator @@ -211,6 +212,17 @@ class User(object, Dictifiable): self.credentials = [] # ? self.roles = [] + @property + def extra_preferences(self): + data = {} + extra_user_preferences = self.preferences.get('extra_user_preferences') + if extra_user_preferences: + try: + data = json.loads(extra_user_preferences) + except Exception: + pass + return data + def set_password_cleartext(self, cleartext): """ Set user password to the digest of `cleartext`. diff --git a/lib/galaxy/webapps/galaxy/api/users.py b/lib/galaxy/webapps/galaxy/api/users.py index faced8ccf5b..c3adcc95b26 100644 --- a/lib/galaxy/webapps/galaxy/api/users.py +++ b/lib/galaxy/webapps/galaxy/api/users.py @@ -296,21 +296,21 @@ class UserAPIController(BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cre """ if not preferences: return [] - data = [] - # Get data if present - data_key = "extra_user_preferences" - if data_key in user.preferences: - data = json.loads(user.preferences[data_key]) extra_pref_inputs = list() # Build sections for different categories of inputs for item, value in preferences.items(): if value is not None: for input in value["inputs"]: - input['help'] = 'Required' if input['required'] else '' + help = input.get('help', '') + required = 'Required' if util.string_as_bool(input.get('required')) else '' + if help: + input['help'] = "%s %s" % (help, required) + else: + input['help'] = required field = item + '|' + input['name'] - for data_item in data: + for data_item in user.extra_preferences: if field in data_item: - input['value'] = data[data_item] + input['value'] = user.extra_preferences[data_item] extra_pref_inputs.append({'type': 'section', 'title': value['description'], 'name': item, 'expanded': True, 'inputs': value['inputs']}) return extra_pref_inputs @@ -455,9 +455,9 @@ class UserAPIController(BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cre # Update values for extra user preference items extra_user_pref_data = dict() - get_extra_pref_keys = self._get_extra_user_preferences(trans) - if get_extra_pref_keys is not None: - for key in get_extra_pref_keys: + extra_pref_keys = self._get_extra_user_preferences(trans) + if extra_pref_keys is not None: + for key in extra_pref_keys: key_prefix = key + '|' for item in payload: if item.startswith(key_prefix): @@ -465,7 +465,7 @@ class UserAPIController(BaseAPIController, UsesTagsMixin, CreatesUsersMixin, Cre if payload[item] == "": # Raise an exception when a required field is empty while saving the form keys = item.split("|") - section = get_extra_pref_keys[keys[0]] + section = extra_pref_keys[keys[0]] for input in section['inputs']: if input['name'] == keys[1] and input['required']: raise MessageException("Please fill the required field")