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
示例#2
0
    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_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)
示例#4
0
 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
示例#5
0
    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_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
示例#7
0
 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)
示例#8
0
    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_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
示例#10
0
文件: minilab.py 项目: gbaty/openalea
    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"
示例#11
0
    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"
示例#12
0
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
示例#14
0
    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
示例#15
0
    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)
示例#16
0
    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)
示例#17
0
文件: applet.py 项目: gbaty/openalea
    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))
示例#18
0
    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)
示例#19
0
    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)
示例#20
0
 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
示例#21
0
文件: applet.py 项目: gbaty/openalea
 def applet(name):
     return plugin_instance('oalab.applet', name)
示例#22
0
 def _get_paradigm_container(self):
     if plugin_instance_exists('oalab.applet', 'EditorManager'):
         return plugin_instance('oalab.applet', 'EditorManager')
示例#23
0
 def applet(name):
     return plugin_instance('oalab.applet', name)
示例#24
0
 def _get_paradigm_container(self):
     if plugin_instance_exists('oalab.applet', 'EditorManager'):
         return plugin_instance('oalab.applet', 'EditorManager')
示例#25
0
 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