sqlmesh 0.204.1.dev3__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 +2 -2
- sqlmesh/core/config/__init__.py +4 -1
- sqlmesh/core/config/common.py +28 -0
- sqlmesh/core/config/root.py +5 -1
- sqlmesh/core/console.py +19 -1
- sqlmesh/core/context.py +4 -2
- sqlmesh/core/linter/definition.py +3 -2
- sqlmesh/core/linter/rule.py +3 -1
- sqlmesh/core/snapshot/definition.py +45 -4
- sqlmesh/utils/hashing.py +3 -1
- {sqlmesh-0.204.1.dev3.dist-info → sqlmesh-0.204.1.dev5.dist-info}/METADATA +1 -1
- {sqlmesh-0.204.1.dev3.dist-info → sqlmesh-0.204.1.dev5.dist-info}/RECORD +16 -16
- {sqlmesh-0.204.1.dev3.dist-info → sqlmesh-0.204.1.dev5.dist-info}/WHEEL +0 -0
- {sqlmesh-0.204.1.dev3.dist-info → sqlmesh-0.204.1.dev5.dist-info}/entry_points.txt +0 -0
- {sqlmesh-0.204.1.dev3.dist-info → sqlmesh-0.204.1.dev5.dist-info}/licenses/LICENSE +0 -0
- {sqlmesh-0.204.1.dev3.dist-info → sqlmesh-0.204.1.dev5.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.204.1.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 204, 1, '
|
|
20
|
+
__version__ = version = '0.204.1.dev5'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 204, 1, 'dev5')
|
sqlmesh/core/config/__init__.py
CHANGED
|
@@ -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
|
|
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,
|
sqlmesh/core/config/common.py
CHANGED
|
@@ -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)
|
sqlmesh/core/config/root.py
CHANGED
|
@@ -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/console.py
CHANGED
|
@@ -2685,7 +2685,25 @@ class TerminalConsole(Console):
|
|
|
2685
2685
|
self, violations: t.List[RuleViolation], model: Model, is_error: bool = False
|
|
2686
2686
|
) -> None:
|
|
2687
2687
|
severity = "errors" if is_error else "warnings"
|
|
2688
|
-
|
|
2688
|
+
|
|
2689
|
+
# Sort violations by line, then alphabetically the name of the violation
|
|
2690
|
+
# Violations with no range go first
|
|
2691
|
+
sorted_violations = sorted(
|
|
2692
|
+
violations,
|
|
2693
|
+
key=lambda v: (
|
|
2694
|
+
v.violation_range.start.line if v.violation_range else -1,
|
|
2695
|
+
v.rule.name.lower(),
|
|
2696
|
+
),
|
|
2697
|
+
)
|
|
2698
|
+
violations_text = [
|
|
2699
|
+
(
|
|
2700
|
+
f" - Line {v.violation_range.start.line + 1}: {v.rule.name} - {v.violation_msg}"
|
|
2701
|
+
if v.violation_range
|
|
2702
|
+
else f" - {v.rule.name}: {v.violation_msg}"
|
|
2703
|
+
)
|
|
2704
|
+
for v in sorted_violations
|
|
2705
|
+
]
|
|
2706
|
+
violations_msg = "\n".join(violations_text)
|
|
2689
2707
|
msg = f"Linter {severity} for {model._path}:\n{violations_msg}"
|
|
2690
2708
|
|
|
2691
2709
|
if is_error:
|
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
|
-
|
|
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,
|
|
@@ -108,9 +108,10 @@ class RuleSet(Mapping[str, type[Rule]]):
|
|
|
108
108
|
|
|
109
109
|
for rule in self._underlying.values():
|
|
110
110
|
violation = rule(context).check_model(model)
|
|
111
|
-
|
|
111
|
+
if isinstance(violation, RuleViolation):
|
|
112
|
+
violation = [violation]
|
|
112
113
|
if violation:
|
|
113
|
-
violations.
|
|
114
|
+
violations.extend(violation)
|
|
114
115
|
|
|
115
116
|
return violations
|
|
116
117
|
|
sqlmesh/core/linter/rule.py
CHANGED
|
@@ -70,7 +70,9 @@ class Rule(abc.ABC, metaclass=_Rule):
|
|
|
70
70
|
self.context = context
|
|
71
71
|
|
|
72
72
|
@abc.abstractmethod
|
|
73
|
-
def check_model(
|
|
73
|
+
def check_model(
|
|
74
|
+
self, model: Model
|
|
75
|
+
) -> t.Optional[t.Union[RuleViolation, t.List[RuleViolation]]]:
|
|
74
76
|
"""The evaluation function that'll check for a violation of this rule."""
|
|
75
77
|
|
|
76
78
|
@property
|
|
@@ -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
|
-
|
|
1575
|
-
|
|
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"{
|
|
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,5 +1,5 @@
|
|
|
1
1
|
sqlmesh/__init__.py,sha256=QjwaamJIdW7voXoS880yAx7tHm-Im4_mqGA-XJgafos,7631
|
|
2
|
-
sqlmesh/_version.py,sha256=
|
|
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
|
|
@@ -11,9 +11,9 @@ sqlmesh/cli/options.py,sha256=8qEGWivk4urGikpEmaU9T8WsyaZtjCpmW4Ed25iQ73I,2543
|
|
|
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=ovjM75l1A2rAi-ud3ovsIKSGwF9TsGYTK8NvokbCdL4,166111
|
|
15
15
|
sqlmesh/core/constants.py,sha256=gUABXWYgH_XOSbaZAJsR5o1dmA61JDCvBDyxqqXX3LM,2630
|
|
16
|
-
sqlmesh/core/context.py,sha256=
|
|
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=
|
|
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=
|
|
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
|
|
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
|
|
@@ -76,9 +76,9 @@ sqlmesh/core/engine_adapter/snowflake.py,sha256=IEEzepxNpfqBIMe4ziz2k8fjOcJPeQPZ
|
|
|
76
76
|
sqlmesh/core/engine_adapter/spark.py,sha256=sYkVOPS0X43UPbI0z7Hh_EpKlI36qkOcr4NNFOTQlLs,21045
|
|
77
77
|
sqlmesh/core/engine_adapter/trino.py,sha256=Tws3GxqnC6BmXFohqru1TDxsgPH-21qV6Oky7FaaLpE,15908
|
|
78
78
|
sqlmesh/core/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
-
sqlmesh/core/linter/definition.py,sha256=
|
|
79
|
+
sqlmesh/core/linter/definition.py,sha256=JDJTkhByUw4Tr3nF-BOHKFAx_eASQqEqzX6AUVQUz8I,5659
|
|
80
80
|
sqlmesh/core/linter/helpers.py,sha256=ygumMRAShxHITK_5vI64tHJoEa2mAdKen5hlMxaXKoQ,5022
|
|
81
|
-
sqlmesh/core/linter/rule.py,sha256=
|
|
81
|
+
sqlmesh/core/linter/rule.py,sha256=cyGoAz9HuhBYRfbgow_MZhzmDvQE7NK1gzzKsAN0cwY,3694
|
|
82
82
|
sqlmesh/core/linter/rules/__init__.py,sha256=gevzfb67vFqckTCoVAe_TBGf6hQ-YtE1_YuGuXyh1L0,77
|
|
83
83
|
sqlmesh/core/linter/rules/builtin.py,sha256=UNelGDGuzE-gPc6DsFw9h0BUbzmwx-Xyrx8wZh61Qq8,5163
|
|
84
84
|
sqlmesh/core/metric/__init__.py,sha256=H1HmoD5IwN4YWe9iJXyueLYNmTQFZwok5nSWNJcZIBQ,237
|
|
@@ -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=
|
|
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=
|
|
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.
|
|
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.
|
|
407
|
-
sqlmesh-0.204.1.
|
|
408
|
-
sqlmesh-0.204.1.
|
|
409
|
-
sqlmesh-0.204.1.
|
|
410
|
-
sqlmesh-0.204.1.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|