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

so_magic.data.backend.backend_specs   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A BackendSpecifications.from_dict() 0 3 1
A BackendSpecifications.__call__() 0 6 1
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