Passed
Push — master ( 812b05...176334 )
by Konstantinos
02:19 queued 01:50
created

so_magic.data.backend.engine_specs   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 18
dl 0
loc 30
rs 10
c 0
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A EngineSpecifications.from_dict() 0 3 1
A EngineSpecifications.__call__() 0 5 1
1
import attr
2
3
# from so_magic.data.interfaces import TabularRetriever, TabularIterator, TabularMutator
4
from so_magic.utils import SubclassRegistry
5
6
7
class EngineTabularRetriever(metaclass=SubclassRegistry): pass
8
9
10
class EngineTabularIterator(metaclass=SubclassRegistry): pass
11
12
13
class EngineTabularMutator(metaclass=SubclassRegistry): pass
14
15
16
@attr.s
17
class EngineSpecifications:
18
    name_abbreviation = attr.ib(init=True)
19
    name = attr.ib(init=True, default=attr.Factory(lambda self: self.name_abbreviation, takes_self=True))
20
21
    def __call__(self, *args, **kwargs):
22
        engine = args[0]
23
        engine.retriever = EngineTabularRetriever.subclasses[self.name_abbreviation]
24
        engine.iterator = EngineTabularIterator.subclasses[self.name_abbreviation]
25
        engine.mutator = EngineTabularMutator.subclasses[self.name_abbreviation]
26
27
    @classmethod
28
    def from_dict(cls, a_dict):
29
        return EngineSpecifications(a_dict['id'], a_dict.get('name', a_dict['id']))
30