def discover(self, discovery_data): discovered_plugins = self._unfold(self._plugin_provider.discover(discovery_data)) plugin_descriptors = [] for plugin in discovered_plugins.values(): plugin_descriptor = PluginDescriptor(plugin['plugin_id'], plugin['attributes']) action_attributes = plugin['action'] plugin_descriptor.set_action_attributes(action_attributes['label'], action_attributes.get('statustip', None), action_attributes.get('icon', None), action_attributes.get('icontype', None)) groups = plugin.get('groups', {}) for group in groups.values(): plugin_descriptor.add_group_attributes(group['label'], group['statustip'], group['icon'], group['icontype']) plugin_descriptors.append(plugin_descriptor) return plugin_descriptors
def discover(self): discovered_plugins = self._unfold(self._plugin_provider.discover()) plugin_descriptors = [] for plugin in discovered_plugins.values(): plugin_descriptor = PluginDescriptor(plugin['plugin_id'], plugin['attributes']) action_attributes = plugin['action'] plugin_descriptor.set_action_attributes( action_attributes['label'], action_attributes.get('statustip', None), action_attributes.get('icon', None), action_attributes.get('icontype', None)) groups = plugin.get('groups', {}) for group in groups.values(): plugin_descriptor.add_group_attributes(group['label'], group['statustip'], group['icon'], group['icontype']) plugin_descriptors.append(plugin_descriptor) return plugin_descriptors
def _parse_plugin_xml(self, package_name, plugin_xml): plugin_descriptors = [] if not os.path.isfile(plugin_xml): qCritical('RosPluginProvider._parse_plugin_xml() plugin file "%s" in package "%s" ' 'not found' % (plugin_xml, package_name)) return plugin_descriptors try: root = ElementTree.parse(plugin_xml) except Exception: qCritical('RosPluginProvider._parse_plugin_xml() could not parse "%s" in package "%s"' % (plugin_xml, package_name)) return plugin_descriptors for library_el in root.getiterator('library'): library_path = library_el.attrib['path'] for class_el in library_el.getiterator('class'): # collect common attributes attributes = { 'package_name': package_name, 'plugin_path': os.path.dirname(plugin_xml), 'library_path': library_path, } # add class attributes for key, value in class_el.items(): attributes['class_' + key] = value # skip classes with non-matching _base_class_type class_base_class_type = attributes.get('class_base_class_type', None) if class_base_class_type != self._base_class_type: continue # generate unique identifier plugin_id = package_name if 'class_name' in attributes: plugin_id = plugin_id + '/' + attributes['class_name'] attributes['plugin_id'] = plugin_id # separate module name and class name module_name, class_from_class_type = attributes['class_type'].rsplit('.', 1) attributes['module_name'] = module_name attributes['class_from_class_type'] = class_from_class_type # we can not check if the plugin is available without loading it attributes['not_available'] = '' plugin_descriptor = PluginDescriptor(plugin_id, attributes) # set action attributes (plugin providers might have none) action_attributes, groups = self._parse_plugin(class_el) if len(action_attributes) > 0: plugin_descriptor.set_action_attributes( action_attributes['label'], action_attributes.get('statustip', None), action_attributes.get('icon', None), action_attributes.get('icontype', None), ) # add group attributes for group in groups: plugin_descriptor.add_group_attributes( group['label'], group.get('statustip', None), group.get('icon', None), group.get('icontype', None), ) # add plugin_descriptor to list plugin_descriptors.append(plugin_descriptor) return plugin_descriptors
def _parse_plugin_xml(self, package_name, plugin_xml): plugin_descriptors = [] if not os.path.isfile(plugin_xml): qCritical('RosPluginProvider._parse_plugin_xml() plugin file "%s" in package "%s" not found' % (plugin_xml, package_name)) return plugin_descriptors try: root = ElementTree.parse(plugin_xml) except Exception: qCritical('RosPluginProvider._parse_plugin_xml() could not parse "%s" in package "%s"' % (plugin_xml, package_name)) return plugin_descriptors for library_el in root.getiterator('library'): library_path = library_el.attrib['path'] for class_el in library_el.getiterator('class'): # collect common attributes attributes = { 'package_name': package_name, 'plugin_path': os.path.dirname(plugin_xml), 'library_path': library_path, } # add class attributes for key, value in class_el.items(): attributes['class_' + key] = value # skip classes with non-matching _base_class_type class_base_class_type = attributes.get('class_base_class_type', None) if class_base_class_type != self._base_class_type: continue # generate unique identifier plugin_id = package_name if 'class_name' in attributes: plugin_id = plugin_id + '/' + attributes['class_name'] attributes['plugin_id'] = plugin_id # separate module name and class name module_name, class_from_class_type = attributes['class_type'].rsplit('.', 1) attributes['module_name'] = module_name attributes['class_from_class_type'] = class_from_class_type # we can not check if the plugin is available without loading it attributes['not_available'] = '' plugin_descriptor = PluginDescriptor(plugin_id, attributes) # set action attributes (plugin providers might have none) action_attributes, groups = self._parse_plugin(class_el) if len(action_attributes) > 0: plugin_descriptor.set_action_attributes( action_attributes['label'], action_attributes.get('statustip', None), action_attributes.get('icon', None), action_attributes.get('icontype', None), ) # add group attributes for group in groups: plugin_descriptor.add_group_attributes( group['label'], group.get('statustip', None), group.get('icon', None), group.get('icontype', None), ) # add plugin_descriptor to list plugin_descriptors.append(plugin_descriptor) return plugin_descriptors
def _parse_plugin_xml(self, plugin_name, xml_file_name): plugin_descriptors = [] plugin_path = os.path.dirname(os.path.abspath(xml_file_name)) try: root = ElementTree.parse(xml_file_name) except Exception: qCritical( 'RosPluginProvider._parse_plugin_xml() could not parse "%s" of plugin "%s"' % (xml_file_name, plugin_name)) return plugin_descriptors for library_el in root.getiterator('library'): library_path = library_el.attrib['path'] for class_el in library_el.getiterator('class'): # collect common attributes attributes = { 'plugin_name': plugin_name, 'plugin_path': plugin_path, 'library_path': library_path, } # add class attributes for key, value in class_el.items(): attributes['class_' + key] = value # skip classes with non-matching _base_class_type class_base_class_type = attributes.get('class_base_class_type', None) if class_base_class_type != self._base_class_type: continue # generate unique identifier plugin_id = plugin_name if 'class_name' in attributes: plugin_id = plugin_id + '/' + attributes['class_name'] attributes['plugin_id'] = plugin_id # base path to look for module module_base_path = plugin_path if library_path != '': module_base_path = os.path.join(module_base_path, library_path) attributes['module_base_path'] = module_base_path # separate module name and class name module_name, class_from_class_type = os.path.split( attributes['class_type'].replace('.', os.sep)) attributes['module_name'] = module_name.replace(os.sep, '.') attributes['class_from_class_type'] = class_from_class_type # check if plugin is available module_abs_path = os.path.join(module_base_path, module_name) + '.py' attributes[ 'not_available'] = plugin_name if not os.path.exists( module_abs_path) else '' plugin_descriptor = PluginDescriptor(plugin_id, attributes) # set action attributes (plugin providers might have none) action_attributes, groups = self._parse_plugin(class_el) if len(action_attributes) > 0: plugin_descriptor.set_action_attributes( action_attributes['label'], action_attributes.get('statustip', None), action_attributes.get('icon', None), action_attributes.get('icontype', None), ) # add group attributes for group in groups: plugin_descriptor.add_group_attributes( group['label'], group.get('statustip', None), group.get('icon', None), group.get('icontype', None), ) # add plugin_descriptor to list plugin_descriptors.append(plugin_descriptor) return plugin_descriptors