Skip to content

Problems with Sequence template #137

Open
@cloud-rocket

Description

@cloud-rocket

I am trying to use confuse examples to dynamically update a Sequence, but dump function is not working after dynamic update:

servers_example.yaml:

servers:
  - host: one.example.com
  - host: two.example.com
    port: 8000
  - host: three.example.com
    port: 8080

test.py:

import confuse
import pprint
source = confuse.YamlSource('servers_example.yaml')
config = confuse.Configuration(__file__)
config.add(source)
template = {
     'servers': confuse.Sequence({
         'host': str,
         'port': 80,
     }),
 }
valid_config = config.get(template)
pprint.pprint(valid_config)


config.set({
     'servers': valid_config['servers'] + [
         {'host': 'four.example.org'},
         {'host': 'five.example.org', 'port': 9000},
     ],
})
updated_config = config.get(template)
pprint.pprint(updated_config)


print(config.dump(full=False).strip())

config.dump produces:

Traceback (most recent call last):
  File "test.py", line 26, in <module>
    print(config.dump(full=False).strip())
  File "/usr/local/lib/python3.8/dist-packages/confuse/core.py", line 717, in dump
    yaml_out = yaml.dump(out_dict, Dumper=yaml_util.Dumper,
  File "/usr/lib/python3/dist-packages/yaml/__init__.py", line 290, in dump
    return dump_all([data], stream, Dumper=Dumper, **kwds)
  File "/usr/lib/python3/dist-packages/yaml/__init__.py", line 278, in dump_all
    dumper.represent(data)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 27, in represent
    node = self.represent_data(data)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 48, in represent_data
    node = self.yaml_representers[data_types[0]](self, data)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 207, in represent_dict
    return self.represent_mapping('tag:yaml.org,2002:map', data)
  File "/usr/local/lib/python3.8/dist-packages/confuse/yaml_util.py", line 108, in represent_mapping
    node_value = self.represent_data(item_value)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 48, in represent_data
    node = self.yaml_representers[data_types[0]](self, data)
  File "/usr/local/lib/python3.8/dist-packages/confuse/yaml_util.py", line 127, in represent_list
    node = super(Dumper, self).represent_list(data)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 199, in represent_list
    return self.represent_sequence('tag:yaml.org,2002:seq', data)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 92, in represent_sequence
    node_item = self.represent_data(item)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 58, in represent_data
    node = self.yaml_representers[None](self, data)
  File "/usr/lib/python3/dist-packages/yaml/representer.py", line 231, in represent_undefined
    raise RepresenterError("cannot represent an object", data)
yaml.representer.RepresenterError: ('cannot represent an object', {'host': 'one.example.com', 'port': 80})

Any idea what am I doing wrong? or is it a bug?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions