sqlmesh 0.197.1.dev11__py3-none-any.whl → 0.198.1.dev1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sqlmesh/_version.py +2 -2
- sqlmesh/core/console.py +161 -7
- sqlmesh/core/scheduler.py +15 -2
- sqlmesh/core/snapshot/definition.py +40 -2
- {sqlmesh-0.197.1.dev11.dist-info → sqlmesh-0.198.1.dev1.dist-info}/METADATA +1 -1
- {sqlmesh-0.197.1.dev11.dist-info → sqlmesh-0.198.1.dev1.dist-info}/RECORD +11 -11
- web/server/api/endpoints/plan.py +2 -1
- {sqlmesh-0.197.1.dev11.dist-info → sqlmesh-0.198.1.dev1.dist-info}/WHEEL +0 -0
- {sqlmesh-0.197.1.dev11.dist-info → sqlmesh-0.198.1.dev1.dist-info}/entry_points.txt +0 -0
- {sqlmesh-0.197.1.dev11.dist-info → sqlmesh-0.198.1.dev1.dist-info}/licenses/LICENSE +0 -0
- {sqlmesh-0.197.1.dev11.dist-info → sqlmesh-0.198.1.dev1.dist-info}/top_level.txt +0 -0
sqlmesh/_version.py
CHANGED
|
@@ -17,5 +17,5 @@ __version__: str
|
|
|
17
17
|
__version_tuple__: VERSION_TUPLE
|
|
18
18
|
version_tuple: VERSION_TUPLE
|
|
19
19
|
|
|
20
|
-
__version__ = version = '0.
|
|
21
|
-
__version_tuple__ = version_tuple = (0,
|
|
20
|
+
__version__ = version = '0.198.1.dev1'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 198, 1, 'dev1')
|
sqlmesh/core/console.py
CHANGED
|
@@ -330,7 +330,36 @@ class UnitTestConsole(abc.ABC):
|
|
|
330
330
|
"""
|
|
331
331
|
|
|
332
332
|
|
|
333
|
+
class SignalConsole(abc.ABC):
|
|
334
|
+
@abc.abstractmethod
|
|
335
|
+
def start_signal_progress(
|
|
336
|
+
self,
|
|
337
|
+
snapshot: Snapshot,
|
|
338
|
+
default_catalog: t.Optional[str],
|
|
339
|
+
environment_naming_info: EnvironmentNamingInfo,
|
|
340
|
+
) -> None:
|
|
341
|
+
"""Indicates that signal checking has begun for a snapshot."""
|
|
342
|
+
|
|
343
|
+
@abc.abstractmethod
|
|
344
|
+
def update_signal_progress(
|
|
345
|
+
self,
|
|
346
|
+
snapshot: Snapshot,
|
|
347
|
+
signal_name: str,
|
|
348
|
+
signal_idx: int,
|
|
349
|
+
total_signals: int,
|
|
350
|
+
ready_intervals: Intervals,
|
|
351
|
+
check_intervals: Intervals,
|
|
352
|
+
duration: float,
|
|
353
|
+
) -> None:
|
|
354
|
+
"""Updates the signal checking progress."""
|
|
355
|
+
|
|
356
|
+
@abc.abstractmethod
|
|
357
|
+
def stop_signal_progress(self) -> None:
|
|
358
|
+
"""Indicates that signal checking has completed for a snapshot."""
|
|
359
|
+
|
|
360
|
+
|
|
333
361
|
class Console(
|
|
362
|
+
SignalConsole,
|
|
334
363
|
PlanBuilderConsole,
|
|
335
364
|
LinterConsole,
|
|
336
365
|
StateExporterConsole,
|
|
@@ -536,6 +565,29 @@ class NoopConsole(Console):
|
|
|
536
565
|
def stop_evaluation_progress(self, success: bool = True) -> None:
|
|
537
566
|
pass
|
|
538
567
|
|
|
568
|
+
def start_signal_progress(
|
|
569
|
+
self,
|
|
570
|
+
snapshot: Snapshot,
|
|
571
|
+
default_catalog: t.Optional[str],
|
|
572
|
+
environment_naming_info: EnvironmentNamingInfo,
|
|
573
|
+
) -> None:
|
|
574
|
+
pass
|
|
575
|
+
|
|
576
|
+
def update_signal_progress(
|
|
577
|
+
self,
|
|
578
|
+
snapshot: Snapshot,
|
|
579
|
+
signal_name: str,
|
|
580
|
+
signal_idx: int,
|
|
581
|
+
total_signals: int,
|
|
582
|
+
ready_intervals: Intervals,
|
|
583
|
+
check_intervals: Intervals,
|
|
584
|
+
duration: float,
|
|
585
|
+
) -> None:
|
|
586
|
+
pass
|
|
587
|
+
|
|
588
|
+
def stop_signal_progress(self) -> None:
|
|
589
|
+
pass
|
|
590
|
+
|
|
539
591
|
def start_creation_progress(
|
|
540
592
|
self,
|
|
541
593
|
snapshots: t.List[Snapshot],
|
|
@@ -860,6 +912,8 @@ class TerminalConsole(Console):
|
|
|
860
912
|
self.table_diff_model_tasks: t.Dict[str, TaskID] = {}
|
|
861
913
|
self.table_diff_progress_live: t.Optional[Live] = None
|
|
862
914
|
|
|
915
|
+
self.signal_status_tree: t.Optional[Tree] = None
|
|
916
|
+
|
|
863
917
|
self.verbosity = verbosity
|
|
864
918
|
self.dialect = dialect
|
|
865
919
|
self.ignore_warnings = ignore_warnings
|
|
@@ -901,6 +955,9 @@ class TerminalConsole(Console):
|
|
|
901
955
|
audit_only: bool = False,
|
|
902
956
|
) -> None:
|
|
903
957
|
"""Indicates that a new snapshot evaluation/auditing progress has begun."""
|
|
958
|
+
# Add a newline to separate signal checking from evaluation
|
|
959
|
+
self._print("")
|
|
960
|
+
|
|
904
961
|
if not self.evaluation_progress_live:
|
|
905
962
|
self.evaluation_total_progress = make_progress_bar(
|
|
906
963
|
"Executing model batches" if not audit_only else "Auditing models", self.console
|
|
@@ -1050,6 +1107,88 @@ class TerminalConsole(Console):
|
|
|
1050
1107
|
self.environment_naming_info = EnvironmentNamingInfo()
|
|
1051
1108
|
self.default_catalog = None
|
|
1052
1109
|
|
|
1110
|
+
def start_signal_progress(
|
|
1111
|
+
self,
|
|
1112
|
+
snapshot: Snapshot,
|
|
1113
|
+
default_catalog: t.Optional[str],
|
|
1114
|
+
environment_naming_info: EnvironmentNamingInfo,
|
|
1115
|
+
) -> None:
|
|
1116
|
+
"""Indicates that signal checking has begun for a snapshot."""
|
|
1117
|
+
display_name = snapshot.display_name(
|
|
1118
|
+
environment_naming_info,
|
|
1119
|
+
default_catalog if self.verbosity < Verbosity.VERY_VERBOSE else None,
|
|
1120
|
+
dialect=self.dialect,
|
|
1121
|
+
)
|
|
1122
|
+
self.signal_status_tree = Tree(f"Checking signals for {display_name}")
|
|
1123
|
+
|
|
1124
|
+
def update_signal_progress(
|
|
1125
|
+
self,
|
|
1126
|
+
snapshot: Snapshot,
|
|
1127
|
+
signal_name: str,
|
|
1128
|
+
signal_idx: int,
|
|
1129
|
+
total_signals: int,
|
|
1130
|
+
ready_intervals: Intervals,
|
|
1131
|
+
check_intervals: Intervals,
|
|
1132
|
+
duration: float,
|
|
1133
|
+
) -> None:
|
|
1134
|
+
"""Updates the signal checking progress."""
|
|
1135
|
+
tree = Tree(f"[{signal_idx + 1}/{total_signals}] {signal_name} {duration:.2f}s")
|
|
1136
|
+
|
|
1137
|
+
formatted_check_intervals = [_format_signal_interval(snapshot, i) for i in check_intervals]
|
|
1138
|
+
formatted_ready_intervals = [_format_signal_interval(snapshot, i) for i in ready_intervals]
|
|
1139
|
+
|
|
1140
|
+
if not formatted_check_intervals:
|
|
1141
|
+
formatted_check_intervals = ["no intervals"]
|
|
1142
|
+
if not formatted_ready_intervals:
|
|
1143
|
+
formatted_ready_intervals = ["no intervals"]
|
|
1144
|
+
|
|
1145
|
+
# Color coding to help detect partial interval ranges quickly
|
|
1146
|
+
if ready_intervals == check_intervals:
|
|
1147
|
+
msg = "All ready"
|
|
1148
|
+
color = "green"
|
|
1149
|
+
elif ready_intervals:
|
|
1150
|
+
msg = "Some ready"
|
|
1151
|
+
color = "yellow"
|
|
1152
|
+
else:
|
|
1153
|
+
msg = "None ready"
|
|
1154
|
+
color = "red"
|
|
1155
|
+
|
|
1156
|
+
if self.verbosity < Verbosity.VERY_VERBOSE:
|
|
1157
|
+
num_check_intervals = len(formatted_check_intervals)
|
|
1158
|
+
if num_check_intervals > 3:
|
|
1159
|
+
formatted_check_intervals = formatted_check_intervals[:3]
|
|
1160
|
+
formatted_check_intervals.append(f"... and {num_check_intervals - 3} more")
|
|
1161
|
+
|
|
1162
|
+
num_ready_intervals = len(formatted_ready_intervals)
|
|
1163
|
+
if num_ready_intervals > 3:
|
|
1164
|
+
formatted_ready_intervals = formatted_ready_intervals[:3]
|
|
1165
|
+
formatted_ready_intervals.append(f"... and {num_ready_intervals - 3} more")
|
|
1166
|
+
|
|
1167
|
+
check = ", ".join(formatted_check_intervals)
|
|
1168
|
+
tree.add(f"Check: {check}")
|
|
1169
|
+
|
|
1170
|
+
ready = ", ".join(formatted_ready_intervals)
|
|
1171
|
+
tree.add(f"[{color}]{msg}: {ready}[/{color}]")
|
|
1172
|
+
else:
|
|
1173
|
+
check_tree = Tree("Check")
|
|
1174
|
+
tree.add(check_tree)
|
|
1175
|
+
for interval in formatted_check_intervals:
|
|
1176
|
+
check_tree.add(interval)
|
|
1177
|
+
|
|
1178
|
+
ready_tree = Tree(f"[{color}]{msg}[/{color}]")
|
|
1179
|
+
tree.add(ready_tree)
|
|
1180
|
+
for interval in formatted_ready_intervals:
|
|
1181
|
+
ready_tree.add(f"[{color}]{interval}[/{color}]")
|
|
1182
|
+
|
|
1183
|
+
if self.signal_status_tree is not None:
|
|
1184
|
+
self.signal_status_tree.add(tree)
|
|
1185
|
+
|
|
1186
|
+
def stop_signal_progress(self) -> None:
|
|
1187
|
+
"""Indicates that signal checking has completed for a snapshot."""
|
|
1188
|
+
if self.signal_status_tree is not None:
|
|
1189
|
+
self._print(self.signal_status_tree)
|
|
1190
|
+
self.signal_status_tree = None
|
|
1191
|
+
|
|
1053
1192
|
def start_creation_progress(
|
|
1054
1193
|
self,
|
|
1055
1194
|
snapshots: t.List[Snapshot],
|
|
@@ -3810,19 +3949,34 @@ def _format_audits_errors(error: NodeAuditsErrors) -> str:
|
|
|
3810
3949
|
return " " + "\n".join(error_messages)
|
|
3811
3950
|
|
|
3812
3951
|
|
|
3952
|
+
def _format_interval(snapshot: Snapshot, interval: Interval) -> str:
|
|
3953
|
+
"""Format an interval with an optional prefix."""
|
|
3954
|
+
inclusive_interval = make_inclusive(interval[0], interval[1])
|
|
3955
|
+
if snapshot.model.interval_unit.is_date_granularity:
|
|
3956
|
+
return f"{to_ds(inclusive_interval[0])} - {to_ds(inclusive_interval[1])}"
|
|
3957
|
+
|
|
3958
|
+
if inclusive_interval[0].date() == inclusive_interval[1].date():
|
|
3959
|
+
# omit end date if interval start/end on same day
|
|
3960
|
+
return f"{to_ds(inclusive_interval[0])} {inclusive_interval[0].strftime('%H:%M:%S')}-{inclusive_interval[1].strftime('%H:%M:%S')}"
|
|
3961
|
+
|
|
3962
|
+
return f"{inclusive_interval[0].strftime('%Y-%m-%d %H:%M:%S')} - {inclusive_interval[1].strftime('%Y-%m-%d %H:%M:%S')}"
|
|
3963
|
+
|
|
3964
|
+
|
|
3965
|
+
def _format_signal_interval(snapshot: Snapshot, interval: Interval) -> str:
|
|
3966
|
+
"""Format an interval for signal output (without 'insert' prefix)."""
|
|
3967
|
+
return _format_interval(snapshot, interval)
|
|
3968
|
+
|
|
3969
|
+
|
|
3813
3970
|
def _format_evaluation_model_interval(snapshot: Snapshot, interval: Interval) -> str:
|
|
3971
|
+
"""Format an interval for evaluation output (with 'insert' prefix)."""
|
|
3814
3972
|
if snapshot.is_model and (
|
|
3815
3973
|
snapshot.model.kind.is_incremental
|
|
3816
3974
|
or snapshot.model.kind.is_managed
|
|
3817
3975
|
or snapshot.model.kind.is_custom
|
|
3818
3976
|
):
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
# omit end date if interval start/end on same day
|
|
3823
|
-
if inclusive_interval[0].date() == inclusive_interval[1].date():
|
|
3824
|
-
return f"insert {to_ds(inclusive_interval[0])} {inclusive_interval[0].strftime('%H:%M:%S')}-{inclusive_interval[1].strftime('%H:%M:%S')}"
|
|
3825
|
-
return f"insert {inclusive_interval[0].strftime('%Y-%m-%d %H:%M:%S')} - {inclusive_interval[1].strftime('%Y-%m-%d %H:%M:%S')}"
|
|
3977
|
+
formatted_interval = _format_interval(snapshot, interval)
|
|
3978
|
+
return f"insert {formatted_interval}"
|
|
3979
|
+
|
|
3826
3980
|
return ""
|
|
3827
3981
|
|
|
3828
3982
|
|
sqlmesh/core/scheduler.py
CHANGED
|
@@ -269,6 +269,7 @@ class Scheduler:
|
|
|
269
269
|
self,
|
|
270
270
|
merged_intervals: SnapshotToIntervals,
|
|
271
271
|
deployability_index: t.Optional[DeployabilityIndex],
|
|
272
|
+
environment_naming_info: EnvironmentNamingInfo,
|
|
272
273
|
) -> t.Dict[Snapshot, Intervals]:
|
|
273
274
|
dag = snapshots_to_dag(merged_intervals)
|
|
274
275
|
|
|
@@ -303,7 +304,13 @@ class Scheduler:
|
|
|
303
304
|
default_catalog=self.default_catalog,
|
|
304
305
|
)
|
|
305
306
|
|
|
306
|
-
intervals = snapshot.check_ready_intervals(
|
|
307
|
+
intervals = snapshot.check_ready_intervals(
|
|
308
|
+
intervals,
|
|
309
|
+
context,
|
|
310
|
+
console=self.console,
|
|
311
|
+
default_catalog=self.default_catalog,
|
|
312
|
+
environment_naming_info=environment_naming_info,
|
|
313
|
+
)
|
|
307
314
|
unready -= set(intervals)
|
|
308
315
|
|
|
309
316
|
for parent in snapshot.parents:
|
|
@@ -324,10 +331,14 @@ class Scheduler:
|
|
|
324
331
|
):
|
|
325
332
|
batches.append((next_batch[0][0], next_batch[-1][-1]))
|
|
326
333
|
next_batch = []
|
|
334
|
+
|
|
327
335
|
next_batch.append(interval)
|
|
336
|
+
|
|
328
337
|
if next_batch:
|
|
329
338
|
batches.append((next_batch[0][0], next_batch[-1][-1]))
|
|
339
|
+
|
|
330
340
|
snapshot_batches[snapshot] = batches
|
|
341
|
+
|
|
331
342
|
return snapshot_batches
|
|
332
343
|
|
|
333
344
|
def run_merged_intervals(
|
|
@@ -359,7 +370,9 @@ class Scheduler:
|
|
|
359
370
|
"""
|
|
360
371
|
execution_time = execution_time or now_timestamp()
|
|
361
372
|
|
|
362
|
-
batched_intervals = self.batch_intervals(
|
|
373
|
+
batched_intervals = self.batch_intervals(
|
|
374
|
+
merged_intervals, deployability_index, environment_naming_info
|
|
375
|
+
)
|
|
363
376
|
|
|
364
377
|
self.console.start_evaluation_progress(
|
|
365
378
|
batched_intervals,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import sys
|
|
4
|
+
import time
|
|
4
5
|
import typing as t
|
|
5
6
|
from collections import defaultdict
|
|
6
7
|
from datetime import datetime, timedelta
|
|
@@ -50,6 +51,7 @@ from sqlmesh.utils.hashing import hash_data
|
|
|
50
51
|
from sqlmesh.utils.pydantic import PydanticModel, field_validator
|
|
51
52
|
|
|
52
53
|
if t.TYPE_CHECKING:
|
|
54
|
+
from sqlmesh.core.console import Console
|
|
53
55
|
from sqlglot.dialects.dialect import DialectType
|
|
54
56
|
from sqlmesh.core.environment import EnvironmentNamingInfo
|
|
55
57
|
from sqlmesh.core.context import ExecutionContext
|
|
@@ -965,7 +967,14 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
|
|
|
965
967
|
model_end_ts,
|
|
966
968
|
)
|
|
967
969
|
|
|
968
|
-
def check_ready_intervals(
|
|
970
|
+
def check_ready_intervals(
|
|
971
|
+
self,
|
|
972
|
+
intervals: Intervals,
|
|
973
|
+
context: ExecutionContext,
|
|
974
|
+
console: t.Optional[Console] = None,
|
|
975
|
+
default_catalog: t.Optional[str] = None,
|
|
976
|
+
environment_naming_info: t.Optional[EnvironmentNamingInfo] = None,
|
|
977
|
+
) -> Intervals:
|
|
969
978
|
"""Returns a list of intervals that are considered ready by the provided signal.
|
|
970
979
|
|
|
971
980
|
Note that this will handle gaps in the provided intervals. The returned intervals
|
|
@@ -979,7 +988,19 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
|
|
|
979
988
|
python_env = self.model.python_env
|
|
980
989
|
env = prepare_env(python_env)
|
|
981
990
|
|
|
982
|
-
|
|
991
|
+
if console:
|
|
992
|
+
console.start_signal_progress(
|
|
993
|
+
self,
|
|
994
|
+
default_catalog,
|
|
995
|
+
environment_naming_info or EnvironmentNamingInfo(),
|
|
996
|
+
)
|
|
997
|
+
|
|
998
|
+
for signal_idx, (signal_name, kwargs) in enumerate(signals.items()):
|
|
999
|
+
# Capture intervals before signal check for display
|
|
1000
|
+
intervals_to_check = merge_intervals(intervals)
|
|
1001
|
+
|
|
1002
|
+
signal_start_ts = time.perf_counter()
|
|
1003
|
+
|
|
983
1004
|
try:
|
|
984
1005
|
intervals = _check_ready_intervals(
|
|
985
1006
|
env[signal_name],
|
|
@@ -996,6 +1017,23 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
|
|
|
996
1017
|
f"{e} '{signal_name}' for '{self.model.name}' at {self.model._path}"
|
|
997
1018
|
)
|
|
998
1019
|
|
|
1020
|
+
duration = time.perf_counter() - signal_start_ts
|
|
1021
|
+
|
|
1022
|
+
if console:
|
|
1023
|
+
console.update_signal_progress(
|
|
1024
|
+
snapshot=self,
|
|
1025
|
+
signal_name=signal_name,
|
|
1026
|
+
signal_idx=signal_idx,
|
|
1027
|
+
total_signals=len(signals),
|
|
1028
|
+
ready_intervals=merge_intervals(intervals),
|
|
1029
|
+
check_intervals=intervals_to_check,
|
|
1030
|
+
duration=duration,
|
|
1031
|
+
)
|
|
1032
|
+
|
|
1033
|
+
# Stop signal progress tracking
|
|
1034
|
+
if console:
|
|
1035
|
+
console.stop_signal_progress()
|
|
1036
|
+
|
|
999
1037
|
return intervals
|
|
1000
1038
|
|
|
1001
1039
|
def categorize_as(self, category: SnapshotChangeCategory) -> None:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
|
|
2
|
-
sqlmesh/_version.py,sha256=
|
|
2
|
+
sqlmesh/_version.py,sha256=0SX9VtCi6Q-w0R4nGDmoF9JyIVUHld097Vt4ne0i-Fo,528
|
|
3
3
|
sqlmesh/magics.py,sha256=R9U0Mp9ZQhDYe751nxAQDLaMv3zLAR4HcTdIflKTmEE,41709
|
|
4
4
|
sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -11,7 +11,7 @@ sqlmesh/cli/options.py,sha256=-4ZclMIeIg8tghLowtmQNmpEFlm0QtOVEh40NqRdFHA,2499
|
|
|
11
11
|
sqlmesh/cli/project_init.py,sha256=5JmDmUK0WJs39hM-p76uzHYdo1Hnx6fKuJg_pR3Hn5A,16419
|
|
12
12
|
sqlmesh/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
13
|
sqlmesh/core/_typing.py,sha256=e1f7xO2aZCy38M_3VoDy-XI3shyd99-IFctgIFSgXWM,497
|
|
14
|
-
sqlmesh/core/console.py,sha256=
|
|
14
|
+
sqlmesh/core/console.py,sha256=HInr6MOcxgn8Z-B9fAoghoDXbBEZqkB5ClyZF-fRP58,159032
|
|
15
15
|
sqlmesh/core/constants.py,sha256=gUABXWYgH_XOSbaZAJsR5o1dmA61JDCvBDyxqqXX3LM,2630
|
|
16
16
|
sqlmesh/core/context.py,sha256=XQFLCzpiO8yYgIcgP0J1fG9mYBzrveaqGB8ZINR6W5A,119362
|
|
17
17
|
sqlmesh/core/context_diff.py,sha256=TCzM8egBE35DskpouOB-GQM2Qf5iUHWbRgiB5yZ6tzg,21552
|
|
@@ -24,7 +24,7 @@ sqlmesh/core/node.py,sha256=r4_1MRTPcU0MAlwZ5KzrykLT58B7dkKvHzPCsJmEKD8,14497
|
|
|
24
24
|
sqlmesh/core/notification_target.py,sha256=PPGoDrgbRKxr27vJEu03XqNTQLYTw0ZF_b0yAapxGeI,16158
|
|
25
25
|
sqlmesh/core/reference.py,sha256=k7OSkLqTjPR8WJjNeFj0xAJ297nZUMgb_iTVwKRRKjc,4875
|
|
26
26
|
sqlmesh/core/renderer.py,sha256=ksdD2x2Q5Ns5fOLIGfWIznx_T3fXbP3CfwUhD5kVSOQ,26674
|
|
27
|
-
sqlmesh/core/scheduler.py,sha256=
|
|
27
|
+
sqlmesh/core/scheduler.py,sha256=TRuxqu3vIyOMZTnViKbalWBDkpnog2lCiMeScxvNvq4,36728
|
|
28
28
|
sqlmesh/core/schema_diff.py,sha256=Sp2MoqAngp-yTYevkLaf9jb26SuAdGXoZ54g5MjWowU,30516
|
|
29
29
|
sqlmesh/core/schema_loader.py,sha256=lvrI9k7hr1P4X4E6t3U-KrcuvdQuw0UdNlN90P2s52w,3563
|
|
30
30
|
sqlmesh/core/selector.py,sha256=_hcktUQiKXCPE-mOqXClHUVWBfEZKMPVVNDtpSSRhbI,12660
|
|
@@ -102,7 +102,7 @@ sqlmesh/core/plan/stages.py,sha256=5cvEbrQsw_cx1gayxwLRwkIehQPixrbUT9B4BbEOj3A,2
|
|
|
102
102
|
sqlmesh/core/snapshot/__init__.py,sha256=Z5HTetNCZGoKF1WAKXk4LWL9dc8EC8lwS2O4TtoBmt4,1317
|
|
103
103
|
sqlmesh/core/snapshot/cache.py,sha256=bgqCR2hyf6r2A_8QP1EnXFK25gDX37-Zg0YeMuETWxg,3934
|
|
104
104
|
sqlmesh/core/snapshot/categorizer.py,sha256=qGG5870mu1jR2whKisSBH_GFbsyh96RnzJDgkN7DV9g,2482
|
|
105
|
-
sqlmesh/core/snapshot/definition.py,sha256=
|
|
105
|
+
sqlmesh/core/snapshot/definition.py,sha256=vLGhbV7BDCisq8ezJhI266aeI0fiK_12OkHGYOu7-po,86693
|
|
106
106
|
sqlmesh/core/snapshot/evaluator.py,sha256=i5T5EZ4lEw7X7ZGapIhau6IxJ52nJcdvSixBu_utrhE,90251
|
|
107
107
|
sqlmesh/core/state_sync/__init__.py,sha256=B60xj-_Xk-4jas3UphLvwkuf04G-9AyGckcblXE0aRg,869
|
|
108
108
|
sqlmesh/core/state_sync/base.py,sha256=Drq4MDWWxO_J-sJIxsMG1-YSgj2L42n5WM2vh1sr6bc,18334
|
|
@@ -283,7 +283,7 @@ sqlmesh/utils/pydantic.py,sha256=I898jAFqa3qU6lG2uPpRebVFncOUo8ZrLWM_R3K3DHU,116
|
|
|
283
283
|
sqlmesh/utils/rich.py,sha256=BpB47G0-JcU41LkGkeGKroexj4NOV5fox4-GOIXPgIc,3545
|
|
284
284
|
sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
|
|
285
285
|
sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
|
|
286
|
-
sqlmesh-0.
|
|
286
|
+
sqlmesh-0.198.1.dev1.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
|
|
287
287
|
web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
288
288
|
web/client/dist/index.html,sha256=kNpFjWxt34Pf-P-cROtPWi3GNSVk6zqA3eoN9tlZXI0,5472
|
|
289
289
|
web/client/dist/assets/Audits-DKgXravk.js,sha256=SaVQhNlislD_yQc_KivO7SPi1JH0ts1GnDPD5Zssutw,1041
|
|
@@ -399,10 +399,10 @@ web/server/api/endpoints/lineage.py,sha256=XU99RI-6Q9SidItGM5WLQMje8NhM5nZWHbtWx
|
|
|
399
399
|
web/server/api/endpoints/meta.py,sha256=QKWWrHewGh5JS8mCSWXTKCIQwXw-TQfaT9tWt_SsNY4,1032
|
|
400
400
|
web/server/api/endpoints/models.py,sha256=ud-lRwriyI_OYg9tZchrBgeiXELiRTLNEodrafB7Ndk,4697
|
|
401
401
|
web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
|
|
402
|
-
web/server/api/endpoints/plan.py,sha256=
|
|
402
|
+
web/server/api/endpoints/plan.py,sha256=bbbY50W_2MsZSTxOHWMKz0tbIm75nsRSlPy8GI2fg9Q,9306
|
|
403
403
|
web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
|
|
404
|
-
sqlmesh-0.
|
|
405
|
-
sqlmesh-0.
|
|
406
|
-
sqlmesh-0.
|
|
407
|
-
sqlmesh-0.
|
|
408
|
-
sqlmesh-0.
|
|
404
|
+
sqlmesh-0.198.1.dev1.dist-info/METADATA,sha256=SQTcPVXm2LsE_jJwcSRRh_FYDEmXMf4-4pVY7x4HyIk,26658
|
|
405
|
+
sqlmesh-0.198.1.dev1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
406
|
+
sqlmesh-0.198.1.dev1.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
|
|
407
|
+
sqlmesh-0.198.1.dev1.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
|
|
408
|
+
sqlmesh-0.198.1.dev1.dist-info/RECORD,,
|
web/server/api/endpoints/plan.py
CHANGED
|
@@ -7,6 +7,7 @@ from fastapi import APIRouter, Body, Depends, Request, Response
|
|
|
7
7
|
from starlette.status import HTTP_204_NO_CONTENT
|
|
8
8
|
|
|
9
9
|
from sqlmesh.core.context import Context
|
|
10
|
+
from sqlmesh.core.environment import EnvironmentNamingInfo
|
|
10
11
|
from sqlmesh.core.plan import Plan, PlanBuilder
|
|
11
12
|
from sqlmesh.core.snapshot.definition import SnapshotChangeCategory
|
|
12
13
|
from sqlmesh.utils.date import make_inclusive, to_ds
|
|
@@ -132,7 +133,7 @@ def _get_plan_changes(context: Context, plan: Plan) -> models.PlanChanges:
|
|
|
132
133
|
def _get_plan_backfills(context: Context, plan: Plan) -> t.Dict[str, t.Any]:
|
|
133
134
|
"""Get plan backfills"""
|
|
134
135
|
merged_intervals = context.scheduler().merged_missing_intervals()
|
|
135
|
-
batches = context.scheduler().batch_intervals(merged_intervals, None)
|
|
136
|
+
batches = context.scheduler().batch_intervals(merged_intervals, None, EnvironmentNamingInfo())
|
|
136
137
|
tasks = {snapshot.name: len(intervals) for snapshot, intervals in batches.items()}
|
|
137
138
|
snapshots = plan.context_diff.snapshots
|
|
138
139
|
default_catalog = context.default_catalog
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|