Repository navigation
Fix airflow dags next-execution crashing on --field data_interval.start - #73070
Eason09053360 wants to merge 1 commit into
Conversation
--field offers every field any schedule can produce, so a Dag can always be asked for a name its own schedule leaves empty. A partitioned Dag has no data interval, and the raw attribute walk turned that into a bare traceback rather than the None the command already prints for the very same value under its other name, logical_date.
|
Hello @Eason09053360 - thank you for your contributions to Apache Airflow! The Airflow community has introduced a limit of 5 open pull requests at a time for contributors without write access to the repository. You currently have 33 open pull requests, so - as a one-time step of introducing the limit - we closed the ones where maintainers have not engaged yet:
These pull requests stay open because maintainers are already engaged in them - they count towards your limit:
This is not a judgement of you or of your changes. We never told contributors before that opening many pull requests at once was a problem, so there is nothing to feel bad about - and nothing is lost: your branches, commits and the review history stay where they are. What we ask you to do is to make your first prioritization decision: choose which of the pull requests above matter most to you, and reopen them (up to 5 open at a time, including the ones still open) with the "Reopen pull request" button or While your pull requests are waiting for review, the most valuable thing you can do is help in other ways - reviewing other contributors' pull requests, helping with issues, and taking part in the discussions on the devlist and Slack. Why we introduced the limit, what it means for you and how to reopen or restore a pull request is explained in https://github.com/apache/airflow/blob/main/contributing-docs/32_open_pull_request_limit.rst. Drafted-by: Claude Code (Opus 5); reviewed by @potiuk before posting |
Why
airflow dags next-execution <dag_id> --field data_interval.startcrashes with a bareAttributeError: 'NoneType' object has no attribute 'start'on a Dag using a partitionedtimetable.
--fieldaccepts the union of every field any schedule can produce(
airflow-core/src/airflow/cli/cli_config.pyARG_FIELDchoices), so a Dag canalways be asked for a name its own schedule leaves empty:
DagRunInfo.data_intervalisNonefor a partitioned timetable, andoperator.attrgetter("data_interval.start")walksstraight into it.
Every neighbouring combination already degrades to
Noneinstead of raising — asking acron Dag for
--field partition_keyprintsNone, and so does--field logical_dateon apartitioned Dag, which is defined as exactly
data_interval.start if data_interval else None.So the same value crashes under one name and prints
Noneunder the other.What
airflow-core/src/airflow/cli/commands/dag_command.py— the--fieldpath now resolves thedotted name through
_get_schedule_field, which stops and yieldsNoneas soon as the chainruns out. The
--tablepath is unchanged: it picks its column set fromtimetable_partitioned, so it never asks for a field the Dag cannot have.Output for every field a Dag's schedule does populate is unchanged.
airflow-core/tests/unit/cli/commands/test_dag_command.py— a parametrized test overdata_interval.start/data_interval.endagainst aCronPartitionTimetableDag, assertingNoneis printed. Both parametrizations fail with theAttributeErrorwithout this change.