예제 #1
0
def get_field_type_capable_with_index(field_string):
    '''get type even if it contains [] for array'''

    m = re.search('(.+)(\[[0-9]+\])$', field_string)
    if m:
        return helpers.get_field_type(m.group(1))
    else:
        return helpers.get_field_type(field_string)
예제 #2
0
 def _change_publisher_expression(self, publisher_info, topic_name, new_value):
     expression = str(new_value)
     if len(expression) == 0:
         if topic_name in publisher_info['expressions']:
             del publisher_info['expressions'][topic_name]
             #qDebug('Publisher._change_publisher_expression(): removed expression for: %s' % (topic_name))
     else:
         slot_type, is_array = get_field_type(topic_name)
         if is_array:
             slot_type = list
         # strip possible trailing error message from expression
         error_prefix = '# error'
         error_prefix_pos = expression.find(error_prefix)
         if error_prefix_pos >= 0:
             expression = expression[:error_prefix_pos]
         success, _ = self._evaluate_expression(expression, slot_type)
         if success:
             old_expression = publisher_info['expressions'].get(topic_name, None)
             publisher_info['expressions'][topic_name] = expression
             #print 'Publisher._change_publisher_expression(): topic: %s, type: %s, expression: %s' % (topic_name, slot_type, new_value)
             self._fill_message_slots(publisher_info['message_instance'], publisher_info['topic_name'], publisher_info['expressions'], publisher_info['counter'])
             try:
                 publisher_info['message_instance']._check_types()
             except Exception as e:
                 print('serialization error: %s' % e)
                 if old_expression is not None:
                     publisher_info['expressions'][topic_name] = old_expression
                 else:
                     del publisher_info['expressions'][topic_name]
                 return '%s %s: %s' % (expression, error_prefix, e)
             return expression
         else:
             return '%s %s evaluating as "%s"' % (expression, error_prefix, slot_type.__name__)
예제 #3
0
 def _change_publisher_expression(self, publisher_info, topic_name, new_value):
     expression = str(new_value)
     if len(expression) == 0:
         if topic_name in publisher_info['expressions']:
             del publisher_info['expressions'][topic_name]
             #qDebug('Publisher._change_publisher_expression(): removed expression for: %s' % (topic_name))
     else:
         slot_type, is_array = get_field_type(topic_name)
         if is_array:
             slot_type = list
         # strip possible trailing error message from expression
         error_prefix = '# error'
         error_prefix_pos = expression.find(error_prefix)
         if error_prefix_pos >= 0:
             expression = expression[:error_prefix_pos]
         success, _ = self._evaluate_expression(expression, slot_type)
         if success:
             old_expression = publisher_info['expressions'].get(topic_name, None)
             publisher_info['expressions'][topic_name] = expression
             #print 'Publisher._change_publisher_expression(): topic: %s, type: %s, expression: %s' % (topic_name, slot_type, new_value)
             self._fill_message_slots(publisher_info['message_instance'], publisher_info['topic_name'], publisher_info['expressions'], publisher_info['counter'])
             try:
                 publisher_info['message_instance']._check_types()
             except Exception as e:
                 print('serialization error: %s' % e)
                 if old_expression is not None:
                     publisher_info['expressions'][topic_name] = old_expression
                 else:
                     del publisher_info['expressions'][topic_name]
                 return '%s %s: %s' % (expression, error_prefix, e)
             return expression
         else:
             return '%s %s evaluating as "%s"' % (expression, error_prefix, slot_type.__name__)
예제 #4
0
 def _change_message_expression(self, message_info, topic_name, new_value):
     expression = str(new_value)
     if len(expression) == 0:
         if topic_name in message_info['expressions']:
             del message_info['expressions'][topic_name]
             #qDebug('MsgEditor._change_message_expression(): removed expression for: %s' % (topic_name))
     else:
         slot_type, is_array = get_field_type(topic_name)
         if is_array:
             slot_type = list
         # strip possible trailing error message from expression
         error_prefix = '# error'
         error_prefix_pos = expression.find(error_prefix)
         if error_prefix_pos >= 0:
             expression = expression[:error_prefix_pos]
         success, _ = self._evaluate_expression(expression, slot_type)
         if success:
             old_expression = message_info['expressions'].get(topic_name, None)
             message_info['expressions'][topic_name] = expression
             #print 'MsgEditor._change_message_expression(): topic: %s, type: %s, expression: %s' % (topic_name, slot_type, new_value)
             self._fill_message_slots(message_info['instance'], message_info['topic_name'], message_info['expressions'], message_info['counter'])
             try:
                 message_info['instance']._check_types()
             except Exception, e:
                 error_str = str(e)
                 print 'serialization error:', error_str
                 if old_expression is not None:
                     message_info['expressions'][topic_name] = old_expression
                 else:
                     del message_info['expressions'][topic_name]
                 return '%s %s: %s' % (expression, error_prefix, error_str)
             return expression
         else:
예제 #5
0
def accepted_topic(topic):
    msg_types = [OccupancyGrid, Path, PolygonStamped, PointStamped]
    msg_type, array = get_field_type(topic)

    if not array and msg_type in msg_types:
        return True
    else:
        return False
예제 #6
0
def accepted_topic(topic):
    msg_types = [OccupancyGrid, Path, PolygonStamped, PointStamped]
    msg_type, array = get_field_type(topic)

    if not array and msg_type in msg_types:
        return True
    else:
        return False
예제 #7
0
    def dropEvent(self, e):
        if e.mimeData().hasText():
            topic_name = str(e.mimeData().text())
        else:
            dropped_item = e.source().selectedItems()[0]
            topic_name = str(dropped_item.data(0, Qt.UserRole))

        topic_type, array = get_field_type(topic_name)
        if not array:
            if topic_type is OccupancyGrid:
                self.map_topic = topic_name

                # Swap out the nav view for one with the new topics
                self.new_nav_view()
            elif topic_type is Path:
                self.paths.append(topic_name)
                self._nav_view.add_path(topic_name)
            elif topic_type is PolygonStamped:
                self.polygons.append(topic_name)
                self._nav_view.add_polygon(topic_name)
예제 #8
0
    def dropEvent(self, e):
        if e.mimeData().hasText():
            topic_name = str(e.mimeData().text())
        else:
            droped_item = e.source().selectedItems()[0]
            topic_name = str(droped_item.data(0, Qt.UserRole))

        topic_type, array = get_field_type(topic_name)
        if not array:
            if topic_type is OccupancyGrid:
                self.map = topic_name

                # Swap out the nav view for one with the new topics
                self._nav_view.close()
                self._nav_view = NavView(self.map, self.paths, self.polygons, self._tf, self)
                self._layout.addWidget(self._nav_view)
            elif topic_type is Path:
                self.paths.append(topic_name)
                self._nav_view.add_path(topic_name)
            elif topic_type is PolygonStamped:
                self.polygons.append(topic_name)
                self._nav_view.add_polygon(topic_name)
예제 #9
0
 def _change_message_expression(self, message_info, topic_name, new_value):
     expression = str(new_value)
     if len(expression) == 0:
         if topic_name in message_info['expressions']:
             del message_info['expressions'][topic_name]
             #qDebug('MsgEditor._change_message_expression(): removed expression for: %s' % (topic_name))
     else:
         slot_type, is_array = get_field_type(topic_name)
         if is_array:
             slot_type = list
         # strip possible trailing error message from expression
         error_prefix = '# error'
         error_prefix_pos = expression.find(error_prefix)
         if error_prefix_pos >= 0:
             expression = expression[:error_prefix_pos]
         success, _ = self._evaluate_expression(expression, slot_type)
         if success:
             old_expression = message_info['expressions'].get(
                 topic_name, None)
             message_info['expressions'][topic_name] = expression
             #print 'MsgEditor._change_message_expression(): topic: %s, type: %s, expression: %s' % (topic_name, slot_type, new_value)
             self._fill_message_slots(message_info['instance'],
                                      message_info['topic_name'],
                                      message_info['expressions'],
                                      message_info['counter'])
             try:
                 message_info['instance']._check_types()
             except Exception, e:
                 error_str = str(e)
                 print 'serialization error:', error_str
                 if old_expression is not None:
                     message_info['expressions'][
                         topic_name] = old_expression
                 else:
                     del message_info['expressions'][topic_name]
                 return '%s %s: %s' % (expression, error_prefix, error_str)
             return expression
         else: