51
52
class Serializer(object):
52
53
"""Abstract object serialize/deserialize"""
53
55
def write_inventory(self, inv, f):
54
56
"""Write inventory to a file"""
55
elt = self._pack_inventory(inv)
56
self._write_element(elt, f)
57
raise NotImplementedError(self.write_inventory)
58
59
def write_inventory_to_string(self, inv):
59
return tostring(self._pack_inventory(inv)) + '\n'
61
def read_inventory_from_string(self, xml_string):
60
raise NotImplementedError(self.write_inventory_to_string)
62
def read_inventory_from_string(self, xml_string, revision_id=None):
63
"""Read xml_string into an inventory object.
65
:param xml_string: The xml to read.
66
:param revision_id: If not-None, the expected revision id of the
67
inventory. Some serialisers use this to set the results' root
63
return self._unpack_inventory(fromstring(xml_string))
71
return self._unpack_inventory(fromstring(xml_string), revision_id)
64
72
except ParseError, e:
65
73
raise errors.UnexpectedInventoryFormat(e)
67
def read_inventory(self, f):
75
def read_inventory(self, f, revision_id=None):
69
return self._unpack_inventory(self._read_element(f))
77
return self._unpack_inventory(self._read_element(f),
70
79
except ParseError, e:
71
80
raise errors.UnexpectedInventoryFormat(e)
155
164
elementtree.ElementTree._raise_serialization_error(text)
157
166
elementtree.ElementTree._escape_cdata = _escape_cdata
169
class SerializerRegistry(registry.Registry):
170
"""Registry for serializer objects"""
173
format_registry = SerializerRegistry()
174
format_registry.register_lazy('4', 'bzrlib.xml4', 'serializer_v4')
175
format_registry.register_lazy('5', 'bzrlib.xml5', 'serializer_v5')
176
format_registry.register_lazy('6', 'bzrlib.xml6', 'serializer_v6')
177
format_registry.register_lazy('7', 'bzrlib.xml7', 'serializer_v7')