def run_identica(): """ Run PluginManager to communicate with application identica bot. """ logging.basicConfig(format=CONFIG.get('logging'), level='INFO') PluginManager('identica', domain_url='http://192.168.44.150:5000').execute('run')
def run_admin(): """ Run PluginManager to administrate application. """ logging.basicConfig(format=CONFIG.get('logging'), level='INFO') source_path = os.path.dirname(__file__) PluginManager('admin', source_path=source_path).execute('configure')
def test_load_nonexistent_plugin_fails(self): name = 'nonexistent' plugins = [name] manager = PluginManager(Mock()) failed_plugins = manager.load(plugins) assert failed_plugins == plugins assert manager.plugins == {}
def test_unload_plugins_never_loaded_plugin_fails(self): name = 'test_never_loaded_plugin' plugins = [name] manager = PluginManager(Mock()) failed_plugins = manager.unload(plugins) assert failed_plugins == plugins assert manager.plugins == {}
def test_01_Singleton(self): """ 1. Checking whether PluginManger class is singleton. """ self.pluginmanager.test_arg = 1 secondPluginManager = PluginManager() self.assertEqual(id(secondPluginManager), id(self.pluginmanager), 'Different IDs in references to PluginManager objects (not a singleton)') self.assertEqual(secondPluginManager.test_arg, 1, 'References point to different PluginManager objects (not a singleton')
def test_load_setup_too_many_arguments_fails(self): name = 'setup_too_many_arguments' plugins = [name] manager = PluginManager(Mock(), _plugin_module_import_prefix='fake_plugins') failed_plugins = manager.load(plugins) assert failed_plugins == plugins assert manager.plugins.keys() == []
def test_load_bad_callback_fails(self, mock): name = 'valid' plugins = [name] manager = PluginManager(Mock(), _plugin_module_import_prefix='fake_plugins') mock.side_effect = Exception() failed_plugins = manager.load(plugins) assert failed_plugins == plugins assert manager.plugins == {}
def test_load_ambiguous_config_fails(self, mock): name = 'valid' plugins = [name] manager = PluginManager(Mock(), _plugin_module_import_prefix='fake_plugins') mock.side_effect = AmbiguousConfigError() failed_plugins = manager.load(plugins) mock.assert_called_with(name) assert failed_plugins == plugins assert manager.plugins == {}
def test_unload_clean_close_succeeds(self): name = 'clean_close' plugins = [name] manager = PluginManager(Mock(), _plugin_module_import_prefix='fake_plugins') failed_plugins = manager.load(plugins) assert failed_plugins == [] assert manager.plugins.keys() == plugins failed_plugins = manager.unload(plugins) assert failed_plugins == [] assert manager.plugins.keys() == []
def __init__(self, pcfg, clientsock, dsthost, dstport): """Open connection to dsthost:dstport, and return client and server proxies.""" logger.info("creating proxy from client to %s:%d" % (dsthost, dstport)) self.srv_proxy = None try: serversock = socket.create_connection((dsthost, dstport)) self.cli_proxy = MinecraftProxy(clientsock) except Exception as e: clientsock.close() logger.error("Couldn't connect to %s:%d - %s", dsthost, dstport, str(e)) logger.info(traceback.format_exc()) return self.srv_proxy = MinecraftProxy(serversock, self.cli_proxy) self.plugin_mgr = PluginManager(pcfg, self.cli_proxy, self.srv_proxy) self.cli_proxy.plugin_mgr = self.plugin_mgr self.srv_proxy.plugin_mgr = self.plugin_mgr
def handle(self, cli_sock, addr): logger.info('Incoming connection from %s' % repr(addr)) try: srv_sock = create_connection((self.target_host, self.target_port)) cli_proxy = MinecraftProxy(cli_sock) except Exception as e: cli_sock.close() logger.error("Couldn't connect to %s:%d - %s", self.target_host, self.target_port, str(e)) logger.info(traceback.format_exc()) return srv_proxy = MinecraftProxy(srv_sock, cli_proxy) plugin_mgr = PluginManager(pcfg, cli_proxy, srv_proxy) cli_proxy.plugin_mgr = plugin_mgr srv_proxy.plugin_mgr = plugin_mgr cli_proxy.start() srv_proxy.start()
def test_unload_unregister_plugin_callbacks_error_succeeds(self, mock): name = 'clean_close' plugins = [name] manager = PluginManager(Mock(), _plugin_module_import_prefix='fake_plugins') failed_plugins = manager.load(plugins) assert failed_plugins == [] assert manager.plugins.keys() == plugins mock.side_effect = Exception() failed_plugins = manager.unload(plugins) assert failed_plugins == [] assert manager.plugins.keys() == [] mock.assert_called_with(name)
def test_reload_unclean_close_succeeds(self): name = 'unclean_close' plugins = [name] cardinal = Mock(CardinalBot) cardinal.reloads = 0 manager = PluginManager(cardinal, _plugin_module_import_prefix='fake_plugins') failed_plugins = manager.load(plugins) assert failed_plugins == [] assert manager.plugins.keys() == plugins failed_plugins = manager.load(plugins) assert failed_plugins == [] assert manager.plugins.keys() == plugins assert cardinal.reloads == 1
def test_load_valid_list(self): name = 'valid' plugins = [name] manager = PluginManager(Mock(), _plugin_module_import_prefix='fake_plugins') failed_plugins = manager.load(plugins) assert failed_plugins == [] assert manager.plugins.keys() == plugins assert manager.plugins[name]['name'] == name assert inspect.ismodule(manager.plugins[name]['module']) assert isinstance(manager.plugins[name]['instance'], manager.plugins[name]['module'].TestValidPlugin) assert manager.plugins[name]['commands'] == [] assert manager.plugins[name]['callbacks'] == [] assert manager.plugins[name]['callback_ids'] == {} assert manager.plugins[name]['config'] is None assert manager.plugins[name]['blacklist'] == []
def __init__(self, *args): super().__init__(*args) # Plugin support self.plugins = PluginManager(self) self.plugins.discover_plugins(enable_all=config.data['general']['enable_plugins']) # End plugin support # Updates self._toggled = False self._log_reader = None # Load Parsers self._load_parsers() self._settings = SettingsWindow() # Tray Icon self._system_tray = QSystemTrayIcon() self._system_tray.setIcon(QIcon(resource_path('data/ui/icon.png'))) self._system_tray.setToolTip("nParse") # self._system_tray.setContextMenu(self._create_menu()) self._system_tray.activated.connect(self._menu) self._system_tray.show() # Turn On self._toggle() if self.new_version_available(): self._system_tray.showMessage( "nParse Update".format(ONLINE_VERSION), "New version available!\ncurrent: {}\nonline: {}".format( CURRENT_VERSION, ONLINE_VERSION ), msecs=3000 ) self.plugins.hook(Plugin.on_app_start, self)
def test_constructor_plugins_not_a_list_typeerror(self, plugins): with pytest.raises(TypeError): PluginManager(Mock(), plugins)
def setUp(self): self.pluginmanager = PluginManager()
import sys, os, plat, config from PyQt5.QtGui import QKeySequence from PyQt5.QtWidgets import QApplication from plugins import PluginManager from host import Host if plat.Supports.hotkeys: import hotkeys # For easier usage calculate the path relative to here. here = os.path.abspath(os.path.dirname(__file__)) app = QApplication(sys.argv) app.setQuitOnLastWindowClosed(False) # Add kill-switch for development testing if DEBUG and plat.Supports.hotkeys: hotkeys.default.registerCommand('kill', app.exit) hotkeys.default._bind('ctrl+shift+k', 'kill') #endif plugHost = Host() pm = PluginManager(plugHost) pm.load(os.path.join(here, 'plugins')) hotkeys.default.load() app.exec_() config.default.save()
def run_choicer(): """ Run PluginManager to communicate with application choicer bot. """ logging.basicConfig(format=CONFIG.get('logging'), level='INFO') PluginManager('choicer').execute('run')
myComm.__name__ = name return myComm # 1 from discord.ext import commands log = logging.getLogger("Rotating Log") load_dotenv() TOKEN = os.getenv('DISCORD_TOKEN') passwd = os.getenv('passwd') dbname = os.getenv('dbname') username = os.getenv('username') prefix = os.getenv('prefix') dbconn = DataBase(dbname, username, passwd) pg = PluginManager(log, dbconn, prefix) commander = pg.get_plugins() # 2 bot = commands.Bot(command_prefix='!') for (kw, comm) in commander.items(): botcomms = bindfunction(kw, comm) myhelp = getattr(comm, "myhelp", "No help provided") bot.add_command(commands.Command(botcomms, name=kw, help=myhelp)) @bot.event async def on_ready(): #print(f'{bot.user.name} has connected to Discord!') pass
def test_constructor_no_plugins(self): manager = PluginManager(Mock()) assert len(manager.plugins) == 0
def test_load_plugins_not_a_list_or_string_typeerror(self, plugins): manager = PluginManager(Mock()) with pytest.raises(TypeError): manager.load(plugins)
def test_constructor_no_plugins_empty_list(self): manager = PluginManager(Mock(), []) assert len(manager.plugins) == 0
def test_constructor_loads_plugins(self, mock): plugins = ['foo', 'bar'] PluginManager(Mock(), plugins) mock.assert_called_with(plugins)
def discover_plugins(self): self.plugin_manager = PluginManager() self.plugin_manager.discover_plugins( os.path.join(self.root_path, "plugins"))
def setUp(self): self.manager = PluginManager() self.manager.add_plugin_dir("/tmp/slog/share/slog/plugins")