def VisitMessage(self, msg_proto, type_context, nested_msgs, nested_enums): upgraded_proto = copy.deepcopy(msg_proto) if upgraded_proto.options.deprecated and not self._envoy_internal_shadow: options.AddHideOption(upgraded_proto.options) options.SetVersioningAnnotation(upgraded_proto.options, type_context.name) # Mark deprecated fields as ready for deletion by protoxform. for f in upgraded_proto.field: if f.options.deprecated: self._Deprecate(upgraded_proto, f) if self._envoy_internal_shadow: # When shadowing, we use the upgraded version of types (which should # themselves also be shadowed), to allow us to avoid unnecessary # references to the previous version (and complexities around # upgrading during API boosting). f.type_name = self._UpgradedType(f.type_name) else: # Make sure the type name is erased so it isn't picked up by protoxform # when computing deps. f.type_name = "" else: f.type_name = self._UpgradedType(f.type_name) if f.options.HasExtension(migrate_pb2.field_migrate): field_migrate = f.options.Extensions[migrate_pb2.field_migrate] self._Rename(f, field_migrate) self._OneofPromotion(upgraded_proto, f, field_migrate) # Upgrade nested messages. del upgraded_proto.nested_type[:] upgraded_proto.nested_type.extend(nested_msgs) # Upgrade enums. del upgraded_proto.enum_type[:] upgraded_proto.enum_type.extend(nested_enums) return upgraded_proto
def VisitMessage(self, msg_proto, type_context, nested_msgs, nested_enums): upgraded_proto = copy.deepcopy(msg_proto) if upgraded_proto.options.deprecated: options.AddHideOption(upgraded_proto.options) options.SetVersioningAnnotation(upgraded_proto.options, type_context.name) # Mark deprecated fields as ready for deletion by protoxform. for f in upgraded_proto.field: if f.options.deprecated: self._Deprecate(upgraded_proto, f) # Make sure the type name is erased so it isn't picked up by protoxform # when computing deps. f.type_name = "" else: f.type_name = self._UpgradedType(f.type_name) if f.options.HasExtension(migrate_pb2.field_migrate): self._Rename(f, f.options.Extensions[migrate_pb2.field_migrate]) # Upgrade nested messages. del upgraded_proto.nested_type[:] upgraded_proto.nested_type.extend(nested_msgs) # Upgrade enums. del upgraded_proto.enum_type[:] upgraded_proto.enum_type.extend(nested_enums) return upgraded_proto
def _Deprecate(self, proto, field_or_value): """Deprecate a field or value in a message/enum proto. Args: proto: DescriptorProto or EnumDescriptorProto message. field_or_value: field or value inside proto. """ reserved = proto.reserved_range.add() reserved.start = field_or_value.number reserved.end = field_or_value.number + 1 proto.reserved_name.append(field_or_value.name) options.AddHideOption(field_or_value.options)
def _Deprecate(self, proto, field_or_value): """Deprecate a field or value in a message/enum proto. Args: proto: DescriptorProto or EnumDescriptorProto message. field_or_value: field or value inside proto. """ if self._envoy_internal_shadow: field_or_value.name = 'hidden_envoy_deprecated_' + field_or_value.name else: reserved = proto.reserved_range.add() reserved.start = field_or_value.number reserved.end = field_or_value.number + 1 proto.reserved_name.append(field_or_value.name) options.AddHideOption(field_or_value.options)
def VisitEnum(self, enum_proto, type_context): upgraded_proto = copy.deepcopy(enum_proto) if upgraded_proto.options.deprecated and not self._envoy_internal_shadow: options.AddHideOption(upgraded_proto.options) for v in upgraded_proto.value: if v.options.deprecated: # We need special handling for the zero field, as proto3 needs some value # here. if v.number == 0 and not self._envoy_internal_shadow: v.name = 'DEPRECATED_AND_UNAVAILABLE_DO_NOT_USE' else: # Mark deprecated enum values as ready for deletion by protoxform. self._Deprecate(upgraded_proto, v) elif v.options.HasExtension(migrate_pb2.enum_value_migrate): self._Rename(v, v.options.Extensions[migrate_pb2.enum_value_migrate]) return upgraded_proto
def VisitMessage(self, msg_proto, type_context, nested_msgs, nested_enums): upgraded_proto = copy.deepcopy(msg_proto) if upgraded_proto.options.deprecated: options.AddHideOption(upgraded_proto.options) # Mark deprecated fields as ready for deletion by protoxform. for f in upgraded_proto.field: if f.options.deprecated: self._Deprecate(upgraded_proto, f) else: f.type_name = self._UpgradedType(f.type_name) # Upgrade nested messages. del upgraded_proto.nested_type[:] upgraded_proto.nested_type.extend(nested_msgs) # Upgrade enums. del upgraded_proto.enum_type[:] upgraded_proto.enum_type.extend(nested_enums) return upgraded_proto
def UpgradeMessage(msg_proto): """In-place upgrade a DescriptorProto from v2[alpha\d] to v3alpha. Args: msg_proto: v2[alpha\d] DescriptorProto message. """ if msg_proto.options.deprecated: options.AddHideOption(msg_proto.options) for f in msg_proto.field: if f.options.deprecated: Deprecate(msg_proto, f) else: f.type_name = UpgradedType(f.type_name) for m in msg_proto.nested_type: UpgradeMessage(m) for e in msg_proto.enum_type: UpgradeEnum(e)