TRaw's picture
Upload 297 files
3d3d712
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import Any, Dict, List
from .context import LogErrorLevel, PluginContext
class Plugin(ABC):
"""
base class for all plugins
the instance of the plugin is a callable object, which is the entry point for
the execution of the plugin function. The execution context and
the configuration of the plugin are passed to the plugin instance when it is created.
"""
def __init__(self, name: str, ctx: PluginContext, config: Dict[str, Any]) -> None:
"""
create a plugin instance, this method will be called by the runtime
:param name: the name of the plugin
:param ctx: the execution context of the plugin
:param config: the configuration of the plugin
"""
super().__init__()
self.name: str = name
self.ctx: PluginContext = ctx
self.config: Dict[str, Any] = config
@abstractmethod
def __call__(self, *args: List[Any], **kwargs: Dict[str, Any]) -> Any:
"""
entry point for the execution of the plugin function
"""
def log(self, level: LogErrorLevel, message: str) -> None:
"""log a message from the plugin"""
self.ctx.log(level, "Plugin-" + self.name, message)
def get_env(self, variable_name: str) -> str:
"""get an environment variable from the context"""
return self.ctx.get_env(self.name, variable_name)