Ejemplo n.º 1
0
 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])
Ejemplo n.º 2
0
 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'])
Ejemplo n.º 4
0
 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'])
Ejemplo n.º 5
0
    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(''))
Ejemplo n.º 6
0
 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(''))
Ejemplo n.º 7
0
  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
Ejemplo n.º 9
0
                        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)
Ejemplo n.º 10
0
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