Skip to content

Commit a85cb13

Browse files
committed
Make sure that the start date / time doesn't exceed the end date / time
1 parent 1289f4b commit a85cb13

5 files changed

Lines changed: 24 additions & 5 deletions

File tree

sqlmesh/cli/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def wrapper(*args, **kwargs):
1515
return func(*args, **kwargs)
1616
except NodeExecutionFailedError as ex:
1717
raise click.ClickException(str(ex.__cause__))
18-
except (SQLMeshError, SqlglotError) as ex:
18+
except (SQLMeshError, SqlglotError, ValueError) as ex:
1919
raise click.ClickException(str(ex))
2020

2121
return wrapper

sqlmesh/core/model.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ def _date_validator(cls, v: t.Any) -> t.Optional[TimeLike]:
470470
if isinstance(v, exp.Expression):
471471
v = v.name
472472
if not to_datetime(v):
473-
raise ConfigError(f"{v} not a valid date time")
473+
raise ConfigError(f"'{v}' not a valid date time")
474474
return v
475475

476476
@validator("batch_size", pre=True)
@@ -727,7 +727,6 @@ def load(
727727

728728
if not query.expressions:
729729
_raise_config_error("Query missing select statements", path)
730-
raise
731730

732731
try:
733732
model = cls(

sqlmesh/core/plan.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
)
4646
from sqlmesh.core.state_sync import StateReader
4747
from sqlmesh.utils import random_id
48-
from sqlmesh.utils.date import TimeLike, make_inclusive, now, to_ds
48+
from sqlmesh.utils.date import TimeLike, make_inclusive, now, to_ds, validate_date_range
4949
from sqlmesh.utils.errors import SQLMeshError
5050
from sqlmesh.utils.pydantic import PydanticModel
5151

@@ -206,6 +206,7 @@ def apply(self) -> None:
206206
"""Runs apply if an apply function was passed in."""
207207
if not self._apply:
208208
raise SQLMeshError(f"Plan was not initialized with an applier.")
209+
validate_date_range(self.start, self.end)
209210
self._apply(self)
210211

211212
def set_choice(self, snapshot: Snapshot, choice: SnapshotChangeCategory) -> None:

sqlmesh/core/scheduler.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@
1111
from sqlmesh.core.snapshot_evaluator import SnapshotEvaluator
1212
from sqlmesh.core.state_sync import StateSync
1313
from sqlmesh.utils.concurrency import NodeExecutionFailedError, concurrent_apply_to_dag
14-
from sqlmesh.utils.date import TimeLike, now, to_datetime, yesterday
14+
from sqlmesh.utils.date import (
15+
TimeLike,
16+
now,
17+
to_datetime,
18+
validate_date_range,
19+
yesterday,
20+
)
1521

1622
logger = logging.getLogger(__name__)
1723
SnapshotBatches = t.List[t.Tuple[Snapshot, t.List[t.Tuple[datetime, datetime]]]]
@@ -66,6 +72,7 @@ def evaluate(
6672
latest: The latest datetime to use for non-incremental queries.
6773
kwargs: Additional kwargs to pass to the renderer.
6874
"""
75+
validate_date_range(start, end)
6976

7077
mapping = {
7178
**{
@@ -107,6 +114,8 @@ def run(
107114
end: The end of the run. Defaults to now.
108115
latest: The latest datetime to use for non-incremental queries.
109116
"""
117+
validate_date_range(start, end)
118+
110119
latest = latest or now()
111120
batches = self.interval_params(self.snapshots.values(), start, end, latest)
112121

sqlmesh/utils/date.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,3 +242,13 @@ def preserve_time_like_kind(input_value: TimeLike, output_value: TimeLike) -> Ti
242242
if is_date(input_value):
243243
return to_date(output_value)
244244
return output_value
245+
246+
247+
def validate_date_range(
248+
start: t.Optional[TimeLike],
249+
end: t.Optional[TimeLike],
250+
) -> None:
251+
if start and end and to_datetime(start) > to_datetime(end):
252+
raise ValueError(
253+
f"Start date / time ({start}) can't be greater than end date / time ({end})"
254+
)

0 commit comments

Comments
 (0)