def plugins_and_names(cls, fullname=True, ignorecase=False): results = set() for pl in cls._plugins: pl_name = Introspector.classname(pl, full=fullname) if ignorecase: pl_name = pl_name.lower() results.add((pl_name, pl)) for subclass in Introspector.all_subclasses(cls): for spl in subclass._plugins: spl_name = Introspector.classname(spl, full=fullname) if ignorecase: spl_name = spl_name.lower() results.add((spl_name, spl)) return list(results)
def plugins(cls): results = set() for pl in cls._plugins: results.add(pl) for subclass in Introspector.all_subclasses(cls): for spl in subclass._plugins: results.add(spl) return list(results)
def plugin(cls, name, fullname=True, ignorecase=False): """ Find plugin by class name """ for pl in cls.plugins(): pl_name = Introspector.classname(pl, full=fullname) if ignorecase: name = name.lower() pl_name = pl_name.lower() if name == pl_name: return pl raise IndexError("There is no plugin with name %s" % name)