Coverage for src / rhiza_tools / console.py: 95%
19 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-23 01:10 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-23 01:10 +0000
1"""Console output utilities for rhiza-tools CLI.
3Provides clean, user-facing output functions using typer.echo/secho,
4which is the standard approach for Click/Typer-based CLIs. Loguru is
5reserved for debug/diagnostic output and is only enabled when the user
6passes --verbose.
8Usage in commands::
10 from rhiza_tools.console import console
12 console.info("Current version: 1.0.0")
13 console.success("Version bumped successfully!")
14 console.warning("Branch is ahead of remote")
15 console.error("pyproject.toml not found")
16"""
18import sys
20import typer
21from loguru import logger
23_verbose: bool = False
26def configure(*, verbose: bool = False) -> None:
27 """Configure console output and logging verbosity.
29 Removes loguru's default stderr handler so that loguru output is
30 suppressed by default. When *verbose* is ``True``, a handler is
31 re-added at DEBUG level.
33 This should be called once from the CLI callback before any command
34 runs.
36 Args:
37 verbose: If True, enable loguru debug output on stderr.
38 """
39 global _verbose
40 _verbose = verbose
42 # Remove all default loguru handlers (the default one logs to stderr at DEBUG)
43 logger.remove()
45 if verbose:
46 logger.add(sys.stderr, level="DEBUG")
49def is_verbose() -> bool:
50 """Return whether verbose mode is currently enabled."""
51 return _verbose
54def info(message: str) -> None:
55 """Print an informational message to stdout.
57 Args:
58 message: The message to display.
59 """
60 typer.echo(message)
63def success(message: str) -> None:
64 """Print a success message to stdout.
66 Args:
67 message: The message to display.
68 """
69 typer.echo(message)
72def warning(message: str) -> None:
73 """Print a warning message to stderr.
75 Args:
76 message: The message to display.
77 """
78 typer.secho(message, fg=typer.colors.YELLOW, err=True)
81def error(message: str) -> None:
82 """Print an error message to stderr.
84 Args:
85 message: The message to display.
86 """
87 typer.secho(message, fg=typer.colors.RED, err=True)