def testGetMessages(self): # performed twice because multiple calls with the same input must be allowed for _ in range(2): messages = message_factory.GetMessages([self.factory_test1_fd, self.factory_test2_fd]) self.assertTrue( set(['google.protobuf.python.internal.Factory2Message', 'google.protobuf.python.internal.Factory1Message'], ).issubset(set(messages.keys()))) self._ExerciseDynamicClass( messages['google.protobuf.python.internal.Factory2Message']) factory_msg1 = messages['google.protobuf.python.internal.Factory1Message'] self.assertTrue(set( ['google.protobuf.python.internal.Factory2Message.one_more_field', 'google.protobuf.python.internal.another_field'],).issubset(set( ext.full_name for ext in factory_msg1.DESCRIPTOR.file.pool.FindAllExtensions( factory_msg1.DESCRIPTOR)))) msg1 = messages['google.protobuf.python.internal.Factory1Message']() ext1 = msg1.Extensions._FindExtensionByName( 'google.protobuf.python.internal.Factory2Message.one_more_field') ext2 = msg1.Extensions._FindExtensionByName( 'google.protobuf.python.internal.another_field') msg1.Extensions[ext1] = 'test1' msg1.Extensions[ext2] = 'test2' self.assertEqual('test1', msg1.Extensions[ext1]) self.assertEqual('test2', msg1.Extensions[ext2])
def testGetMessages(self): # performed twice because multiple calls with the same input must be allowed for _ in range(2): messages = message_factory.GetMessages( [self.factory_test1_fd, self.factory_test2_fd]) self.assertTrue( set([ 'google.protobuf.python.internal.Factory2Message', 'google.protobuf.python.internal.Factory1Message' ], ).issubset(set(messages.keys()))) self._ExerciseDynamicClass( messages['google.protobuf.python.internal.Factory2Message']) self.assertTrue( set([ 'google.protobuf.python.internal.Factory2Message.one_more_field', 'google.protobuf.python.internal.another_field' ], ).issubset( set(messages[ 'google.protobuf.python.internal.Factory1Message']. _extensions_by_name.keys()))) factory_msg1 = messages[ 'google.protobuf.python.internal.Factory1Message'] msg1 = messages['google.protobuf.python.internal.Factory1Message']( ) ext1 = factory_msg1._extensions_by_name[ 'google.protobuf.python.internal.Factory2Message.one_more_field'] ext2 = factory_msg1._extensions_by_name[ 'google.protobuf.python.internal.another_field'] msg1.Extensions[ext1] = 'test1' msg1.Extensions[ext2] = 'test2' self.assertEqual('test1', msg1.Extensions[ext1]) self.assertEqual('test2', msg1.Extensions[ext2])
def testGetMessages(self): messages = message_factory.GetMessages( [self.factory_test2_fd, self.factory_test1_fd]) self.assertContainsSubset([ 'net.proto2.python.internal.Factory2Message', 'net.proto2.python.internal.Factory1Message' ], messages.keys()) self._ExerciseDynamicClass( messages['net.proto2.python.internal.Factory2Message'])
def testGetMessages(self): messages = message_factory.GetMessages( [self.factory_test2_fd, self.factory_test1_fd]) self.assertTrue('google.protobuf.python.internal.Factory2Message' in messages.keys()) self.assertTrue('google.protobuf.python.internal.Factory2Message' in messages.keys()) self._ExerciseDynamicClass( messages['google.protobuf.python.internal.Factory2Message'])
def testGetMessages(self): # performed twice because multiple calls with the same input must be allowed for _ in range(2): # GetMessage should work regardless of the order the FileDescriptorProto # are provided. In particular, the function should succeed when the files # are not in the topological order of dependencies. # Assuming factory_test2_fd depends on factory_test1_fd. self.assertIn(self.factory_test1_fd.name, self.factory_test2_fd.dependency) # Get messages should work when a file comes before its dependencies: # factory_test2_fd comes before factory_test1_fd. messages = message_factory.GetMessages( [self.factory_test2_fd, self.factory_test1_fd]) self.assertTrue( set([ 'google.protobuf.python.internal.Factory2Message', 'google.protobuf.python.internal.Factory1Message' ], ).issubset(set(messages.keys()))) self._ExerciseDynamicClass( messages['google.protobuf.python.internal.Factory2Message']) factory_msg1 = messages[ 'google.protobuf.python.internal.Factory1Message'] self.assertTrue( set([ 'google.protobuf.python.internal.Factory2Message.one_more_field', 'google.protobuf.python.internal.another_field' ], ).issubset( set(ext.full_name for ext in factory_msg1.DESCRIPTOR.file. pool.FindAllExtensions(factory_msg1.DESCRIPTOR)))) msg1 = messages['google.protobuf.python.internal.Factory1Message']( ) ext1 = msg1.Extensions._FindExtensionByName( 'google.protobuf.python.internal.Factory2Message.one_more_field' ) ext2 = msg1.Extensions._FindExtensionByName( 'google.protobuf.python.internal.another_field') msg1.Extensions[ext1] = 'test1' msg1.Extensions[ext2] = 'test2' self.assertEqual('test1', msg1.Extensions[ext1]) self.assertEqual('test2', msg1.Extensions[ext2]) self.assertEqual(None, msg1.Extensions._FindExtensionByNumber(12321)) if api_implementation.Type() == 'cpp': # TODO(jieluo): Fix len to return the correct value. # self.assertEqual(2, len(msg1.Extensions)) self.assertEqual(len(msg1.Extensions), len(msg1.Extensions)) self.assertRaises(TypeError, msg1.Extensions._FindExtensionByName, 0) self.assertRaises(TypeError, msg1.Extensions._FindExtensionByNumber, '') else: self.assertEqual(None, msg1.Extensions._FindExtensionByName(0)) self.assertEqual(None, msg1.Extensions._FindExtensionByNumber(''))
def testGetMessages(self): # performed twice because multiple calls with the same input must be allowed for _ in range(2): messages = message_factory.GetMessages( [self.factory_test1_fd, self.factory_test2_fd]) self.assertTrue( set([ 'google.protobuf.python.internal.Factory2Message', 'google.protobuf.python.internal.Factory1Message' ], ).issubset(set(messages.keys()))) self._ExerciseDynamicClass( messages['google.protobuf.python.internal.Factory2Message']) factory_msg1 = messages[ 'google.protobuf.python.internal.Factory1Message'] self.assertTrue( set([ 'google.protobuf.python.internal.Factory2Message.one_more_field', 'google.protobuf.python.internal.another_field' ], ).issubset( set(ext.full_name for ext in factory_msg1.DESCRIPTOR.file. pool.FindAllExtensions(factory_msg1.DESCRIPTOR)))) msg1 = messages['google.protobuf.python.internal.Factory1Message']( ) ext1 = msg1.Extensions._FindExtensionByName( 'google.protobuf.python.internal.Factory2Message.one_more_field' ) ext2 = msg1.Extensions._FindExtensionByName( 'google.protobuf.python.internal.another_field') msg1.Extensions[ext1] = 'test1' msg1.Extensions[ext2] = 'test2' self.assertEqual('test1', msg1.Extensions[ext1]) self.assertEqual('test2', msg1.Extensions[ext2]) self.assertEqual(None, msg1.Extensions._FindExtensionByNumber(12321)) if api_implementation.Type() == 'cpp': # TODO(jieluo): Fix len to return the correct value. # self.assertEqual(2, len(msg1.Extensions)) self.assertEqual(len(msg1.Extensions), len(msg1.Extensions)) self.assertRaises(TypeError, msg1.Extensions._FindExtensionByName, 0) self.assertRaises(TypeError, msg1.Extensions._FindExtensionByNumber, '') else: self.assertEqual(None, msg1.Extensions._FindExtensionByName(0)) self.assertEqual(None, msg1.Extensions._FindExtensionByNumber(''))
def testGetMessages(self): # performed twice because multiple calls with the same input must be allowed for _ in range(2): # GetMessage should work regardless of the order the FileDescriptorProto # are provided. In particular, the function should succeed when the files # are not in the topological order of dependencies. # Assuming factory_test2_fd depends on factory_test1_fd. self.assertIn(self.factory_test1_fd.name, self.factory_test2_fd.dependency) # Get messages should work when a file comes before its dependencies: # factory_test2_fd comes before factory_test1_fd. messages = message_factory.GetMessages([self.factory_test2_fd, self.factory_test1_fd]) self.assertTrue( set(['google.protobuf.python.internal.Factory2Message', 'google.protobuf.python.internal.Factory1Message'], ).issubset(set(messages.keys()))) self._ExerciseDynamicClass( messages['google.protobuf.python.internal.Factory2Message']) factory_msg1 = messages['google.protobuf.python.internal.Factory1Message']
def get_message_definitions(): messages = message_factory.GetMessages( (VESProtobuf.create_ves_event(), )) message_factory._FACTORY = message_factory.MessageFactory() return messages
type=int, default=115200, help="serial port baudrate") parser.add_argument( "-r", "--raw", action="store_true", help="Open the port as a file instead of as serial port.") parser.add_argument("--protoc", default="protoc", help="Path to the protoc binary") params = parser.parse_args() descriptor_set = load_descriptor_set(params.protoc, params.proto) messages = message_factory.GetMessages(descriptor_set.file) msg_type = messages[params.message] filters = [] parse_message(msg_type().DESCRIPTOR, filters) print(json.dumps(filters, indent=4)) input = None is_stdin = params.input.strip() == "-" if is_stdin: input = sys.stdin.buffer elif params.raw: input = open(params.input, "rb") else: input = serial.Serial(params.input, baudrate=params.baudrate)
def main(): from google.protobuf import descriptor_pb2 as pb2 from google.protobuf import message_factory as _message_factory from google.protobuf.text_format import MessageToString script_dir = os.path.dirname(os.path.realpath(__file__)) default_header_pb_file = os.path.realpath( os.path.join(script_dir, '..', 'header', 'pb_header_v3.pb')) usage = '[options...] <pb file> <binary file>' parser = CmdArgsGetParser(usage) CmdArgsAddOption(parser, "-v", "--version", action="store_true", help="show version and exit", dest="version", default=False) CmdArgsAddOption(parser, "--as_one_line", action="store_true", help="set one line per data_block for output", dest="as_one_line", default=False) CmdArgsAddOption(parser, "--header", action="store", help="set xresloader header pb file(default: {0})".format( os.path.relpath(default_header_pb_file, os.getcwd())), dest="header_pb_file", default=default_header_pb_file) (options, left_args) = CmdArgsParse(parser) if options.version: print('1.0.0') return 0 def print_help_msg(err_code): parser.print_help() exit(err_code) if len(left_args) < 2: print_help_msg(1) header_pb_fds = pb2.FileDescriptorSet.FromString( open(options.header_pb_file, 'rb').read()) real_pb_fds = pb2.FileDescriptorSet.FromString( open(left_args[0], 'rb').read()) protobuf_fds = pb2.FileDescriptorSet.FromString( open(os.path.join(script_dir, 'extensions.pb'), 'rb').read()) header_message_desc = _message_factory.GetMessages( [x for x in header_pb_fds.file]) pb_fds_header_clazz = header_message_desc[ "org.xresloader.pb.xresloader_datablocks"] header_inst = pb_fds_header_clazz.FromString( open(left_args[1], 'rb').read()) print('==================================================================') print( MessageToString(header_inst.header, as_utf8=True, as_one_line=options.as_one_line, use_short_repeated_primitives=True)) real_file_descs = [x for x in real_pb_fds.file] real_file_descs.extend([x for x in header_pb_fds.file]) real_file_descs.extend([x for x in protobuf_fds.file]) real_message_desc = _message_factory.GetMessages(real_file_descs) if header_inst.data_message_type not in real_message_desc: print( '------------------------------------------------------------------' ) print('data_message_type {0} not found in {1}'.format( header_inst.data_message_type, open(left_args[0]))) exit(0) real_inst = real_message_desc[header_inst.data_message_type] line_index = 0 if options.as_one_line: print( '------------------------------------------------------------------' ) for data_block in header_inst.data_block: message_inst = real_inst.FromString(data_block) line_index = line_index + 1 if not options.as_one_line: print( '# {0:<5} ----------------------------------------------------------' .format(line_index)) decode_as_utf8 = False try: # see https://googleapis.dev/python/protobuf/latest/google/protobuf/text_format.html for detail if options.as_one_line: print('$ {0:<5}: {1}'.format( line_index, MessageToString(message_inst, as_utf8=True, as_one_line=options.as_one_line, use_short_repeated_primitives=True, print_unknown_fields=True))) else: print( MessageToString(message_inst, as_utf8=True, as_one_line=options.as_one_line, use_short_repeated_primitives=True, print_unknown_fields=True)) decode_as_utf8 = True except: pass if decode_as_utf8: continue try: if options.as_one_line: print('$ {0:<5}: {1}'.format( line_index, MessageToString(message_inst, as_utf8=True, as_one_line=options.as_one_line, use_short_repeated_primitives=True, print_unknown_fields=True))) else: print( MessageToString(message_inst, as_utf8=True, as_one_line=options.as_one_line, use_short_repeated_primitives=True, print_unknown_fields=True)) except: pass