Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 21 additions & 22 deletions airflow-core/src/airflow/utils/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -462,28 +462,27 @@ def suppress_logs_and_warning(f: T) -> T:
def _wrapper(*args, **kwargs):
_check_cli_args(args)
if args[0].verbose:
f(*args, **kwargs)
else:
from airflow._shared.logging.structlog import respect_stdlib_disable

with warnings.catch_warnings():
warnings.simplefilter("ignore")
logging.disable(logging.CRITICAL)

def drop(*_, **__):
from structlog import DropEvent

raise DropEvent()

old_fn = respect_stdlib_disable.__code__
respect_stdlib_disable.__code__ = drop.__code__
try:
f(*args, **kwargs)
finally:
# logging output again depends on the effective
# levels of individual loggers
logging.disable(logging.NOTSET)
respect_stdlib_disable.__code__ = old_fn
return f(*args, **kwargs)
from airflow._shared.logging.structlog import respect_stdlib_disable

with warnings.catch_warnings():
warnings.simplefilter("ignore")
logging.disable(logging.CRITICAL)

def drop(*_, **__):
from structlog import DropEvent

raise DropEvent()

old_fn = respect_stdlib_disable.__code__
respect_stdlib_disable.__code__ = drop.__code__
try:
return f(*args, **kwargs)
finally:
# logging output again depends on the effective
# levels of individual loggers
logging.disable(logging.NOTSET)
respect_stdlib_disable.__code__ = old_fn

return cast("T", _wrapper)

Expand Down
10 changes: 10 additions & 0 deletions airflow-core/tests/unit/utils/test_cli_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,3 +376,13 @@ def test_should_enable_hot_reload(dev_flag, env_var, expected):

with mock.patch.dict(os.environ, env, clear=True):
assert cli.should_enable_hot_reload(args) is expected


@pytest.mark.non_db_test_override
@pytest.mark.parametrize("verbose", [True, False])
def test_suppress_logs_and_warning_returns_wrapped_value(verbose):
@cli.suppress_logs_and_warning
def command(args):
return "result"

assert command(Namespace(verbose=verbose)) == "result"
Loading