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.
This commit is contained in:
Fred Drake 2004-04-01 07:40:35 +00:00
parent 8effa01931
commit 456d3258d6
2 changed files with 24 additions and 3 deletions

View file

@ -1025,6 +1025,11 @@ class OptionParser (OptionContainer):
self.largs = None self.largs = None
self.values = None self.values = None
def _get_prog_name(self):
if self.prog:
return self.prog
else:
return get_prog_name()
# -- Simple modifier methods --------------------------------------- # -- Simple modifier methods ---------------------------------------
@ -1288,12 +1293,12 @@ class OptionParser (OptionContainer):
should either exit or raise an exception. should either exit or raise an exception.
""" """
self.print_usage(sys.stderr) 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): def get_usage (self):
if self.usage: if self.usage:
return self.formatter.format_usage( return self.formatter.format_usage(
self.usage.replace("%prog", get_prog_name())) self.usage.replace("%prog", self._get_prog_name()))
else: else:
return "" return ""
@ -1311,7 +1316,7 @@ class OptionParser (OptionContainer):
def get_version (self): def get_version (self):
if self.version: if self.version:
return self.version.replace("%prog", get_prog_name()) return self.version.replace("%prog", self._get_prog_name())
else: else:
return "" return ""

View file

@ -612,6 +612,22 @@ class TestVersion(BaseTest):
self.assertStdoutEquals(["--version"], "bar 0.1\n") self.assertStdoutEquals(["--version"], "bar 0.1\n")
sys.argv[0] = oldargv 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): def test_no_version(self):
self.parser = OptionParser(usage=SUPPRESS_USAGE) self.parser = OptionParser(usage=SUPPRESS_USAGE)
self.assertParseFail(["--version"], self.assertParseFail(["--version"],