[Avocado-devel] Unexpected conversion of yaml content to ListOfNodeObjects

Lukáš Doktor ldoktor at redhat.com
Wed Feb 15 13:37:12 UTC 2017


OK, it's what I was fearing of but never dared to try. I'm sorry it's my 
fault, I was aware that this might happen but I simply neglected this 
because I inspired by the official example and ignore the fact that it 
modifies the yaml.Loader directly. Anyway I have an ugly fix and the 
clean PR is coming after some testing.

```
diff --git a/avocado/plugins/yaml_to_mux.py b/avocado/plugins/yaml_to_mux.py
index c5ed443..34cf482 100644
--- a/avocado/plugins/yaml_to_mux.py
+++ b/avocado/plugins/yaml_to_mux.py
@@ -34,6 +34,10 @@ else:
          from yaml import Loader


+class MyLoader(Loader):
+    pass
+
+
  # Mapping for yaml flags
  YAML_INCLUDE = 100
  YAML_USING = 101
@@ -143,16 +147,16 @@ def _create_from_yaml(path, cls_node=mux.MuxTreeNode):
          objects.append((mux.Control(YAML_MUX), None))
          return objects

-    Loader.add_constructor(u'!include',
+    MyLoader.add_constructor(u'!include',
                             lambda loader, node: mux.Control(YAML_INCLUDE))
-    Loader.add_constructor(u'!using',
+    MyLoader.add_constructor(u'!using',
                             lambda loader, node: mux.Control(YAML_USING))
-    Loader.add_constructor(u'!remove_node',
+    MyLoader.add_constructor(u'!remove_node',
                             lambda loader, node: 
mux.Control(YAML_REMOVE_NODE))
-    Loader.add_constructor(u'!remove_value',
+    MyLoader.add_constructor(u'!remove_value',
                             lambda loader, node: 
mux.Control(YAML_REMOVE_VALUE))
-    Loader.add_constructor(u'!mux', mux_loader)
-    Loader.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
+    MyLoader.add_constructor(u'!mux', mux_loader)
+ 
MyLoader.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
                             mapping_to_tree_loader)

      # Parse file name ([$using:]$path)
@@ -169,7 +173,7 @@ def _create_from_yaml(path, cls_node=mux.MuxTreeNode):

      # Load the tree
      with open(path) as stream:
-        loaded_tree = yaml.load(stream, Loader)
+        loaded_tree = yaml.load(stream, MyLoader)
          if loaded_tree is None:
              return
          loaded_tree = tree_node_from_values('', loaded_tree)
```

Dne 15.2.2017 v 14:18 Lukáš Doktor napsal(a):
> Hello Vincent,
>
> I'm able to reproduce that with your docker file so I'll do my best to
> find the root cause and fix it.
>
> Regards,
> Lukáš
>
> Dne 13.2.2017 v 19:44 Vincent Matossian napsal(a):
>> FROM centos:7
>>
>> RUN yum install -y epel-release
>> RUN yum install -y python-pip
>> RUN pip install avocado-framework
>> RUN pip install -r
>> https://raw.githubusercontent.com/avocado-framework/avocado/master/requirements.txt
>>
>>
>> RUN echo $'#!/bin/env python\n\
>> import yaml\n\
>> \n\
>> from avocado import Test\n\
>> \n\
>> \n\
>> class MyTest(Test):\n\
>> \n\
>>     def test(self):\n\
>>         with open("some.yaml") as f:\n\
>>             d = yaml.load(f)\n\
>>         print(type(d))\n\
>>         print(d)\n\
>> \n' > mytest.py
>>
>> RUN echo $'key1:\n\
>>   subkey: subval\n\
>> key2:\n\
>>   subkey: subval\n\
>> \n' > some.yaml
>>
>> RUN touch empty.yaml
>> RUN chmod +x mytest.py
>>
>>
>> ENTRYPOINT ["avocado", "run", "--show-job-log", "mytest.py",
>> "--mux-yaml", "empty.yaml"]
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 502 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/avocado-devel/attachments/20170215/be2fdb2b/attachment.sig>


More information about the Avocado-devel mailing list