Source code for perun.backend.backend
"""Backend module."""
import logging
from abc import abstractmethod
from perun.util import Singleton
from ..data_model.sensor import Sensor
log = logging.getLogger(__name__)
[docs]
class Backend(metaclass=Singleton):
"""Abstract backend class."""
id: str = "abstract_backend"
name: str = "Abstract backend class"
description: str = "Abstract backend class description"
def __init__(self) -> None:
"""Import and setup backend."""
super().__init__()
self.devices: dict = {}
self._metadata: dict = {}
self.setup()
log.info(f"Initialized {self.name} backend")
def __del__(self) -> None:
"""Backend cleanup method."""
log.debug("Deleting backend.")
self.close()
@property
def metadata(self) -> dict:
"""Return backend metadata."""
log.info(f"Metadata for {self.name} backend: {self._metadata}")
return self._metadata
[docs]
@abstractmethod
def availableSensors(self) -> dict[str, tuple]:
"""Return a dictionary with all available sensors. Each entry contains the backend id and type of sensor.
Returns
-------
dict[tuple[str]]
Dictionary with device ids and measurement unit.
"""
pass
[docs]
@abstractmethod
def getSensors(self, deviceList: set[str]) -> list[Sensor]:
"""
Return device objects based on the provided list of device ids.
Parameters
----------
deviceList : set[str]
List with wanted device ids
Returns
-------
list[Sensor]
List of device objects
"""
pass
[docs]
@abstractmethod
def close(self) -> None:
"""Clean up and close backend related activities."""
pass
[docs]
@abstractmethod
def setup(self) -> None:
"""Perform backend setup."""
pass