示例#1
0
    def set_value(
            self, instance: 'ObjectBase', pb: protobuf.Message, pool: 'Pool', value: OBJECT
    ) -> None:
        if value is not None:
            _checktype(value, self.otype)
        elif not self.allow_none:
            raise ValueError("None not allowed for '%s'." % self.name)

        if pb.HasField(self.name):
            old_id = getattr(pb, self.name)
        else:
            old_id = None
        new_id = value.id if value is not None else None
        if new_id == old_id:
            return

        old_value = pool[old_id] if old_id is not None else None

        if value is None:
            pb.ClearField(self.name)
        else:
            setattr(pb, self.name, value.id)

        if not instance.in_setup:
            instance.property_changed(PropertyValueChange(instance, self.name, old_value, value))
示例#2
0
    def set_value(
            self, instance: 'ObjectBase', pb: protobuf.Message, pool: 'Pool', value: VALUE
    ) -> None:
        if pb.HasField(self.name):
            old_value = getattr(pb, self.name)
        else:
            old_value = self.default

        if value is None:
            if self.allow_none:
                pb.ClearField(self.name)
            else:
                raise ValueError("None not allowed for '%s'." % self.name)
        else:
            setattr(pb, self.name, value)

        if value != old_value and not instance.in_setup:
            instance.property_changed(PropertyValueChange(instance, self.name, old_value, value))
示例#3
0
    def assertProtoPartiallyEquals(
        self,
        expected: Union[str, message.Message],
        actual: message.Message,
        ignored_fields: Optional[Iterable[str]] = None,
    ):
        """Asserts proto messages are equal except the ignored fields."""
        if isinstance(expected, str):
            expected = text_format.Merge(expected, actual.__class__())
        else:
            expected = copy.deepcopy(expected)
            actual = copy.deepcopy(actual)

        # Currently only supports one-level for ignored fields.
        for ignored_field in ignored_fields or []:
            expected.ClearField(ignored_field)
            actual.ClearField(ignored_field)

        return self.assertProtoEquals(expected, actual)
示例#4
0
    def set_value(
            self, instance: 'ObjectBase', pb: protobuf.Message, pool: 'Pool', value: PROTOVAL
    ) -> None:
        if pb.HasField(self.name):
            old_value = self.ptype.from_proto(getattr(pb, self.name))
        else:
            old_value = self.default

        if value is None:
            if self.allow_none:
                pb.ClearField(self.name)
            else:
                raise ValueError("None not allowed for '%s'." % self.name)
        else:
            _checktype(value, self.ptype)
            getattr(pb, self.name).CopyFrom(value.to_proto())

        if value != old_value and not instance.in_setup:
            instance.property_changed(PropertyValueChange(instance, self.name, old_value, value))