def wrap_cli_manager(manager, plugin): """Wraps all commands of a flask-script `Manager` in a plugin context. This actually clones the manager, so the original one is left untouched. """ manager = deepcopy(manager) for name, command in manager._commands.iteritems(): command = deepcopy(command) command.run = wrap_in_plugin_context(plugin, command.run) manager._commands[name] = command return manager
def connect(self, signal, receiver, **connect_kwargs): connect_kwargs['weak'] = False func = wrap_in_plugin_context(self, receiver) func.indico_plugin = self signal.connect(func, **connect_kwargs)
def _wrap_in_plugin_context(self, plugin, cmd): cmd.callback = wrap_in_plugin_context(plugin, cmd.callback) for subcmd in getattr(cmd, 'commands', {}).values(): self._wrap_in_plugin_context(plugin, subcmd)
def _wrap_in_plugin_context(self, plugin, cmd): cmd.callback = wrap_in_plugin_context(plugin, cmd.callback) for subcmd in getattr(cmd, 'commands', {}).viewvalues(): self._wrap_in_plugin_context(plugin, subcmd)