|
27 | 27 | expression_validator, |
28 | 28 | make_python_env, |
29 | 29 | parse_dependencies, |
| 30 | + parse_strings_with_macro_refs, |
30 | 31 | single_value_or_tuple, |
31 | 32 | sorted_python_env_payloads, |
32 | 33 | validate_extra_and_required_fields, |
|
72 | 73 |
|
73 | 74 | logger = logging.getLogger(__name__) |
74 | 75 |
|
| 76 | + |
| 77 | +UNRENDERABLE_MODEL_FIELDS = {"cron", "description"} |
| 78 | + |
75 | 79 | PROPERTIES = {"physical_properties", "session_properties", "virtual_properties"} |
76 | 80 |
|
77 | 81 | RUNTIME_RENDERED_MODEL_FIELDS = { |
@@ -2750,34 +2754,23 @@ def render_field_value(value: t.Any) -> t.Any: |
2750 | 2754 |
|
2751 | 2755 | return value |
2752 | 2756 |
|
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 | | - |
2765 | 2757 | for field_name, field_info in ModelMeta.all_field_infos().items(): |
2766 | 2758 | field = field_info.alias or field_name |
2767 | 2759 | field_value = fields.get(field) |
2768 | 2760 |
|
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: |
2770 | 2763 | continue |
2771 | 2764 |
|
2772 | 2765 | 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) |
2774 | 2767 | continue |
2775 | 2768 |
|
2776 | 2769 | if isinstance(field_value, dict): |
2777 | 2770 | rendered_dict = {} |
2778 | 2771 | for key, value in field_value.items(): |
2779 | 2772 | 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) |
2781 | 2774 | elif (rendered := render_field_value(value)) is not None: |
2782 | 2775 | rendered_dict[key] = rendered |
2783 | 2776 |
|
|
0 commit comments