sqlmesh 0.199.1.dev42__py3-none-any.whl → 0.199.1.dev44__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/linter/helpers.py +39 -0
- sqlmesh/core/linter/rules/builtin.py +16 -2
- {sqlmesh-0.199.1.dev42.dist-info → sqlmesh-0.199.1.dev44.dist-info}/METADATA +1 -1
- {sqlmesh-0.199.1.dev42.dist-info → sqlmesh-0.199.1.dev44.dist-info}/RECORD +9 -9
- {sqlmesh-0.199.1.dev42.dist-info → sqlmesh-0.199.1.dev44.dist-info}/WHEEL +0 -0
- {sqlmesh-0.199.1.dev42.dist-info → sqlmesh-0.199.1.dev44.dist-info}/entry_points.txt +0 -0
- {sqlmesh-0.199.1.dev42.dist-info → sqlmesh-0.199.1.dev44.dist-info}/licenses/LICENSE +0 -0
- {sqlmesh-0.199.1.dev42.dist-info → sqlmesh-0.199.1.dev44.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.199.1.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 199, 1, '
|
|
20
|
+
__version__ = version = '0.199.1.dev44'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 199, 1, 'dev44')
|
sqlmesh/core/linter/helpers.py
CHANGED
|
@@ -2,6 +2,7 @@ from pathlib import Path
|
|
|
2
2
|
|
|
3
3
|
from sqlmesh.core.linter.rule import Position, Range
|
|
4
4
|
from sqlmesh.utils.pydantic import PydanticModel
|
|
5
|
+
from sqlglot import tokenize, TokenType
|
|
5
6
|
import typing as t
|
|
6
7
|
|
|
7
8
|
|
|
@@ -113,3 +114,41 @@ def read_range_from_file(file: Path, text_range: Range) -> str:
|
|
|
113
114
|
result.append(line[start_char:end_char])
|
|
114
115
|
|
|
115
116
|
return "".join(result)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def get_range_of_model_block(
|
|
120
|
+
sql: str,
|
|
121
|
+
dialect: str,
|
|
122
|
+
) -> t.Optional[Range]:
|
|
123
|
+
"""
|
|
124
|
+
Get the range of the model block in an SQL file.
|
|
125
|
+
"""
|
|
126
|
+
tokens = tokenize(sql, dialect=dialect)
|
|
127
|
+
|
|
128
|
+
# Find start of the model block
|
|
129
|
+
start = next(
|
|
130
|
+
(t for t in tokens if t.token_type is TokenType.VAR and t.text.upper() == "MODEL"),
|
|
131
|
+
None,
|
|
132
|
+
)
|
|
133
|
+
end = next((t for t in tokens if t.token_type is TokenType.SEMICOLON), None)
|
|
134
|
+
|
|
135
|
+
if start is None or end is None:
|
|
136
|
+
return None
|
|
137
|
+
|
|
138
|
+
start_position = TokenPositionDetails(
|
|
139
|
+
line=start.line,
|
|
140
|
+
col=start.col,
|
|
141
|
+
start=start.start,
|
|
142
|
+
end=start.end,
|
|
143
|
+
)
|
|
144
|
+
end_position = TokenPositionDetails(
|
|
145
|
+
line=end.line,
|
|
146
|
+
col=end.col,
|
|
147
|
+
start=end.start,
|
|
148
|
+
end=end.end,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
splitlines = sql.splitlines()
|
|
152
|
+
return Range(
|
|
153
|
+
start=start_position.to_range(splitlines).start, end=end_position.to_range(splitlines).end
|
|
154
|
+
)
|
|
@@ -7,7 +7,7 @@ import typing as t
|
|
|
7
7
|
from sqlglot.expressions import Star
|
|
8
8
|
from sqlglot.helper import subclasses
|
|
9
9
|
|
|
10
|
-
from sqlmesh.core.linter.helpers import TokenPositionDetails
|
|
10
|
+
from sqlmesh.core.linter.helpers import TokenPositionDetails, get_range_of_model_block
|
|
11
11
|
from sqlmesh.core.linter.rule import Rule, RuleViolation, Range, Fix, TextEdit
|
|
12
12
|
from sqlmesh.core.linter.definition import RuleSet
|
|
13
13
|
from sqlmesh.core.model import Model, SqlModel
|
|
@@ -93,7 +93,21 @@ class NoMissingAudits(Rule):
|
|
|
93
93
|
"""Model `audits` must be configured to test data quality."""
|
|
94
94
|
|
|
95
95
|
def check_model(self, model: Model) -> t.Optional[RuleViolation]:
|
|
96
|
-
|
|
96
|
+
if model.audits or model.kind.is_symbolic:
|
|
97
|
+
return None
|
|
98
|
+
if model._path is None or not str(model._path).endswith(".sql"):
|
|
99
|
+
return self.violation()
|
|
100
|
+
|
|
101
|
+
try:
|
|
102
|
+
with open(model._path, "r", encoding="utf-8") as file:
|
|
103
|
+
content = file.read()
|
|
104
|
+
|
|
105
|
+
range = get_range_of_model_block(content, model.dialect)
|
|
106
|
+
if range:
|
|
107
|
+
return self.violation(violation_range=range)
|
|
108
|
+
return self.violation()
|
|
109
|
+
except Exception:
|
|
110
|
+
return self.violation()
|
|
97
111
|
|
|
98
112
|
|
|
99
113
|
BUILTIN_RULES = RuleSet(subclasses(__name__, Rule, (Rule,)))
|
|
@@ -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=aanCQzolghLH-GxbReu52h4BEUDoVhg9YNUwoDQJoeU,530
|
|
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
|
|
@@ -77,10 +77,10 @@ sqlmesh/core/engine_adapter/spark.py,sha256=sYkVOPS0X43UPbI0z7Hh_EpKlI36qkOcr4NN
|
|
|
77
77
|
sqlmesh/core/engine_adapter/trino.py,sha256=Ik5yOW_gYahVq6ksZPzE2Um-5J4A2AJv-QZiZYUPeP8,15842
|
|
78
78
|
sqlmesh/core/linter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
79
|
sqlmesh/core/linter/definition.py,sha256=pXDxl8TxTGNuVc1B5ywYmaH7dDjsoMRvCtLCK_co-ek,5567
|
|
80
|
-
sqlmesh/core/linter/helpers.py,sha256=
|
|
80
|
+
sqlmesh/core/linter/helpers.py,sha256=ygumMRAShxHITK_5vI64tHJoEa2mAdKen5hlMxaXKoQ,5022
|
|
81
81
|
sqlmesh/core/linter/rule.py,sha256=FlsP0PN4dmke7sJ2oD8ZZo3tWw8i87Q7CvbdNOOy3N8,3648
|
|
82
82
|
sqlmesh/core/linter/rules/__init__.py,sha256=gevzfb67vFqckTCoVAe_TBGf6hQ-YtE1_YuGuXyh1L0,77
|
|
83
|
-
sqlmesh/core/linter/rules/builtin.py,sha256=
|
|
83
|
+
sqlmesh/core/linter/rules/builtin.py,sha256=ea2jOkg78UWBbMjHSI0mTWee-MsCzQWqI7hpTgrjwYs,3939
|
|
84
84
|
sqlmesh/core/metric/__init__.py,sha256=H1HmoD5IwN4YWe9iJXyueLYNmTQFZwok5nSWNJcZIBQ,237
|
|
85
85
|
sqlmesh/core/metric/definition.py,sha256=Yd5aVgsZCDPJ43aGP7WqtzZOuuSUtB8uJGVA6Jw9x9M,7201
|
|
86
86
|
sqlmesh/core/metric/rewriter.py,sha256=GiSTHfn2kinqCfNPYgZPRk93JFLzVaaejHtHDQ0yXZI,7326
|
|
@@ -282,7 +282,7 @@ sqlmesh/utils/pydantic.py,sha256=o_NsXbIpDqNpUA1Uc5xF0ZzoXQYYB0DfHwdRxBwXPNk,120
|
|
|
282
282
|
sqlmesh/utils/rich.py,sha256=BpB47G0-JcU41LkGkeGKroexj4NOV5fox4-GOIXPgIc,3545
|
|
283
283
|
sqlmesh/utils/windows.py,sha256=r7Yin4WEwbvH7sKA3hOJtRsclmscNuBeCklCfVPvtQs,611
|
|
284
284
|
sqlmesh/utils/yaml.py,sha256=hvo5lmybYLcIx4p6CQwufS8X4MbwS60lEBnCmYJCXmU,2336
|
|
285
|
-
sqlmesh-0.199.1.
|
|
285
|
+
sqlmesh-0.199.1.dev44.dist-info/licenses/LICENSE,sha256=OlMefUjgWJdULtf84BLW0AZZcY8DwdgQqb_1j2862j8,11346
|
|
286
286
|
web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
287
287
|
web/client/dist/index.html,sha256=DAv6ABGogw4xRLb0T_92WP_S7XWyqVhwBgGKWtuQwU4,5472
|
|
288
288
|
web/client/dist/assets/Audits-BuHAmFO8.js,sha256=zbYUF6WdUGMbnMm01GMNPb7xAJwj-o5wMdL56vPo2qE,1041
|
|
@@ -400,8 +400,8 @@ web/server/api/endpoints/models.py,sha256=kwj0s7uve3iZSMfmjkoPVMFMeY1sD0peTeyrWf
|
|
|
400
400
|
web/server/api/endpoints/modules.py,sha256=8hqqgonGay_mJmpCw0IdbjsPhWlQH2VLdKAqha-myac,468
|
|
401
401
|
web/server/api/endpoints/plan.py,sha256=bbbY50W_2MsZSTxOHWMKz0tbIm75nsRSlPy8GI2fg9Q,9306
|
|
402
402
|
web/server/api/endpoints/table_diff.py,sha256=SCy3-pr5x6bEEiOaZGCDbiHQhpgxwmnz3Acqa2Ie6jI,2090
|
|
403
|
-
sqlmesh-0.199.1.
|
|
404
|
-
sqlmesh-0.199.1.
|
|
405
|
-
sqlmesh-0.199.1.
|
|
406
|
-
sqlmesh-0.199.1.
|
|
407
|
-
sqlmesh-0.199.1.
|
|
403
|
+
sqlmesh-0.199.1.dev44.dist-info/METADATA,sha256=sVlPmMOIz5iZCsU2rHYnYASMl7Pt2tvvmsl89gGeOts,26658
|
|
404
|
+
sqlmesh-0.199.1.dev44.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
405
|
+
sqlmesh-0.199.1.dev44.dist-info/entry_points.txt,sha256=pIYKtg-u-uO7BK_Y0qrdmfyj0bYrcMc3Xiqr5WE3VFk,121
|
|
406
|
+
sqlmesh-0.199.1.dev44.dist-info/top_level.txt,sha256=bspjo5vjELQkuN0qKuTFIbsrUt3Zeo8D2mlKeHG1LdE,12
|
|
407
|
+
sqlmesh-0.199.1.dev44.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|