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"
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"
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))