Passed
Pull Request — main (#914)
by
unknown
02:58
created

annif.backend._pav()   A

Complexity

Conditions 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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