pyyaml / tests / test_representer.py

import test_appliance

try:
    import datetime
except ImportError:
    pass
try:
    set
except NameError:
    from sets import Set as set

from yaml import *

class MyConstructor(Constructor):
    pass
class MyRepresenter(Representer):
    pass

class MyTestClass1(object):

    def __init__(self, x, y=0, z=0):
        self.x = x
        self.y = y
        self.z = z

    def __eq__(self, other):
        if isinstance(other, MyTestClass1):
            return self.__class__, self.__dict__ == other.__class__, other.__dict__
        else:
            return False

def construct1(constructor, node):
    mapping = constructor.construct_mapping(node)
    return MyTestClass1(**mapping)
def represent1(representer, native):
    return representer.represent_mapping("!tag1", native.__dict__)

class MyTestClass2(MyTestClass1, YAMLObject):

    yaml_constructor = MyConstructor
    yaml_tag = "!tag2"

    def from_yaml(cls, constructor, node):
        x = constructor.construct_yaml_int(node)
        return cls(x=x)
    from_yaml = classmethod(from_yaml)

    def to_yaml(cls, representer, native):
        return representer.represent_scalar(cls.yaml_tag, str(native.x))
    to_yaml = classmethod(to_yaml)

class MyTestClass3(MyTestClass2):

    yaml_tag = "!tag3"

    def from_yaml(cls, constructor, node):
        mapping = constructor.construct_mapping(node)
        if '=' in mapping:
            x = mapping['=']
            del mapping['=']
            mapping['x'] = x
        return cls(**mapping)
    from_yaml = classmethod(from_yaml)

    def to_yaml(cls, representer, native):
        return representer.represent_mapping(cls.yaml_tag, native.__dict__)
    to_yaml = classmethod(to_yaml)

MyConstructor.add_constructor("!tag1", construct1)
MyRepresenter.add_representer(MyTestClass1, represent1)

class TestTypeRepresenter(test_appliance.TestAppliance):

    def _testTypes(self, test_name, data_filename, code_filename):
        natives1 = eval(file(code_filename, 'rb').read())
        natives2 = None
        output = None
        try:
            output = dump(natives1, Representer=MyRepresenter)
            natives2 = load(output, Constructor=MyConstructor)
            try:
                self.failUnlessEqual(natives1, natives2)
            except AssertionError:
                if isinstance(natives1, dict):
                    natives1 = natives1.items()
                    natives1.sort()
                    natives1 = repr(natives1)
                    natives2 = natives2.items()
                    natives2.sort()
                    natives2 = repr(natives2)
                if natives1 != natives2:
                    raise
        except:
            print
            print "OUTPUT:"
            print output
            print "NATIVES1:", natives1
            print "NATIVES2:", natives2
            raise

TestTypeRepresenter.add_tests('testTypes', '.data', '.code')
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.