Passed
Push — master ( a53d46...b5a25f )
by Juho
03:01
created

annif.backend.get_backend()   A

Complexity

Conditions 2

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
"""Registry of backend types for Annif"""
2
3
4
# define functions for lazily importing each backend (alphabetical order)
5
def _dummy():
6
    from . import dummy
7
8
    return dummy.DummyBackend
9
10
11
def _ensemble():
12
    from . import ensemble
13
14
    return ensemble.EnsembleBackend
15
16
17
def _fasttext():
18
    try:
19
        from . import fasttext
20
21
        return fasttext.FastTextBackend
22
    except ImportError:
23
        raise ValueError("fastText not available, cannot use fasttext backend")
24
25
26
def _http():
27
    from . import http
28
29
    return http.HTTPBackend
30
31
32
def _mllm():
33
    from . import mllm
34
35
    return mllm.MLLMBackend
36
37
38
def _nn_ensemble():
39
    try:
40
        from . import nn_ensemble
41
42
        return nn_ensemble.NNEnsembleBackend
43
    except ImportError:
44
        raise ValueError(
45
            "Keras and TensorFlow not available, cannot use " + "nn_ensemble backend"
46
        )
47
48
49
def _omikuji():
50
    try:
51
        from . import omikuji
52
53
        return omikuji.OmikujiBackend
54
    except ImportError:
55
        raise ValueError("Omikuji not available, cannot use omikuji backend")
56
57
58
def _pav():
59
    from . import pav
60
61
    return pav.PAVBackend
62
63
64
def _stwfsa():
65
    from . import stwfsa
66
67
    return stwfsa.StwfsaBackend
68
69
70
def _svc():
71
    from . import svc
72
73
    return svc.SVCBackend
74
75
76
def _tfidf():
77
    from . import tfidf
78
79
    return tfidf.TFIDFBackend
80
81
82
def _yake():
83
    try:
84
        from . import yake
85
86
        return yake.YakeBackend
87
    except ImportError:
88
        raise ValueError("YAKE not available, cannot use yake backend")
89
90
91
# registry of the above functions
92
_backend_fns = {
93
    "dummy": _dummy,
94
    "ensemble": _ensemble,
95
    "fasttext": _fasttext,
96
    "http": _http,
97
    "mllm": _mllm,
98
    "nn_ensemble": _nn_ensemble,
99
    "omikuji": _omikuji,
100
    "pav": _pav,
101
    "stwfsa": _stwfsa,
102
    "svc": _svc,
103
    "tfidf": _tfidf,
104
    "yake": _yake,
105
}
106
107
108
def get_backend(backend_id):
109
    if backend_id in _backend_fns:
110
        return _backend_fns[backend_id]()
111
    else:
112
        raise ValueError("No such backend type {}".format(backend_id))
113