Skip to content
This repository was archived by the owner on Feb 20, 2026. It is now read-only.

Commit bacd5a2

Browse files
authored
Merge pull request #74 from dmerejkowsky/fatal-exit-code
Fatal exit code
2 parents f665b63 + 581ea49 commit bacd5a2

4 files changed

Lines changed: 33 additions & 4 deletions

File tree

cli_ui/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,15 @@ def message(
252252
write_and_flush(fileobj, to_write)
253253

254254

255-
def fatal(*tokens: Token, **kwargs: Any) -> None:
256-
"""Print an error message and call ``sys.exit``"""
255+
def fatal(*tokens: Token, exit_code: int = 1, **kwargs: Any) -> None:
256+
"""Print an error message and exit the program
257+
258+
:param tokens: list of `ui` constants or strings, like
259+
``(cli_ui.red, "this is a fatal error")``
260+
:param exit_code: value of the exit code (default: 1)
261+
"""
257262
error(*tokens, **kwargs)
258-
sys.exit(1)
263+
sys.exit(exit_code)
259264

260265

261266
def error(*tokens: Token, **kwargs: Any) -> None:

cli_ui/tests/test_cli_ui.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,20 @@ def test_quiet(message_recorder: MessageRecorder) -> None:
331331
assert not message_recorder.find("info")
332332

333333

334+
def test_fatal() -> None:
335+
cli_ui.setup(quiet=True)
336+
with pytest.raises(SystemExit) as e:
337+
cli_ui.fatal("default exit code")
338+
assert e.value.code == 1
339+
340+
341+
def test_fatal_with_custom_code() -> None:
342+
cli_ui.setup(quiet=True)
343+
with pytest.raises(SystemExit) as e:
344+
cli_ui.fatal("custom exit code", exit_code=3)
345+
assert e.value.code == 3
346+
347+
334348
def test_color_always(dumb_tty: DumbTTY) -> None:
335349
cli_ui.setup(color="always")
336350
cli_ui.info(cli_ui.red, "this is red", fileobj=dumb_tty)

docs/changelog.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
Changelog
22
----------
33

4+
unreleased
5+
++++++++++
6+
7+
* `fatal` can now be called with a custom exit code, different than
8+
the default 1.
9+
410
v0.14.1 (2021-06-06)
511
++++++++++++++++++++
612

docs/index.rst

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,11 @@ Functions below use ``sys.stderr`` by default:
194194

195195
>>> cli_ui.fatal("Message")
196196
Error: message
197-
exit()
197+
exit(1)
198+
199+
>>> cli_ui.fatal("Another message", exit_code=2)
200+
Error: Another message
201+
exit(2)
198202

199203

200204
Progress messages

0 commit comments

Comments
 (0)