Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 456d325

Browse files
committed
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.
1 parent 8effa01 commit 456d325

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

Lib/optparse.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,11 @@ def _init_parsing_state (self):
10251025
self.largs = None
10261026
self.values = None
10271027

1028+
def _get_prog_name(self):
1029+
if self.prog:
1030+
return self.prog
1031+
else:
1032+
return get_prog_name()
10281033

10291034
# -- Simple modifier methods ---------------------------------------
10301035

@@ -1288,12 +1293,12 @@ def error (self, msg):
12881293
should either exit or raise an exception.
12891294
"""
12901295
self.print_usage(sys.stderr)
1291-
sys.exit("%s: error: %s" % (get_prog_name(), msg))
1296+
sys.exit("%s: error: %s" % (self._get_prog_name(), msg))
12921297

12931298
def get_usage (self):
12941299
if self.usage:
12951300
return self.formatter.format_usage(
1296-
self.usage.replace("%prog", get_prog_name()))
1301+
self.usage.replace("%prog", self._get_prog_name()))
12971302
else:
12981303
return ""
12991304

@@ -1311,7 +1316,7 @@ def print_usage (self, file=None):
13111316

13121317
def get_version (self):
13131318
if self.version:
1314-
return self.version.replace("%prog", get_prog_name())
1319+
return self.version.replace("%prog", self._get_prog_name())
13151320
else:
13161321
return ""
13171322

Lib/test/test_optparse.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,22 @@ def test_version(self):
612612
self.assertStdoutEquals(["--version"], "bar 0.1\n")
613613
sys.argv[0] = oldargv
614614

615+
def test_version_with_prog_keyword(self):
616+
oldargv = sys.argv[0]
617+
sys.argv[0] = "./foo/bar"
618+
self.parser = OptionParser(usage=SUPPRESS_USAGE, version="%prog 0.1",
619+
prog="splat")
620+
self.assertStdoutEquals(["--version"], "splat 0.1\n")
621+
sys.argv[0] = oldargv
622+
623+
def test_version_with_prog_attribute(self):
624+
oldargv = sys.argv[0]
625+
sys.argv[0] = "./foo/bar"
626+
self.parser = OptionParser(usage=SUPPRESS_USAGE, version="%prog 0.1")
627+
self.parser.prog = "splat"
628+
self.assertStdoutEquals(["--version"], "splat 0.1\n")
629+
sys.argv[0] = oldargv
630+
615631
def test_no_version(self):
616632
self.parser = OptionParser(usage=SUPPRESS_USAGE)
617633
self.assertParseFail(["--version"],

0 commit comments

Comments
 (0)