Source code for plugins.instance

# ../plugins/instance.py

"""Provides a base class used to store a loaded plugin."""

# =============================================================================
# >> IMPORTS
# =============================================================================
# Python Imports
#   Importlib
from importlib import import_module

# Source.Python Imports
#   Plugins
from plugins import plugins_logger
from plugins.info import PluginInfo


# =============================================================================
# >> FORWARD IMPORTS
# =============================================================================
from _plugins import ServerPlugin


# =============================================================================
# >> ALL DECLARATION
# =============================================================================
__all__ = ('Plugin',
           'ServerPlugin',
           )


# =============================================================================
# >> GLOBAL VARIABLES
# =============================================================================
# Get the sp.plugins.instance logger
plugins_instance_logger = plugins_logger.instance


# =============================================================================
# >> CLASSES
# =============================================================================
[docs]class Plugin(object): """Stores a plugin's instance."""
[docs] def __init__(self, plugin_name, manager): """Called when a plugin's instance is initialized. :param str plugin_name: Name of the plugin to load. :param PluginManager manager: A plugin manager instance. """ self.module = None self.manager = manager self.name = plugin_name self.sub_plugin = manager.base_import != '' self.directory = self.manager.get_plugin_directory(plugin_name) self.file_path = self.manager.get_plugin_file_path(plugin_name) self.info = self.manager._create_plugin_info(plugin_name) self.import_name = (self.manager.base_import + plugin_name + '.' + plugin_name)
[docs] def unload(self): """Unload the plugin.""" self.manager.unload(self.name)
[docs] def reload(self): """Reload the plugin.""" self.manager.reload(self.name)
def _load(self): """Actually load the plugin.""" self.info._create_public_convar() self.module = import_module(self.import_name) if hasattr(self.module, 'load'): self.module.load() def _unload(self): """Actually unload the plugin.""" if hasattr(self.module, 'unload'): self.module.unload() self.module = None