Completed
Push — appveyor ( 280314...2c0e2c )
by Konstantinos
02:09
created

so_magic.data.backend.backend.Backend.create()   A

Complexity

Conditions 2

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

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