From 6fedc7a28b21cab6be173ab8ef82113697ab170b Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Fri, 9 Aug 2013 11:19:47 -0400 Subject: Options: fix parsing of ComponentActions and other finalizable actions --- src/lib/Bcfg2/Options/Actions.py | 2 +- src/lib/Bcfg2/Options/Options.py | 7 +++---- src/lib/Bcfg2/Options/Parser.py | 8 ++++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/lib/Bcfg2/Options/Actions.py b/src/lib/Bcfg2/Options/Actions.py index cb83f3ae7..7a30d9623 100644 --- a/src/lib/Bcfg2/Options/Actions.py +++ b/src/lib/Bcfg2/Options/Actions.py @@ -145,7 +145,7 @@ class ComponentAction(argparse.Action): else: result = self._load_component(values) self._final = True - setattr(namespace, self.dest, values) + setattr(namespace, self.dest, result) class ConfigFileAction(argparse.Action): diff --git a/src/lib/Bcfg2/Options/Options.py b/src/lib/Bcfg2/Options/Options.py index 18e5cc75d..ca0261907 100644 --- a/src/lib/Bcfg2/Options/Options.py +++ b/src/lib/Bcfg2/Options/Options.py @@ -148,7 +148,7 @@ class Option(object): :class:`Bcfg2.Options.OptionGroup` """ return [self] - def finalize(self): + def finalize(self, namespace): """ Finalize the default value for this option. This is used with actions (such as :class:`Bcfg2.Options.ComponentAction`) that allow you to specify a default in a different format than @@ -157,9 +157,8 @@ class Option(object): not given on the command line or in the config file) to store the appropriate default value in the appropriate format.""" for parser, action in self.actions.items(): - if parser is not None: - if hasattr(action, "finalize"): - action.finalize(parser, parser.namespace) + if hasattr(action, "finalize"): + action.finalize(parser, namespace) def from_config(self, cfp): """ Get the value of this option from the given diff --git a/src/lib/Bcfg2/Options/Parser.py b/src/lib/Bcfg2/Options/Parser.py index 6414cf98e..b956ca089 100644 --- a/src/lib/Bcfg2/Options/Parser.py +++ b/src/lib/Bcfg2/Options/Parser.py @@ -138,26 +138,26 @@ class Parser(argparse.ArgumentParser): def _finalize(self): for opt in self.option_list[:]: - opt.finalize() + opt.finalize(self.namespace) def _reset_namespace(self): self.parsed = False for attr in dir(self.namespace): if (not attr.startswith("_") and attr not in ['uri', 'version', 'name'] and - attr not in self.config_files): + attr not in self._config_files): delattr(self.namespace, attr) def add_config_file(self, dest, cfile): """ Add a config file, which triggers a full reparse of all options. """ - if dest not in self.config_files: + if dest not in self._config_files: self._reset_namespace() self._cfp.read([cfile]) self._defaults_set = [] self._set_defaults() self._parse_config_options() - self.config_files.append(dest) + self._config_files.append(dest) def reparse(self, argv=None): """ Reparse options after they have already been parsed. -- cgit v1.2.3-1-g7c22