def connect(old, new, sender_str, receiver_str, existing_connections): sender_name, signal_name = sender_str.split(':') receiver_name, slot_name = receiver_str.split(':') if old == new: return if new not in (sender_name, receiver_name): return signals = [] slots = [] from openalea.core.service.plugin import plugin_instance_exists, plugin_instances if plugin_instance_exists('oalab.applet', sender_name): for sender in plugin_instances('oalab.applet', sender_name): if hasattr(sender, signal_name): signals.append(getattr(sender, signal_name)) if plugin_instance_exists('oalab.applet', receiver_name): for receiver in plugin_instances('oalab.applet', receiver_name): if hasattr(receiver, slot_name): slots.append(getattr(receiver, slot_name)) if signals and slots: for i, signal in enumerate(signals): for j, slot in enumerate(slots): connection = '%s_%d -> %s_%d' % (sender_str, i, receiver_str, j) if connection not in existing_connections: signal.connect(slot) existing_connections.append(connection) else: pass
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 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 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 applets(name): return plugin_instances('oalab.applet', name)
def clear_toolbar(self): menus = plugin_instances('oalab.applet', 'ContextualMenu') for menu in menus: menu.clear()
def fill_toolbar(self, name, actions): menus = plugin_instances('oalab.applet', 'ContextualMenu') for menu in menus: menu.set_actions(name, actions)
def get_applets(): return plugin_instances('oalab.applet')
def initialize(self): for instance in plugin_instances('oalab.applet'): if hasattr(instance, 'initialize'): instance.initialize()
def initialize(self): self.pm = PluginManager() for instance in plugin_instances('oalab.applet'): if hasattr(instance, 'initialize'): instance.initialize()