Fix version handling for boolean groups.
R=etiennej@chromium.org
Review URL: https://codereview.chromium.org/939083002
diff --git a/mojo/public/python/mojo_bindings/descriptor.py b/mojo/public/python/mojo_bindings/descriptor.py
index 45e073f..4143c51 100644
--- a/mojo/public/python/mojo_bindings/descriptor.py
+++ b/mojo/public/python/mojo_bindings/descriptor.py
@@ -608,7 +608,10 @@
def GetByteSize(self):
raise NotImplementedError()
- def GetVersion(self):
+ def GetMinVersion(self):
+ raise NotImplementedError()
+
+ def GetMaxVersion(self):
raise NotImplementedError()
def Serialize(self, obj, data_offset, data, handle_offset):
@@ -617,6 +620,9 @@
def Deserialize(self, value, context):
raise NotImplementedError()
+ def Filter(self, version):
+ raise NotImplementedError()
+
class SingleFieldGroup(FieldGroup, FieldDescriptor):
"""A FieldGroup that contains a single FieldDescriptor."""
@@ -632,7 +638,10 @@
def GetByteSize(self):
return self.field_type.GetByteSize()
- def GetVersion(self):
+ def GetMinVersion(self):
+ return self.version
+
+ def GetMaxVersion(self):
return self.version
def Serialize(self, obj, data_offset, data, handle_offset):
@@ -643,12 +652,16 @@
entity = self.field_type.Deserialize(value, context)
return { self.name: entity }
+ def Filter(self, version):
+ return self
+
class BooleanGroup(FieldGroup):
"""A FieldGroup to pack booleans."""
def __init__(self, descriptors):
FieldGroup.__init__(self, descriptors)
- self.version = min([descriptor.version for descriptor in descriptors])
+ self.min_version = min([descriptor.version for descriptor in descriptors])
+ self.max_version = max([descriptor.version for descriptor in descriptors])
def GetTypeCode(self):
return 'B'
@@ -656,8 +669,11 @@
def GetByteSize(self):
return 1
- def GetVersion(self):
- return self.version
+ def GetMinVersion(self):
+ return self.min_version
+
+ def GetMaxVersion(self):
+ return self.max_version
def Serialize(self, obj, data_offset, data, handle_offset):
value = _ConvertBooleansToByte(
@@ -670,6 +686,10 @@
fillvalue=False)
return dict(values)
+ def Filter(self, version):
+ return BooleanGroup(
+ filter(lambda d: d.version <= version, self.descriptors))
+
def _SerializeNativeArray(value, data_offset, data, length):
data_size = len(data)
diff --git a/mojo/public/python/mojo_bindings/serialization.py b/mojo/public/python/mojo_bindings/serialization.py
index 2e887c2..8f5cc67 100644
--- a/mojo/public/python/mojo_bindings/serialization.py
+++ b/mojo/public/python/mojo_bindings/serialization.py
@@ -170,11 +170,12 @@
def _GetVersion(groups):
if not len(groups):
return 0
- return max([x.version for x in groups])
+ return max([x.GetMaxVersion() for x in groups])
def _FilterGroups(groups, version):
- return [group for group in groups if group.GetVersion() <= version]
+ return [group.Filter(version) for
+ group in groups if group.GetMinVersion() <= version]
def _GetStruct(groups):