Python google.protobuf.descriptor.FieldDescriptor.LABEL_REPEATED Examples
The following are 30
code examples of google.protobuf.descriptor.FieldDescriptor.LABEL_REPEATED().
These examples are extracted from open source projects.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
google.protobuf.descriptor.FieldDescriptor
, or try the search function
.

Example #1
Source Project: sea Author: shanbay File: format.py License: MIT License | 6 votes |
def _handle_field_values(pb, field_values, use_enum_labels, including_default_value_fields): result_dict = {} extensions = {} for field, value in field_values: if field.message_type and field.message_type.has_options and \ field.message_type.GetOptions().map_entry: result_dict[field.name] = dict() value_field = field.message_type.fields_by_name['value'] type_callable = _get_field_value_adaptor( pb, value_field, use_enum_labels, including_default_value_fields) for k, v in value.items(): result_dict[field.name][k] = type_callable(v) continue type_callable = _get_field_value_adaptor( pb, field, use_enum_labels, including_default_value_fields) if field.label == FieldDescriptor.LABEL_REPEATED: type_callable = repeated(type_callable) if field.is_extension: extensions[str(field.number)] = type_callable(value) continue result_dict[field.name] = type_callable(value) return result_dict, extensions
Example #2
Source Project: sea Author: shanbay File: format.py License: MIT License | 6 votes |
def _handle_default_value_fields(pb, keys, result_dict): for field in pb.DESCRIPTOR.fields: if keys and field.name not in keys: continue # Singular message fields and oneof fields will not be affected. if ((field.label != FieldDescriptor.LABEL_REPEATED and field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE) or field.containing_oneof): continue if field.name in result_dict: # Skip the field which has been serailized already. continue if _is_map_entry(field): result_dict[field.name] = {} elif _is_repeat_label(field): result_dict[field.name] = [] else: result_dict[field.name] = field.default_value return result_dict
Example #3
Source Project: gtfs_realtime_json Author: harrytruong File: protobuf_json.py License: MIT License | 6 votes |
def json2pb(pb, js): ''' convert JSON string to google.protobuf.descriptor instance ''' for field in pb.DESCRIPTOR.fields: if field.name not in js: continue if field.type == FD.TYPE_MESSAGE: pass elif field.type in _js2ftype: ftype = _js2ftype[field.type] else: raise ParseError("Field %s.%s of type '%d' is not supported" % (pb.__class__.__name__, field.name, field.type, )) value = js[field.name] if field.label == FD.LABEL_REPEATED: pb_value = getattr(pb, field.name, None) for v in value: if field.type == FD.TYPE_MESSAGE: json2pb(pb_value.add(), v) else: pb_value.append(ftype(v)) else: if field.type == FD.TYPE_MESSAGE: json2pb(getattr(pb, field.name, None), value) else: setattr(pb, field.name, ftype(value)) return pb
Example #4
Source Project: gtfs_realtime_json Author: harrytruong File: protobuf_json.py License: MIT License | 6 votes |
def pb2json(pb): ''' convert google.protobuf.descriptor instance to JSON string ''' js = {} # fields = pb.DESCRIPTOR.fields #all fields fields = pb.ListFields() #only filled (including extensions) for field,value in fields: if field.type == FD.TYPE_MESSAGE: ftype = pb2json elif field.type in _ftype2js: ftype = _ftype2js[field.type] else: raise ParseError("Field %s.%s of type '%d' is not supported" % (pb.__class__.__name__, field.name, field.type, )) if field.label == FD.LABEL_REPEATED: js_value = [] for v in value: js_value.append(ftype(v)) else: js_value = ftype(value) js[field.name] = js_value return js
Example #5
Source Project: luci-py Author: luci File: extension_dict.py License: Apache License 2.0 | 6 votes |
def __setitem__(self, extension_handle, value): """If extension_handle specifies a non-repeated, scalar extension field, sets the value of that field. """ _VerifyExtensionHandle(self._extended_message, extension_handle) if (extension_handle.label == FieldDescriptor.LABEL_REPEATED or extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE): raise TypeError( 'Cannot assign to extension "%s" because it is a repeated or ' 'composite type.' % extension_handle.full_name) # It's slightly wasteful to lookup the type checker each time, # but we expect this to be a vanishingly uncommon case anyway. type_checker = type_checkers.GetTypeChecker(extension_handle) # pylint: disable=protected-access self._extended_message._fields[extension_handle] = ( type_checker.CheckValue(value)) self._extended_message._Modified()
Example #6
Source Project: luci-py Author: luci File: extension_dict.py License: Apache License 2.0 | 6 votes |
def __setitem__(self, extension_handle, value): """If extension_handle specifies a non-repeated, scalar extension field, sets the value of that field. """ _VerifyExtensionHandle(self._extended_message, extension_handle) if (extension_handle.label == FieldDescriptor.LABEL_REPEATED or extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE): raise TypeError( 'Cannot assign to extension "%s" because it is a repeated or ' 'composite type.' % extension_handle.full_name) # It's slightly wasteful to lookup the type checker each time, # but we expect this to be a vanishingly uncommon case anyway. type_checker = type_checkers.GetTypeChecker(extension_handle) # pylint: disable=protected-access self._extended_message._fields[extension_handle] = ( type_checker.CheckValue(value)) self._extended_message._Modified()
Example #7
Source Project: luci-py Author: luci File: extension_dict.py License: Apache License 2.0 | 6 votes |
def __setitem__(self, extension_handle, value): """If extension_handle specifies a non-repeated, scalar extension field, sets the value of that field. """ _VerifyExtensionHandle(self._extended_message, extension_handle) if (extension_handle.label == FieldDescriptor.LABEL_REPEATED or extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE): raise TypeError( 'Cannot assign to extension "%s" because it is a repeated or ' 'composite type.' % extension_handle.full_name) # It's slightly wasteful to lookup the type checker each time, # but we expect this to be a vanishingly uncommon case anyway. type_checker = type_checkers.GetTypeChecker(extension_handle) # pylint: disable=protected-access self._extended_message._fields[extension_handle] = ( type_checker.CheckValue(value)) self._extended_message._Modified()
Example #8
Source Project: luci-py Author: luci File: extension_dict.py License: Apache License 2.0 | 6 votes |
def __setitem__(self, extension_handle, value): """If extension_handle specifies a non-repeated, scalar extension field, sets the value of that field. """ _VerifyExtensionHandle(self._extended_message, extension_handle) if (extension_handle.label == FieldDescriptor.LABEL_REPEATED or extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE): raise TypeError( 'Cannot assign to extension "%s" because it is a repeated or ' 'composite type.' % extension_handle.full_name) # It's slightly wasteful to lookup the type checker each time, # but we expect this to be a vanishingly uncommon case anyway. type_checker = type_checkers.GetTypeChecker(extension_handle) # pylint: disable=protected-access self._extended_message._fields[extension_handle] = ( type_checker.CheckValue(value)) self._extended_message._Modified()
Example #9
Source Project: luci-py Author: luci File: extension_dict.py License: Apache License 2.0 | 6 votes |
def __setitem__(self, extension_handle, value): """If extension_handle specifies a non-repeated, scalar extension field, sets the value of that field. """ _VerifyExtensionHandle(self._extended_message, extension_handle) if (extension_handle.label == FieldDescriptor.LABEL_REPEATED or extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE): raise TypeError( 'Cannot assign to extension "%s" because it is a repeated or ' 'composite type.' % extension_handle.full_name) # It's slightly wasteful to lookup the type checker each time, # but we expect this to be a vanishingly uncommon case anyway. type_checker = type_checkers.GetTypeChecker(extension_handle) # pylint: disable=protected-access self._extended_message._fields[extension_handle] = ( type_checker.CheckValue(value)) self._extended_message._Modified()
Example #10
Source Project: luci-py Author: luci File: extension_dict.py License: Apache License 2.0 | 6 votes |
def __setitem__(self, extension_handle, value): """If extension_handle specifies a non-repeated, scalar extension field, sets the value of that field. """ _VerifyExtensionHandle(self._extended_message, extension_handle) if (extension_handle.label == FieldDescriptor.LABEL_REPEATED or extension_handle.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE): raise TypeError( 'Cannot assign to extension "%s" because it is a repeated or ' 'composite type.' % extension_handle.full_name) # It's slightly wasteful to lookup the type checker each time, # but we expect this to be a vanishingly uncommon case anyway. type_checker = type_checkers.GetTypeChecker(extension_handle) # pylint: disable=protected-access self._extended_message._fields[extension_handle] = ( type_checker.CheckValue(value)) self._extended_message._Modified()
Example #11
Source Project: futuquant Author: FutunnOpen File: pbjson.py License: Apache License 2.0 | 6 votes |
def pb2dict(obj): """ Takes a ProtoBuf Message obj and convertes it to a dict. """ adict = {} if not obj.IsInitialized(): return None for field in obj.DESCRIPTOR.fields: if not getattr(obj, field.name): continue if not field.label == FD.LABEL_REPEATED: if not field.type == FD.TYPE_MESSAGE: adict[field.name] = getattr(obj, field.name) else: value = pb2dict(getattr(obj, field.name)) if value: adict[field.name] = value else: if field.type == FD.TYPE_MESSAGE: adict[field.name] = \ [pb2dict(v) for v in getattr(obj, field.name)] else: adict[field.name] = [v for v in getattr(obj, field.name)] return adict
Example #12
Source Project: stanza-old Author: stanfordnlp File: protobuf_json.py License: Apache License 2.0 | 6 votes |
def pb2json(pb, useFieldNumber=False): ''' convert google.protobuf.descriptor instance to JSON string ''' js = {} # fields = pb.DESCRIPTOR.fields #all fields fields = pb.ListFields() #only filled (including extensions) for field,value in fields: if useFieldNumber: key = field.number else: key = field.name if field.type == FD.TYPE_MESSAGE: ftype = partial(pb2json, useFieldNumber=useFieldNumber) elif field.type in _ftype2js: ftype = _ftype2js[field.type] else: raise ParseError("Field %s.%s of type '%d' is not supported" % (pb.__class__.__name__, field.name, field.type, )) if field.label == FD.LABEL_REPEATED: js_value = [] for v in value: js_value.append(ftype(v)) else: js_value = ftype(value) js[key] = js_value return js
Example #13
Source Project: mentor Author: daskos File: protobuf.py License: Apache License 2.0 | 6 votes |
def protobuf_to_dict(pb, containers=CONTAINER_MAP, converters=TYPE_CALLABLE_MAP): result = message_to_container(pb, containers) # for field, value in pb.ListFields(): # only non-empty fields for field in pb.DESCRIPTOR.fields: # empty fields too value = getattr(pb, field.name) if (field.message_type and field.message_type.has_options and field.message_type.GetOptions().map_entry): converter = dict elif field.type == FieldDescriptor.TYPE_MESSAGE: # recursively encode protobuf sub-message converter = partial(protobuf_to_dict, containers=containers, converters=converters) elif field.type == FieldDescriptor.TYPE_ENUM: converter = partial(enum_to_label, field) else: converter = converters[field.type] if field.label == FieldDescriptor.LABEL_REPEATED: converter = partial(map, converter) result[field.name] = converter(value) return result
Example #14
Source Project: pogom Author: favll File: protobuf_to_dict.py License: MIT License | 6 votes |
def protobuf_to_dict(pb, type_callable_map=TYPE_CALLABLE_MAP, use_enum_labels=False): result_dict = {} extensions = {} for field, value in pb.ListFields(): if field.message_type and field.message_type.has_options and field.message_type.GetOptions().map_entry: result_dict[field.name] = dict(value) continue type_callable = _get_field_value_adaptor(pb, field, type_callable_map, use_enum_labels) if field.label == FieldDescriptor.LABEL_REPEATED: type_callable = repeated(type_callable) if field.is_extension: extensions[str(field.number)] = type_callable(value) continue result_dict[field.name] = type_callable(value) if extensions: result_dict[EXTENSION_CONTAINER] = extensions return result_dict
Example #15
Source Project: PokemonGo-DesktopMap Author: mchristopher File: protobuf_to_dict.py License: MIT License | 6 votes |
def protobuf_to_dict(pb, type_callable_map=TYPE_CALLABLE_MAP, use_enum_labels=False): result_dict = {} extensions = {} for field, value in pb.ListFields(): if field.message_type and field.message_type.has_options and field.message_type.GetOptions().map_entry: result_dict[field.name] = dict(value) continue type_callable = _get_field_value_adaptor(pb, field, type_callable_map, use_enum_labels) if field.label == FieldDescriptor.LABEL_REPEATED: type_callable = repeated(type_callable) if field.is_extension: extensions[str(field.number)] = type_callable(value) continue result_dict[field.name] = type_callable(value) if extensions: result_dict[EXTENSION_CONTAINER] = extensions return result_dict
Example #16
Source Project: py-futu-api Author: FutunnOpen File: pbjson.py License: Apache License 2.0 | 6 votes |
def pb2dict(obj): """ Takes a ProtoBuf Message obj and convertes it to a dict. """ adict = {} if not obj.IsInitialized(): return None for field in obj.DESCRIPTOR.fields: if not getattr(obj, field.name): continue if not field.label == FD.LABEL_REPEATED: if not field.type == FD.TYPE_MESSAGE: adict[field.name] = getattr(obj, field.name) else: value = pb2dict(getattr(obj, field.name)) if value: adict[field.name] = value else: if field.type == FD.TYPE_MESSAGE: adict[field.name] = \ [pb2dict(v) for v in getattr(obj, field.name)] else: adict[field.name] = [v for v in getattr(obj, field.name)] return adict
Example #17
Source Project: voltha Author: opencord File: proto2yang.py License: Apache License 2.0 | 6 votes |
def traverse_field_options(fields, prefix): field_options = [] for field in fields: assert isinstance(field, FieldDescriptorProto) full_name = prefix + '-' + field.name option = None if field.type == FieldDescriptor.TYPE_MESSAGE and field.label != \ FieldDescriptor.LABEL_REPEATED: if field.options: for fd, val in field.options.ListFields(): if fd.full_name == 'voltha.yang_inline_node': field_options.append( {'name': full_name, 'option': fd.full_name, 'proto_name': val.id, 'proto_type': val.type } ) return field_options
Example #18
Source Project: idasec Author: RobinDavid File: protobuf_json.py License: GNU Lesser General Public License v2.1 | 5 votes |
def json2pb(pb, js): """ convert JSON string to google.protobuf.descriptor instance :param pb: protobuf class to fill :param js: json input data """ for field in pb.DESCRIPTOR.fields: if field.name not in js: continue if field.type == FD.TYPE_MESSAGE: pass elif field.type in _js2ftype: ftype = _js2ftype[field.type] else: raise ParseError( "Field %s.%s of type '%d' is not supported" % (pb.__class__.__name__, field.name, field.type,)) value = js[field.name] if field.label == FD.LABEL_REPEATED: pb_value = getattr(pb, field.name, None) for v in value: if field.type == FD.TYPE_MESSAGE: json2pb(pb_value.add(), v) else: pb_value.append(ftype(v)) else: if field.type == FD.TYPE_MESSAGE: json2pb(getattr(pb, field.name, None), value) elif field.type == FD.TYPE_ENUM: real_value = field.enum_type.values_by_name[value].number setattr(pb, field.name, real_value) else: setattr(pb, field.name, ftype(value)) return pb
Example #19
Source Project: idasec Author: RobinDavid File: protobuf_json.py License: GNU Lesser General Public License v2.1 | 5 votes |
def pb2json(pb): """ convert google.protobuf.descriptor instance to JSON string :param pb: protobuf class to be converted in json """ js = {} # fields = pb.DESCRIPTOR.fields #all fields fields = pb.ListFields() # only filled (including extensions) for field, value in fields: if field.type == FD.TYPE_MESSAGE: ftype = pb2json elif field.type == FD.TYPE_ENUM: ftype = str value = field.enum_type.values_by_number[value].name elif field.type in _ftype2js: ftype = _ftype2js[field.type] else: raise ParseError( "Field %s.%s of type '%d' is not supported" % (pb.__class__.__name__, field.name, field.type,)) if field.label == FD.LABEL_REPEATED: js_value = [] for v in value: js_value.append(ftype(v)) else: js_value = ftype(value) js[field.name] = js_value return js
Example #20
Source Project: lambda-packs Author: ryfeus File: well_known_types.py License: MIT License | 5 votes |
def _IsValidPath(message_descriptor, path): """Checks whether the path is valid for Message Descriptor.""" parts = path.split('.') last = parts.pop() for name in parts: field = message_descriptor.fields_by_name.get(name) if (field is None or field.label == FieldDescriptor.LABEL_REPEATED or field.type != FieldDescriptor.TYPE_MESSAGE): return False message_descriptor = field.message_type return last in message_descriptor.fields_by_name
Example #21
Source Project: lambda-packs Author: ryfeus File: well_known_types.py License: MIT License | 5 votes |
def _MergeMessage( node, source, destination, replace_message, replace_repeated): """Merge all fields specified by a sub-tree from source to destination.""" source_descriptor = source.DESCRIPTOR for name in node: child = node[name] field = source_descriptor.fields_by_name[name] if field is None: raise ValueError('Error: Can\'t find field {0} in message {1}.'.format( name, source_descriptor.full_name)) if child: # Sub-paths are only allowed for singular message fields. if (field.label == FieldDescriptor.LABEL_REPEATED or field.cpp_type != FieldDescriptor.CPPTYPE_MESSAGE): raise ValueError('Error: Field {0} in message {1} is not a singular ' 'message field and cannot have sub-fields.'.format( name, source_descriptor.full_name)) if source.HasField(name): _MergeMessage( child, getattr(source, name), getattr(destination, name), replace_message, replace_repeated) continue if field.label == FieldDescriptor.LABEL_REPEATED: if replace_repeated: destination.ClearField(_StrConvert(name)) repeated_source = getattr(source, name) repeated_destination = getattr(destination, name) if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: for item in repeated_source: repeated_destination.add().MergeFrom(item) else: repeated_destination.extend(repeated_source) else: if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: if replace_message: destination.ClearField(_StrConvert(name)) if source.HasField(name): getattr(destination, name).MergeFrom(getattr(source, name)) else: setattr(destination, name, getattr(source, name))
Example #22
Source Project: auto-alt-text-lambda-api Author: abhisuri97 File: well_known_types.py License: MIT License | 5 votes |
def _IsValidPath(message_descriptor, path): """Checks whether the path is valid for Message Descriptor.""" parts = path.split('.') last = parts.pop() for name in parts: field = message_descriptor.fields_by_name[name] if (field is None or field.label == FieldDescriptor.LABEL_REPEATED or field.type != FieldDescriptor.TYPE_MESSAGE): return False message_descriptor = field.message_type return last in message_descriptor.fields_by_name
Example #23
Source Project: auto-alt-text-lambda-api Author: abhisuri97 File: well_known_types.py License: MIT License | 5 votes |
def _MergeMessage( node, source, destination, replace_message, replace_repeated): """Merge all fields specified by a sub-tree from source to destination.""" source_descriptor = source.DESCRIPTOR for name in node: child = node[name] field = source_descriptor.fields_by_name[name] if field is None: raise ValueError('Error: Can\'t find field {0} in message {1}.'.format( name, source_descriptor.full_name)) if child: # Sub-paths are only allowed for singular message fields. if (field.label == FieldDescriptor.LABEL_REPEATED or field.cpp_type != FieldDescriptor.CPPTYPE_MESSAGE): raise ValueError('Error: Field {0} in message {1} is not a singular ' 'message field and cannot have sub-fields.'.format( name, source_descriptor.full_name)) _MergeMessage( child, getattr(source, name), getattr(destination, name), replace_message, replace_repeated) continue if field.label == FieldDescriptor.LABEL_REPEATED: if replace_repeated: destination.ClearField(_StrConvert(name)) repeated_source = getattr(source, name) repeated_destination = getattr(destination, name) if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: for item in repeated_source: repeated_destination.add().MergeFrom(item) else: repeated_destination.extend(repeated_source) else: if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: if replace_message: destination.ClearField(_StrConvert(name)) if source.HasField(name): getattr(destination, name).MergeFrom(getattr(source, name)) else: setattr(destination, name, getattr(source, name))
Example #24
Source Project: perceptron-benchmark Author: advboxes File: protobuf_to_dict.py License: Apache License 2.0 | 5 votes |
def protobuf_to_dict(pb, type_callable_map=TYPE_CALLABLE_MAP, use_enum_labels=False): """ protobuf to dict Args: pb: data in proto format Returns: result_dict: data in dict format """ result_dict = {} extensions = {} for field, value in pb.ListFields(): type_callable = _get_field_value_adaptor(pb, field, type_callable_map, use_enum_labels) if field.label == FieldDescriptor.LABEL_REPEATED: type_callable = repeated(type_callable) if field.is_extension: extensions[str(field.number)] = type_callable(value) continue result_dict[field.name] = type_callable(value) if extensions: result_dict[EXTENSION_CONTAINER] = extensions return result_dict
Example #25
Source Project: perceptron-benchmark Author: advboxes File: protobuf_to_dict.py License: Apache License 2.0 | 5 votes |
def _dict_to_protobuf(pb, value, type_callable_map, strict): """ dict to protobuf Args: pb: data in dict format Returns: pb: data in proto format """ fields = _get_field_mapping(pb, value, strict) for field, input_value, pb_value in fields: if field.label == FieldDescriptor.LABEL_REPEATED: for item in input_value: if field.type == FieldDescriptor.TYPE_MESSAGE: m = pb_value.add() _dict_to_protobuf(m, item, type_callable_map, strict) elif field.type == FieldDescriptor.TYPE_ENUM and isinstance(item, basestring): pb_value.append(_string_to_enum(field, item)) else: pb_value.append(item) continue if field.type == FieldDescriptor.TYPE_MESSAGE: _dict_to_protobuf(pb_value, input_value, type_callable_map, strict) continue if field.type in type_callable_map: input_value = type_callable_map[field.type](input_value) if field.is_extension: pb.Extensions[field] = input_value continue if field.type == FieldDescriptor.TYPE_ENUM and isinstance(input_value, basestring): input_value = _string_to_enum(field, input_value) setattr(pb, field.name, input_value) return pb
Example #26
Source Project: coremltools Author: apple File: well_known_types.py License: BSD 3-Clause "New" or "Revised" License | 5 votes |
def _IsValidPath(message_descriptor, path): """Checks whether the path is valid for Message Descriptor.""" parts = path.split('.') last = parts.pop() for name in parts: field = message_descriptor.fields_by_name[name] if (field is None or field.label == FieldDescriptor.LABEL_REPEATED or field.type != FieldDescriptor.TYPE_MESSAGE): return False message_descriptor = field.message_type return last in message_descriptor.fields_by_name
Example #27
Source Project: coremltools Author: apple File: well_known_types.py License: BSD 3-Clause "New" or "Revised" License | 5 votes |
def _MergeMessage( node, source, destination, replace_message, replace_repeated): """Merge all fields specified by a sub-tree from source to destination.""" source_descriptor = source.DESCRIPTOR for name in node: child = node[name] field = source_descriptor.fields_by_name[name] if field is None: raise ValueError('Error: Can\'t find field {0} in message {1}.'.format( name, source_descriptor.full_name)) if child: # Sub-paths are only allowed for singular message fields. if (field.label == FieldDescriptor.LABEL_REPEATED or field.cpp_type != FieldDescriptor.CPPTYPE_MESSAGE): raise ValueError('Error: Field {0} in message {1} is not a singular ' 'message field and cannot have sub-fields.'.format( name, source_descriptor.full_name)) _MergeMessage( child, getattr(source, name), getattr(destination, name), replace_message, replace_repeated) continue if field.label == FieldDescriptor.LABEL_REPEATED: if replace_repeated: destination.ClearField(_StrConvert(name)) repeated_source = getattr(source, name) repeated_destination = getattr(destination, name) if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: for item in repeated_source: repeated_destination.add().MergeFrom(item) else: repeated_destination.extend(repeated_source) else: if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: if replace_message: destination.ClearField(_StrConvert(name)) if source.HasField(name): getattr(destination, name).MergeFrom(getattr(source, name)) else: setattr(destination, name, getattr(source, name))
Example #28
Source Project: go2mapillary Author: enricofer File: well_known_types.py License: GNU General Public License v3.0 | 5 votes |
def _IsValidPath(message_descriptor, path): """Checks whether the path is valid for Message Descriptor.""" parts = path.split('.') last = parts.pop() for name in parts: field = message_descriptor.fields_by_name[name] if (field is None or field.label == FieldDescriptor.LABEL_REPEATED or field.type != FieldDescriptor.TYPE_MESSAGE): return False message_descriptor = field.message_type return last in message_descriptor.fields_by_name
Example #29
Source Project: go2mapillary Author: enricofer File: well_known_types.py License: GNU General Public License v3.0 | 5 votes |
def _MergeMessage( node, source, destination, replace_message, replace_repeated): """Merge all fields specified by a sub-tree from source to destination.""" source_descriptor = source.DESCRIPTOR for name in node: child = node[name] field = source_descriptor.fields_by_name[name] if field is None: raise ValueError('Error: Can\'t find field {0} in message {1}.'.format( name, source_descriptor.full_name)) if child: # Sub-paths are only allowed for singular message fields. if (field.label == FieldDescriptor.LABEL_REPEATED or field.cpp_type != FieldDescriptor.CPPTYPE_MESSAGE): raise ValueError('Error: Field {0} in message {1} is not a singular ' 'message field and cannot have sub-fields.'.format( name, source_descriptor.full_name)) _MergeMessage( child, getattr(source, name), getattr(destination, name), replace_message, replace_repeated) continue if field.label == FieldDescriptor.LABEL_REPEATED: if replace_repeated: destination.ClearField(_StrConvert(name)) repeated_source = getattr(source, name) repeated_destination = getattr(destination, name) if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: for item in repeated_source: repeated_destination.add().MergeFrom(item) else: repeated_destination.extend(repeated_source) else: if field.cpp_type == FieldDescriptor.CPPTYPE_MESSAGE: if replace_message: destination.ClearField(_StrConvert(name)) if source.HasField(name): getattr(destination, name).MergeFrom(getattr(source, name)) else: setattr(destination, name, getattr(source, name))
Example #30
Source Project: luci-py Author: luci File: pb_to_popo.py License: Apache License 2.0 | 5 votes |
def convert(pb): """Convert protobuf to plain-old-python-object""" obj = {} for field, value in pb.ListFields(): if field.label == fd.LABEL_REPEATED: obj[field.name] = list(_get_json_func(field.type)(v) for v in value) else: obj[field.name] = _get_json_func(field.type)(value) return obj