Commit b27c71c5 authored by Fred Drake's avatar Fred Drake

Fix support for the "prog" keyword to the OptionParser constructor, as well

as directly setting the .prog attribute (which should be supported based on
the class docstring).
Closes SF bug #850964.
parent 44c8d9d9
......@@ -1025,6 +1025,11 @@ class OptionParser (OptionContainer):
self.largs = None
self.values = None
def _get_prog_name(self):
if self.prog:
return self.prog
else:
return get_prog_name()
# -- Simple modifier methods ---------------------------------------
......@@ -1288,12 +1293,12 @@ class OptionParser (OptionContainer):
should either exit or raise an exception.
"""
self.print_usage(sys.stderr)
sys.exit("%s: error: %s" % (get_prog_name(), msg))
sys.exit("%s: error: %s" % (self._get_prog_name(), msg))
def get_usage (self):
if self.usage:
return self.formatter.format_usage(
self.usage.replace("%prog", get_prog_name()))
self.usage.replace("%prog", self._get_prog_name()))
else:
return ""
......@@ -1311,7 +1316,7 @@ class OptionParser (OptionContainer):
def get_version (self):
if self.version:
return self.version.replace("%prog", get_prog_name())
return self.version.replace("%prog", self._get_prog_name())
else:
return ""
......
......@@ -612,6 +612,22 @@ class TestVersion(BaseTest):
self.assertStdoutEquals(["--version"], "bar 0.1\n")
sys.argv[0] = oldargv
def test_version_with_prog_keyword(self):
oldargv = sys.argv[0]
sys.argv[0] = "./foo/bar"
self.parser = OptionParser(usage=SUPPRESS_USAGE, version="%prog 0.1",
prog="splat")
self.assertStdoutEquals(["--version"], "splat 0.1\n")
sys.argv[0] = oldargv
def test_version_with_prog_attribute(self):
oldargv = sys.argv[0]
sys.argv[0] = "./foo/bar"
self.parser = OptionParser(usage=SUPPRESS_USAGE, version="%prog 0.1")
self.parser.prog = "splat"
self.assertStdoutEquals(["--version"], "splat 0.1\n")
sys.argv[0] = oldargv
def test_no_version(self):
self.parser = OptionParser(usage=SUPPRESS_USAGE)
self.assertParseFail(["--version"],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment