# pylint: disable=no-self-argument from configspec import * from shepherd import PluginInterface, plugin_class, plugin_function, plugin_hook from shepherd import plugin_attachment, plugin_run, plugin_init """ Plugin to test the plugin class systems and the various decorator markers """ interface = PluginInterface() confspec = ConfigSpecification() confspec.add_spec("spec1", StringSpec(helptext="helping!")) @plugin_function def module_function(a): return F"module func {a}" @plugin_hook def module_hook(a, b): pass @plugin_attachment("module_hook") def module_attachment(a, b): return F"module attachment {a} {b}" @plugin_class class ClassPlugin(): def __init__(self): self.config = interface.config self.interface = interface self.plugins = interface.plugins self.hooks = interface.hooks self.interface.init_method_called = True # Interface functions @plugin_function def instance_method(self, a): return F"instance method {a}" @plugin_function @classmethod def class_method(cls, a): return F"class method {a}" @plugin_function @staticmethod def static_method(a): return F"static method {a}" # Hooks @plugin_hook(name="instance_hook") def instance_hook_name(a, b): pass @plugin_hook @staticmethod def static_hook(a, b): pass @plugin_hook @staticmethod def static_hook2(a, b): pass # Attachments (these are bound before attachment, so self and cls work as normal, and are # not included in the signature) @plugin_attachment("instance_hook") def instance_attach(self, a, b): return F"instance attachment {a} {b}" @plugin_attachment("static_hook2") @classmethod def class_attach(cls, a, b): return F"class attachment {a} {b}" @plugin_attachment("classtestplugin.static_hook") @staticmethod def static_attach(a, b): return F"static attachment {a} {b}" @plugin_init def plugin_init2_method(self): self.interface.init2_method_called = True @plugin_run def plugin_run_method(self): self.interface.run_method_called = True