Skip to content

Commit bfcaec1

Browse files
v66 Added support for specifying the program version
1 parent 785071d commit bfcaec1

File tree

5 files changed

+44
-6
lines changed

5 files changed

+44
-6
lines changed

pydantic_argparse_next/parser/classes.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ class ParserConfig(BaseModel):
8383
program_name: str | None = None
8484
description: str | None = None
8585
epilog: str | None = None
86+
version: str | None = None
8687
subcommand_required: bool = True
8788
# subcommand_destination: str = "subcommand"
8889

@@ -110,10 +111,11 @@ def parserconfig(
110111
program_name: str = None,
111112
description: str = None,
112113
epilog: str = None,
113-
subcommand_required: bool = True
114+
subcommand_required: bool = True,
115+
version: str = None
114116
):
115117
return ParserConfig(program_name=program_name, description=description, epilog=epilog,
116-
subcommand_required=subcommand_required)
118+
subcommand_required=subcommand_required, version=version)
117119

118120

119121
class PydanticArgparserError(Exception):

pydantic_argparse_next/parser/parse.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def parse(
1919
description: str = None,
2020
epilog: str = None,
2121
subcomand_required: bool = True,
22+
version: str = None,
2223
args: list[str] = None
2324
) -> T:
2425
if args is None:
@@ -33,7 +34,7 @@ def parse(
3334
args_ = args
3435

3536
parser = Parser(model=model, args=args_)
36-
if any([program_name, description, epilog]):
37+
if any([program_name, description, epilog, version]):
3738
if hasattr(model, "__parserconfig__"):
3839
if not isinstance(model.__parserconfig__, ParserConfig):
3940
model.__parserconfig__ = ParserConfig()
@@ -48,6 +49,8 @@ def parse(
4849
model.__parserconfig__.epilog = epilog
4950
if subcomand_required is False:
5051
model.__parserconfig__.subcommand_required = subcomand_required
52+
if version:
53+
model.__parserconfig__.version = version
5154

5255
args_model = parser.resolve()
5356

pydantic_argparse_next/parser/parser.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ def program_description(self) -> str | None:
106106
def program_epilog(self) -> str | None:
107107
return self._parserconfig.epilog
108108

109+
@property
110+
def program_version(self) -> str | None:
111+
return self._parserconfig.version
112+
109113
# @property
110114
# def subcommand_destionation(self) -> str:
111115
# name = self._parserconfig.subcommand_destination
@@ -198,16 +202,20 @@ def show_help(self):
198202
console = Console()
199203

200204
# Program name and description
205+
name = self.name
206+
if self.program_version and not self.is_subcommand:
207+
name += f" {self.program_version}"
208+
201209
if self.program_description:
202210
program = Panel(
203211
self.program_description,
204212
title_align="left",
205-
title=self.name,
213+
title=name,
206214
border_style="bold yellow"
207215
)
208216
else:
209217
program = Panel(
210-
self.name,
218+
name,
211219
title_align="left",
212220
title=None,
213221
border_style="bold yellow"

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
44

55
[project]
66
name = "pydantic-argparse-next"
7-
version = "1.0.3"
7+
version = "1.0.4"
88
description = "Pydantic 2 argparse."
99
readme = "README.md"
1010
requires-python = ">=3.11"

tests/help/test_help.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class Test(BaseModel):
4949
program_name="Test program name",
5050
description="Test program description",
5151
epilog="Test program epilog",
52+
version="1.0.5"
5253
)
5354

5455
a: str = pa.KwArg(..., description="test")
@@ -59,6 +60,30 @@ class Test(BaseModel):
5960
assert "Test program name" in output
6061
assert "Test program description" in output
6162
assert "Test program epilog" in output
63+
assert "1.0.5" in output
64+
65+
66+
def test_parserconfig_2(capsys):
67+
class Test(BaseModel):
68+
a: str = pa.KwArg(..., description="test")
69+
b: str = pa.KwArg(None, description="test")
70+
71+
with patch("sys.exit") as mocked_exit:
72+
result = pa.parse(
73+
Test,
74+
args=["--help"],
75+
program_name="Test program name",
76+
description="Test program description",
77+
epilog="Test program epilog",
78+
version="1.0.5"
79+
)
80+
81+
output = capsys.readouterr().out
82+
83+
assert "Test program name" in output
84+
assert "Test program description" in output
85+
assert "Test program epilog" in output
86+
assert "1.0.5" in output
6287

6388

6489
def test_help_subcomands(capsys):

0 commit comments

Comments
 (0)