Source code for envisage.plugin_extension_registry
# (C) Copyright 2007-2024 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
""" An extension registry that uses plugins as extension providers. """
# Enthought library imports.
from traits.api import Instance, observe, on_trait_change
# Local imports.
from .i_plugin_manager import IPluginManager
from .provider_extension_registry import ProviderExtensionRegistry
[docs]class PluginExtensionRegistry(ProviderExtensionRegistry):
"""An extension registry that uses plugins as extension providers.
The application's plugins are used as the registries providers so adding
or removing a plugin affects the extension points and extensions etc.
"""
#### 'PluginExtensionRegistry' interface ##################################
#: The plugin manager that has the plugins we are after!
plugin_manager = Instance(IPluginManager)
###########################################################################
# 'PluginExtensionRegistry' interface.
###########################################################################
#### Trait change handlers ################################################
@observe("plugin_manager")
def _update_providers(self, event):
"""Static trait change handler."""
old, new = event.old, event.new
# In practise I can't see why you would ever want (or need) to change
# the registry's plugin manager on the fly, but hey... Hence, 'old'
# will probably always be 'None'!
if old is not None:
for plugin in old:
self.remove_provider(plugin)
if new is not None:
for plugin in new:
self.add_provider(plugin)
@on_trait_change("plugin_manager:plugin_added")
def _on_plugin_added(self, obj, trait_name, old, event):
"""Dynamic trait change handler."""
self.add_provider(event.plugin)
@on_trait_change("plugin_manager:plugin_removed")
def _on_plugin_removed(self, obj, trait_name, old, event):
"""Dynamic trait change handler."""
self.remove_provider(event.plugin)