def _GetPluginObj(self, plugin_obj, *args, **kwargs): if isinstance(plugin_obj, basestring): plugin_name = plugin_obj elif utils.issubclass(plugin_obj, plugin.Command): plugin_name = plugin_obj.name plugin_cls = plugin_obj elif isinstance(plugin_obj, plugin.Command): return plugin_obj else: raise TypeError( "First parameter should be a plugin name or instance.") # When passed as a string this specifies a plugin name. if isinstance(plugin_obj, basestring): plugin_cls = getattr(self.plugins, plugin_obj, None) if plugin_cls is None: self.logging.error( "Plugin %s is not active. Is it supported with " "this profile?", plugin_name) return # Instantiate the plugin object. kwargs["session"] = self return plugin_cls(*args, **kwargs)
def SerializerType(cls): if utils.issubclass(cls, serializer.SerializedObject): pass elif isinstance(cls, basestring): cls = serializer.SerializedObject.classes.get(cls) if cls is None: raise TypeError("Unable to find constructor for %s" % cls) else: raise TypeError("Must provide an instance of SerializedObject.") def encode(x): if not isinstance(x, cls): raise TypeError("Can only store objects of type %s" % cls) return x.to_json() def decode(x): if not x: data = dict(__type__=cls.__name__) else: data = json.loads(x) try: return serializer.unserialize(data, strict_parsing=False) except ValueError as e: logging.debug("%s: Unable to decode %s", e, data) # If the data in the table is seriously messed up we just replace it # with a new object. return cls() return SQLCustomType(type='text', native='text', encoder=encode, decoder=decode)
def _GetPluginName(self, plugin_obj): """Extract the name from the plugin object.""" if isinstance(plugin_obj, basestring): return plugin_obj elif utils.issubclass(plugin_obj, plugin.Command): return plugin_obj.name elif isinstance(plugin_obj, plugin.Command): return plugin_obj.name