Пример #1
0
def test_docs_table_v2():
    # Tables can be rectangles now!
    class Table(object):
        def __init__(self, height, width):
            self.height = height
            self.width = width

        def __repr__(self):
            return "<Table {self.height!r}x{self.width!r}>".format(self=self)

    from camel import Camel, CamelRegistry
    my_types = CamelRegistry()

    @my_types.dumper(Table, 'table', version=2)
    def _dump_table_v2(table):
        return {
            'height': table.height,
            'width': table.width,
        }

    @my_types.loader('table', version=2)
    def _load_table_v2(data, version):
        return Table(data["height"], data["width"])

    @my_types.loader('table', version=1)
    def _load_table_v1(data, version):
        edge = data["size"]**0.5
        return Table(edge, edge)

    table = Table(7, 10)
    assert Camel([my_types]).dump(table) == textwrap.dedent("""
        !table;2
        height: 7
        width: 10
    """).lstrip()

    @my_types.dumper(Table, 'table', version=1)
    def _dump_table_v1(table):
        return {
            # not really, but the best we can manage
            'size': table.height * table.width,
        }

    camel = Camel([my_types])
    camel.lock_version(Table, 1)
    assert camel.dump(Table(5, 7)) == "!table;1\nsize: 35\n"
Пример #2
0
def test_docs_table_v2():
    # Tables can be rectangles now!
    class Table(object):
        def __init__(self, height, width):
            self.height = height
            self.width = width

        def __repr__(self):
            return "<Table {self.height!r}x{self.width!r}>".format(self=self)

    from camel import Camel, CamelRegistry
    my_types = CamelRegistry()

    @my_types.dumper(Table, 'table', version=2)
    def _dump_table_v2(table):
        return {
            'height': table.height,
            'width': table.width,
        }

    @my_types.loader('table', version=2)
    def _load_table_v2(data, version):
        return Table(data["height"], data["width"])

    @my_types.loader('table', version=1)
    def _load_table_v1(data, version):
        edge = data["size"] ** 0.5
        return Table(edge, edge)

    table = Table(7, 10)
    assert Camel([my_types]).dump(table) == textwrap.dedent("""
        !table;2
        height: 7
        width: 10
    """).lstrip()

    @my_types.dumper(Table, 'table', version=1)
    def _dump_table_v1(table):
        return {
            # not really, but the best we can manage
            'size': table.height * table.width,
            }

    camel = Camel([my_types])
    camel.lock_version(Table, 1)
    assert camel.dump(Table(5, 7)) == "!table;1\nsize: 35\n"
Пример #3
0
def save_yaml(data, path, lock_versions={}):
    with open(path, 'w') as f:
        c = Camel([standard_types_registry, camel_registry])
        for klass, version in lock_versions.items():
            c.lock_version(klass, version)
        f.write(c.dump(data))