From f2fa09168bd8784eeab14e1160a9680a7b304c80 Mon Sep 17 00:00:00 2001 From: robcxyz Date: Sun, 4 Dec 2022 08:04:49 +0530 Subject: [PATCH] provider: allow yaml hook to read documents as lists --- tackle/providers/yaml/hooks/yamls.py | 11 +++++++++-- tackle/providers/yaml/tests/list_yaml_read.yaml | 2 ++ .../providers/yaml/tests/test_provider_system_yaml.py | 6 ++++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 tackle/providers/yaml/tests/list_yaml_read.yaml diff --git a/tackle/providers/yaml/hooks/yamls.py b/tackle/providers/yaml/hooks/yamls.py index 0771f4649..f8486f7da 100644 --- a/tackle/providers/yaml/hooks/yamls.py +++ b/tackle/providers/yaml/hooks/yamls.py @@ -1,4 +1,5 @@ from ruamel.yaml import YAML +from ruamel.yaml.composer import ComposerError import os from typing import Union @@ -33,8 +34,14 @@ def exec(self) -> Union[dict, str]: return self.path else: - with open(self.path, 'r') as f: - data = yaml.load(f) + try: + with open(self.path, 'r') as f: + data = yaml.load(f) + except ComposerError: + data = [] + with open(self.path, 'r') as f: + for doc in yaml.load_all(f): + data.append(doc) # TODO: Improve this - https://github.com/robcxyz/tackle/issues/56 import json diff --git a/tackle/providers/yaml/tests/list_yaml_read.yaml b/tackle/providers/yaml/tests/list_yaml_read.yaml new file mode 100644 index 000000000..8e06e36f8 --- /dev/null +++ b/tackle/providers/yaml/tests/list_yaml_read.yaml @@ -0,0 +1,2 @@ + +y->: yaml list_yaml.yaml diff --git a/tackle/providers/yaml/tests/test_provider_system_yaml.py b/tackle/providers/yaml/tests/test_provider_system_yaml.py index 6c4432489..cc2d2338f 100644 --- a/tackle/providers/yaml/tests/test_provider_system_yaml.py +++ b/tackle/providers/yaml/tests/test_provider_system_yaml.py @@ -23,6 +23,12 @@ def test_provider_system_hook_yaml_read(change_dir, clean_outputs): assert read['stuff'] == 'things' +def test_provider_system_hook_list_yaml(change_dir, clean_outputs): + output = tackle('list_yaml_read.yaml', no_input=True) + + assert len(output['y']) > 1 + + def test_provider_system_hook_yaml_write(change_dir, clean_outputs): tackle('write.yaml', no_input=True) yaml = YAML()