pyyaml / lib / yaml /

__all__ = ['YAMLObject', 'YAMLObjectMetaclass']

from constructor import *
from representer import *

class YAMLObjectMetaclass(type):

    def __init__(cls, name, bases, kwds):
        super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds)
        if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None:
            cls.yaml_constructor.add_constructor(cls.yaml_tag, cls.from_yaml)
            cls.yaml_representer.add_representer(cls, cls.to_yaml)

class YAMLObject(object):

    __metaclass__ = YAMLObjectMetaclass

    yaml_constructor = Constructor
    yaml_representer = Representer

    yaml_tag = None

    def from_yaml(cls, constructor, node):
        raise ConstructorError(None, None,
                "found undefined constructor for the tag %r"
                % node.tag.encode('utf-8'), node.start_mark)
    from_yaml = classmethod(from_yaml)

    def to_yaml(cls, representer, native):
        raise RepresenterError(
                "found undefined representer for the object: %s" % native)
    to_yaml = classmethod(to_yaml)