diff --git a/pyproject.toml b/pyproject.toml index 1f58814..6db0f8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ classifiers = [ ] dependencies = [ "rougail >= 1.1,<2", + "djlint == 1.36.4", ] [project.urls] diff --git a/src/rougail/output_formatter/__init__.py b/src/rougail/output_formatter/__init__.py index cca0fcc..9e73e23 100644 --- a/src/rougail/output_formatter/__init__.py +++ b/src/rougail/output_formatter/__init__.py @@ -27,6 +27,9 @@ from ruamel.yaml.error import CommentMark from ruamel.yaml.comments import CommentedSeq from ruamel.yaml.scalarstring import LiteralScalarString, FoldedScalarString +from djlint.settings import Config +from djlint.reformat import formatter + from tiramisu import undefined from tiramisu.config import get_common_path @@ -72,6 +75,10 @@ class RougailOutputFormatter: filename = Path(filenames[0]) if not filename.is_file(): raise Exception(_('only a file is allowed')) + + self.config = Config() + self.config.profile = 'jinja' + self.original_yaml = RougailUpgrade(rougailconfig).run(filename) datas = RougailUpgrade(rougailconfig).run(filename) self.rougail = RougailConvert(rougailconfig) @@ -299,10 +306,16 @@ class RougailOutputFormatter: if isinstance(value, JinjaCalculation): jinja = CommentedMap() # replace \n to space a add index of \n (now a space) to fold_pos - jinja_values = value.jinja.strip() + jinja_values = formatter(self.config, value.jinja.strip())[:-1] if key == 'default' and not multi: - jinja["jinja"] = FoldedScalarString(jinja_values.replace('\n', ' ')) - jinja["jinja"].fold_pos = [i for i, ltr in enumerate(jinja_values) if ltr == '\n'] + jinja["jinja"] = FoldedScalarString(jinja_values) + fold_pos = [] + old_i = 0 + for i, ltr in enumerate(jinja_values): + if ltr == '\n': + fold_pos.append(i - old_i) + old_i = 1 + jinja["jinja"].fold_pos = fold_pos elif key == 'secret_manager': return self.object_to_yaml("params", type_, value.params, multi, object_path) else: diff --git a/tests/results/00_9default_calculation_param_optional/rougail/00-base.yml b/tests/results/00_9default_calculation_param_optional/rougail/00-base.yml index a875c6c..ffbb6d5 100644 --- a/tests/results/00_9default_calculation_param_optional/rougail/00-base.yml +++ b/tests/results/00_9default_calculation_param_optional/rougail/00-base.yml @@ -5,8 +5,15 @@ var1: description: a first variable default: jinja: >- - {% if var2 is defined %} {{ var2 }} {% elif var3 is defined %} {{ var3 }} {% - elif var4 is defined %} {{ var4 }} {% else %} {{ _.var2 }} {% endif %} + {% if var2 is defined %} + {{ var2 }} + {% elif var3 is defined %} + {{ var3 }} + {% elif var4 is defined %} + {{ var4 }} + {% else %} + {{ _.var2 }} + {% endif %} description: returns a value params: var2: diff --git a/tests/test_load.py b/tests/test_load.py index 7591e4c..44d2ccd 100644 --- a/tests/test_load.py +++ b/tests/test_load.py @@ -11,7 +11,7 @@ excludes = [ ] test_ok = get_structures_list(excludes) -# test_ok = [Path('../rougail-tests/structures/16_6exists_family')] +# test_ok = [Path('../rougail-tests/structures/00_9default_calculation_param_optional')] def idfn(fixture_value):