Skip to content

Commit 160a513

Browse files
committed
PR feedback
1 parent 6f31cdf commit 160a513

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

sqlmesh/core/model/common.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,19 @@ def _executable_to_str(k: str, v: Executable) -> str:
440440
return [_executable_to_str(k, v) for k, v in sort_python_env(python_env)]
441441

442442

443+
def parse_strings_with_macro_refs(value: t.Any, dialect: DialectType) -> t.Any:
444+
if isinstance(value, str) and "@" in value:
445+
return exp.maybe_parse(value, dialect=dialect)
446+
447+
if isinstance(value, dict):
448+
for k, v in dict(value).items():
449+
value[k] = parse_strings_with_macro_refs(v, dialect)
450+
elif isinstance(value, list):
451+
value = [parse_strings_with_macro_refs(v, dialect) for v in value]
452+
453+
return value
454+
455+
443456
expression_validator: t.Callable = field_validator(
444457
"query",
445458
"expressions_",

sqlmesh/core/model/definition.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
expression_validator,
2828
make_python_env,
2929
parse_dependencies,
30+
parse_strings_with_macro_refs,
3031
single_value_or_tuple,
3132
sorted_python_env_payloads,
3233
validate_extra_and_required_fields,
@@ -72,6 +73,9 @@
7273

7374
logger = logging.getLogger(__name__)
7475

76+
77+
UNRENDERABLE_MODEL_FIELDS = {"cron", "description"}
78+
7579
PROPERTIES = {"physical_properties", "session_properties", "virtual_properties"}
7680

7781
RUNTIME_RENDERED_MODEL_FIELDS = {
@@ -2750,34 +2754,23 @@ def render_field_value(value: t.Any) -> t.Any:
27502754

27512755
return value
27522756

2753-
def parse_strings_with_macro_refs(value: t.Any) -> t.Any:
2754-
if isinstance(value, str) and "@" in value:
2755-
return exp.maybe_parse(value, dialect=dialect)
2756-
2757-
if isinstance(value, dict):
2758-
for k, v in dict(value).items():
2759-
value[k] = parse_strings_with_macro_refs(v)
2760-
elif isinstance(value, list):
2761-
value = [parse_strings_with_macro_refs(v) for v in value]
2762-
2763-
return value
2764-
27652757
for field_name, field_info in ModelMeta.all_field_infos().items():
27662758
field = field_info.alias or field_name
27672759
field_value = fields.get(field)
27682760

2769-
if field in ("cron", "description") or field_value is None:
2761+
# We don't want to parse python model cron="@..." kwargs (e.g. @daily) into MacroVar
2762+
if field == "cron" or field_value is None:
27702763
continue
27712764

27722765
if field in RUNTIME_RENDERED_MODEL_FIELDS:
2773-
fields[field] = parse_strings_with_macro_refs(field_value)
2766+
fields[field] = parse_strings_with_macro_refs(field_value, dialect)
27742767
continue
27752768

27762769
if isinstance(field_value, dict):
27772770
rendered_dict = {}
27782771
for key, value in field_value.items():
27792772
if key in RUNTIME_RENDERED_MODEL_FIELDS:
2780-
rendered_dict[key] = parse_strings_with_macro_refs(value)
2773+
rendered_dict[key] = parse_strings_with_macro_refs(value, dialect)
27812774
elif (rendered := render_field_value(value)) is not None:
27822775
rendered_dict[key] = rendered
27832776

tests/core/test_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6436,7 +6436,7 @@ def end_date_macro(evaluator: MacroEvaluator, var: bool):
64366436
owner="@IF(@gateway = 'dev', @{dev_owner}, @{prod_owner})",
64376437
stamp="@{stamp}",
64386438
tags=["@{tag1}", "@{tag2}"],
6439-
description="Model desc @{test_}",
6439+
description="'Model desc @{test_}'",
64406440
)
64416441
def model_with_macros(evaluator, **kwargs):
64426442
return exp.select(

0 commit comments

Comments
 (0)