Skip to content

Commit 10f23a4

Browse files
gar1tsvlandegtiangolo
authored
🐛 Ensure that options_metavar is passed through correctly (#816)
Co-authored-by: svlandeg <svlandeg@github.com> Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com> Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
1 parent f61933c commit 10f23a4

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

tests/test_others.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,3 +321,21 @@ def test_split_opt():
321321
prefix, opt = _split_opt("verbose")
322322
assert prefix == ""
323323
assert opt == "verbose"
324+
325+
326+
def test_options_metadata_typer_default():
327+
app = typer.Typer(options_metavar="[options]")
328+
329+
@app.command()
330+
def c1():
331+
pass # pragma: no cover
332+
333+
@app.command(options_metavar="[OPTS]")
334+
def c2():
335+
pass # pragma: no cover
336+
337+
result = runner.invoke(app, ["c1", "--help"])
338+
assert "Usage: root c1 [options]" in result.stdout
339+
340+
result = runner.invoke(app, ["c2", "--help"])
341+
assert "Usage: root c2 [OPTS]" in result.stdout

typer/main.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def callback(
185185
help: Optional[str] = Default(None),
186186
epilog: Optional[str] = Default(None),
187187
short_help: Optional[str] = Default(None),
188-
options_metavar: str = Default("[OPTIONS]"),
188+
options_metavar: Optional[str] = Default(None),
189189
add_help_option: bool = Default(True),
190190
hidden: bool = Default(False),
191191
deprecated: bool = Default(False),
@@ -205,7 +205,9 @@ def decorator(f: CommandFunctionType) -> CommandFunctionType:
205205
help=help,
206206
epilog=epilog,
207207
short_help=short_help,
208-
options_metavar=options_metavar,
208+
options_metavar=(
209+
options_metavar or self._info_val_str("options_metavar")
210+
),
209211
add_help_option=add_help_option,
210212
hidden=hidden,
211213
deprecated=deprecated,
@@ -224,7 +226,7 @@ def command(
224226
help: Optional[str] = None,
225227
epilog: Optional[str] = None,
226228
short_help: Optional[str] = None,
227-
options_metavar: str = "[OPTIONS]",
229+
options_metavar: Optional[str] = None,
228230
add_help_option: bool = True,
229231
no_args_is_help: bool = False,
230232
hidden: bool = False,
@@ -245,7 +247,9 @@ def decorator(f: CommandFunctionType) -> CommandFunctionType:
245247
help=help,
246248
epilog=epilog,
247249
short_help=short_help,
248-
options_metavar=options_metavar,
250+
options_metavar=(
251+
options_metavar or self._info_val_str("options_metavar")
252+
),
249253
add_help_option=add_help_option,
250254
no_args_is_help=no_args_is_help,
251255
hidden=hidden,
@@ -275,7 +279,7 @@ def add_typer(
275279
help: Optional[str] = Default(None),
276280
epilog: Optional[str] = Default(None),
277281
short_help: Optional[str] = Default(None),
278-
options_metavar: str = Default("[OPTIONS]"),
282+
options_metavar: Optional[str] = Default(None),
279283
add_help_option: bool = Default(True),
280284
hidden: bool = Default(False),
281285
deprecated: bool = Default(False),
@@ -297,7 +301,9 @@ def add_typer(
297301
help=help,
298302
epilog=epilog,
299303
short_help=short_help,
300-
options_metavar=options_metavar,
304+
options_metavar=(
305+
options_metavar or self._info_val_str("options_metavar")
306+
),
301307
add_help_option=add_help_option,
302308
hidden=hidden,
303309
deprecated=deprecated,
@@ -328,6 +334,12 @@ def __call__(self, *args: Any, **kwargs: Any) -> Any:
328334
)
329335
raise e
330336

337+
def _info_val_str(self, name: str) -> str:
338+
val = getattr(self.info, name)
339+
val_str = val.value if isinstance(val, DefaultPlaceholder) else val
340+
assert isinstance(val_str, str)
341+
return val_str
342+
331343

332344
def get_group(typer_instance: Typer) -> TyperGroup:
333345
group = get_group_from_info(

0 commit comments

Comments
 (0)