summaryrefslogtreecommitdiff
path: root/oslo/config/cfg.py
diff options
context:
space:
mode:
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>2014-02-24 17:46:35 +0900
committerYAMAMOTO Takashi <yamamoto@valinux.co.jp>2014-05-07 10:08:13 +0900
commit68640a4d7552d8110a1a4626b03c234eb8931689 (patch)
treeff000bdd85a8848eef65a8019ea4151495dd44d3 /oslo/config/cfg.py
parenta4bb2e4a1d53ae696a61056e25d4a9e31889cbd7 (diff)
downloadoslo-config-68640a4d7552d8110a1a4626b03c234eb8931689.tar.gz
Fix deprecated_opts for cli options
The following simple program raises DuplicateOptError. This commit fixes it. oslo.config.cfg.DuplicateOptError: duplicate option: argument --bar-foo: conflicting option string(s): --bar-foo from oslo.config import cfg conf = cfg.ConfigOpts() oldopts = [ cfg.DeprecatedOpt(name='oldfoo', group='oldbar'), ] conf.register_cli_opt(cfg.StrOpt(name='foo', deprecated_opts=oldopts), group='bar') conf() Change-Id: I022ed0236de97db42568106bc90c696732a05ef2 Closes-Bug: #1283960
Diffstat (limited to 'oslo/config/cfg.py')
-rw-r--r--oslo/config/cfg.py27
1 files changed, 17 insertions, 10 deletions
diff --git a/oslo/config/cfg.py b/oslo/config/cfg.py
index 1659d13..7e2723a 100644
--- a/oslo/config/cfg.py
+++ b/oslo/config/cfg.py
@@ -639,8 +639,9 @@ class Opt(object):
deprecated_name = deprecated_name.replace('-', '_')
self.deprecated_opts = copy.deepcopy(deprecated_opts) or []
- self.deprecated_opts.append(DeprecatedOpt(deprecated_name,
- group=deprecated_group))
+ if deprecated_name is not None or deprecated_group is not None:
+ self.deprecated_opts.append(DeprecatedOpt(deprecated_name,
+ group=deprecated_group))
def __ne__(self, another):
return vars(self) != vars(another)
@@ -679,15 +680,18 @@ class Opt(object):
container = self._get_argparse_container(parser, group)
kwargs = self._get_argparse_kwargs(group)
prefix = self._get_argparse_prefix('', group.name if group else None)
+ deprecated_names = []
for opt in self.deprecated_opts:
deprecated_name = self._get_deprecated_cli_name(opt.name,
opt.group)
- self._add_to_argparse(parser, container, self.name, self.short,
- kwargs, prefix,
- self.positional, deprecated_name)
+ if deprecated_name is not None:
+ deprecated_names.append(deprecated_name)
+ self._add_to_argparse(parser, container, self.name, self.short,
+ kwargs, prefix,
+ self.positional, deprecated_names)
def _add_to_argparse(self, parser, container, name, short, kwargs,
- prefix='', positional=False, deprecated_name=None):
+ prefix='', positional=False, deprecated_names=None):
"""Add an option to an argparse parser or group.
:param container: an argparse._ArgumentGroup object
@@ -703,7 +707,7 @@ class Opt(object):
args = [hyphen('--') + prefix + name]
if short:
args.append(hyphen('-') + short)
- if deprecated_name:
+ for deprecated_name in deprecated_names:
args.append(hyphen('--') + deprecated_name)
parser.add_parser_argument(container, *args, **kwargs)
@@ -870,13 +874,16 @@ class BoolOpt(Opt):
container = self._get_argparse_container(parser, group)
kwargs = self._get_argparse_kwargs(group, action='store_false')
prefix = self._get_argparse_prefix('no', group.name if group else None)
+ deprecated_names = []
for opt in self.deprecated_opts:
deprecated_name = self._get_deprecated_cli_name(opt.name,
opt.group,
prefix='no')
- kwargs["help"] = "The inverse of --" + self.name
- self._add_to_argparse(parser, container, self.name, None, kwargs,
- prefix, self.positional, deprecated_name)
+ if deprecated_name is not None:
+ deprecated_names.append(deprecated_name)
+ kwargs["help"] = "The inverse of --" + self.name
+ self._add_to_argparse(parser, container, self.name, None, kwargs,
+ prefix, self.positional, deprecated_names)
def _get_argparse_kwargs(self, group, action='store_true', **kwargs):
"""Extends the base argparse keyword dict for boolean options."""