Skip to content

Commit 1c9bdee

Browse files
authored
Fix: Revert to the old plan end behavior (#1936)
1 parent ee2cd83 commit 1c9bdee

File tree

7 files changed

+16
-16
lines changed

7 files changed

+16
-16
lines changed

sqlmesh/core/console.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1197,7 +1197,7 @@ def end_change_callback(change: t.Dict[str, datetime.datetime]) -> None:
11971197
widgets.Label(f"End {backfill_or_preview} Date:", layout={"width": "8rem"}),
11981198
_date_picker(
11991199
plan_builder,
1200-
to_date(plan_builder.build().end_or_now),
1200+
to_date(plan_builder.build().end),
12011201
end_change_callback,
12021202
),
12031203
]

sqlmesh/core/plan/builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def build(self) -> Plan:
201201
context_diff=self._context_diff,
202202
plan_id=self._plan_id,
203203
provided_start=self._start,
204-
end=self._end,
204+
provided_end=self._end,
205205
is_dev=self._is_dev,
206206
skip_backfill=self._skip_backfill,
207207
no_gaps=self._no_gaps,

sqlmesh/core/plan/definition.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class Plan(PydanticModel, frozen=True):
2727
context_diff: ContextDiff
2828
plan_id: str
2929
provided_start: t.Optional[TimeLike] = None
30-
end: t.Optional[TimeLike] = None
30+
provided_end: t.Optional[TimeLike] = None
3131

3232
is_dev: bool
3333
skip_backfill: bool
@@ -56,6 +56,7 @@ class Plan(PydanticModel, frozen=True):
5656
_snapshots: t.Optional[t.Dict[SnapshotId, Snapshot]] = None
5757
_environment: t.Optional[Environment] = None
5858
_start: t.Optional[TimeLike] = None
59+
_end: t.Optional[TimeLike] = None
5960
__earliest_interval_start: t.Optional[datetime] = None
6061

6162
@property
@@ -72,8 +73,10 @@ def start(self) -> TimeLike:
7273
return t.cast(TimeLike, self._start)
7374

7475
@property
75-
def end_or_now(self) -> TimeLike:
76-
return self.end or now()
76+
def end(self) -> TimeLike:
77+
if self._end is None:
78+
self._end = self.provided_end or now()
79+
return self._end
7780

7881
@property
7982
def previous_plan_id(self) -> t.Optional[str]:
@@ -172,7 +175,7 @@ def missing_intervals(self) -> t.List[SnapshotIntervals]:
172175
for snapshot, missing in missing_intervals(
173176
[s for s in self.snapshots.values() if self.is_selected_for_backfill(s.name)],
174177
start=self.provided_start or self._earliest_interval_start,
175-
end=self.end,
178+
end=self.provided_end,
176179
execution_time=self.execution_time,
177180
restatements=self.restatements,
178181
deployability_index=self.deployability_index,
@@ -204,7 +207,7 @@ def environment(self) -> Environment:
204207
self._environment = Environment(
205208
snapshots=snapshots,
206209
start_at=self.provided_start or self._earliest_interval_start,
207-
end_at=self.end,
210+
end_at=self.provided_end,
208211
plan_id=self.plan_id,
209212
previous_plan_id=self.previous_plan_id,
210213
expiration_ts=expiration_ts,

sqlmesh/core/plan/evaluator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def _promote(
211211
[s for s in plan.snapshots.values() if s.is_paused],
212212
plan.snapshots,
213213
)
214-
self.state_sync.unpause_snapshots(promotion_result.added, plan.end_or_now)
214+
self.state_sync.unpause_snapshots(promotion_result.added, plan.end)
215215

216216
return promotion_result
217217

tests/core/test_plan.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,19 +107,16 @@ def test_forward_only_dev(make_snapshot, mocker: MockerFixture):
107107
now_mock = mocker.patch("sqlmesh.core.snapshot.definition.now")
108108
now_mock.return_value = expected_end
109109

110-
now_ds_mock = mocker.patch("sqlmesh.core.plan.builder.now")
111-
now_ds_mock.return_value = expected_end
110+
mocker.patch("sqlmesh.core.plan.builder.now").return_value = expected_end
111+
mocker.patch("sqlmesh.core.plan.definition.now").return_value = expected_end
112112

113113
plan = PlanBuilder(context_diff, forward_only=True, is_dev=True).build()
114114

115115
assert plan.restatements == {
116116
snapshot_a.snapshot_id: (to_timestamp(expected_start), expected_interval_end)
117117
}
118118
assert plan.start == to_date(expected_start)
119-
assert plan.end is None
120-
121-
yesterday_ds_mock.assert_called_once()
122-
now_ds_mock.call_count == 2
119+
assert plan.end == expected_end
123120

124121

125122
def test_forward_only_plan_added_models(make_snapshot, mocker: MockerFixture):

web/server/api/endpoints/commands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def _run_plan_apply(
210210

211211
tracker_apply = models.PlanApplyStageTracker(environment=environment, plan_options=plan_options)
212212
tracker_apply.start = plan.start
213-
tracker_apply.end = plan.end_or_now
213+
tracker_apply.end = plan.end
214214
api_console.start_plan_tracker(tracker_apply)
215215
try:
216216
context.apply(plan, circuit_breaker)

web/server/api/endpoints/plan.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def get_plan_builder(
105105
)
106106
plan = plan_builder.build()
107107
tracker.start = plan.start
108-
tracker.end = plan.end_or_now
108+
tracker.end = plan.end
109109
tracker_stage_validate.stop(success=True)
110110
api_console.log_event_plan_overview()
111111
except Exception:

0 commit comments

Comments
 (0)