Menu

#531 AttributeError: 'NoneType' object has no attribute 'add_referent'

open
nobody
None
minor
bug
2024-11-19
2024-11-18
No

User uploaded a YAML file which recursively uses references (most likely due to messed up indentation). Instead of giving a sane error, ruamel.yaml 0.18.6 fails with:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/main.py", line 451, in load
    return constructor.get_single_data()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 116, in get_single_data
    return self.construct_document(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 125, in construct_document
    for _dummy in generator:
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1476, in construct_yaml_map
    self.construct_mapping(node, data, deep=True)
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1365, in construct_mapping
    value = self.construct_object(value_node, deep=deep)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 147, in construct_object
    data = self.construct_non_recursive_object(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 188, in construct_non_recursive_object
    for _dummy in generator:
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1476, in construct_yaml_map
    self.construct_mapping(node, data, deep=True)
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1365, in construct_mapping
    value = self.construct_object(value_node, deep=deep)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 147, in construct_object
    data = self.construct_non_recursive_object(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 188, in construct_non_recursive_object
    for _dummy in generator:
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1476, in construct_yaml_map
    self.construct_mapping(node, data, deep=True)
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1365, in construct_mapping
    value = self.construct_object(value_node, deep=deep)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 147, in construct_object
    data = self.construct_non_recursive_object(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 188, in construct_non_recursive_object
    for _dummy in generator:
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1476, in construct_yaml_map
    self.construct_mapping(node, data, deep=True)
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1365, in construct_mapping
    value = self.construct_object(value_node, deep=deep)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 147, in construct_object
    data = self.construct_non_recursive_object(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 188, in construct_non_recursive_object
    for _dummy in generator:
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1476, in construct_yaml_map
    self.construct_mapping(node, data, deep=True)
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/constructor.py", line 1412, in construct_mapping
    maptyp.add_yaml_merge(merge_map)
  File "/home/nijel/weblate/weblate/.venv/lib/python3.11/site-packages/ruamel/yaml/comments.py", line 976, in add_yaml_merge
    v[1].add_referent(self)
    ^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'add_referent'

Can be reproduced with following YAML:

test:
  items: &defaults
    show: value
    nested:
      items:
        <<: *defaults

Discussion

  • Anthon van der Neut

    The YAML is correct, that is actually a bug. Thanks for reporting.
    Is that a public site where that is uploaded? Which one?

     
  • Michal Čihař

    Michal Čihař - 2024-11-19

    It happened in Hosted Weblate, unfortunately the file itself is not publicly available.

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
OSZAR »