Lee-W commented on code in PR #69320:
URL: https://github.com/apache/airflow/pull/69320#discussion_r3558669260
##########
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:
##########
@@ -737,11 +737,63 @@ def test_apply_datamodel_defaults_other_datamodel(self):
# Should return params unchanged for other datamodels
assert result == params, "Params should be unchanged for
non-TriggerDAGRunPostBody datamodels"
+ def test_tasks_clear_args_follow_datamodel_defaults(self):
+ """Bool flags of ``tasks clear`` keep the ClearTaskInstancesBody
defaults so a bare invocation only dry-runs."""
+ command_factory = CommandFactory()
+ tasks_group = next(
+ group_command for group_command in command_factory.group_commands
if group_command.name == "tasks"
+ )
+ clear_command = next(
+ sub_command for sub_command in tasks_group.subcommands if
sub_command.name == "clear"
+ )
+ args_by_flag = {arg.flags[0]: arg for arg in clear_command.args}
+
+ assert "dag_id" in args_by_flag, "required path parameter should be
positional"
+ assert args_by_flag["--dry-run"].kwargs["action"] ==
BooleanOptionalAction
+ assert args_by_flag["--dry-run"].kwargs["default"] is True
+ assert args_by_flag["--only-failed"].kwargs["default"] is True
+ assert args_by_flag["--reset-dag-runs"].kwargs["default"] is True
+ assert args_by_flag["--only-running"].kwargs["default"] is False
+ assert args_by_flag["--run-on-latest-version"].kwargs["default"] is
None
+ assert args_by_flag["--task-ids"].kwargs["type"] is str
+ assert "--output" in args_by_flag
+
+ @pytest.mark.parametrize(
+ ("raw_task_ids", "expected_task_ids"),
+ [
+ ("task_1", ["task_1"]),
+ ("task_1,task_2", ["task_1", "task_2"]),
+ (" task_1 , task_2 ,", ["task_1", "task_2"]),
+ ('["task_1", ["mapped_task", 0]]', ["task_1", ["mapped_task", 0]]),
+ (None, None),
+ ],
+ )
+ def test_apply_datamodel_defaults_clear_task_instances_task_ids(self,
raw_task_ids, expected_task_ids):
+ """Test _apply_datamodel_defaults parses --task-ids strings for
ClearTaskInstancesBody."""
+ from airflowctl.api.datamodels.generated import ClearTaskInstancesBody
Review Comment:
let's move it to the top
##########
airflow-ctl/tests/airflow_ctl/ctl/test_cli_config.py:
##########
@@ -737,11 +737,63 @@ def test_apply_datamodel_defaults_other_datamodel(self):
# Should return params unchanged for other datamodels
assert result == params, "Params should be unchanged for
non-TriggerDAGRunPostBody datamodels"
+ def test_tasks_clear_args_follow_datamodel_defaults(self):
+ """Bool flags of ``tasks clear`` keep the ClearTaskInstancesBody
defaults so a bare invocation only dry-runs."""
+ command_factory = CommandFactory()
+ tasks_group = next(
+ group_command for group_command in command_factory.group_commands
if group_command.name == "tasks"
+ )
+ clear_command = next(
+ sub_command for sub_command in tasks_group.subcommands if
sub_command.name == "clear"
+ )
+ args_by_flag = {arg.flags[0]: arg for arg in clear_command.args}
+
+ assert "dag_id" in args_by_flag, "required path parameter should be
positional"
+ assert args_by_flag["--dry-run"].kwargs["action"] ==
BooleanOptionalAction
+ assert args_by_flag["--dry-run"].kwargs["default"] is True
+ assert args_by_flag["--only-failed"].kwargs["default"] is True
+ assert args_by_flag["--reset-dag-runs"].kwargs["default"] is True
+ assert args_by_flag["--only-running"].kwargs["default"] is False
+ assert args_by_flag["--run-on-latest-version"].kwargs["default"] is
None
+ assert args_by_flag["--task-ids"].kwargs["type"] is str
+ assert "--output" in args_by_flag
+
+ @pytest.mark.parametrize(
+ ("raw_task_ids", "expected_task_ids"),
+ [
+ ("task_1", ["task_1"]),
+ ("task_1,task_2", ["task_1", "task_2"]),
+ (" task_1 , task_2 ,", ["task_1", "task_2"]),
+ ('["task_1", ["mapped_task", 0]]', ["task_1", ["mapped_task", 0]]),
+ (None, None),
+ ],
+ )
+ def test_apply_datamodel_defaults_clear_task_instances_task_ids(self,
raw_task_ids, expected_task_ids):
+ """Test _apply_datamodel_defaults parses --task-ids strings for
ClearTaskInstancesBody."""
+ from airflowctl.api.datamodels.generated import ClearTaskInstancesBody
+
+ command_factory = CommandFactory()
+ result = command_factory._apply_datamodel_defaults(
+ ClearTaskInstancesBody, {"task_ids": raw_task_ids, "dry_run": True}
+ )
+
+ assert result["task_ids"] == expected_task_ids
+ assert result["dry_run"] is True
+
+ def
test_apply_datamodel_defaults_clear_task_instances_invalid_json_task_ids(self):
+ """Test _apply_datamodel_defaults rejects malformed JSON lists passed
to --task-ids."""
+ from airflowctl.api.datamodels.generated import ClearTaskInstancesBody
Review Comment:
same here
##########
airflow-ctl/src/airflowctl/ctl/cli_config.py:
##########
@@ -581,30 +604,24 @@ def _create_arg_for_non_primitive_type(
continue
self.datamodels_extended_map[parameter_type].append(field)
if type(field_type.annotation) is type:
- commands.append(
- self._create_arg(
- arg_flags=("--" +
self._sanitize_arg_parameter_key(field),),
-
arg_type=self._python_type_from_string(field_type.annotation),
- arg_action=argparse.BooleanOptionalAction if
field_type.annotation is bool else None, # type: ignore
- arg_help=f"{field} for {parameter_key} operation",
- arg_default=False if field_type.annotation is bool
else None,
- )
- )
+ annotation = field_type.annotation
else:
try:
annotation = field_type.annotation.__args__[0]
except AttributeError:
annotation = field_type.annotation
- commands.append(
- self._create_arg(
- arg_flags=("--" +
self._sanitize_arg_parameter_key(field),),
- arg_type=self._python_type_from_string(annotation),
- arg_action=argparse.BooleanOptionalAction if
annotation is bool else None, # type: ignore
- arg_help=f"{field} for {parameter_key} operation",
- arg_default=False if annotation is bool else None,
- )
+ commands.append(
+ self._create_arg(
+ arg_flags=("--" +
self._sanitize_arg_parameter_key(field),),
Review Comment:
```suggestion
arg_flags=(f"--{self._sanitize_arg_parameter_key(field)}",),
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]