Skip to content

Make positional parameters as a destionation paramater for auto-generated commandsΒ #60142

@bugraoz93

Description

@bugraoz93

Description

What
We need to make adjustments in this file.

def _create_arg(
arg_flags: tuple,
arg_type: type | Callable,
arg_help: str,
arg_action: argparse.BooleanOptionalAction | None,
arg_dest: str | None = None,
arg_default: Any | None = None,
) -> Arg:
return Arg(
flags=arg_flags,
type=arg_type,
dest=arg_dest,
help=arg_help,
default=arg_default,
action=arg_action,
)
def _create_arg_for_non_primitive_type(
self,
parameter_type: str,
parameter_key: str,
) -> list[Arg]:
"""Create Arg for non-primitive type Pydantic."""
parameter_type_map = getattr(generated_datamodels, parameter_type)
commands = []
if parameter_type_map not in self.datamodels_extended_map.keys():
self.datamodels_extended_map[parameter_type] = []
for field, field_type in parameter_type_map.model_fields.items():
if field in self.excluded_parameters:
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,
)
)
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,
)
)
return commands
def _create_args_map_from_operation(self):
"""Create Arg from Operation Method checking for parameters and return types."""
for operation in self.operations:
args = []
for parameter in operation.get("parameters"):
for parameter_key, parameter_type in parameter.items():
if self._is_primitive_type(type_name=parameter_type):
is_bool = parameter_type == "bool"
args.append(
self._create_arg(
arg_flags=("--" + self._sanitize_arg_parameter_key(parameter_key),),
arg_type=self._python_type_from_string(parameter_type),
arg_action=argparse.BooleanOptionalAction if is_bool else None,
arg_help=f"{parameter_key} for {operation.get('name')} operation in {operation.get('parent').name}",
arg_default=False if is_bool else None,
)
)
else:
args.extend(
self._create_arg_for_non_primitive_type(
parameter_type=parameter_type, parameter_key=parameter_key
)
)
if any(operation.get("name").startswith(cmd) for cmd in self.output_command_list):
args.extend([ARG_OUTPUT, ARG_AUTH_ENVIRONMENT])
self.args_map[(operation.get("name"), operation.get("parent").name)] = args

airflowctl will understand whether the parameter is nullable. If it is not nullable, we should add as a destination parameter, and if it is nullable, it will be positional.

Example:
from
airflow connections create --connection-id="test" --conn-type="test" ...
to
airflow connections create test test ...

Are you willing to submit a PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions