sqlmesh 0.204.1.dev4__py3-none-any.whl → 0.204.1.dev5__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.204.1.dev4'
21
- __version_tuple__ = version_tuple = (0, 204, 1, 'dev4')
20
+ __version__ = version = '0.204.1.dev5'
21
+ __version_tuple__ = version_tuple = (0, 204, 1, 'dev5')
@@ -2,7 +2,10 @@ from sqlmesh.core.config.categorizer import (
2
2
  AutoCategorizationMode as AutoCategorizationMode,
3
3
  CategorizerConfig as CategorizerConfig,
4
4
  )
5
- from sqlmesh.core.config.common import EnvironmentSuffixTarget as EnvironmentSuffixTarget
5
+ from sqlmesh.core.config.common import (
6
+ EnvironmentSuffixTarget as EnvironmentSuffixTarget,
7
+ TableNamingConvention as TableNamingConvention,
8
+ )
6
9
  from sqlmesh.core.config.connection import (
7
10
  AthenaConnectionConfig as AthenaConnectionConfig,
8
11
  BaseDuckDBConnectionConfig as BaseDuckDBConnectionConfig,
@@ -49,6 +49,34 @@ class EnvironmentSuffixTarget(str, Enum):
49
49
  return str(self)
50
50
 
51
51
 
52
+ class TableNamingConvention(str, Enum):
53
+ # Causes table names at the physical layer to follow the convention:
54
+ # <schema-name>__<table-name>__<fingerprint>
55
+ SCHEMA_AND_TABLE = "schema_and_table"
56
+
57
+ # Causes table names at the physical layer to follow the convention:
58
+ # <table-name>__<fingerprint>
59
+ TABLE_ONLY = "table_only"
60
+
61
+ # Takes the table name that would be returned from SCHEMA_AND_TABLE and wraps it in md5()
62
+ # to generate a hash and prefixes the has with `sqlmesh_md5__`, for the following reasons:
63
+ # - at a glance, you can still see it's managed by sqlmesh and that md5 was used to generate the hash
64
+ # - unquoted identifiers that start with numbers can trip up DB engine parsers, so having a text prefix prevents this
65
+ # This causes table names at the physical layer to follow the convention:
66
+ # sqlmesh_md5__3b07384d113edec49eaa6238ad5ff00d
67
+ HASH_MD5 = "hash_md5"
68
+
69
+ @classproperty
70
+ def default(cls) -> TableNamingConvention:
71
+ return TableNamingConvention.SCHEMA_AND_TABLE
72
+
73
+ def __str__(self) -> str:
74
+ return self.name
75
+
76
+ def __repr__(self) -> str:
77
+ return str(self)
78
+
79
+
52
80
  def _concurrent_tasks_validator(v: t.Any) -> int:
53
81
  if isinstance(v, str):
54
82
  v = int(v)
@@ -14,7 +14,7 @@ from sqlglot.optimizer.normalize_identifiers import normalize_identifiers
14
14
  from sqlmesh.cicd.config import CICDBotConfig
15
15
  from sqlmesh.core import constants as c
16
16
  from sqlmesh.core.console import get_console
17
- from sqlmesh.core.config import EnvironmentSuffixTarget
17
+ from sqlmesh.core.config import EnvironmentSuffixTarget, TableNamingConvention
18
18
  from sqlmesh.core.config.base import BaseConfig, UpdateStrategy
19
19
  from sqlmesh.core.config.common import variables_validator, compile_regex_mapping
20
20
  from sqlmesh.core.config.connection import (
@@ -106,6 +106,7 @@ class Config(BaseConfig):
106
106
  model_defaults: Default values for model definitions.
107
107
  physical_schema_mapping: A mapping from regular expressions to names of schemas in which physical tables for corresponding models will be placed.
108
108
  environment_suffix_target: Indicates whether to append the environment name to the schema or table name.
109
+ physical_table_naming_convention: Indicates how tables should be named at the physical layer
109
110
  gateway_managed_virtual_layer: Whether the models' views in the virtual layer are created by the model-specific gateway rather than the default gateway.
110
111
  infer_python_dependencies: Whether to statically analyze Python code to automatically infer Python package requirements.
111
112
  environment_catalog_mapping: A mapping from regular expressions to catalog names. The catalog name is used to determine the target catalog for a given environment.
@@ -147,6 +148,9 @@ class Config(BaseConfig):
147
148
  environment_suffix_target: EnvironmentSuffixTarget = Field(
148
149
  default=EnvironmentSuffixTarget.default
149
150
  )
151
+ physical_table_naming_convention: TableNamingConvention = Field(
152
+ default=TableNamingConvention.default
153
+ )
150
154
  gateway_managed_virtual_layer: bool = False
151
155
  infer_python_dependencies: bool = True
152
156
  environment_catalog_mapping: RegexKeyDict = {}
sqlmesh/core/context.py CHANGED
@@ -2904,9 +2904,11 @@ class GenericContext(BaseContext, t.Generic[C]):
2904
2904
  fingerprint_cache: t.Dict[str, SnapshotFingerprint] = {}
2905
2905
 
2906
2906
  for node in nodes.values():
2907
- kwargs = {}
2907
+ kwargs: t.Dict[str, t.Any] = {}
2908
2908
  if node.project in self._projects:
2909
- kwargs["ttl"] = self.config_for_node(node).snapshot_ttl
2909
+ config = self.config_for_node(node)
2910
+ kwargs["ttl"] = config.snapshot_ttl
2911
+ kwargs["table_naming_convention"] = config.physical_table_naming_convention
2910
2912
 
2911
2913
  snapshot = Snapshot.from_node(
2912
2914
  node,
@@ -13,6 +13,7 @@ from pydantic import Field
13
13
  from sqlglot import exp
14
14
  from sqlglot.optimizer.normalize_identifiers import normalize_identifiers
15
15
 
16
+ from sqlmesh.core.config import TableNamingConvention
16
17
  from sqlmesh.core import constants as c
17
18
  from sqlmesh.core.audit import StandaloneAudit
18
19
  from sqlmesh.core.environment import EnvironmentSuffixTarget
@@ -44,7 +45,7 @@ from sqlmesh.utils.metaprogramming import (
44
45
  format_evaluated_code_exception,
45
46
  Executable,
46
47
  )
47
- from sqlmesh.utils.hashing import hash_data
48
+ from sqlmesh.utils.hashing import hash_data, md5
48
49
  from sqlmesh.utils.pydantic import PydanticModel, field_validator
49
50
 
50
51
  if t.TYPE_CHECKING:
@@ -227,6 +228,7 @@ class SnapshotDataVersion(PydanticModel, frozen=True):
227
228
  change_category: t.Optional[SnapshotChangeCategory] = None
228
229
  physical_schema_: t.Optional[str] = Field(default=None, alias="physical_schema")
229
230
  dev_table_suffix: str
231
+ table_naming_convention: TableNamingConvention = Field(default=TableNamingConvention.default)
230
232
 
231
233
  def snapshot_id(self, name: str) -> SnapshotId:
232
234
  return SnapshotId(name=name, identifier=self.fingerprint.to_identifier())
@@ -333,6 +335,7 @@ class SnapshotInfoMixin(ModelKindMixin):
333
335
  # This can be removed from this model once Pydantic 1 support is dropped (must remain in `Snapshot` though)
334
336
  base_table_name_override: t.Optional[str]
335
337
  dev_table_suffix: str
338
+ table_naming_convention: TableNamingConvention = Field(default=TableNamingConvention.default)
336
339
 
337
340
  @cached_property
338
341
  def identifier(self) -> str:
@@ -451,6 +454,7 @@ class SnapshotInfoMixin(ModelKindMixin):
451
454
  version,
452
455
  catalog=self.fully_qualified_table.catalog,
453
456
  suffix=self.dev_table_suffix if is_dev_table else None,
457
+ naming_convention=self.table_naming_convention,
454
458
  )
455
459
 
456
460
  @property
@@ -580,6 +584,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
580
584
  migrated: Whether or not this snapshot has been created as a result of migration.
581
585
  unrestorable: Whether or not this snapshot can be used to revert its model to a previous version.
582
586
  next_auto_restatement_ts: The timestamp which indicates when is the next time this snapshot should be restated.
587
+ table_naming_convention: Convention to follow when generating the physical table name
583
588
  """
584
589
 
585
590
  name: str
@@ -605,6 +610,9 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
605
610
  base_table_name_override: t.Optional[str] = None
606
611
  next_auto_restatement_ts: t.Optional[int] = None
607
612
  dev_table_suffix: str = "dev"
613
+ table_naming_convention_: TableNamingConvention = Field(
614
+ default=TableNamingConvention.default, alias="table_naming_convention"
615
+ )
608
616
 
609
617
  @field_validator("ttl")
610
618
  @classmethod
@@ -656,6 +664,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
656
664
  ttl: str = c.DEFAULT_SNAPSHOT_TTL,
657
665
  version: t.Optional[str] = None,
658
666
  cache: t.Optional[t.Dict[str, SnapshotFingerprint]] = None,
667
+ table_naming_convention: TableNamingConvention = TableNamingConvention.default,
659
668
  ) -> Snapshot:
660
669
  """Creates a new snapshot for a node.
661
670
 
@@ -666,6 +675,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
666
675
  ttl: A TTL to determine how long orphaned (snapshots that are not promoted anywhere) should live.
667
676
  version: The version that a snapshot is associated with. Usually set during the planning phase.
668
677
  cache: Cache of node name to fingerprints.
678
+ table_naming_convention: Convention to follow when generating the physical table name
669
679
 
670
680
  Returns:
671
681
  The newly created snapshot.
@@ -697,6 +707,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
697
707
  updated_ts=created_ts,
698
708
  ttl=ttl,
699
709
  version=version,
710
+ table_naming_convention=table_naming_convention,
700
711
  )
701
712
 
702
713
  def __eq__(self, other: t.Any) -> bool:
@@ -1013,6 +1024,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
1013
1024
  previous_version = self.previous_version
1014
1025
  self.version = previous_version.data_version.version
1015
1026
  self.physical_schema_ = previous_version.physical_schema
1027
+ self.table_naming_convention = previous_version.table_naming_convention
1016
1028
  if self.is_materialized and (category.is_indirect_non_breaking or category.is_metadata):
1017
1029
  # Reuse the dev table for indirect non-breaking changes.
1018
1030
  self.dev_version_ = (
@@ -1206,6 +1218,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
1206
1218
  custom_materialization=custom_materialization,
1207
1219
  dev_table_suffix=self.dev_table_suffix,
1208
1220
  model_gateway=self.model_gateway,
1221
+ table_naming_convention=self.table_naming_convention, # type: ignore
1209
1222
  )
1210
1223
 
1211
1224
  @property
@@ -1218,6 +1231,7 @@ class Snapshot(PydanticModel, SnapshotInfoMixin):
1218
1231
  change_category=self.change_category,
1219
1232
  physical_schema=self.physical_schema,
1220
1233
  dev_table_suffix=self.dev_table_suffix,
1234
+ table_naming_convention=self.table_naming_convention,
1221
1235
  )
1222
1236
 
1223
1237
  @property
@@ -1568,14 +1582,41 @@ def table_name(
1568
1582
  version: str,
1569
1583
  catalog: t.Optional[str] = None,
1570
1584
  suffix: t.Optional[str] = None,
1585
+ naming_convention: t.Optional[TableNamingConvention] = None,
1571
1586
  ) -> str:
1572
1587
  table = exp.to_table(name)
1573
1588
 
1574
- # bigquery projects usually have "-" in them which is illegal in the table name, so we aggressively prune
1575
- name = "__".join(sanitize_name(part.name) for part in table.parts)
1589
+ naming_convention = naming_convention or TableNamingConvention.default
1590
+
1591
+ if naming_convention == TableNamingConvention.HASH_MD5:
1592
+ # just take a MD5 hash of what we would have generated anyway using SCHEMA_AND_TABLE
1593
+ value_to_hash = table_name(
1594
+ physical_schema=physical_schema,
1595
+ name=name,
1596
+ version=version,
1597
+ catalog=catalog,
1598
+ suffix=suffix,
1599
+ naming_convention=TableNamingConvention.SCHEMA_AND_TABLE,
1600
+ )
1601
+ full_name = f"{c.SQLMESH}_md5__{md5(value_to_hash)}"
1602
+ else:
1603
+ # note: Snapshot._table_name() already strips the catalog from the model name before calling this function
1604
+ # Therefore, a model with 3-part naming like "foo.bar.baz" gets passed as (name="bar.baz", catalog="foo") to this function
1605
+ # This is why there is no TableNamingConvention.CATALOG_AND_SCHEMA_AND_TABLE
1606
+ table_parts = table.parts
1607
+ parts_to_consider = 2 if naming_convention == TableNamingConvention.SCHEMA_AND_TABLE else 1
1608
+
1609
+ # in case the parsed table name has less parts than what the naming convention says we should be considering
1610
+ parts_to_consider = min(len(table_parts), parts_to_consider)
1611
+
1612
+ # bigquery projects usually have "-" in them which is illegal in the table name, so we aggressively prune
1613
+ name = "__".join(sanitize_name(part.name) for part in table_parts[-parts_to_consider:])
1614
+
1615
+ full_name = f"{name}__{version}"
1616
+
1576
1617
  suffix = f"__{suffix}" if suffix else ""
1577
1618
 
1578
- table.set("this", exp.to_identifier(f"{name}__{version}{suffix}"))
1619
+ table.set("this", exp.to_identifier(f"{full_name}{suffix}"))
1579
1620
  table.set("db", exp.to_identifier(physical_schema))
1580
1621
  if not table.catalog and catalog:
1581
1622
  table.set("catalog", exp.to_identifier(catalog))
sqlmesh/utils/hashing.py CHANGED
@@ -9,7 +9,9 @@ def crc32(data: t.Iterable[t.Optional[str]]) -> str:
9
9
  return str(zlib.crc32(_safe_concat(data)))
10
10
 
11
11
 
12
- def md5(data: t.Iterable[t.Optional[str]]) -> str:
12
+ def md5(data: t.Union[str, t.Iterable[t.Optional[str]]]) -> str:
13
+ if isinstance(data, str):
14
+ data = [data]
13
15
  return hashlib.md5(_safe_concat(data)).hexdigest()
14
16
 
15
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlmesh
3
- Version: 0.204.1.dev4
3
+ Version: 0.204.1.dev5
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=gSAeddtFclf2nCkBMyzhbPNAcqg0r8WazK7qEdi8_mY,528
2
+ sqlmesh/_version.py,sha256=fbJau8MH7oiDWFftxCnpgfHAJg9fGWsPwbB-3cOj1OI,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
@@ -13,7 +13,7 @@ sqlmesh/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  sqlmesh/core/_typing.py,sha256=e1f7xO2aZCy38M_3VoDy-XI3shyd99-IFctgIFSgXWM,497
14
14
  sqlmesh/core/console.py,sha256=ovjM75l1A2rAi-ud3ovsIKSGwF9TsGYTK8NvokbCdL4,166111
15
15
  sqlmesh/core/constants.py,sha256=gUABXWYgH_XOSbaZAJsR5o1dmA61JDCvBDyxqqXX3LM,2630
16
- sqlmesh/core/context.py,sha256=34hhZPwqxdjLBuZ-kSlOen07CtlmD3KocQlQdXY8KeI,127454
16
+ sqlmesh/core/context.py,sha256=SkTNrp9TUNx469_mWkemhMk4leGDtmblBIWE7S64sk8,127598
17
17
  sqlmesh/core/context_diff.py,sha256=_Ur55fGLJ58Icsp44I4pVhdi7_JHiHq45mWIco9oFzk,21792
18
18
  sqlmesh/core/dialect.py,sha256=ELBtB8ft0OyalhgqQ1CUnn26xJxLDah2SP1v8kh_FB8,50903
19
19
  sqlmesh/core/environment.py,sha256=odus40R-YzdQdS_IiUq_tFouUXIhnpwmNwo8dE8Aw1k,13041
@@ -37,10 +37,10 @@ sqlmesh/core/analytics/dispatcher.py,sha256=SQw5tHIETb7ei_oCj7ktHEJyeJNbKyIYiOPx
37
37
  sqlmesh/core/audit/__init__.py,sha256=3jogKe-G4X0rOxwH5QVuRRioyesQffSWxKU4PVwMPvA,216
38
38
  sqlmesh/core/audit/builtin.py,sha256=adA-cFCphB66jVY4n66cbwbRTFF1FTEIMrLhRDpbBo0,17783
39
39
  sqlmesh/core/audit/definition.py,sha256=QXXObhR_jHgjWLu0qXxPuIXm0GlFQq33rhp11m_xAUU,18306
40
- sqlmesh/core/config/__init__.py,sha256=b4gFb04tpeZpowqJD-7h3U3TLgxrpQhZahVEAo6VW2Y,2009
40
+ sqlmesh/core/config/__init__.py,sha256=5zxTXjUMuxBj4XlX6bmpIWTp4GsZY5rIdKSCTYbxRBM,2070
41
41
  sqlmesh/core/config/base.py,sha256=t8NQmsgQoZSc-k0dlDiCb8t1jj0AMYdGZ-6se9q_Pks,4898
42
42
  sqlmesh/core/config/categorizer.py,sha256=6vzUoNLjR6GOEb_2mYVz2TwmMv2BfldgHX2u-Le5HZs,1975
43
- sqlmesh/core/config/common.py,sha256=rsb2uVFqPEX3DMsWG_hApwztCuRJP-FAmaQ_5L3-S8g,4006
43
+ sqlmesh/core/config/common.py,sha256=HZxek5DrzdFQl22BypSqB_8amsIT8tqUFSgh66Ibxwk,5158
44
44
  sqlmesh/core/config/connection.py,sha256=NcS1qB0MKIBCfw6vUNLhalVKZTo2igS7VTrcV_T-VgA,88607
45
45
  sqlmesh/core/config/feature_flag.py,sha256=JRcD31OG_t2cYc24meKbHDGB0iVID0P07V2oOeB_mgA,203
46
46
  sqlmesh/core/config/format.py,sha256=6CXFbvnor56xbldKE-Vrm9k_ABRoY4v6vgIb3mCihiQ,1355
@@ -52,7 +52,7 @@ sqlmesh/core/config/migration.py,sha256=3lZIlmIcQH3_hIEm3Y3jFtvpw0YXzRzAnk4Odikl
52
52
  sqlmesh/core/config/model.py,sha256=xDKIHD8WIzsPu7DfpybPM3bLobppttCZjvD3TTVnwps,4182
53
53
  sqlmesh/core/config/naming.py,sha256=KVGaxUgswoQajXR_cHFJvgkmEFcU1V182GkOH1SJxuE,326
54
54
  sqlmesh/core/config/plan.py,sha256=wJEDfocMcKSMN0-5gVojjIcmJZ0376LJU3tkGMTm-Zc,1558
55
- sqlmesh/core/config/root.py,sha256=-ev6H4Qi0rlwiO8NyvgGXsunkvpVpaRZD6ZCuTDF4V4,16223
55
+ sqlmesh/core/config/root.py,sha256=XEp_BSTMODsIts86W_lA87FPJdlz1CH1DSvU4VdqszE,16468
56
56
  sqlmesh/core/config/run.py,sha256=rIK0QnN_vArrwps2TXGVEbvao2AnGZgzXo7EliJa42E,852
57
57
  sqlmesh/core/config/scheduler.py,sha256=LVEHIln7dqv8ygo4uniji4j9-gfuJlk-WpQU9FAqILs,7031
58
58
  sqlmesh/core/config/ui.py,sha256=jsO-S6_d9NkLZGG5pT4mgKgxMF34KzkDociZAMvCX3U,278
@@ -102,7 +102,7 @@ sqlmesh/core/plan/stages.py,sha256=JN7rwo6ibY5Ctqof3Us7Eu2x85n5GXH0rCA47BBvP1o,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=DwYTNcDfPQUQ1osF_63SdicSj7oqVjtmPPEzqwsxDLU,85748
105
+ sqlmesh/core/snapshot/definition.py,sha256=JRNNrN9KYAQGM-BfL7osCRjGPRWh3PIX_CD-cnXnT4s,88135
106
106
  sqlmesh/core/snapshot/evaluator.py,sha256=9l73YNKTEu9N91JTSxnxLqQo-lAaX6ihPxVNi4wUfFQ,91846
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
@@ -275,7 +275,7 @@ sqlmesh/utils/dag.py,sha256=L_jwKf81wCySmt1TFs4vEKsrIHSOPTBhptlmv1bsSSg,7025
275
275
  sqlmesh/utils/date.py,sha256=uS0Kii4hFJeTXqXtM39sDCzvFhTAoPk_NPg51T1YYeo,16218
276
276
  sqlmesh/utils/errors.py,sha256=8FE33Eo3KN3Y4s5EZM5t92jZi9BAVGzkr3QCGlrLeDk,5679
277
277
  sqlmesh/utils/git.py,sha256=v1MD4Zwn52UBn_tTfoKn8SAPJVGC6SEFrJ4WEJFbgF0,1868
278
- sqlmesh/utils/hashing.py,sha256=4Bi0NvRctBHzg58btNxXwSNgcvj8doIVVvOjJ40mHBg,512
278
+ sqlmesh/utils/hashing.py,sha256=nZRKvLNQ83tLG4IoXshVJZf-MbDrXC1HOeNw8Ji-tMM,578
279
279
  sqlmesh/utils/jinja.py,sha256=zulSPIICdFOjN__xkAiMpxbCS7S0--xAFK9d8VG0KvU,27844
280
280
  sqlmesh/utils/metaprogramming.py,sha256=yDWS3_tkm6Yd5TNHgii2x_VdZ2pVM0vL6oFuwFMMs0A,23554
281
281
  sqlmesh/utils/migration.py,sha256=R7Ck6FX-LfcujGy7sgS0kDWlK-xAEBODr3gqIQ8gC08,835
@@ -285,7 +285,7 @@ sqlmesh/utils/pydantic.py,sha256=o_NsXbIpDqNpUA1Uc5xF0ZzoXQYYB0DfHwdRxBwXPNk,120
285
285
  sqlmesh/utils/rich.py,sha256=cwQ5nJ6sgz64xHtoh6_ec7ReV5YpsOGhMtUJnwoRfEI,3549
286
286
  sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
287
287
  sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
288
- sqlmesh-0.204.1.dev4.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
288
+ sqlmesh-0.204.1.dev5.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
289
289
  web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
290
290
  web/client/dist/index.html,sha256=SXykdSRNgrT1k6I2dPZPEfpxPjIsi8-yVFijt-naSA4,5472
291
291
  web/client/dist/assets/Audits-Jm353fhk.js,sha256=ry6b5IKT3hLAfD5C3T2BqxulfauEV0n0YZ2vsP4eQ_U,1041
@@ -403,8 +403,8 @@ web/server/api/endpoints/models.py,sha256=kwj0s7uve3iZSMfmjkoPVMFMeY1sD0peTeyrWf
403
403
  web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
404
404
  web/server/api/endpoints/plan.py,sha256=bbbY50W_2MsZSTxOHWMKz0tbIm75nsRSlPy8GI2fg9Q,9306
405
405
  web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
406
- sqlmesh-0.204.1.dev4.dist-info/METADATA,sha256=O_WE277wyBA6qWGMWNhTkdmCV8yJrphTILnACvNFqPU,26678
407
- sqlmesh-0.204.1.dev4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
408
- sqlmesh-0.204.1.dev4.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
409
- sqlmesh-0.204.1.dev4.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
410
- sqlmesh-0.204.1.dev4.dist-info/RECORD,,
406
+ sqlmesh-0.204.1.dev5.dist-info/METADATA,sha256=sT5HaOw1myp03lnPj5gp0knBV7Qyj2_LJiFCiac5hdE,26678
407
+ sqlmesh-0.204.1.dev5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
408
+ sqlmesh-0.204.1.dev5.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
409
+ sqlmesh-0.204.1.dev5.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
410
+ sqlmesh-0.204.1.dev5.dist-info/RECORD,,