You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
shepherd-agent/tests/assets/classtestplugin.py

95 lines
2.2 KiB

# 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