Passed
Push — dev ( 1b3874...6a1e3c )
by Konstantinos
03:33
created

Backend.register_as_subclass()   A

Complexity

Conditions 1

Size

Total Lines 6
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 6
rs 10
c 0
b 0
f 0
cc 1
nop 2
1
from abc import ABC, abstractmethod
2
from .engine import DataEngine
3
from green_magic.data.dataset import DatapointsManager
4
5
class DataBackend(ABC):
6
7
    pass
8
9
10
class Backend(DataBackend, ABC):
11
12
    def __init__(self, engine):
13
        self._engine = engine
14
        self.datapoints_manager = DatapointsManager()
15
16
    @property
17
    def engine(self):
18
        return self._engine
19
20
    @engine.setter
21
    def engine(self, engine):
22
        self._engine = engine
23
24
    subclasses = {}
25
26
    @classmethod
27
    def register_as_subclass(cls, backend_type):
28
        def wrapper(subclass):
29
            cls.subclasses[backend_type] = subclass
30
            return subclass
31
        return wrapper
32
33
    @classmethod
34
    def create(cls, backend_type, *args, **kwargs) -> DataBackend:
35
        if backend_type not in cls.subclasses:
36
            raise ValueError(f"Request Backend of type '{backend_type}'; supported are [{', '.join(sorted(cls.subclasses.keys()))}]")
37
        return cls.subclasses[backend_type](*args, **kwargs)
38