return result
def _expand_help(self, action):
- help_string = self._get_help_string(action)
+ help_string = str(self._get_help_string(action))
if '%' not in help_string:
return self._apply_text_markup(help_string)
params = dict(vars(action), prog=self._prog)
self.assertIn("set the `foo` value", help_text)
self.assertNotIn("\x1b[", help_text)
+ def test_argument_help_interpolation_accepts_string_like_proxy(self):
+ class LazyStr:
+ def __init__(self, message):
+ self._message = message
+
+ def __str__(self):
+ return self._message
+
+ def __getattr__(self, name):
+ return getattr(str(self), name)
+
+ def __contains__(self, item):
+ return item in self._message
+
+ def __mod__(self, other):
+ return self._message % other
+
+ parser = argparse.ArgumentParser(prog="PROG", color=True)
+ parser.add_argument(
+ "--foo",
+ default="bar",
+ help=LazyStr("foo (default: %(default)s)"),
+ )
+ parser.add_argument(
+ "--baz",
+ help=LazyStr("baz plain text"),
+ )
+
+ interp = self.theme.interpolated_value
+ reset = self.theme.reset
+
+ help_text = parser.format_help()
+ self.assertIn(f"foo (default: {interp}bar{reset})", help_text)
+ self.assertIn("baz plain text", help_text)
+
def test_help_with_format_specifiers(self):
# GH-142950: format specifiers like %x should work with color=True
parser = argparse.ArgumentParser(prog='PROG', color=True)