Source code for duetector.managers.base

from __future__ import annotations

from typing import Any

import pluggy

from duetector.config import Configuable


[docs] class Manager(Configuable): """ Manager based on pulggy Default config scope is ``{class_name}`` FIXME: Need better abstraction, lots of duplicated code in subclasses """ pm: pluggy.PluginManager """ PluginManager instance """ default_config = { "disabled": False, "include_extension": True, } """ Default config for ``Manager`` """ def __init__(self, config: dict[str, Any] = None, *args, **kwargs): super().__init__(config, *args, **kwargs) # Allow disable extensions when instantiate self._include_extension = kwargs.get("disable_extensions") @property def include_extension(self): """ If include extensions """ if self._include_extension is not None: return self._include_extension return self.config.include_extension
[docs] def register(self, subpackage): """ Register subpackage to plugin manager """ registers = getattr(subpackage, "registers", [subpackage]) for register in registers: self.pm.register(register)
@property def config_scope(self): """ Config scope for current manager. """ return self.__class__.__name__ @property def disabled(self): """ If current manager is disabled. """ return self.config.disabled
[docs] def init(self, *args, **kwargs) -> list[Any]: """ Initialize manager. """ raise NotImplementedError