Passed
Pull Request — master (#33)
by Konstantinos
02:17
created

BackendSpecifications.from_dict()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 2
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
import attr
2
3
from so_magic.utils import SubclassRegistry
4
5
6
class EngineTabularRetriever(metaclass=SubclassRegistry): pass
7
8
9
class EngineTabularIterator(metaclass=SubclassRegistry): pass
10
11
12
class EngineTabularMutator(metaclass=SubclassRegistry): pass
13
14
15
@attr.s
16
class BackendSpecifications:
17
    name_abbreviation = attr.ib(init=True)
18
    name = attr.ib(init=True, default=attr.Factory(lambda self: self.name_abbreviation, takes_self=True))
19
20
    def __call__(self, *args, **kwargs):
21
        backend = args[0]
22
        backend.retriever = EngineTabularRetriever.subclasses[self.name_abbreviation]
23
        backend.iterator = EngineTabularIterator.subclasses[self.name_abbreviation]
24
        backend.mutator = EngineTabularMutator.subclasses[self.name_abbreviation]
25
        backend.id = self.name_abbreviation
26
27
    @classmethod
28
    def from_dict(cls, a_dict):
29
        return BackendSpecifications(a_dict['id'], a_dict.get('name', a_dict['id']))
30