Skip to content

Commit 5c4bcbb

Browse files
create helper for sorting python env; clean up diff output
1 parent f35bd8e commit 5c4bcbb

5 files changed

Lines changed: 22 additions & 21 deletions

File tree

sqlmesh/core/audit/definition.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
default_catalog_validator,
1717
depends_on_validator,
1818
expression_validator,
19-
python_env_payloads,
19+
sort_python_env,
20+
sorted_python_env_payloads,
2021
)
2122
from sqlmesh.core.model.common import make_python_env, single_value_or_tuple
2223
from sqlmesh.core.node import _Node
@@ -240,7 +241,7 @@ def depends_on(self) -> t.Set[str]:
240241
@property
241242
def sorted_python_env(self) -> t.List[t.Tuple[str, Executable]]:
242243
"""Returns the python env sorted by executable kind and then var name."""
243-
return sorted(self.python_env.items(), key=lambda x: (x[1].kind, x[0]))
244+
return sort_python_env(self.python_env)
244245

245246
@property
246247
def data_hash(self) -> str:
@@ -341,7 +342,7 @@ def render_definition(
341342
jinja_expressions = []
342343
python_expressions = []
343344
if include_python:
344-
python_env = d.PythonCode(expressions=python_env_payloads(self.sorted_python_env))
345+
python_env = d.PythonCode(expressions=sorted_python_env_payloads(self.python_env))
345346
if python_env.expressions:
346347
python_expressions.append(python_env)
347348

sqlmesh/core/context_diff.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from sqlmesh.core import constants as c
2020
from sqlmesh.core.console import get_console
2121
from sqlmesh.core.macros import RuntimeStage
22-
from sqlmesh.core.model.common import python_env_payloads
22+
from sqlmesh.core.model.common import sorted_python_env_payloads
2323
from sqlmesh.core.snapshot import Snapshot, SnapshotId, SnapshotTableInfo
2424
from sqlmesh.utils.errors import SQLMeshError
2525
from sqlmesh.utils.pydantic import PydanticModel
@@ -337,27 +337,22 @@ def extract_statements(statements: t.List[EnvironmentStatements], attr: str) ->
337337
expr
338338
for statement in statements
339339
for expr in (
340-
python_env_payloads(
341-
sorted(statement.python_env.items(), key=lambda x: (x[1].kind, x[0]))
342-
)
340+
sorted_python_env_payloads(statement.python_env)
343341
if attr == "python_env"
344342
else getattr(statement, attr)
345343
)
346344
]
347345

348-
def format_diff(attribute: str) -> t.Optional[t.Tuple[str, str]]:
346+
def compute_diff(attribute: str) -> t.Optional[t.Tuple[str, str]]:
349347
previous = extract_statements(self.previous_environment_statements, attribute)
350348
current = extract_statements(self.environment_statements, attribute)
351349

352350
if previous == current:
353351
return None
354352

355353
diff_lines = list(ndiff(previous, current))
356-
diff_text = (
357-
f"=== {attribute} ===\n"
358-
if not attribute == "python_env"
359-
else "=== dependencies ===\n"
360-
)
354+
diff_text = attribute if not attribute == "python_env" else "dependencies"
355+
diff_text += ":\n"
361356

362357
if any(line.startswith(("-", "+")) for line in diff_lines):
363358
diff_text += " " + "\n ".join(diff_lines) + "\n"
@@ -371,7 +366,7 @@ def format_diff(attribute: str) -> t.Optional[t.Tuple[str, str]]:
371366
RuntimeStage.AFTER_ALL.value,
372367
"python_env",
373368
]
374-
if (diff := format_diff(attribute)) is not None
369+
if (diff := compute_diff(attribute)) is not None
375370
]
376371

377372
@property

sqlmesh/core/model/common.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,11 +352,16 @@ def depends_on(cls: t.Type, v: t.Any, info: ValidationInfo) -> t.Optional[t.Set[
352352
return v
353353

354354

355-
def python_env_payloads(sorted_python_env: t.List[t.Tuple[str, Executable]]) -> t.List[str]:
355+
def sort_python_env(python_env: t.Dict[str, Executable]) -> t.List[t.Tuple[str, Executable]]:
356+
"""Returns the python env sorted."""
357+
return sorted(python_env.items(), key=lambda x: (x[1].kind, x[0]))
358+
359+
360+
def sorted_python_env_payloads(python_env: t.Dict[str, Executable]) -> t.List[str]:
356361
"""Returns the payloads of the sorted python env."""
357362
return [
358363
v.payload if v.is_import or v.is_definition else f"{k} = {v.payload}"
359-
for k, v in sorted_python_env
364+
for k, v in sort_python_env(python_env)
360365
]
361366

362367

sqlmesh/core/model/definition.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
expression_validator,
3030
make_python_env,
3131
parse_dependencies,
32-
python_env_payloads,
3332
single_value_or_tuple,
33+
sorted_python_env_payloads,
3434
)
3535
from sqlmesh.core.model.meta import ModelMeta, FunctionCall
3636
from sqlmesh.core.model.kind import (
@@ -258,7 +258,7 @@ def render_definition(
258258
jinja_expressions = []
259259
python_expressions = []
260260
if include_python:
261-
python_env = d.PythonCode(expressions=python_env_payloads(self.sorted_python_env))
261+
python_env = d.PythonCode(expressions=sorted_python_env_payloads(self.python_env))
262262
if python_env.expressions:
263263
python_expressions.append(python_env)
264264

tests/core/test_plan.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2926,12 +2926,12 @@ def test_plan_environment_statements_diff(make_snapshot):
29262926
output = console_output.getvalue()
29272927
stripped = strip_ansi_codes(output)
29282928
expected_output = (
2929-
"=== before_all ===\n"
2929+
"before_all:\n"
29302930
" + CREATE OR REPLACE TABLE table_1 AS SELECT 1\n"
29312931
" + @test_macro()\n\n"
2932-
"=== after_all ===\n"
2932+
"after_all:\n"
29332933
" + CREATE OR REPLACE TABLE table_2 AS SELECT 2\n\n"
2934-
"=== dependencies ===\n"
2934+
"dependencies:\n"
29352935
" + def test_macro(evaluator):\n"
29362936
" return 'one'"
29372937
)

0 commit comments

Comments
 (0)