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

green_magic.data.backend.backend   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 28
dl 0
loc 38
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A Backend.create() 0 5 2
A Backend.engine() 0 3 1
A Backend.register_as_subclass() 0 6 1
A Backend.__init__() 0 3 1
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