Deactivates given plugins.

        A given plugin must be activated, otherwise it is ignored and no action takes place (no signals are fired,
        no deactivate functions are called.)

        A deactivated plugin is still loaded and initialised and can be reactivated by calling :func:`activate` again.
        It is also still registered in the :class:`.PluginManager` and can be requested via :func:`get`.

        :param plugins: List of plugin names
        :type plugins: list of strings

def deactivate(self, plugins=[]):
        """
        Deactivates given plugins.

        A given plugin must be activated, otherwise it is ignored and no action takes place (no signals are fired,
        no deactivate functions are called.)

        A deactivated plugin is still loaded and initialised and can be reactivated by calling :func:`activate` again.
        It is also still registered in the :class:`.PluginManager` and can be requested via :func:`get`.

        :param plugins: List of plugin names
        :type plugins: list of strings
        """
        self._log.debug("Plugins Deactivation started")

        if not isinstance(plugins, list):
            raise AttributeError("plugins must be a list, not %s" % type(plugins))

        self._log.debug("Plugins to deactivate: %s" % ", ".join(plugins))

        plugins_deactivated = []
        for plugin_name in plugins:
            if not isinstance(plugin_name, str):
                raise AttributeError("plugin name must be a str, not %s" % type(plugin_name))

            if plugin_name not in self._plugins.keys():
                self._log.info("Unknown activated plugin %s" % plugin_name)
                continue
            else:
                self._log.debug("Deactivating plugin %s" % plugin_name)
                if not self._plugins[plugin_name].active:
                    self._log.warning("Plugin %s seems to be already deactivated" % plugin_name)
                else:
                    try:
                        self._plugins[plugin_name].deactivate()
                    except Exception as e:
                        raise_from(
                            PluginNotDeactivatableException("Plugin %s could not be deactivated" % plugin_name), e)
                    else:
                        self._log.debug("Plugin %s deactivated" % plugin_name)
                        plugins_deactivated.append(plugin_name)

        self._log.info("Plugins deactivated: %s" % ", ".join(plugins_deactivated))