Best Python code snippet using slash
plugin_manager.py
Source:plugin_manager.py  
...77        """78        return dict(self._iterate_active_plugins())79    def _iterate_active_plugins(self):80        for active_name in self._active:81            yield (active_name, self._get_installed_plugin_instance_by_name(active_name))82    def get_future_active_plugins(self):83        """84        Returns a dictionary of plugins intended to be active once the 'pending activation' mechanism85        is finished86        """87        returned = self.get_active_plugins()88        for name in self._pending_activation:89            returned[name] = self.get_plugin(name)90        for name in self._pending_deactivation:91            returned.pop(name, None)92        return returned93    def get_plugin(self, plugin_name):94        """95        Retrieves a registered plugin by name, or raises a LookupError96        """97        return self._installed[plugin_name].plugin_instance98    def is_internal_plugin(self, plugin):99        """100        Returns rather installed plugin is internal plugin101        """102        plugin_name = plugin if isinstance(plugin, str) else plugin.get_name()103        return self._installed[plugin_name].is_internal104    def _is_parallel_supported(self, plugin):105        if not parallel_utils.is_parallel_session():106            return False107        plugin_parallel_mode = try_get_mark(plugin, 'parallel_mode', parallel_utils.ParallelPluginModes.ENABLED)108        if plugin_parallel_mode == parallel_utils.ParallelPluginModes.ENABLED:109            return False110        if (plugin_parallel_mode == parallel_utils.ParallelPluginModes.DISABLED) \111            or (plugin_parallel_mode == parallel_utils.ParallelPluginModes.PARENT_ONLY and parallel_utils.is_child_session()) \112            or (plugin_parallel_mode == parallel_utils.ParallelPluginModes.CHILD_ONLY and parallel_utils.is_parent_session()):113            return True114        return False115    def configure_for_parallel_mode(self):116        for plugin in self.get_installed_plugins().values():117            if self._is_parallel_supported(plugin):118                self.deactivate_later(plugin)119    def install(self, plugin, activate=False, activate_later=False, is_internal=False):120        """121        Installs a plugin object to the plugin mechanism. ``plugin`` must be an object deriving from122        :class:`slash.plugins.PluginInterface`.123        """124        if not isinstance(plugin, PluginInterface):125            raise IncompatiblePlugin("Invalid plugin type: {!r}".format(type(plugin)))126        plugin_name = plugin.get_name()127        if re.search(r'[^A-Za-z0-9_ -]', plugin_name):128            raise IllegalPluginName("Illegal plugin name: {}".format(plugin_name))129        if any(char in plugin_name for char in _DEPRECATED_CHARACTERS):130            warn_deprecation("In the future, dashes and underscore will not be allowed in plugin names - "131                             "spaces should be used instead (plugin name: {!r})".format(plugin_name))132        self._configure(plugin)133        self._installed[plugin_name] = PluginInfo(plugin, is_internal)134        self._cmd_line_to_name[self.normalize_command_line_name(plugin_name)] = plugin_name135        self._config_to_name[self.normalize_config_name(plugin_name)] = plugin_name136        if not hasattr(plugin, '__toggles__'):137            plugin.__toggles__ = {138                'session': gossip.Toggle(),139            }140        if activate:141            try:142                self.activate(plugin_name)143            except IncompatiblePlugin:144                exc_info = sys.exc_info()145                self.uninstall(plugin)146                reraise(*exc_info)147        if activate_later:148            self.activate_later(plugin_name)149    def install_builtin_plugins(self):150        for builtin_plugin_module in self._iter_builtin_plugin_modules():151            module = __import__(152                "slash.plugins.builtin.{}".format(builtin_plugin_module),153                fromlist=[""]154            )155            self.install(module.Plugin())156    def _iter_builtin_plugin_modules(self):157        builtin_dir = os.path.join(os.path.dirname(__file__), "builtin")158        for filename in os.listdir(builtin_dir):159            if filename.startswith("_") or filename.startswith(".") or not filename.endswith(".py"):160                continue161            yield filename[:-3]162    def uninstall(self, plugin):163        """164        Uninstalls a plugin165        """166        plugin = self._get_installed_plugin(plugin)167        try:168            self.deactivate(plugin)169        except IncompatiblePlugin:170            pass171        self._unconfigure(plugin)172        plugin_name = plugin.get_name()173        self._installed.pop(plugin_name)174        cmd_name = self.normalize_command_line_name(plugin_name)175        self._cmd_line_to_name.pop(cmd_name, None)176        config_name = self.normalize_config_name(plugin_name)177        self._config_to_name.pop(config_name, None)178    def uninstall_all(self):179        """180        Uninstalls all installed plugins181        """182        for plugin_info in list(self._installed.values()):183            self.uninstall(plugin_info.plugin_instance)184        assert not self._installed185    def activate(self, plugin):186        """187        Activates a plugin, registering its hook callbacks to their respective hooks.188        :param plugin: either a plugin object or a plugin name189        """190        plugin = self._get_installed_plugin(plugin)191        plugin_name = plugin.get_name()192        if self._is_parallel_supported(plugin):193            _logger.warn("Activating plugin {} though it's configuration for parallel mode doesn't fit to current session".format(plugin.get_name()))194        plugin.activate()195        for hook, callback, kwargs in self._get_plugin_registrations(plugin):196            hook.register(callback, **kwargs)197        self._active.add(plugin_name)198    def activate_later(self, plugin):199        """200        Adds a plugin to the set of plugins pending activation. It can be remvoed from the queue with :meth:`.deactivate_later`201        .. seealso:: :meth:`.activate_pending_plugins`202        """203        self._pending_activation.add(self._get_installed_plugin(plugin).get_name())204    def deactivate_later(self, plugin):205        """206        Removes a plugin from the set of plugins pending activation.207        .. seealso:: :meth:`.activate_pending_plugins`208        """209        self._pending_deactivation.add(self._get_installed_plugin(plugin).get_name())210    def activate_pending_plugins(self):211        """212        Activates all plugins queued with :meth:`.activate_later`213        """214        while self._pending_activation:215            plugin_name = self._pending_activation.pop()216            if plugin_name not in self._pending_deactivation:217                self.activate(plugin_name)218        while self._pending_deactivation:219            plugin_name = self._pending_deactivation.pop()220            if plugin_name in self._active:221                self.deactivate(plugin_name)222    def normalize_command_line_name(self, plugin_name):223        return plugin_name.replace(' ', '-')224    def normalize_config_name(self, plugin_name):225        return plugin_name.replace(' ', '_')226    def deactivate(self, plugin):227        """228        Deactivates a plugin, unregistering all of its hook callbacks229        :param plugin: either a plugin object or a plugin name230        """231        plugin = self._get_installed_plugin(plugin)232        plugin_name = plugin.get_name()233        token = self._get_token(plugin_name)234        if plugin_name in self._active:235            gossip.get_global_group().unregister_token(token)236            self._active.discard(plugin_name)237            plugin.deactivate()238    def _configure(self, plugin):239        cfg = plugin.get_config()240        if cfg is not None:241            warn_deprecation('PluginInterface.get_config() is deprecated. '242                             'Please use PluginInterface.get_default_config() instead')243        else:244            cfg = plugin.get_default_config()245        if cfg is not None:246            plugin_name = plugin.get_name()247            config_name = self.normalize_config_name(plugin_name)248            config['plugin_config'].extend({config_name: cfg})249    def _unconfigure(self, plugin):250        plugin_config = config['plugin_config']251        config_name = self.normalize_config_name(plugin.get_name())252        if config_name in plugin_config:253            plugin_config.pop(config_name)254    def _get_token(self, plugin_name):255        return "slash.plugins.{}".format(plugin_name)256    def _get_installed_plugin_instance_by_name(self, plugin_name):257        plugin_info = self._installed.get(plugin_name)258        if plugin_info is None:259            return None260        return plugin_info.plugin_instance261    def _get_installed_plugin_instance_by_type(self, plugin_class):262        for plugin in self._installed.values():263            if type(plugin.plugin_instance) is plugin_class: # pylint: disable=unidiomatic-typecheck264                return plugin.plugin_instance265        return None266    def _get_installed_plugin(self, plugin):267        if isinstance(plugin, str):268            plugin_name = plugin269            if plugin_name in self._cmd_line_to_name:270                plugin_name = self._cmd_line_to_name[plugin_name]271            plugin_instance = self._get_installed_plugin_instance_by_name(plugin_name)272        elif isinstance(plugin, type):273            plugin_instance = self._get_installed_plugin_instance_by_type(plugin)274            plugin_name = plugin_instance.get_name() if plugin_instance is not None else repr(plugin)275        else:276            plugin_instance = plugin277            plugin_name = plugin.get_name()278        if plugin_instance is None or self._get_installed_plugin_instance_by_name(plugin_name) is not plugin_instance:279            raise UnknownPlugin("Unknown plugin: {}".format(plugin_name))280        return plugin_instance281    def _get_plugin_registrations(self, plugin):282        plugin_name = plugin.get_name()283        returned = []284        unknown = []285        global_needs = try_get_mark(plugin, 'plugin_needs', [])286        global_provides = try_get_mark(plugin, 'plugin_provides', [])287        has_session_end = has_session_start = False288        register_no_op_hooks = set()289        if global_provides:290            register_no_op_hooks.update(hook.full_name for hook in gossip.get_group('slash').get_hooks())291        for method_name in dir(type(plugin)):292            if method_name in _SKIPPED_PLUGIN_METHOD_NAMES:...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
