Passed
Push — dev ( 3c73d5...40dcc8 )
by Konstantinos
01:24
created

green_magic.data.encoding   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 24
dl 0
loc 31
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A AbstractEncoder.encode() 0 3 1
A Encoder.register_as_subclass() 0 6 1
A EncoderInterface.encode() 0 3 1
A Encoder.create() 0 5 2
1
import abc
2
from abc import ABC
3
4
5
class EncoderInterface(abc.ABC):
6
    @abc.abstractmethod
7
    def encode(self, *args, **kwargs):
8
        raise NotImplementedError
9
10
class AbstractEncoder(EncoderInterface):
11
    @abc.abstractmethod
12
    def encode(self, *args, **kwargs):
13
        raise NotImplementedError
14
15
16
class Encoder(AbstractEncoder, ABC):
17
    subclasses = {}
18
19
    @classmethod
20
    def register_as_subclass(cls, backend_type):
21
        def wrapper(subclass):
22
            cls.subclasses[backend_type] = subclass
23
            return subclass
24
        return wrapper
25
26
    @classmethod
27
    def create(cls, backend_type, *args, **kwargs):
28
        if backend_type not in cls.subclasses:
29
            raise ValueError('Bad "BinnerFactory Backend type" type \'{}\''.format(backend_type))
30
        return cls.subclasses[backend_type](*args, **kwargs)
31