def test_remove_package(self): """ Tests if the package really gets deleted, and that it gets selected again in the available packages list. """ pkg = "dialogs" _app = get_vistrails_application() builder = _app.builderWindow builder.showPreferences() prefs = builder.preferencesDialog packages = prefs._packages_tab prefs._tab_widget.setCurrentWidget(packages) # check if package is loaded av = packages._available_packages_list for item in av.findItems(pkg, QtCore.Qt.MatchExactly): av.setCurrentItem(item) packages.enable_current_package() QtCore.QCoreApplication.processEvents() inst = packages._enabled_packages_list for item in inst.findItems(pkg, QtCore.Qt.MatchExactly): inst.setCurrentItem(item) packages.disable_current_package() QtCore.QCoreApplication.processEvents() # force delayed calls packages.populate_lists() packages.select_package_after_update_slot(pkg) QtCore.QCoreApplication.processEvents() # This does not work because the selection is delayed av = packages._available_packages_list items = av.selectedItems() self.assertEqual(len(items), 1, "No available items selected!") self.assertEqual(items[0].text(), unicode(pkg), "Wrong available item selected: %s" % items[0].text()) # check if configuration has been written correctly startup = _app.vistrailsStartup doc = startup.startup_dom().documentElement disabledpackages = enter_named_element(doc, 'disabledpackages') dpackage = None for package_node in named_elements(disabledpackages, 'package'): if str(package_node.attributes['name'].value) == pkg: dpackage = package_node self.assertIsNotNone(dpackage, "Removed package '%s' is not in unloaded packages list!" % pkg) epackages = enter_named_element(doc, 'packages') apackage = None for package_node in named_elements(epackages, 'package'): if str(package_node.attributes['name'].value) == pkg: apackage = package_node self.assertIsNone(apackage, "Removed package '%s' is still in loaded packages list!" % pkg)
def _move_package_node(self, dom, where, node): doc = dom.documentElement packages = enter_named_element(doc, 'packages') oldpackages = enter_named_element(doc, 'disabledpackages') if where == 'enabled': oldpackages.removeChild(node) packages.appendChild(node) elif where == 'disabled': packages.removeChild(node) oldpackages.appendChild(node) else: raise ValueError get_vistrails_application().vistrailsStartup.write_startup_dom(dom)
def load_persistent_configuration(self): (dom, element) = self.find_own_dom_element() configuration = enter_named_element(element, 'configuration') if configuration and self.configuration is not None: self.configuration.set_from_dom_node(configuration) dom.unlink()
def set_persistent_configuration(self): (dom, element) = self.find_own_dom_element() child = enter_named_element(element, 'configuration') if child: element.removeChild(child) self.configuration.write_to_dom(dom, element) get_vistrails_application().vistrailsStartup.write_startup_dom(dom) dom.unlink()
def load_configuration(self): """load_configuration() -> None Loads the appropriate configuration from .vistrails/startup.xml. This will overwrite both configuration and temp_configuration """ dom = self.startup_dom() conf = enter_named_element(dom.documentElement, 'configuration') self.configuration.set_from_dom_node(conf) self.temp_configuration.set_from_dom_node(conf)
def reset_configuration(self): """Reset package configuration to original package settings. """ (dom, element) = self.find_own_dom_element() doc = dom.documentElement configuration = enter_named_element(element, 'configuration') if configuration: element.removeChild(configuration) self.configuration = copy.copy(self._initial_configuration) startup = get_vistrails_application().vistrailsStartup startup.write_startup_dom(dom)
def _get_package_node(self, dom, create): doc = dom.documentElement packages = enter_named_element(doc, 'packages') for package_node in named_elements(packages, 'package'): if package_node.attributes['name'].value == self.codepath: return package_node, 'enabled' oldpackages = enter_named_element(doc, 'disabledpackages') for package_node in named_elements(oldpackages, 'package'): if package_node.attributes['name'].value == self.codepath: return package_node, 'disabled' if create is None: return None, None else: package_node = dom.createElement('package') package_node.setAttribute('name', self.codepath) if create == 'enabled': packages.appendChild(package_node) elif create == 'disabled': oldpackages.appendChild(package_node) else: raise ValueError get_vistrails_application().vistrailsStartup.write_startup_dom(dom) return package_node, create
def save_configuration(self): """ save_configuration() -> None Save the current vistrail configuration to the startup.xml file. This is required to capture changes to the configuration that we make programmatically during the session, ie., browsed directories or window sizes. """ dom = self.vistrailsStartup.startup_dom() doc = dom.documentElement configuration_element = enter_named_element(doc, 'configuration') doc.removeChild(configuration_element) self.configuration.write_to_dom(dom, doc) self.vistrailsStartup.write_startup_dom(dom) dom.unlink()
def create_startup_package_node(self): """Writes the node to the <packages> section. If it was in the <disabledpackages> section, move it, else, create it. """ dom = get_vistrails_application().vistrailsStartup.startup_dom() node, section = self._get_package_node(dom, create='enabled') if section == 'disabled': self._move_package_node(dom, 'enabled', node) configuration = enter_named_element(node, 'configuration') if configuration: self.configuration.set_from_dom_node(configuration) dom.unlink()
def load_packages(self): """load_packages() -> None Loads the appropriate packages from .vistrails/startup.xml. """ for package_name in self._needed_packages: self._package_manager.add_package(package_name) def parse_package(node): is_value = (lambda node: node.nodeName in set(['bool', 'str', 'int', 'float'])) package_name = str(node.attributes['name'].value) # FIXME use more robust checks here! if package_name != 'basic_modules' and \ package_name != 'abstraction': self._package_manager.add_package(package_name) dom = self.startup_dom() doc = dom.documentElement packages_node = enter_named_element(doc, 'packages') for package_node in named_elements(packages_node, 'package'): parse_package(package_node)