sqlmesh 0.208.2.dev2__py3-none-any.whl → 0.208.2.dev3__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.208.2.dev2'
21
- __version_tuple__ = version_tuple = (0, 208, 2, 'dev2')
20
+ __version__ = version = '0.208.2.dev3'
21
+ __version_tuple__ = version_tuple = (0, 208, 2, 'dev3')
@@ -239,8 +239,6 @@ class PlanBuilder:
239
239
  snapshot: The target snapshot.
240
240
  choice: The user decision on how to version the target snapshot and its children.
241
241
  """
242
- if self._forward_only:
243
- raise PlanError("Choice setting is not supported by a forward-only plan.")
244
242
  if not self._is_new_snapshot(snapshot):
245
243
  raise PlanError(
246
244
  f"A choice can't be changed for the existing version of {snapshot.name}."
@@ -250,8 +248,6 @@ class PlanBuilder:
250
248
  and snapshot.snapshot_id not in self._context_diff.added
251
249
  ):
252
250
  raise PlanError(f"Only directly modified models can be categorized ({snapshot.name}).")
253
- if snapshot.is_model and snapshot.model.forward_only:
254
- raise PlanError(f"Forward-only model {snapshot.name} cannot be categorized manually.")
255
251
 
256
252
  self._choices[snapshot.snapshot_id] = choice
257
253
  self._latest_plan = None
@@ -369,8 +365,10 @@ class PlanBuilder:
369
365
  restate_models = {
370
366
  s.name
371
367
  for s in self._context_diff.new_snapshots.values()
372
- if s.is_materialized
373
- and (self._forward_only or s.model.forward_only)
368
+ if s.is_model
369
+ and not s.is_symbolic
370
+ and (s.is_forward_only or s.model.forward_only)
371
+ and not s.is_no_preview
374
372
  and (
375
373
  # Metadata changes should not be previewed.
376
374
  self._context_diff.directly_modified(s.name)
@@ -395,6 +393,9 @@ class PlanBuilder:
395
393
  for s_id in dag:
396
394
  snapshot = self._context_diff.snapshots[s_id]
397
395
 
396
+ if is_preview and snapshot.is_no_preview:
397
+ continue
398
+
398
399
  # Since we are traversing the graph in topological order and the largest interval range is pushed down
399
400
  # the graph we just have to check our immediate parents in the graph and not the whole upstream graph.
400
401
  restating_parents = [
@@ -526,6 +527,9 @@ class PlanBuilder:
526
527
 
527
528
  def _check_destructive_changes(self, directly_modified: t.Set[SnapshotId]) -> None:
528
529
  for s_id in sorted(directly_modified):
530
+ if s_id.name not in self._context_diff.modified_snapshots:
531
+ continue
532
+
529
533
  snapshot = self._context_diff.snapshots[s_id]
530
534
  # should we raise/warn if this snapshot has/inherits a destructive change?
531
535
  should_raise_or_warn = (
@@ -583,38 +587,38 @@ class PlanBuilder:
583
587
  if not snapshot or not self._is_new_snapshot(snapshot):
584
588
  continue
585
589
 
590
+ forward_only = self._is_forward_only_change(s_id) or self._forward_only
591
+
586
592
  if s_id in self._choices:
587
- snapshot.categorize_as(self._choices[s_id])
593
+ snapshot.categorize_as(self._choices[s_id], forward_only)
588
594
  continue
589
595
 
590
596
  if s_id in self._context_diff.added:
591
- snapshot.categorize_as(SnapshotChangeCategory.BREAKING)
592
- elif self._is_forward_only_change(s_id) or self._forward_only:
593
- # In case of the forward only plan any modifications result in reuse of the
594
- # previous version for non-seed models.
595
- # New snapshots of seed models are considered non-breaking ones.
596
- category = (
597
- SnapshotChangeCategory.NON_BREAKING
598
- if snapshot.is_seed
599
- else SnapshotChangeCategory.FORWARD_ONLY
600
- )
601
- # If the model kind changes mark as breaking
602
- if snapshot.is_model and snapshot.name in self._context_diff.modified_snapshots:
603
- _, old = self._context_diff.modified_snapshots[snapshot.name]
604
- if _is_breaking_kind_change(old, snapshot):
605
- category = SnapshotChangeCategory.BREAKING
606
-
607
- snapshot.categorize_as(category)
597
+ snapshot.categorize_as(SnapshotChangeCategory.BREAKING, forward_only)
608
598
  elif s_id.name in self._context_diff.modified_snapshots:
609
- self._categorize_snapshot(snapshot, dag, indirectly_modified)
599
+ self._categorize_snapshot(snapshot, forward_only, dag, indirectly_modified)
610
600
 
611
601
  def _categorize_snapshot(
612
- self, snapshot: Snapshot, dag: DAG[SnapshotId], indirectly_modified: SnapshotMapping
602
+ self,
603
+ snapshot: Snapshot,
604
+ forward_only: bool,
605
+ dag: DAG[SnapshotId],
606
+ indirectly_modified: SnapshotMapping,
613
607
  ) -> None:
614
608
  s_id = snapshot.snapshot_id
615
609
 
616
610
  if self._context_diff.directly_modified(s_id.name):
611
+ new, old = self._context_diff.modified_snapshots[s_id.name]
612
+ is_breaking_kind_change = _is_breaking_kind_change(old, new)
613
+ if is_breaking_kind_change or snapshot.is_seed:
614
+ # Breaking kind changes and seed changes can't be forward-only.
615
+ forward_only = False
616
+
617
617
  if self._auto_categorization_enabled:
618
+ if is_breaking_kind_change:
619
+ snapshot.categorize_as(SnapshotChangeCategory.BREAKING, forward_only)
620
+ return
621
+
618
622
  s_id_with_missing_columns: t.Optional[SnapshotId] = None
619
623
  this_sid_with_downstream = indirectly_modified.get(s_id, set()) | {s_id}
620
624
  for downstream_s_id in this_sid_with_downstream:
@@ -626,18 +630,18 @@ class PlanBuilder:
626
630
  s_id_with_missing_columns = downstream_s_id
627
631
  break
628
632
 
629
- new, old = self._context_diff.modified_snapshots[s_id.name]
630
633
  if s_id_with_missing_columns is None:
631
634
  change_category = categorize_change(new, old, config=self._categorizer_config)
632
635
  if change_category is not None:
633
- snapshot.categorize_as(change_category)
636
+ snapshot.categorize_as(change_category, forward_only)
634
637
  else:
635
638
  mode = self._categorizer_config.dict().get(
636
639
  new.model.source_type, AutoCategorizationMode.OFF
637
640
  )
638
641
  if mode == AutoCategorizationMode.FULL:
639
- snapshot.categorize_as(SnapshotChangeCategory.BREAKING)
642
+ snapshot.categorize_as(SnapshotChangeCategory.BREAKING, forward_only)
640
643
  elif self._context_diff.indirectly_modified(snapshot.name):
644
+ all_upstream_forward_only = set()
641
645
  all_upstream_categories = set()
642
646
  direct_parent_categories = set()
643
647
 
@@ -646,27 +650,30 @@ class PlanBuilder:
646
650
 
647
651
  if parent and self._is_new_snapshot(parent):
648
652
  all_upstream_categories.add(parent.change_category)
653
+ all_upstream_forward_only.add(parent.is_forward_only)
649
654
  if p_id in snapshot.parents:
650
655
  direct_parent_categories.add(parent.change_category)
651
656
 
652
- if snapshot.is_model and snapshot.model.forward_only:
653
- snapshot.categorize_as(SnapshotChangeCategory.FORWARD_ONLY)
654
- elif direct_parent_categories.intersection(
657
+ if all_upstream_forward_only == {True} or (
658
+ snapshot.is_model and snapshot.model.forward_only
659
+ ):
660
+ forward_only = True
661
+
662
+ if direct_parent_categories.intersection(
655
663
  {SnapshotChangeCategory.BREAKING, SnapshotChangeCategory.INDIRECT_BREAKING}
656
664
  ):
657
- snapshot.categorize_as(SnapshotChangeCategory.INDIRECT_BREAKING)
665
+ snapshot.categorize_as(SnapshotChangeCategory.INDIRECT_BREAKING, forward_only)
658
666
  elif not direct_parent_categories:
659
- snapshot.categorize_as(self._get_orphaned_indirect_change_category(snapshot))
660
- elif SnapshotChangeCategory.FORWARD_ONLY in all_upstream_categories:
661
- # FORWARD_ONLY must take precedence over INDIRECT_NON_BREAKING
662
- snapshot.categorize_as(SnapshotChangeCategory.FORWARD_ONLY)
667
+ snapshot.categorize_as(
668
+ self._get_orphaned_indirect_change_category(snapshot), forward_only
669
+ )
663
670
  elif all_upstream_categories == {SnapshotChangeCategory.METADATA}:
664
- snapshot.categorize_as(SnapshotChangeCategory.METADATA)
671
+ snapshot.categorize_as(SnapshotChangeCategory.METADATA, forward_only)
665
672
  else:
666
- snapshot.categorize_as(SnapshotChangeCategory.INDIRECT_NON_BREAKING)
673
+ snapshot.categorize_as(SnapshotChangeCategory.INDIRECT_NON_BREAKING, forward_only)
667
674
  else:
668
675
  # Metadata updated.
669
- snapshot.categorize_as(SnapshotChangeCategory.METADATA)
676
+ snapshot.categorize_as(SnapshotChangeCategory.METADATA, forward_only)
670
677
 
671
678
  def _get_orphaned_indirect_change_category(
672
679
  self, indirect_snapshot: Snapshot
@@ -769,10 +776,7 @@ class PlanBuilder:
769
776
  if snapshot.is_model and _is_breaking_kind_change(old, snapshot):
770
777
  return False
771
778
  return (
772
- snapshot.is_model
773
- and snapshot.model.forward_only
774
- and not snapshot.change_category
775
- and bool(snapshot.previous_versions)
779
+ snapshot.is_model and snapshot.model.forward_only and bool(snapshot.previous_versions)
776
780
  )
777
781
 
778
782
  def _is_new_snapshot(self, snapshot: Snapshot) -> bool:
@@ -811,7 +815,7 @@ class PlanBuilder:
811
815
  and not candidate.model.forward_only
812
816
  and promoted.is_forward_only
813
817
  and not promoted.is_paused
814
- and not candidate.reuses_previous_version
818
+ and not candidate.is_no_rebuild
815
819
  and promoted.version == candidate.version
816
820
  ):
817
821
  raise PlanError(
@@ -76,6 +76,7 @@ class SnapshotChangeCategory(IntEnum):
76
76
 
77
77
  BREAKING = 1
78
78
  NON_BREAKING = 2
79
+ # FORWARD_ONLY category is deprecated and is kept for backwards compatibility.
79
80
  FORWARD_ONLY = 3
80
81
  INDIRECT_BREAKING = 4
81
82
  INDIRECT_NON_BREAKING = 5
@@ -336,6 +337,7 @@ class SnapshotInfoMixin(ModelKindMixin):
336
337
  base_table_name_override: t.Optional[str]
337
338
  dev_table_suffix: str
338
339
  table_naming_convention: TableNamingConvention = Field(default=TableNamingConvention.default)
340
+ forward_only: bool
339
341
 
340
342
  @cached_property
341
343
  def identifier(self) -> str:
@@ -383,7 +385,7 @@ class SnapshotInfoMixin(ModelKindMixin):
383
385
 
384
386
  @property
385
387
  def is_forward_only(self) -> bool:
386
- return self.change_category == SnapshotChangeCategory.FORWARD_ONLY
388
+ return self.forward_only or self.change_category == SnapshotChangeCategory.FORWARD_ONLY
387
389
 
388
390
  @property
389
391
  def is_metadata(self) -> bool:
@@ -394,9 +396,18 @@ class SnapshotInfoMixin(ModelKindMixin):
394
396
  return self.change_category == SnapshotChangeCategory.INDIRECT_NON_BREAKING
395
397
 
396
398
  @property
397
- def reuses_previous_version(self) -> bool:
398
- return self.change_category in (
399
- SnapshotChangeCategory.FORWARD_ONLY,
399
+ def is_no_rebuild(self) -> bool:
400
+ """Returns true if this snapshot doesn't require a rebuild in production."""
401
+ return self.forward_only or self.change_category in (
402
+ SnapshotChangeCategory.FORWARD_ONLY, # Backwards compatibility
403
+ SnapshotChangeCategory.METADATA,
404
+ SnapshotChangeCategory.INDIRECT_NON_BREAKING,
405
+ )
406
+
407
+ @property
408
+ def is_no_preview(self) -> bool:
409
+ """Returns true if this snapshot doesn't require a preview in development."""
410
+ return self.forward_only and self.change_category in (
400
411
  SnapshotChangeCategory.METADATA,
401
412
  SnapshotChangeCategory.INDIRECT_NON_BREAKING,
402
413
  )
@@ -487,6 +498,7 @@ class SnapshotTableInfo(PydanticModel, SnapshotInfoMixin, frozen=True):
487
498
  custom_materialization: t.Optional[str] = None
488
499
  dev_table_suffix: str
489
500
  model_gateway: t.Optional[str] = None
501
+ forward_only: bool = False
490
502
 
491
503
  def __lt__(self, other: SnapshotTableInfo) -> bool:
492
504
  return self.name < other.name
@@ -614,6 +626,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
614
626
  table_naming_convention_: TableNamingConvention = Field(
615
627
  default=TableNamingConvention.default, alias="table_naming_convention"
616
628
  )
629
+ forward_only: bool = False
617
630
 
618
631
  @field_validator("ttl")
619
632
  @classmethod
@@ -1006,22 +1019,26 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
1006
1019
  )
1007
1020
  return intervals
1008
1021
 
1009
- def categorize_as(self, category: SnapshotChangeCategory) -> None:
1022
+ def categorize_as(self, category: SnapshotChangeCategory, forward_only: bool = False) -> None:
1010
1023
  """Assigns the given category to this snapshot.
1011
1024
 
1012
1025
  Args:
1013
1026
  category: The change category to assign to this snapshot.
1027
+ forward_only: Whether or not this snapshot is applied going forward in production.
1014
1028
  """
1029
+ assert category != SnapshotChangeCategory.FORWARD_ONLY, (
1030
+ "FORWARD_ONLY change category is deprecated"
1031
+ )
1032
+
1015
1033
  self.dev_version_ = self.fingerprint.to_version()
1016
- reuse_previous_version = category in (
1017
- SnapshotChangeCategory.FORWARD_ONLY,
1034
+ is_no_rebuild = forward_only or category in (
1018
1035
  SnapshotChangeCategory.INDIRECT_NON_BREAKING,
1019
1036
  SnapshotChangeCategory.METADATA,
1020
1037
  )
1021
1038
  if self.is_model and self.model.physical_version:
1022
1039
  # If the model has a pinned version then use that.
1023
1040
  self.version = self.model.physical_version
1024
- elif reuse_previous_version and self.previous_version:
1041
+ elif is_no_rebuild and self.previous_version:
1025
1042
  previous_version = self.previous_version
1026
1043
  self.version = previous_version.data_version.version
1027
1044
  self.physical_schema_ = previous_version.physical_schema
@@ -1040,6 +1057,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
1040
1057
  self.version = self.fingerprint.to_version()
1041
1058
 
1042
1059
  self.change_category = category
1060
+ self.forward_only = forward_only
1043
1061
 
1044
1062
  @property
1045
1063
  def categorized(self) -> bool:
@@ -1220,6 +1238,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
1220
1238
  dev_table_suffix=self.dev_table_suffix,
1221
1239
  model_gateway=self.model_gateway,
1222
1240
  table_naming_convention=self.table_naming_convention, # type: ignore
1241
+ forward_only=self.forward_only,
1223
1242
  )
1224
1243
 
1225
1244
  @property
@@ -338,7 +338,7 @@ class SnapshotEvaluator:
338
338
  continue
339
339
  deployability_flags = [True]
340
340
  if (
341
- snapshot.reuses_previous_version
341
+ snapshot.is_no_rebuild
342
342
  or snapshot.is_managed
343
343
  or (snapshot.is_model and snapshot.model.forward_only)
344
344
  or (deployability_index and not deployability_index.is_deployable(snapshot))
@@ -727,6 +727,7 @@ class SharedVersionSnapshot(PydanticModel):
727
727
  disable_restatement: bool
728
728
  effective_from: t.Optional[TimeLike]
729
729
  raw_snapshot: t.Dict[str, t.Any]
730
+ forward_only: bool
730
731
 
731
732
  @property
732
733
  def snapshot_id(self) -> SnapshotId:
@@ -734,7 +735,7 @@ class SharedVersionSnapshot(PydanticModel):
734
735
 
735
736
  @property
736
737
  def is_forward_only(self) -> bool:
737
- return self.change_category == SnapshotChangeCategory.FORWARD_ONLY
738
+ return self.forward_only or self.change_category == SnapshotChangeCategory.FORWARD_ONLY
738
739
 
739
740
  @property
740
741
  def normalized_effective_from_ts(self) -> t.Optional[int]:
@@ -797,4 +798,5 @@ class SharedVersionSnapshot(PydanticModel):
797
798
  disable_restatement=raw_node.get("kind", {}).get("disable_restatement", False),
798
799
  effective_from=raw_snapshot.get("effective_from"),
799
800
  raw_snapshot=raw_snapshot,
801
+ forward_only=raw_snapshot.get("forward_only", False),
800
802
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.208.2.dev2
3
+ Version: 0.208.2.dev3
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=DQZrmfPfGnMmKuYxjtJ-QSH3_s8KGHsAP_HfgYIQbp0,528
2
+ sqlmesh/_version.py,sha256=2yhGdTiOM_8xzexAMMOW8mI6LuP-FyYBN0zpkedz24A,528
3
3
  sqlmesh/magics.py,sha256=bEzYqXHcM0P3CjyUZ1O9arlmXAdLAhoglKbQ29fD9AE,41842
4
4
  sqlmesh/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  sqlmesh/cicd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -94,7 +94,7 @@ sqlmesh/core/model/meta.py,sha256=D9InI9M2-IXeb34vkXNQSLALL8xVXjZ_LXwI-Tqxm7I,21
94
94
  sqlmesh/core/model/schema.py,sha256=_HMYfzK9wWXh7_CQDIIGnuQUD4aiX3o5D2cRp2sERzc,3387
95
95
  sqlmesh/core/model/seed.py,sha256=a0M-1zY1gOkN5ph2GQyataEdBSCtq50YjeFk2LyvInI,5058
96
96
  sqlmesh/core/plan/__init__.py,sha256=NKSvM7ZBVjw9ho3J65M1wFvG3KURB8PJ0FHHLmtSF44,443
97
- sqlmesh/core/plan/builder.py,sha256=aj-4jDXy7Uk2apMClBNiR_d317PVURhF3XTt5MN-KeA,42389
97
+ sqlmesh/core/plan/builder.py,sha256=2Nv3D8SujJfMiDLXZR8uUv95lKZZx95RHVbeJ_H2iLo,41988
98
98
  sqlmesh/core/plan/definition.py,sha256=yrX_uZMXi29ltkuowWhNUOi1kd0Uq0TQoM574EI6JHo,14019
99
99
  sqlmesh/core/plan/evaluator.py,sha256=0oqepq0qZ_tPhAye6Q9gLenBD_8yE3E8AAwt553lz7U,22163
100
100
  sqlmesh/core/plan/explainer.py,sha256=aBkvtM9eog_2NIglazSDdG_i9TTCdFSVOkCw5N8O-1k,12028
@@ -102,8 +102,8 @@ sqlmesh/core/plan/stages.py,sha256=n2gBzOdal2oMgwHgL2pns9vLZmkKQb1j6qBZnk5y8NE,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=mYVeH_65o2Bb6DVelhhWuns-bJGBUi4YKfJwmxd28qw,88752
106
- sqlmesh/core/snapshot/evaluator.py,sha256=SqraUGfD07q_I18m9ZOxfV-cUo3sGZ4RrOaqKRP6FGs,91719
105
+ sqlmesh/core/snapshot/definition.py,sha256=iYQAIkrAUQmMt7_HTVGcXsdXK4waBVWR8UhqEJ7yLdc,89669
106
+ sqlmesh/core/snapshot/evaluator.py,sha256=brtESRAypTYpltOKyQYQZ8JwpT9OmBOXUR3zR5hJ6qE,91709
107
107
  sqlmesh/core/state_sync/__init__.py,sha256=B60xj-_Xk-4jas3UphLvwkuf04G-9AyGckcblXE0aRg,869
108
108
  sqlmesh/core/state_sync/base.py,sha256=AdqWmbhnvRFqVcFK6L01uCvpBVAYGuMrm4P0D3u_NaU,18334
109
109
  sqlmesh/core/state_sync/cache.py,sha256=0AsYdQyBqbLdJvkBQ-hDAipsvnn_jSps-nya-Q4XeL0,5337
@@ -114,7 +114,7 @@ sqlmesh/core/state_sync/db/environment.py,sha256=iTxrdNlKB36S54PUdlqEqlxiAZJtKNE
114
114
  sqlmesh/core/state_sync/db/facade.py,sha256=WWditN46A9DXHDcHT7kUZaCfkkjcaDfMC9qO1EfH4Og,25266
115
115
  sqlmesh/core/state_sync/db/interval.py,sha256=aMQSF42bVOUU05g7oizcrKR6TBVzR6TJppxzlxkmJFU,17985
116
116
  sqlmesh/core/state_sync/db/migrator.py,sha256=2LNUwOBNFkA1ntp-Z93S_OWxFQhOBj3ZD_ZqPCyPEAE,18139
117
- sqlmesh/core/state_sync/db/snapshot.py,sha256=LV5w3hvwxa-v_ilC1iuQb4iAJDNoi9DH1aNb5RzdSps,29424
117
+ sqlmesh/core/state_sync/db/snapshot.py,sha256=SpVg55CB4FB4DX1ZXVSJrjdek_W0RNYEkgrQBkCPJIg,29534
118
118
  sqlmesh/core/state_sync/db/utils.py,sha256=204OpT3ISFPCwWP9Aqq8nr6ETl24sbG5uOyo86IJv6E,3819
119
119
  sqlmesh/core/state_sync/db/version.py,sha256=fl5g1tNMYu8O6WTN4J3bciwjGq0c5nZlRDlxxRKGU78,2210
120
120
  sqlmesh/core/test/__init__.py,sha256=e83TJPwPRR_rAG29Y0OVbZb-5oWVBzz-_wrcd22Qk10,418
@@ -288,7 +288,7 @@ sqlmesh/utils/pydantic.py,sha256=o_NsXbIpDqNpUA1Uc5xF0ZzoXQYYB0DfHwdRxBwXPNk,120
288
288
  sqlmesh/utils/rich.py,sha256=cwQ5nJ6sgz64xHtoh6_ec7ReV5YpsOGhMtUJnwoRfEI,3549
289
289
  sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
290
290
  sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
291
- sqlmesh-0.208.2.dev2.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
291
+ sqlmesh-0.208.2.dev3.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
292
292
  web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
293
293
  web/client/dist/index.html,sha256=SXykdSRNgrT1k6I2dPZPEfpxPjIsi8-yVFijt-naSA4,5472
294
294
  web/client/dist/assets/Audits-Jm353fhk.js,sha256=ry6b5IKT3hLAfD5C3T2BqxulfauEV0n0YZ2vsP4eQ_U,1041
@@ -406,8 +406,8 @@ web/server/api/endpoints/models.py,sha256=kwj0s7uve3iZSMfmjkoPVMFMeY1sD0peTeyrWf
406
406
  web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
407
407
  web/server/api/endpoints/plan.py,sha256=bbbY50W_2MsZSTxOHWMKz0tbIm75nsRSlPy8GI2fg9Q,9306
408
408
  web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
409
- sqlmesh-0.208.2.dev2.dist-info/METADATA,sha256=2TI9k1J6WbM_E9Un6K6FR4LZYh3fc2kreXYMs4qVFEc,26685
410
- sqlmesh-0.208.2.dev2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
411
- sqlmesh-0.208.2.dev2.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
412
- sqlmesh-0.208.2.dev2.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
413
- sqlmesh-0.208.2.dev2.dist-info/RECORD,,
409
+ sqlmesh-0.208.2.dev3.dist-info/METADATA,sha256=UVocMY8V61XGRDT55-zhV0pfTSb1i4f0M1oXjIdTfO8,26685
410
+ sqlmesh-0.208.2.dev3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
411
+ sqlmesh-0.208.2.dev3.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
412
+ sqlmesh-0.208.2.dev3.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
413
+ sqlmesh-0.208.2.dev3.dist-info/RECORD,,