8.2.34 | Linux | www-data (uid:33)
👁 View: composer.py
📁 /snap/core20/current/lib/python3/dist-packages/yaml/composer.py
__all__ = ['Composer', 'ComposerError'] from .error import MarkedYAMLError from .events import * from .nodes import * class ComposerError(MarkedYAMLError): pass class Composer: def __init__(self): self.anchors = {} def check_node(self): # Drop the STREAM-START event. if self.check_event(StreamStartEvent): self.get_event() # If there are more documents available? return not self.check_event(StreamEndEvent) def get_node(self): # Get the root node of the next document. if not self.check_event(StreamEndEvent): return self.compose_document() def get_single_node(self): # Drop the STREAM-START event. self.get_event() # Compose a document if the stream is not empty. document = None if not self.check_event(StreamEndEvent): document = self.compose_document() # Ensure that the stream contains no more documents. if not self.check_event(StreamEndEvent): event = self.get_event() raise ComposerError("expected a single document in the stream", document.start_mark, "but found another document", event.start_mark) # Drop the STREAM-END event. self.get_event() return document def compose_document(self): # Drop the DOCUMENT-START event. self.get_event() # Compose the root node. node = self.compose_node(None, None) # Drop the DOCUMENT-END event. self.get_event() self.anchors = {} return node def compose_node(self, parent, index): if self.check_event(AliasEvent): event = self.get_event() anchor = event.anchor if anchor not in self.anchors: raise ComposerError(None, None, "found undefined alias %r" % anchor, event.start_mark) return self.anchors[anchor] event = self.peek_event() anchor = event.anchor if anchor is not None: if anchor in self.anchors: raise ComposerError("found duplicate anchor %r; first occurrence" % anchor, self.anchors[anchor].start_mark, "second occurrence", event.start_mark) self.descend_resolver(parent, index) if self.check_event(ScalarEvent): node = self.compose_scalar_node(anchor) elif self.check_event(SequenceStartEvent): node = self.compose_sequence_node(anchor) elif self.check_event(MappingStartEvent): node = self.compose_mapping_node(anchor) self.ascend_resolver() return node def compose_scalar_node(self, anchor): event = self.get_event() tag = event.tag if tag is None or tag == '!': tag = self.resolve(ScalarNode, event.value, event.implicit) node = ScalarNode(tag, event.value, event.start_mark, event.end_mark, style=event.style) if anchor is not None: self.anchors[anchor] = node return node def compose_sequence_node(self, anchor): start_event = self.get_event() tag = start_event.tag if tag is None or tag == '!': tag = self.resolve(SequenceNode, None, start_event.implicit) node = SequenceNode(tag, [], start_event.start_mark, None, flow_style=start_event.flow_style) if anchor is not None: self.anchors[anchor] = node index = 0 while not self.check_event(SequenceEndEvent): node.value.append(self.compose_node(node, index)) index += 1 end_event = self.get_event() node.end_mark = end_event.end_mark return node def compose_mapping_node(self, anchor): start_event = self.get_event() tag = start_event.tag if tag is None or tag == '!': tag = self.resolve(MappingNode, None, start_event.implicit) node = MappingNode(tag, [], start_event.start_mark, None, flow_style=start_event.flow_style) if anchor is not None: self.anchors[anchor] = node while not self.check_event(MappingEndEvent): #key_event = self.peek_event() item_key = self.compose_node(node, None) #if item_key in node.value: # raise ComposerError("while composing a mapping", start_event.start_mark, # "found duplicate key", key_event.start_mark) item_value = self.compose_node(node, item_key) #node.value[item_key] = item_value node.value.append((item_key, item_value)) end_event = self.get_event() node.end_mark = end_event.end_mark return node
← Back
💻 Terminal
📤 Upload
📂
Click or Drag & Drop
📁 /snap/core20/current/lib/python3/dist-packages/yaml
NameSizePermModifiedActions
📁 __pycache__/-07552026-09-01 05:21🗑 Delete
__init__.py12.9K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
composer.py4.8K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
constructor.py28K06442021-04-12 13:28👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
cyaml.py3.8K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
dumper.py2.8K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
emitter.py42K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
error.py2.5K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
events.py2.4K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
loader.py2K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
nodes.py1.4K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
parser.py24.9K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
reader.py6.6K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
representer.py13.9K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
resolver.py8.8K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
scanner.py50.1K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
serializer.py4.1K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
tokens.py2.5K06442020-03-18 21:34👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del