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 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.197.1.dev11'
21
- __version_tuple__ = version_tuple = (0, 197, 1, 'dev11')
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
- inclusive_interval = make_inclusive(interval[0], interval[1])
3820
- if snapshot.model.interval_unit.is_date_granularity:
3821
- return f"insert {to_ds(inclusive_interval[0])} - {to_ds(inclusive_interval[1])}"
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(intervals, context)
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(merged_intervals, deployability_index)
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(self, intervals: Intervals, context: ExecutionContext) -> 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
- for signal_name, kwargs in signals.items():
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.197.1.dev11
3
+ Version: 0.198.1.dev1
4
4
  Summary: Next-generation data transformation framework
5
5
  Author-email: "TobikoData Inc." <engineering@tobikodata.com>
6
6
  License: Apache License
@@ -1,5 +1,5 @@
1
1
  sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
2
- sqlmesh/_version.py,sha256=Gn3T2eA62VLpoFoj_Xuw8Id_w-JyLIM4P69sOv8yQEo,530
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=_B9rmOn0WbgP8DsST8Lg9ODGu9u0WA2D2jRrJRX0VMM,153805
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=9ADqU9YNGABJjx4GOraPC_JbzOv0GpAig8v1w6Hg1ko,36417
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=zbNqxmIi136n4Ee-25vvEVK0pICQM2KVsgm2qGR12l0,85447
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.197.1.dev11.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
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=OYuQ_4dgbhG9ibTcX1a8mvYgH3ANxw9Fhbb4wg6QWqc,9222
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.197.1.dev11.dist-info/METADATA,sha256=GxMBbI3F4-uteCE6qxpwy8K7KehHzifXMAeO1K7BxtE,26659
405
- sqlmesh-0.197.1.dev11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
406
- sqlmesh-0.197.1.dev11.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
407
- sqlmesh-0.197.1.dev11.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
408
- sqlmesh-0.197.1.dev11.dist-info/RECORD,,
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,,
@@ -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