Fix 60142 positional params#65699
Conversation
Related to apache#60142 - Modified _create_arg() to accept is_required parameter - Required non-boolean parameters are now positional (no -- prefix) - Optional parameters remain as options with -- prefix and dest - Uses field_type.is_required() to detect required Pydantic fields - Positional args use _UNSET for dest to avoid argparse error
…tests - Remove unnecessary comments - Simplify logic using one-liner conditional for flag determination - Add unit test for positional vs optional argument handling - _create_arg now uses simple flag checking instead of is_required parameter
- Remove if/else branching from _create_arg method - Caller now determines both arg_flags and arg_dest - _create_arg is now a simple builder with no conditional logic - Updated all three call sites to pass arg_dest parameter This addresses maintainer feedback to make the code more modular by having the caller manage the logic rather than the method.
- Modified arg_flags generation to omit -- prefix for required non-boolean parameters - Changed _create_arg defaults to use _UNSET instead of None - Caller determines flags based on is_required, _create_arg remains a simple pass-through method - Required non-boolean parameters now appear as positional arguments in CLI
- Adds test coverage for 'assets get 1' to test_airflowctl_commands.py - Resolves pre-commit hook failure about missing test coverage
…ve types - Use original field names for positional args (not sanitized versions) - Apply positional logic to primitive type parameters (e.g., asset_id: str) - Update test fixtures to expect original field names for positional args - Required non-boolean parameters now appear as positional arguments - Boolean and optional parameters remain as flags with -- prefix This ensures commands like 'airflowctl assets get 1' work correctly
- Extract has_default from function signatures via AST - Only make parameters positional if: not boolean AND not has_default AND not in 'list' operation - Skip has_default metadata in both args_map and func_map creation - Fixes xcom operations (map_index has default) and list operations (filter params should be optional)
- Extract has_default from AST to identify optional parameters - Make primitive parameters positional only if: not boolean, no default, and not in special list operations - Special handling for dagrun.list and jobs.list (all params optional despite no defaults) - Update integration tests to use correct syntax for optional parameters
- Extract has_default from AST to identify optional parameters - Make primitive parameters positional only if: not boolean, no default, and not in special list operations - Special handling for dagrun.list and jobs.list (all params optional despite no defaults) - Skip has_default metadata key in func_map creation - Update integration tests to use correct syntax: - dagrun list: use --dag-id flag - jobs list: add required --job-type and --hostname flags - pools update: use --pool flag (field is optional in Pydantic model)
|
I think we should hold this as in a day or two will create a discussion about this |
|
Thanks @bugraoz93! Happy to wait for the discussion on #65261. I'll keep an eye on it and update the PR based on whatever approach is agreed upon. Let me know if there's anything I can do in the meantime! |
|
@Fury0508 This draft PR has had no activity for 2 weeks. Closing to keep the queue clean. You are welcome to reopen and continue when you're ready. If you'd like to pick it back up, please rebase onto the current Note: This comment was drafted by an AI-assisted triage tool and may contain mistakes. Once you have addressed the points above, an Apache Airflow maintainer — a real person — will take the next look at your PR. We use this two-stage triage process so that our maintainers' limited time is spent where it matters most: the conversation with you. Drafted-by: Claude Code (Opus 4.7); reviewed by @potiuk before posting |
This is a continuation of #60193 which was closed due to inactivity.
All maintainer feedback from @bugraoz93 has been addressed:
_create_argis now a pure pass-through builder with no conditional logicarg_flagsbased on whether param is optional (| None)bool | Noneparameters correctly defaulting toNoneinstead ofFalseImplements positional parameters for required CLI args in airflowctl auto-generated commands.
Required (non-nullable, non-boolean) parameters are now positional arguments instead of --flag
style, making the CLI more intuitive. Optional parameters (nullable with | None) remain as
--flag style arguments.
Before:
airflowctl connections create --connection-id="test" --conn-type="mysql"
After:
airflowctl connections create test mysql [--optional-params]
related: #60142
Continues work from: #60193
Was generative AI tooling used to co-author this PR?
Note: AI was used to assist with debugging, conflict resolution, and test validation.
All logic decisions were made based on maintainer feedback from the previous PR #60193.