6 DEFAULT_SCALAR_TAG
= u
'tag:yaml.org,2002:str'
7 DEFAULT_SEQUENCE_TAG
= u
'tag:yaml.org,2002:seq'
8 DEFAULT_MAPPING_TAG
= u
'tag:yaml.org,2002:map'
10 def __init__(self
, composer
):
11 self
.composer
= composer
12 self
.resolved_nodes
= {}
15 # If there are more documents available?
16 return self
.composer
.check()
19 # Resolve and return the root node of the next document.
20 if self
.composer
.check():
21 return self
.resolve_document(self
.composer
.get())
25 while self
.composer
.check():
26 yield self
.resolve_document(self
.composer
.get())
28 def resolve_document(self
, node
):
29 self
.resolve_node([], node
)
31 self
.resolved_nodes
= {}
33 def resolve_node(self
, path
, node
):
34 if node
in self
.resolved_nodes
:
36 self
.resolved_nodes
[node
] = None
37 if isinstance(node
, ScalarNode
):
38 self
.resolve_scalar(path
, node
)
39 elif isinstance(node
, SequenceNode
):
40 self
.resolve_sequence(path
, node
)
41 for index
in range(len(node
.value
)):
42 self
.resolve_node(path
+[node
, index
], node
.value
[index
])
43 elif isinstance(node
, MappingNode
):
44 self
.resolve_mapping(path
, node
)
45 for key
, value
in node
.value
:
46 self
.resolve_node(path
+[node
, None], key
)
47 self
.resolve_node(path
+[node
, key
], value
)
49 def resolve_scalar(self
, path
, node
):
51 node
.tag
= self
.detect_scalar(node
.value
)
52 if node
.tag
is None or node
.tag
== u
'!':
53 node
.tag
= self
.DEFAULT_SCALAR_TAG
55 def resolve_sequence(self
, path
, node
):
56 if node
.tag
is None or node
.tag
== u
'!':
57 node
.tag
= self
.DEFAULT_SEQUENCE_TAG
59 def resolve_mapping(self
, path
, node
):
60 if node
.tag
is None or node
.tag
== u
'!':
61 node
.tag
= self
.DEFAULT_MAPPING_TAG
63 def detect_scalar(self
, value
):
66 class Resolver(BaseResolver
):