def _DecodeUnrecognizedFields(message, pair_type): """Process unrecognized fields in message.""" new_values = [] for unknown_field in message.all_unrecognized_fields(): # TODO(craigcitro): Consider validating the variant if # the assignment below doesn't take care of it. It may # also be necessary to check it in the case that the # type has multiple encodings. value, _ = message.get_unrecognized_field_info(unknown_field) value_type = pair_type.field_by_name('value') if isinstance(value_type, messages.MessageField): decoded_value = DictToMessage(value, pair_type.value.message_type) else: decoded_value = protojson.ProtoJson().decode_field( pair_type.value, value) try: new_pair_key = str(unknown_field) except UnicodeEncodeError: new_pair_key = protojson.ProtoJson().decode_field( pair_type.key, unknown_field) new_pair = pair_type(key=new_pair_key, value=decoded_value) new_values.append(new_pair) return new_values
def CopyProtoMessage(message): codec = protojson.ProtoJson() return codec.decode_message(type(message), codec.encode_message(message))
def _DecodeDateTimeField(unused_field, value): result = protojson.ProtoJson().decode_field(message_types.DateTimeField(1), value) return encoding.CodecResult(value=result, complete=True)
def _EncodeDateTimeField(field, value): result = protojson.ProtoJson().encode_field(field, value) return encoding.CodecResult(value=result, complete=True)