def test_proxy_plugin(self): from openalea.core.plugin.manager import SimpleClassPluginProxy self.pm.add_plugin('test.dynamic4', Algo, plugin_proxy=SimpleClassPluginProxy) objc4c1 = plugin_instance('test.dynamic4', 'Algo') objc4c1_2 = plugin_instance('test.dynamic4', 'Algo') objc4c1_3 = new_plugin_instance('test.dynamic4', 'Algo') assert objc4c1 assert isinstance(objc4c1, Algo) assert objc4c1 is objc4c1_2 assert objc4c1 is not objc4c1_3
def test_dynamic_plugin(self): self.pm.add_plugin('test.dynamic3', AlgoPlugin1) self.pm.add_plugin('test.dynamic3', AlgoPlugin2) assert len(self.pm.plugins('test.dynamic3')) == 2 objc3c1 = plugin_instance('test.dynamic3', 'AlgoPlugin1') assert objc3c1 assert isinstance(objc3c1, Algo) objc3c2 = plugin_instance('test.dynamic3', 'MyAlgoPlugin2') assert objc3c2 assert isinstance(objc3c1, Algo)
def test_multiple_instance(self): # Assert weakref work correctly and plugin instances have been lost assert not plugin_instances('test.c1', 'MyPlugin1') objc1c1_0 = plugin_instance('test.c1', 'MyPlugin1') objc1c1_1 = new_plugin_instance('test.c1', 'MyPlugin1') objc1c1_2 = new_plugin_instance('test.c1', 'MyPlugin1') # Assert all object have been created correctly assert objc1c1_0 assert objc1c1_1 assert objc1c1_2 # Assert all instances are different as we use new instead of instance assert objc1c1_0 is not objc1c1_1 assert objc1c1_1 is not objc1c1_2 objc1c2 = new_plugin_instance('test.c1', 'MyPlugin2') assert len(plugin_instances('test.c1', 'MyPlugin1')) == 3 assert len(plugin_instances('test.c1')) == 4 del objc1c1_2 assert len(plugin_instances('test.c1', 'MyPlugin1')) == 2 assert len(plugin_instances('test.c1')) == 3 del objc1c2 assert len(plugin_instances('test.c1', 'MyPlugin1')) == 2 assert len(plugin_instances('test.c1', 'MyPlugin2')) == 0 assert len(plugin_instances('test.c1')) == 2
def initialize(self): # Connect to ParadigmContainer if available if plugin_instance_exists('oalab.applet', 'EditorManager'): self.paradigm_container = plugin_instance('oalab.applet', 'EditorManager') self.item_double_clicked.connect(self._on_item_double_clicked) self.item_removed.connect(self._on_item_removed) self.item_added.connect(self._on_item_double_clicked) self.project_closed.connect(self._on_project_closed) self.project_open.connect(self._on_project_open)
def test_plugin_proxy(self): from openalea.core.plugin.manager import SimpleClassPluginProxy pm = PluginManager() pm.set_proxy('oalab.modelclass', SimpleClassPluginProxy) clear_plugin_instances() w1 = plugin_instance('oalab.modelclass', 'PythonModel') w2 = plugin_instance('oalab.modelclass', 'PythonModel') w3 = plugin_instance('oalab.modelclass', 'PythonModel') w4 = new_plugin_instance('oalab.modelclass', 'PythonModel') assert w1 assert w1 is w2 is w3 assert w1 is not w4 assert len(plugin_instances('oalab.modelclass', 'PythonModel')) == 2
def initialize(cls, *args, **kwds): from openalea.core.service.plugin import plugin_instance_exists, plugin_instance if plugin_instance_exists('oalab.applet', 'ProjectManager'): from openalea.core.service.project import default_project project_applet = plugin_instance('oalab.applet', 'ProjectManager') project = default_project() project_applet.set_project(project) cls.state = "initialized"
def get_applet(**kwargs): if 'class_args' in kwargs: class_args = kwargs['class_args'] else: class_args = {} instance = None err = 'Cannot find required applet' if 'identifier' in kwargs: identifier = kwargs['identifier'] return plugin_instance('oalab.applet', identifier, class_kwds=class_args)
def test_new_instance(self): import tstpkg1.impl objc1c1 = plugin_instance('test.c1', 'MyPlugin1') assert objc1c1 assert isinstance(objc1c1, tstpkg1.impl.C1Class1) objc1c2 = plugin_instance('test.c1', 'MyPlugin2') assert objc1c2 assert isinstance(objc1c2, tstpkg1.impl.C1Class2) objc2c1 = plugin_instance('test.c2', 'C2Plugin1') assert objc2c1 assert isinstance(objc2c1, tstpkg1.impl.C2Class1) objc2c2 = plugin_instance('test.c2', 'C2Plugin2') assert objc2c1 assert isinstance(objc2c2, tstpkg1.impl.C2Class2) # Check instance return existing instance objc1c1_2 = plugin_instance('test.c1', 'MyPlugin1') assert objc1c1 is objc1c1_2 assert plugin_instances('test.c1', 'MyPlugin1')[0] is objc1c1_2
def set_applet(self, name, properties=None): """ Show applet "name" in current tab. """ # clear view (hide all widgets in current tab) idx = self.currentIndex() old = self._name.get(idx, None) for applet in self._applets.get(idx, {}).values(): applet.hide() if not name: return # If applet has been instantiated before, just show it # Else, instantiate a new one, place it in layout and show it if name in self._applets.get(idx, {}): applet = self._applets[idx][name] applet.show() else: # If applet has never been instantiated in the whole application, # we instantiate it as the "main" instance (ie reachable thanks to plugin_instance) # else, just create a new one. if plugin_instance_exists('oalab.applet', name): applet = new_plugin_instance('oalab.applet', name) else: applet = plugin_instance('oalab.applet', name) if applet is None: return applet.setAttribute(QtCore.Qt.WA_DeleteOnClose) applet.setContextMenuPolicy(QtCore.Qt.NoContextMenu) if hasattr(applet, 'initialize'): applet.initialize() applet.name = name if properties: try: applet.set_properties(properties) except AttributeError: pass tab = self.currentWidget() tab.set_applet(applet) self._applets.setdefault(idx, {})[name] = applet self._name[idx] = name self._redraw_tab(idx) self.appletSet.emit(old, name)
def __init__(self, layout=None, **kwds): """ tests: list of function runnable in shell (name changed to run_<funcname>) layout_file """ OALabMainWin.__init__(self, layout=layout, **kwds) self.interp = interpreter() self.interp.user_ns['mainwin'] = self self.interp.user_ns['splittable'] = self.splittable self.interp.user_ns['debug'] = self.debug self.interp.user_ns['QtCore'] = QtCore self.interp.user_ns['QtGui'] = QtGui def applet(name): return plugin_instance('oalab.applet', name) def applets(name): return plugin_instances('oalab.applet', name) self.interp.user_ns['applet'] = applet self.interp.user_ns['applets'] = applets print 'VARIABLES AVAILABLE IN SHELL ...' print '\nAPPLICATION:' print ' - mainwin' print ' - splittable' print ' - QtCore' print ' - QtGui' print '\nAPPLETS:' for plugin in plugins('oalab.applet'): if plugin_instance_exists('oalab.applet', plugin.name): varname = camel_case_to_lower(plugin.name) self.interp.user_ns['plugin_%s' % varname] = plugin self.interp.user_ns[varname] = plugin_instance('oalab.applet', plugin.name) print ' -', varname print '\nFUNCTIONS:' for f in kwds.pop('tests', []): self.interp.user_ns['run_%s' % f.__name__] = f f.func_globals['ns'] = self.interp.user_ns print ' - run_%s' % f.__name__ self.resize(QtCore.QSize(800, 600))
def _on_applet_set(self, old, new): if new in self._registered_applets: return self._registered_applets.append(new) applet = plugin_instance('oalab.applet', new) # Add global menus if applet and hasattr(applet, 'menus'): menus = applet.menus() if menus is None: return self._merge_menus(menus) # Add global toolbars if applet and hasattr(applet, 'toolbars'): toolbars = applet.toolbars() if toolbars is None: return for toolbar in toolbars: self.addToolBar(QtCore.Qt.TopToolBarArea, toolbar)
def plug(): applet = plugin_instance('oalab.applet', plugin.name) plugin.graft(applet=applet, oa_mainwin=self) self.session.applet['plugin_%s' % plugin.name] = plugin self.session.applet[applet.__class__.__name__] = applet
def applet(name): return plugin_instance('oalab.applet', name)
def _get_paradigm_container(self): if plugin_instance_exists('oalab.applet', 'EditorManager'): return plugin_instance('oalab.applet', 'EditorManager')