From 41cfeba3ec2f4287dc1294a2c421e64f7b1224f8 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Thu, 17 Jan 2013 10:00:20 -0500 Subject: Options: split loading a new OptionParser from fetching an existing parser --- src/lib/Bcfg2/Options.py | 31 ++++++++++++++++++------------- src/sbin/bcfg2 | 4 ++-- src/sbin/bcfg2-admin | 2 +- src/sbin/bcfg2-crypt | 2 +- src/sbin/bcfg2-info | 2 +- src/sbin/bcfg2-lint | 2 +- src/sbin/bcfg2-report-collector | 2 +- src/sbin/bcfg2-server | 2 +- src/sbin/bcfg2-test | 2 +- 9 files changed, 27 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/lib/Bcfg2/Options.py b/src/lib/Bcfg2/Options.py index 780619f3b..4818c67f9 100644 --- a/src/lib/Bcfg2/Options.py +++ b/src/lib/Bcfg2/Options.py @@ -1256,16 +1256,12 @@ class OptionParser(OptionSet): _PARSER = None -def get_option_parser(args=None, argv=None, quiet=False): - """ Get an OptionParser object. If :attr:`_PARSER` already - exists, that will be used; if not, a new OptionParser object will - be created. +def load_option_parser(args, argv=None, quiet=False): + """ Load an :class:`Bcfg2.Options.OptionParser` object, caching it + in :attr:`_PARSER` for later retrieval via + :func:`get_option_parser`. - If ``args`` or ``argv`` are given, then a new OptionParser object - will be instantiated regardless of whether one already exists. - - :param args: The argument set to parse. This is required on the - first invocation of :func:`get_option_parser`. + :param args: The argument set to parse. :type args: dict of :class:`Bcfg2.Options.Option` objects :param argv: The command-line argument list. If this is not provided, :attr:`sys.argv` will be used. @@ -1275,8 +1271,17 @@ def get_option_parser(args=None, argv=None, quiet=False): :returns: :class:`Bcfg2.Options.OptionParser` """ global _PARSER # pylint: disable=W0603 - if _PARSER is None or args is not None or argv is not None: - if args is None: - args = CLI_COMMON_OPTIONS - _PARSER = OptionParser(args, argv=argv, quiet=quiet) + _PARSER = OptionParser(args, argv=argv, quiet=quiet) + return _PARSER + + +def get_option_parser(): + """ Get an already-created :class:`Bcfg2.Options.OptionParser` object. If + :attr:`_PARSER` has not been populated, then a new OptionParser + will be created with basic arguments. + + :returns: :class:`Bcfg2.Options.OptionParser` + """ + if _PARSER is None: + return load_option_parser(CLI_COMMON_OPTIONS) return _PARSER diff --git a/src/sbin/bcfg2 b/src/sbin/bcfg2 index e9beb47cd..62f749b80 100755 --- a/src/sbin/bcfg2 +++ b/src/sbin/bcfg2 @@ -4,7 +4,7 @@ import sys import signal from Bcfg2.Client.Client import Client -from Bcfg2.Options import get_option_parser, CLIENT_COMMON_OPTIONS +from Bcfg2.Options import load_option_parser, CLIENT_COMMON_OPTIONS def cb_sigint_handler(signum, frame): @@ -13,7 +13,7 @@ def cb_sigint_handler(signum, frame): def main(): - setup = get_option_parser(CLIENT_COMMON_OPTIONS) + setup = load_option_parser(CLIENT_COMMON_OPTIONS) setup.parse(sys.argv[1:]) if setup['args']: diff --git a/src/sbin/bcfg2-admin b/src/sbin/bcfg2-admin index 8f6643ee0..3c63cd3f5 100755 --- a/src/sbin/bcfg2-admin +++ b/src/sbin/bcfg2-admin @@ -41,7 +41,7 @@ def main(): optinfo = dict() optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS) optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS) - setup = Bcfg2.Options.get_option_parser(optinfo) + setup = Bcfg2.Options.load_option_parser(optinfo) # override default help message to include description of all modes setup.hm = "Usage:\n\n%s\n%s" % (setup.buildHelpMessage(), create_description()) diff --git a/src/sbin/bcfg2-crypt b/src/sbin/bcfg2-crypt index 6a13b9bc5..0bee7e9b9 100755 --- a/src/sbin/bcfg2-crypt +++ b/src/sbin/bcfg2-crypt @@ -371,7 +371,7 @@ def main(): # pylint: disable=R0912,R0915 optinfo = dict(interactive=Bcfg2.Options.INTERACTIVE) optinfo.update(Bcfg2.Options.CRYPT_OPTIONS) optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS) - setup = Bcfg2.Options.get_option_parser(optinfo) + setup = Bcfg2.Options.load_option_parser(optinfo) setup.hm = " bcfg2-crypt [options] \nOptions:\n%s" % \ setup.buildHelpMessage() setup.parse() diff --git a/src/sbin/bcfg2-info b/src/sbin/bcfg2-info index c697e9fca..60b099284 100755 --- a/src/sbin/bcfg2-info +++ b/src/sbin/bcfg2-info @@ -751,7 +751,7 @@ def main(): interpreter=Bcfg2.Options.INTERPRETER) optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS) optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS) - setup = Bcfg2.Options.get_option_parser(optinfo) + setup = Bcfg2.Options.load_option_parser(optinfo) setup.hm = "\n".join([" bcfg2-info [options] [command ]", "Options:", setup.buildHelpMessage(), diff --git a/src/sbin/bcfg2-lint b/src/sbin/bcfg2-lint index f12fcc6c4..557a03405 100755 --- a/src/sbin/bcfg2-lint +++ b/src/sbin/bcfg2-lint @@ -146,7 +146,7 @@ def main(): lint_plugins=Bcfg2.Options.LINT_PLUGINS) optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS) optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS) - setup = Bcfg2.Options.get_option_parser(optinfo) + setup = Bcfg2.Options.load_option_parser(optinfo) setup.parse(sys.argv[1:]) log_args = dict(to_syslog=setup['syslog'], to_console=logging.WARNING) diff --git a/src/sbin/bcfg2-report-collector b/src/sbin/bcfg2-report-collector index d925023d1..403775251 100755 --- a/src/sbin/bcfg2-report-collector +++ b/src/sbin/bcfg2-report-collector @@ -20,7 +20,7 @@ def main(): ) optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS) optinfo.update(Bcfg2.Options.REPORTING_COMMON_OPTIONS) - setup = Bcfg2.Options.get_option_parser(optinfo) + setup = Bcfg2.Options.load_option_parser(optinfo) setup.parse() # run collector diff --git a/src/sbin/bcfg2-server b/src/sbin/bcfg2-server index 7e7dede30..8e96d65f2 100755 --- a/src/sbin/bcfg2-server +++ b/src/sbin/bcfg2-server @@ -16,7 +16,7 @@ def main(): optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS) optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS) optinfo.update(Bcfg2.Options.DAEMON_COMMON_OPTIONS) - setup = Bcfg2.Options.get_option_parser(args=optinfo) + setup = Bcfg2.Options.load_option_parser(optinfo) setup.parse(sys.argv[1:]) # check whether the specified bcfg2.conf exists if not os.path.exists(setup['configfile']): diff --git a/src/sbin/bcfg2-test b/src/sbin/bcfg2-test index a708a233a..28023a0f2 100755 --- a/src/sbin/bcfg2-test +++ b/src/sbin/bcfg2-test @@ -69,7 +69,7 @@ def main(): validate=Bcfg2.Options.CFG_VALIDATION) optinfo.update(Bcfg2.Options.CLI_COMMON_OPTIONS) optinfo.update(Bcfg2.Options.SERVER_COMMON_OPTIONS) - setup = Bcfg2.Options.get_option_parser(args=optinfo) + setup = Bcfg2.Options.load_option_parser(optinfo) setup.hm = \ "bcfg2-test [options] [client] [client] [...]\nOptions:\n %s" % \ setup.buildHelpMessage() -- cgit v1.2.3-1-g7c22