This is an automated email from the ASF dual-hosted git repository. eladkal pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push: new 77ae1defd9 Feature: Allow description to be passed in when using variables CLI (#34791) 77ae1defd9 is described below commit 77ae1defd9282f7dd71a9a61cf7627162a25feb6 Author: Zhenye (Nathan) Na <32248549+zhenye...@users.noreply.github.com> AuthorDate: Sun Oct 29 11:42:34 2023 -0700 Feature: Allow description to be passed in when using variables CLI (#34791) * Feature: Allow description to be passed in when uring variables CLI * Feature: Allow description to be passed in when uring variables CLI * fix CLI unit tests * Remove short option for description argument and update unit tests * Feature: Allow description to be passed in when uring variables CLI * Feature: Allow description to be passed in when uring variables CLI * fix CLI unit tests * Remove short option for description argument and update unit tests * Feature: Allow description to be passed in when uring variables CLI * Feature: Allow description to be passed in when uring variables CLI * fix CLI unit tests * Remove short option for description argument and update unit tests * Add assertion to check variables' description as well * Update tests/cli/commands/test_variable_command.py Co-authored-by: Tzu-ping Chung <uranu...@gmail.com> --------- Co-authored-by: Tzu-ping Chung <uranu...@gmail.com> Co-authored-by: Elad Kalif <45845474+elad...@users.noreply.github.com> --- airflow/cli/cli_config.py | 8 +++++++- airflow/cli/commands/variable_command.py | 4 ++-- tests/cli/commands/test_variable_command.py | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/airflow/cli/cli_config.py b/airflow/cli/cli_config.py index f828a63ee1..43b2590324 100644 --- a/airflow/cli/cli_config.py +++ b/airflow/cli/cli_config.py @@ -543,6 +543,12 @@ ARG_VAR_VALUE = Arg(("value",), metavar="VALUE", help="Variable value") ARG_DEFAULT = Arg( ("-d", "--default"), metavar="VAL", default=None, help="Default value returned if variable does not exist" ) +ARG_VAR_DESCRIPTION = Arg( + ("--description",), + default=None, + required=False, + help="Variable description, optional when setting a variable", +) ARG_DESERIALIZE_JSON = Arg(("-j", "--json"), help="Deserialize JSON variable", action="store_true") ARG_SERIALIZE_JSON = Arg(("-j", "--json"), help="Serialize JSON variable", action="store_true") ARG_VAR_IMPORT = Arg(("file",), help="Import variables from JSON file") @@ -1445,7 +1451,7 @@ VARIABLES_COMMANDS = ( name="set", help="Set variable", func=lazy_load_command("airflow.cli.commands.variable_command.variables_set"), - args=(ARG_VAR, ARG_VAR_VALUE, ARG_SERIALIZE_JSON, ARG_VERBOSE), + args=(ARG_VAR, ARG_VAR_VALUE, ARG_VAR_DESCRIPTION, ARG_SERIALIZE_JSON, ARG_VERBOSE), ), ActionCommand( name="delete", diff --git a/airflow/cli/commands/variable_command.py b/airflow/cli/commands/variable_command.py index 2a624bd738..3dd920eb0c 100644 --- a/airflow/cli/commands/variable_command.py +++ b/airflow/cli/commands/variable_command.py @@ -60,8 +60,8 @@ def variables_get(args): @cli_utils.action_cli @providers_configuration_loaded def variables_set(args): - """Create new variable with a given name and value.""" - Variable.set(args.key, args.value, serialize_json=args.json) + """Create new variable with a given name, value and description.""" + Variable.set(args.key, args.value, args.description, serialize_json=args.json) print(f"Variable {args.key} created") diff --git a/tests/cli/commands/test_variable_command.py b/tests/cli/commands/test_variable_command.py index c5d77be8e6..7e0086ad95 100644 --- a/tests/cli/commands/test_variable_command.py +++ b/tests/cli/commands/test_variable_command.py @@ -22,11 +22,13 @@ from contextlib import redirect_stdout from io import StringIO import pytest +from sqlalchemy import select from airflow import models from airflow.cli import cli_parser from airflow.cli.commands import variable_command from airflow.models import Variable +from airflow.utils.session import create_session from tests.test_utils.db import clear_db_variables @@ -49,6 +51,22 @@ class TestCliVariables: with pytest.raises(KeyError): Variable.get("foo1") + def test_variables_set_with_description(self): + """Test variable_set command with optional description argument""" + expected_var_desc = "foo_bar_description" + var_key = "foo" + variable_command.variables_set( + self.parser.parse_args(["variables", "set", var_key, "bar", "--description", expected_var_desc]) + ) + + assert Variable.get(var_key) == "bar" + with create_session() as session: + actual_var_desc = session.scalar(select(Variable.description).where(Variable.key == var_key)) + assert actual_var_desc == expected_var_desc + + with pytest.raises(KeyError): + Variable.get("foo1") + def test_variables_get(self): Variable.set("foo", {"foo": "bar"}, serialize_json=True)