diff options
author | Jerome Martin <jxm@risingtidesystems.com> | 2011-06-07 14:27:13 +0200 |
---|---|---|
committer | Jerome Martin <jxm@risingtidesystems.com> | 2011-06-08 08:55:46 +0200 |
commit | 265343de5002ed77580bfe16eb911f2350ffd8ef (patch) | |
tree | 98b20ff895ea06c2a4f9fed58b8c06fe74d24d77 | |
parent | ee2ad046992a92e028e339cd228c672b7cfeda10 (diff) | |
download | configshell-fb-265343de5002ed77580bfe16eb911f2350ffd8ef.tar.gz |
Got rid of direct ui_type_* methods.
* Use type names instead.
-rw-r--r-- | configshell/node.py | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/configshell/node.py b/configshell/node.py index 801b2d7..437ff13 100644 --- a/configshell/node.py +++ b/configshell/node.py @@ -34,6 +34,7 @@ class ConfigNode(object): _path_current = '.' _path_previous = '..' + ui_type_method_prefix = "ui_type_" ui_command_method_prefix = "ui_command_" ui_complete_method_prefix = "ui_complete_" ui_setgroup_method_prefix = "ui_setgroup_" @@ -76,64 +77,64 @@ class ConfigNode(object): self._configuration_groups = {} self._configuration_groups['global'] = \ {'tree_round_nodes': \ - [self.ui_type_bool, + ['bool', 'Tree node display style.', True], 'tree_status_mode': \ - [self.ui_type_bool, + ['bool', 'Whether or not to display status in tree.', True], 'tree_max_depth': \ - [self.ui_type_number, + ['number', 'Maximum depth of displayed node tree.', True], 'tree_show_root': \ - [self.ui_type_bool, + ['bool', 'Whether or not to disply tree root.', True], 'color_mode': \ - [self.ui_type_bool, + ['bool', 'Console color display mode.', True], 'loglevel_console': \ - [self.ui_type_loglevel, + ['loglevel', 'Log level for messages going to the console.', True], 'loglevel_file': \ - [self.ui_type_loglevel, + ['loglevel', 'Log level for messages going to the log file.', True], 'logfile': \ - [self.ui_type_string, + ['string', 'Logfile to use.', True], 'color_default': \ - [self.ui_type_colordefault, + ['colordefault', 'Default text display color.', True], 'color_path': \ - [self.ui_type_color, + ['color', 'Color to use for path completions', True], 'color_command': \ - [self.ui_type_color, + ['color', 'Color to use for command completions.', True], 'color_parameter': \ - [self.ui_type_color, + ['color', 'Color to use for parameter completions.', True], 'color_keyword': \ - [self.ui_type_color, + ['color', 'Color to use for keyword completions.', True], 'completions_in_columns': \ - [self.ui_type_bool, + ['bool', 'If B{true}, completions are displayed in columns, ' \ + 'else in lines.', True], 'prompt_length': \ - [self.ui_type_number, + ['number', 'Maximum length of the shell prompt path, 0 means infinite.', True] } @@ -413,7 +414,7 @@ class ConfigNode(object): ''' return self.prefs[parameter] - def ui_eval_param(self, ui_value, type_helper, default): + def ui_eval_param(self, ui_value, type, default): ''' Evaluates a user-provided parameter value using a given type helper. If the parameter value is None, the default will be returned. If the @@ -422,14 +423,15 @@ class ConfigNode(object): @param ui_value: The user provided parameter value. @type ui_value: str - @param type_helper: The ui_type_XXX helper method to be used - @type type_helper: method + @param type: The ui_type to be used + @type type: str @param default: The default value to return. @type default: any @return: The evaluated parameter value. @rtype: depends on type_helper @raise ExecutionError: If evaluation fails. ''' + type_helper = self.get_type_method(type) if ui_value is None: return default else: @@ -440,6 +442,12 @@ class ConfigNode(object): else: return value + def get_type_method(self, type): + ''' + Returns the type helper method matching the type name. + ''' + return getattr(self, "%s%s" % (self.ui_type_method_prefix, type)) + # User interface commands def ui_command_set(self, group=None, **parameter): @@ -472,8 +480,9 @@ class ConfigNode(object): for parameter, param_def \ in iter(sorted( self._configuration_groups[group].iteritems())): - (type_helper, description, writable) = param_def + (type, description, writable) = param_def if writable: + type_helper = self.get_type_method(type) parameter += '=I{' + type_helper() + '}' underline2 = ''.ljust(len(parameter), '-') parameters += '%s\n%s\n%s\n\n' \ @@ -486,7 +495,8 @@ class ConfigNode(object): elif group in self._configuration_groups: for param, value in parameter.iteritems(): if param in self._configuration_groups[group]: - type_helper = self._configuration_groups[group][param][0] + type_name = self._configuration_groups[group][param][0] + type_helper = self.get_type_method(type_name) writable = self._configuration_groups[group][param][2] if writable: try: @@ -538,7 +548,8 @@ class ConfigNode(object): self._configuration_groups[group] if self._configuration_groups[group][param][2]] if current_param in group_params: - type_method = group_params[current_param][0] + type_name = group_params[current_param][0] + type_method = self.get_type_method(type_name) type_enum = type_method(enum=True) if type_enum is not None: type_enum = [item for item in type_enum @@ -591,7 +602,8 @@ class ConfigNode(object): group_getter = self.get_group_getter(group) value = group_getter(parameter) group_params = self._configuration_groups[group] - type_method = group_params[parameter][0] + type = group_params[parameter][0] + type_method = self.get_type_method(type) value = type_method(value, reverse=True) if param_def[2]: parameter = parameter + '=' + value |