sqlmesh 0.186.2.dev7__py3-none-any.whl → 0.186.2.dev9__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/context.py +14 -6
- sqlmesh/core/engine_adapter/bigquery.py +25 -1
- sqlmesh/core/model/common.py +0 -1
- sqlmesh/core/model/meta.py +38 -0
- {sqlmesh-0.186.2.dev7.dist-info → sqlmesh-0.186.2.dev9.dist-info}/METADATA +1 -1
- {sqlmesh-0.186.2.dev7.dist-info → sqlmesh-0.186.2.dev9.dist-info}/RECORD +11 -11
- {sqlmesh-0.186.2.dev7.dist-info → sqlmesh-0.186.2.dev9.dist-info}/WHEEL +0 -0
- {sqlmesh-0.186.2.dev7.dist-info → sqlmesh-0.186.2.dev9.dist-info}/entry_points.txt +0 -0
- {sqlmesh-0.186.2.dev7.dist-info → sqlmesh-0.186.2.dev9.dist-info}/licenses/LICENSE +0 -0
- {sqlmesh-0.186.2.dev7.dist-info → sqlmesh-0.186.2.dev9.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.186.2.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 186, 2, '
|
|
20
|
+
__version__ = version = '0.186.2.dev9'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 186, 2, 'dev9')
|
sqlmesh/core/context.py
CHANGED
|
@@ -869,7 +869,12 @@ class GenericContext(BaseContext, t.Generic[C]):
|
|
|
869
869
|
Returns:
|
|
870
870
|
The expected model.
|
|
871
871
|
"""
|
|
872
|
-
if isinstance(model_or_snapshot,
|
|
872
|
+
if isinstance(model_or_snapshot, Snapshot):
|
|
873
|
+
return model_or_snapshot.model
|
|
874
|
+
if not isinstance(model_or_snapshot, str):
|
|
875
|
+
return model_or_snapshot
|
|
876
|
+
|
|
877
|
+
try:
|
|
873
878
|
# We should try all dialects referenced in the project for cases when models use mixed dialects.
|
|
874
879
|
for dialect in self._all_dialects:
|
|
875
880
|
normalized_name = normalize_model_name(
|
|
@@ -879,13 +884,16 @@ class GenericContext(BaseContext, t.Generic[C]):
|
|
|
879
884
|
)
|
|
880
885
|
if normalized_name in self._models:
|
|
881
886
|
return self._models[normalized_name]
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
else:
|
|
885
|
-
return model_or_snapshot
|
|
887
|
+
except:
|
|
888
|
+
pass
|
|
886
889
|
|
|
887
890
|
if raise_if_missing:
|
|
888
|
-
|
|
891
|
+
if model_or_snapshot.endswith((".sql", ".py")):
|
|
892
|
+
msg = "Resolving models by path is not supported, please pass in the model name instead."
|
|
893
|
+
else:
|
|
894
|
+
msg = f"Cannot find model with name '{model_or_snapshot}'"
|
|
895
|
+
|
|
896
|
+
raise SQLMeshError(msg)
|
|
889
897
|
|
|
890
898
|
return None
|
|
891
899
|
|
|
@@ -183,7 +183,31 @@ class BigQueryEngineAdapter(InsertOverwriteWithMergeMixin, ClusteredByMixin, Row
|
|
|
183
183
|
def _begin_session(self, properties: SessionProperties) -> None:
|
|
184
184
|
from google.cloud.bigquery import QueryJobConfig
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
query_label_property = properties.get("query_label")
|
|
187
|
+
parsed_query_label: list[tuple[str, str]] = []
|
|
188
|
+
if isinstance(query_label_property, (exp.Array, exp.Paren, exp.Tuple)):
|
|
189
|
+
label_tuples = (
|
|
190
|
+
[query_label_property.unnest()]
|
|
191
|
+
if isinstance(query_label_property, exp.Paren)
|
|
192
|
+
else query_label_property.expressions
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
# query_label is a Paren, Array or Tuple of 2-tuples and validated at load time
|
|
196
|
+
parsed_query_label.extend(
|
|
197
|
+
(label_tuple.expressions[0].name, label_tuple.expressions[1].name)
|
|
198
|
+
for label_tuple in label_tuples
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
if parsed_query_label:
|
|
202
|
+
query_label_str = ",".join([":".join(label) for label in parsed_query_label])
|
|
203
|
+
query = f'SET @@query_label = "{query_label_str}";SELECT 1;'
|
|
204
|
+
else:
|
|
205
|
+
query = "SELECT 1;"
|
|
206
|
+
|
|
207
|
+
job = self.client.query(
|
|
208
|
+
query,
|
|
209
|
+
job_config=QueryJobConfig(create_session=True),
|
|
210
|
+
)
|
|
187
211
|
session_info = job.session_info
|
|
188
212
|
session_id = session_info.session_id if session_info else None
|
|
189
213
|
self._session_id = session_id
|
sqlmesh/core/model/common.py
CHANGED
|
@@ -441,7 +441,6 @@ bool_validator: t.Callable = field_validator(
|
|
|
441
441
|
properties_validator: t.Callable = field_validator(
|
|
442
442
|
"physical_properties_",
|
|
443
443
|
"virtual_properties_",
|
|
444
|
-
"session_properties_",
|
|
445
444
|
"materialization_properties_",
|
|
446
445
|
mode="before",
|
|
447
446
|
check_fields=False,
|
sqlmesh/core/model/meta.py
CHANGED
|
@@ -17,6 +17,7 @@ from sqlmesh.core.model.common import (
|
|
|
17
17
|
default_catalog_validator,
|
|
18
18
|
depends_on_validator,
|
|
19
19
|
properties_validator,
|
|
20
|
+
parse_properties,
|
|
20
21
|
)
|
|
21
22
|
from sqlmesh.core.model.kind import (
|
|
22
23
|
CustomKind,
|
|
@@ -310,6 +311,43 @@ class ModelMeta(_Node):
|
|
|
310
311
|
def ignored_rules_validator(cls, vs: t.Any) -> t.Any:
|
|
311
312
|
return LinterConfig._validate_rules(vs)
|
|
312
313
|
|
|
314
|
+
@field_validator("session_properties_", mode="before")
|
|
315
|
+
def session_properties_validator(cls, v: t.Any, info: ValidationInfo) -> t.Any:
|
|
316
|
+
# use the generic properties validator to parse the session properties
|
|
317
|
+
parsed_session_properties = parse_properties(type(cls), v, info)
|
|
318
|
+
if not parsed_session_properties:
|
|
319
|
+
return parsed_session_properties
|
|
320
|
+
|
|
321
|
+
for eq in parsed_session_properties:
|
|
322
|
+
if eq.name == "query_label":
|
|
323
|
+
query_label = eq.right
|
|
324
|
+
if not (
|
|
325
|
+
isinstance(query_label, exp.Array)
|
|
326
|
+
or isinstance(query_label, exp.Tuple)
|
|
327
|
+
or isinstance(query_label, exp.Paren)
|
|
328
|
+
):
|
|
329
|
+
raise ConfigError(
|
|
330
|
+
"Invalid value for `session_properties.query_label`. Must be an array or tuple."
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
label_tuples: t.List[exp.Expression] = (
|
|
334
|
+
[query_label.unnest()]
|
|
335
|
+
if isinstance(query_label, exp.Paren)
|
|
336
|
+
else query_label.expressions
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
for label_tuple in label_tuples:
|
|
340
|
+
if not (
|
|
341
|
+
isinstance(label_tuple, exp.Tuple)
|
|
342
|
+
and len(label_tuple.expressions) == 2
|
|
343
|
+
and all(isinstance(label, exp.Literal) for label in label_tuple.expressions)
|
|
344
|
+
):
|
|
345
|
+
raise ConfigError(
|
|
346
|
+
"Invalid entry in `session_properties.query_label`. Must be tuples of string literals with length 2."
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
return parsed_session_properties
|
|
350
|
+
|
|
313
351
|
@model_validator(mode="before")
|
|
314
352
|
def _pre_root_validator(cls, data: t.Any) -> t.Any:
|
|
315
353
|
if not isinstance(data, dict):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
sqlmesh/__init__.py,sha256=69xw6bTmi4cW90M-sl3g6wLDgxVcLHcKg1q8GS3lqyA,7466
|
|
2
|
-
sqlmesh/_version.py,sha256=
|
|
2
|
+
sqlmesh/_version.py,sha256=jeZrRJAjsFoG4AdF0QDMWkYzRJePsaNf_KOlplTcdlg,528
|
|
3
3
|
sqlmesh/magics.py,sha256=JHorAZNtezf123jmTyNSoUC9yHmv-08hMP205PJmmIo,39750
|
|
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=ZAaGLOWBJGBxPzLV7KZZ9akPExgD5m5AboCM8O0Q0nY,150944
|
|
15
15
|
sqlmesh/core/constants.py,sha256=oqt6zjepUhQoWlgapKn_HpG7Pu9mrFwepdX5caNfJUI,2499
|
|
16
|
-
sqlmesh/core/context.py,sha256=
|
|
16
|
+
sqlmesh/core/context.py,sha256=paXJMdaydEQ9Tp80fVUnxveBlbCN7kGGEvesqAiezmw,115276
|
|
17
17
|
sqlmesh/core/context_diff.py,sha256=s9toP17d4tJfOpFH91LcjGK2CM64PVuB0MPkeFgF4hQ,20415
|
|
18
18
|
sqlmesh/core/dialect.py,sha256=fPTV517IOS0nWMxYznNNQnXkQkFFrPOSKe8ghsQ0o8A,49759
|
|
19
19
|
sqlmesh/core/environment.py,sha256=0TTQf4C4LXwf37fm-dfYv1qyG7vtZfQI5rizgm5g0j0,11442
|
|
@@ -61,7 +61,7 @@ sqlmesh/core/engine_adapter/_typing.py,sha256=BAM_U7Vsi0k37XHu_nNnu3whXxuTVDey_u
|
|
|
61
61
|
sqlmesh/core/engine_adapter/athena.py,sha256=WBVAB_YzBJXdiqq51LTd2jmYoMtGrLmtsA8IrIFVnQ0,26199
|
|
62
62
|
sqlmesh/core/engine_adapter/base.py,sha256=WDyZhieFq9iBQSDsLdf-ae6aPu25d-FpwZ4Lt3FPf6o,101153
|
|
63
63
|
sqlmesh/core/engine_adapter/base_postgres.py,sha256=DOsOdCJyQAVfA9S0GznuH0J1bonMqYVP_yJLDYcxFYM,6772
|
|
64
|
-
sqlmesh/core/engine_adapter/bigquery.py,sha256=
|
|
64
|
+
sqlmesh/core/engine_adapter/bigquery.py,sha256=dc4ve_O5Tu6CKuojt5_edr4kAHUzR_HWIPFpsunat_w,50201
|
|
65
65
|
sqlmesh/core/engine_adapter/clickhouse.py,sha256=4ACsYsZ8-gvyCozwoEMEayTTUdMjmNea4xUkxtXw6R4,34907
|
|
66
66
|
sqlmesh/core/engine_adapter/databricks.py,sha256=AbNbnt9nQdOd7lTov2zsKROZlzgV2fLvOYXam3cowvk,14507
|
|
67
67
|
sqlmesh/core/engine_adapter/duckdb.py,sha256=FfNmBzLySDDi--nTlsSavTwdperCzhpYzDoroCilPcA,4900
|
|
@@ -85,11 +85,11 @@ sqlmesh/core/metric/definition.py,sha256=Yd5aVgsZCDPJ43aGP7WqtzZOuuSUtB8uJGVA6Jw
|
|
|
85
85
|
sqlmesh/core/metric/rewriter.py,sha256=GiSTHfn2kinqCfNPYgZPRk93JFLzVaaejHtHDQ0yXZI,7326
|
|
86
86
|
sqlmesh/core/model/__init__.py,sha256=C8GRZ53xuXEA9hQv3BQS9pNNyd9rZ06R_B96UYGhDu4,1644
|
|
87
87
|
sqlmesh/core/model/cache.py,sha256=s-aEFuUmUKITaWHvYbOyRarsjsgoA6vfASK-f-MwJ9k,7257
|
|
88
|
-
sqlmesh/core/model/common.py,sha256=
|
|
88
|
+
sqlmesh/core/model/common.py,sha256=vbcXFhWE22-FeKYAVIlKWvTb-wkeC8XISjU_TIlak0c,16252
|
|
89
89
|
sqlmesh/core/model/decorator.py,sha256=v_sVudNROGrtj5cZ3vgcOFnwPdzwoUGY6REAkQpIMQc,8927
|
|
90
90
|
sqlmesh/core/model/definition.py,sha256=QBwGNL7Jqg8BGgpZfTtKciRJA7axkI5FShJJjnUDQ4w,108645
|
|
91
91
|
sqlmesh/core/model/kind.py,sha256=i6_AMBarXPGPoMdF9kzBkyqS9tu__a2339-BoX7TgCM,36010
|
|
92
|
-
sqlmesh/core/model/meta.py,sha256=
|
|
92
|
+
sqlmesh/core/model/meta.py,sha256=osJgfSj6maIIdWAHzDVCkXXL--__gnKvqkzxM6Nuq6g,20779
|
|
93
93
|
sqlmesh/core/model/schema.py,sha256=QzM1cOfukuK3L-cEE9MtxKeYec3x5JvutdZAnczJSiQ,3858
|
|
94
94
|
sqlmesh/core/model/seed.py,sha256=ctUHH6CmeEnBVJyIAZznx0xJBm09W7VIZ-76Cfwfq28,5004
|
|
95
95
|
sqlmesh/core/plan/__init__.py,sha256=ctpnu9mK3uTujs0It8qRMqcj9GdObXDnvSgn4rD2zqc,450
|
|
@@ -269,7 +269,7 @@ sqlmesh/utils/pydantic.py,sha256=I898jAFqa3qU6lG2uPpRebVFncOUo8ZrLWM_R3K3DHU,116
|
|
|
269
269
|
sqlmesh/utils/rich.py,sha256=xNZyPCqEc4TAlJlsEthg-5eYUWpaizz0QjBzO7a1Yv4,1509
|
|
270
270
|
sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
|
|
271
271
|
sqlmesh/utils/yaml.py,sha256=np-WVcwmwsKghCgAj1OBBMsK1SXSRn4wR-H37cGiFr8,2282
|
|
272
|
-
sqlmesh-0.186.2.
|
|
272
|
+
sqlmesh-0.186.2.dev9.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
|
|
273
273
|
web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
274
274
|
web/client/dist/index.html,sha256=M50OuwjW63dRCS0Dz40Yecgvw9ecLFqizbTa6gv5Nd4,5472
|
|
275
275
|
web/client/dist/assets/Audits-BPlxzqeG.js,sha256=TCx1qCjCGgmUSvH6HoPr5t8ztbRXMlOxrcW4o7hRjlA,1041
|
|
@@ -387,8 +387,8 @@ web/server/api/endpoints/models.py,sha256=ud-lRwriyI_OYg9tZchrBgeiXELiRTLNEodraf
|
|
|
387
387
|
web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
|
|
388
388
|
web/server/api/endpoints/plan.py,sha256=OYuQ_4dgbhG9ibTcX1a8mvYgH3ANxw9Fhbb4wg6QWqc,9222
|
|
389
389
|
web/server/api/endpoints/table_diff.py,sha256=Wd5YxeKbZB7AkrDvqFgvV9ZQlnKYOF1n5W_w2EHE_Zw,2085
|
|
390
|
-
sqlmesh-0.186.2.
|
|
391
|
-
sqlmesh-0.186.2.
|
|
392
|
-
sqlmesh-0.186.2.
|
|
393
|
-
sqlmesh-0.186.2.
|
|
394
|
-
sqlmesh-0.186.2.
|
|
390
|
+
sqlmesh-0.186.2.dev9.dist-info/METADATA,sha256=ET7j4M3y_JZuXPTtTlqkQBtcu_hxq7lONYrg4_PupLQ,25523
|
|
391
|
+
sqlmesh-0.186.2.dev9.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
|
|
392
|
+
sqlmesh-0.186.2.dev9.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
|
|
393
|
+
sqlmesh-0.186.2.dev9.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
|
|
394
|
+
sqlmesh-0.186.2.dev9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|