lamvery/config Crashes Constructor of yaml `'tag:yaml.org,2002:merge'` ?
Opened this issue · 2 comments
sawanoboly commented
Here is the code to reproduce.
# Ref: https://github.com/marcy-terui/lamvery/blob/master/lamvery/config.py#L28-L30
import yaml
y = """
def: &default
foo: bar
pro:
<<: *default
"""
yaml.load(y)
#=> {'def': {'foo': 'bar'}, 'pro': {'foo': 'bar'}}
from collections import OrderedDict
yaml.add_constructor(
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
lambda loader, node: OrderedDict(loader.construct_pairs(node)))
yaml.load(y)
# => ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:merge'
in "<string>", line 6, column 3:
<<: *default
^
sawanoboly commented
サンプルのdice_constructor
だとこう言うコケ方にならない、なんでだろう?
http://pyyaml.org/wiki/PyYAMLDocumentation#Constructorsrepresentersresolvers
marcy-terui commented
根深そうな問題ですね・・・。順番を保持するためにYAMLでOrderdDictを扱うために入っているコードなんですが、yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG
== tag:yaml.org,2002:map
なので、tag:yaml.org,2002:merge
を足してみたりしたら別のエラーになったり・・・wちょっと調査と試行錯誤が必要そうです。。。