def _display_interaction_info(self, Item): """ Display the currently selected interaction's information. Triggered when single-clicking on it in the interactions list view. """ list_widget = Item.listWidget() cur_index = list_widget.count() - list_widget.currentRow() - 1 for k in self.interactions.values(): if(k.index == cur_index): self.cur_selected_interaction = k break self.interactions_widget.app_info.clear() info_text = "<html>" info_text += "<p>-------------------------------------------</p>" web_interaction = web_interactions.parse(self.cur_selected_interaction.name) name = self.cur_selected_interaction.name if web_interaction is None else web_interaction.url info_text += "<p><b>name: </b>" + name + "</p>" info_text += "<p><b> ---------------------</b>" + "</p>" info_text += "<p><b>compatibility: </b>" + self.cur_selected_interaction.compatibility + "</p>" info_text += "<p><b>display name: </b>" + self.cur_selected_interaction.display_name + "</p>" info_text += "<p><b>description: </b>" + self.cur_selected_interaction.description + "</p>" info_text += "<p><b>namespace: </b>" + self.cur_selected_interaction.namespace + "</p>" info_text += "<p><b>max: </b>" + str(self.cur_selected_interaction.max) + "</p>" info_text += "<p><b> ---------------------</b>" + "</p>" info_text += "<p><b>remappings: </b>" + str(self.cur_selected_interaction.remappings) + "</p>" info_text += "<p><b>parameters: </b>" + str(self.cur_selected_interaction.parameters) + "</p>" info_text += "</html>" self.interactions_widget.app_info.appendHtml(info_text) self._set_stop_interactions_button()
def test_bad_web_interactions(): print( console.bold + "\n****************************************************************************************" + console.reset) print(console.bold + "* Invalid Web Interactions" + console.reset) print( console.bold + "****************************************************************************************" + console.reset) print("") web_interaction = web_interactions.parse(undecorated_web_url) assert_is_none(web_interaction) web_interaction = web_interactions.parse(not_a_web_interaction) assert_is_none(web_interaction)
def test_web_app(): print( console.bold + "\n****************************************************************************************" + console.reset) print(console.bold + "* Valid Web Apps" + console.reset) print( console.bold + "****************************************************************************************" + console.reset) print("") for example_app in [example_web_app, example_web_app_with_quotes]: web_interaction = web_interactions.parse(example_app) assert_is_not_none(web_interaction) assert_false(web_interaction.is_web_url()) assert_true(web_interaction.is_web_app())
def test_web_urls(): print( console.bold + "\n****************************************************************************************" + console.reset) print(console.bold + "* Valid Web URL's" + console.reset) print( console.bold + "****************************************************************************************" + console.reset) print("") for example_url in [example_web_url, example_web_url_with_quotes]: web_interaction = web_interactions.parse(example_url) assert_is_not_none(web_interaction) assert_true(web_interaction.is_web_url(), "A web url should be a web url") assert_false(web_interaction.is_web_app(), "A web url is not a web app")
def _determine_interaction_type(self, interaction): ''' Classifies the interaction based on the name string and some intelligent (well, reasonably) parsing of that string. - paired dummy (by empty name) - ros launcher (by .launch extension) - ros runnable (by roslib find_resource success) - web app (by web_interactions.parse) - web url (by web_interactions.parse) - global executable (fallback option) ''' # pairing trigger (i.e. dummy interaction) if not interaction.name: console.logdebug( "Interactive Client : start a dummy interaction for triggering a pair" ) return ('', self._start_dummy_interaction) # roslaunch try: launcher_filename = rocon_python_utils.ros.find_resource_from_string( interaction.name, extension='launch') if interaction.remappings: raise rocon_interactions.InvalidInteraction( "remappings are not yet enabled for roslaunchable interactions (workaround: try remapping via interaction parameters and roslaunch args)[%s]" % interaction.name) console.logdebug("Interactive Client : roslaunchable [%s]" % interaction.name) return (launcher_filename, self._start_roslaunch_interaction) except (rospkg.ResourceNotFound, ValueError): unused_filename, extension = os.path.splitext(interaction.name) if extension == '.launch': raise rocon_interactions.InvalidInteraction( "could not find %s on the filesystem" % interaction.name) else: pass # rosrun try: rosrunnable_filename = rocon_python_utils.ros.find_resource_from_string( interaction.name) console.logdebug( "Interactive Client : start_app_rosrunnable [%s]" % interaction.name) return (rosrunnable_filename, self._start_rosrunnable_interaction) except rospkg.ResourceNotFound: pass except Exception: pass # web url/app web_interaction = web_interactions.parse(interaction.name) if web_interaction is not None: if web_interaction.is_web_url(): console.logdebug( "Interactive Client : _start_weburl_interaction [%s]" % web_interaction.url) return (web_interaction.url, self._start_weburl_interaction) elif web_interaction.is_web_app(): console.logdebug( "Interactive Client : _start_webapp_interaction [%s]" % web_interaction.url) return (web_interaction.url, self._start_webapp_interaction) # executable if rocon_python_utils.system.which(interaction.name) is not None: console.logdebug( "Interactive Client : _start_global_executable_interaction [%s]" ) return (interaction.name, self._start_global_executable_interaction) else: raise rocon_interactions.InvalidInteraction( "could not find a valid rosrunnable or global executable for '%s' (mispelt, not installed?)" % interaction.name)