Skip to content

Commit

Permalink
fix: use already set level as default (#2330)
Browse files Browse the repository at this point in the history
  • Loading branch information
antazoey authored Oct 21, 2024
1 parent 3f2f301 commit 8456fa8
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
19 changes: 11 additions & 8 deletions src/ape/cli/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def abort(msg: str, base_error: Optional[Exception] = None) -> NoReturn:

def verbosity_option(
cli_logger: Optional[ApeLogger] = None,
default: Union[str, int, LogLevel] = DEFAULT_LOG_LEVEL,
default: Optional[Union[str, int, LogLevel]] = None,
callback: Optional[Callable] = None,
**kwargs,
) -> Callable:
Expand All @@ -80,6 +80,7 @@ def verbosity_option(
click option
"""
_logger = cli_logger or logger
default = logger.level if default is None else default
kwarguments = _create_verbosity_kwargs(
_logger=_logger, default=default, callback=callback, **kwargs
)
Expand All @@ -88,11 +89,12 @@ def verbosity_option(

def _create_verbosity_kwargs(
_logger: Optional[ApeLogger] = None,
default: Union[str, int, LogLevel] = DEFAULT_LOG_LEVEL,
default: Optional[Union[str, int, LogLevel]] = None,
callback: Optional[Callable] = None,
**kwargs,
) -> dict:
cli_logger = _logger or logger
default = logger.level if default is None else default
ape_logger = _logger or logger

def set_level(ctx, param, value):
if isinstance(value, str):
Expand All @@ -103,11 +105,11 @@ def set_level(ctx, param, value):
if callback is not None:
value = callback(ctx, param, value)

if cli_logger._did_parse_sys_argv:
if ape_logger._did_parse_sys_argv:
# Changing mid-session somehow (tests?)
cli_logger.set_level(value)
ape_logger.set_level(value)
else:
cli_logger._load_from_sys_argv(default=value)
ape_logger._load_from_sys_argv(default=value)

level_names = [lvl.name for lvl in LogLevel]
names_str = f"{', '.join(level_names[:-1])}, or {level_names[-1]}"
Expand All @@ -124,7 +126,7 @@ def set_level(ctx, param, value):


def ape_cli_context(
default_log_level: Union[str, int, LogLevel] = DEFAULT_LOG_LEVEL,
default_log_level: Optional[Union[str, int, LogLevel]] = None,
obj_type: type = ApeCliContextObject,
) -> Callable:
"""
Expand All @@ -133,7 +135,7 @@ def ape_cli_context(
such as logging or accessing managers.
Args:
default_log_level (str | int | :class:`~ape.logging.LogLevel`): The log-level
default_log_level (str | int | :class:`~ape.logging.LogLevel` | None): The log-level
value to pass to :meth:`~ape.cli.options.verbosity_option`.
obj_type (Type): The context object type. Defaults to
:class:`~ape.cli.options.ApeCliContextObject`. Sub-class
Expand All @@ -144,6 +146,7 @@ def ape_cli_context(
Returns:
click option
"""
default_log_level = logger.level if default_log_level is None else default_log_level

def decorator(f):
f = verbosity_option(logger, default=default_log_level)(f)
Expand Down
12 changes: 12 additions & 0 deletions tests/functional/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,18 @@ def cmd():
assert verbosity_parameter.default == level


def test_verbosity_option_uses_logger_level_as_default(runner):
@click.command()
@verbosity_option(default=None)
def cmd():
click.echo(f"LogLevel={logger.level}")
pass

with logger.at_level(LogLevel.DEBUG):
result = runner.invoke(cmd)
assert "LogLevel=10" in result.output


def test_account_prompt_name():
"""
It is very important for this class to have the `name` attribute,
Expand Down
2 changes: 1 addition & 1 deletion tests/functional/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def test_success(simple_runner):
# this test also ensures that we get SUCCESS logs
# without having to specify verbosity
@group_for_testing.command()
@ape_cli_context()
@ape_cli_context(default_log_level=LogLevel.INFO.value)
def cmd(cli_ctx):
cli_ctx.logger.success("this is a test")

Expand Down

0 comments on commit 8456fa8

Please sign in to comment.