How to use _get_installed_plugin_instance_by_name method in Slash

Best Python code snippet using slash

plugin_manager.py

Source:plugin_manager.py Github

copy

Full Screen

...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:...

Full Screen

Full Screen

Automation Testing Tutorials

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.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Slash automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful