from __future__ import annotations
from abc import abstractmethod
from importlib.metadata import entry_points
from typing import Any
from studies.study_wrapper import WDAEAbstractStudy
[docs]
class GPFExtensionBase:
"""
Base class for GPF extensions.
GPF extensions can handle adding new studies and support for various GPF
tools to an instance.
"""
def __init__(self, instance: Any):
tool_entry_points = entry_points(
group=self._get_tool_entry_point_group(),
)
self.instance = instance
self.dae_config = instance.dae_config
self._tools: dict[str, GPFTool] = {}
for entry in tool_entry_points:
if entry.name in self._tools:
raise KeyError(
f"Entry {entry.name} already defined for "
f"{self._get_tool_entry_point_group()}",
)
self._tools[entry.name] = entry.load()
self.setup()
[docs]
def setup(self) -> None:
pass
@staticmethod
@abstractmethod
def _get_tool_entry_point_group() -> str:
raise NotImplementedError
[docs]
@abstractmethod
def get_studies(self) -> list[WDAEAbstractStudy]:
pass
[docs]
@abstractmethod
def get_studies_ids(self) -> list[str]:
pass