#!/usr/bin/env python
# coding=utf-8
from __future__ import absolute_import
from .nodes import NodeVisitor
from .parser import YAMLParser
# noinspection PyMethodMayBeStatic
[docs]class YAMLDecoder(NodeVisitor):
"""Convert node tree into python object."""
[docs] def decode(self, s):
return self.visit(YAMLParser().parse(s))
[docs] def visit_Docs(self, node):
for doc in node.value:
yield (yield doc)
[docs] def visit_Sequence(self, node):
sequence = []
for item in node.value:
sequence.append((yield item))
yield sequence
[docs] def visit_Map(self, node):
_map = {}
for key, value in node.value:
_map[(yield key)] = (yield value)
yield _map
[docs] def visit_Scalar(self, node):
return node.type(node.value)
[docs] def visit_Null(self, _):
return None
visit_Doc = visit_Docs
visit_Str = visit_Scalar
visit_Int = visit_Scalar
visit_Float = visit_Scalar
visit_Bool = visit_Scalar
[docs] def visit_Binary(self, node):
return node.value