@@ -38,7 +38,7 @@ <h1 class="title">Module <code>continuous_delivery_scripts.language_specifics</c
38
38
"""Language plugins Loader."""
39
39
40
40
import logging
41
- from typing import Optional, Dict, cast
41
+ from typing import Optional, Dict, cast, Set, Type
42
42
43
43
from continuous_delivery_scripts.utils.configuration import configuration, ConfigurationVariable
44
44
from continuous_delivery_scripts.utils.language_specifics_base import BaseLanguage
@@ -49,24 +49,48 @@ <h1 class="title">Module <code>continuous_delivery_scripts.language_specifics</c
49
49
logger = logging.getLogger(__name__)
50
50
51
51
52
- def _all_language_plugins() -> Dict[str, BaseLanguage]:
53
- """Get all language plugins which inherit from BaseLanguage (with the exception of other base class).
52
+ def _retrieve_all_subclasses(subclass: Type[BaseLanguage]) -> Set[Type[BaseLanguage]]:
53
+ subclasses = set()
54
+ if not subclass:
55
+ return subclasses
56
+ if subclass != BaseLanguage:
57
+ subclasses.add(subclass)
58
+ for s in subclass.__subclasses__():
59
+ subclasses.update(_retrieve_all_subclasses(s))
60
+ return subclasses
54
61
55
- :return: A list of classes containing language plugins
62
+
63
+ def all_language_plugins() -> Dict[str, BaseLanguage]:
64
+ """Fetches all language plugins which inherit from BaseLanguage.
65
+
66
+ Returns:
67
+ A list of classes containing language plugins
68
+ """
69
+ all_plugins = _retrieve_all_subclasses(BaseLanguage)
70
+ return {la.get_related_language().lower().strip(): la for la in [lang() for lang in all_plugins]} # type: ignore
71
+
72
+
73
+ def fetch_project_language_plugin(all_plugins: Dict[str, BaseLanguage], language: str) -> BaseLanguage:
74
+ """Fetches a language CD flow.
75
+
76
+ Arguments:
77
+ all_plugins: all the plugins at disposal
78
+ language: the language to select
79
+
80
+ Returns:
81
+ A language plugin corresponding to the language requested
56
82
"""
57
- all_plugins = BaseLanguage.__subclasses__()
58
- return {
59
- la.get_related_language().lower().strip(): la
60
- for la in [lang() for lang in all_plugins if lang != BaseLanguage] # type: ignore
61
- }
83
+ return cast(BaseLanguage, all_plugins.get(_sanitise_program_language(language)))
62
84
63
85
64
- def _sanitise_program_language() -> str:
65
- return str(configuration.get_value(ConfigurationVariable.PROGRAMMING_LANGUAGE)) .lower().strip()
86
+ def _sanitise_program_language(language: str ) -> str:
87
+ return language .lower().strip()
66
88
67
89
68
90
def _fetch_project_language_specifics() -> BaseLanguage:
69
- return cast(BaseLanguage, _all_language_plugins().get(_sanitise_program_language()))
91
+ return fetch_project_language_plugin(
92
+ all_language_plugins(), str(configuration.get_value(ConfigurationVariable.PROGRAMMING_LANGUAGE))
93
+ )
70
94
71
95
72
96
class PluginLoader:
@@ -97,6 +121,54 @@ <h1 class="title">Module <code>continuous_delivery_scripts.language_specifics</c
97
121
< section >
98
122
< h2 class ="section-title " id ="header-functions "> Functions</ h2 >
99
123
< dl >
124
+ < dt id ="continuous_delivery_scripts.language_specifics.all_language_plugins "> < code class ="name flex ">
125
+ < span > def < span class ="ident "> all_language_plugins</ span > </ span > (< span > ) ‑> Dict[str, < a title ="continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage " href ="utils/language_specifics_base.html#continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage "> BaseLanguage</ a > ]</ span >
126
+ </ code > </ dt >
127
+ < dd >
128
+ < div class ="desc "> < p > Fetches all language plugins which inherit from BaseLanguage.</ p >
129
+ < h2 id ="returns "> Returns</ h2 >
130
+ < p > A list of classes containing language plugins</ p > </ div >
131
+ < details class ="source ">
132
+ < summary >
133
+ < span > Expand source code</ span >
134
+ </ summary >
135
+ < pre > < code class ="python "> def all_language_plugins() -> Dict[str, BaseLanguage]:
136
+ """Fetches all language plugins which inherit from BaseLanguage.
137
+
138
+ Returns:
139
+ A list of classes containing language plugins
140
+ """
141
+ all_plugins = _retrieve_all_subclasses(BaseLanguage)
142
+ return {la.get_related_language().lower().strip(): la for la in [lang() for lang in all_plugins]} # type: ignore</ code > </ pre >
143
+ </ details >
144
+ </ dd >
145
+ < dt id ="continuous_delivery_scripts.language_specifics.fetch_project_language_plugin "> < code class ="name flex ">
146
+ < span > def < span class ="ident "> fetch_project_language_plugin</ span > </ span > (< span > all_plugins: Dict[str, < a title ="continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage " href ="utils/language_specifics_base.html#continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage "> BaseLanguage</ a > ], language: str) ‑> < a title ="continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage " href ="utils/language_specifics_base.html#continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage "> BaseLanguage</ a > </ span >
147
+ </ code > </ dt >
148
+ < dd >
149
+ < div class ="desc "> < p > Fetches a language CD flow.</ p >
150
+ < h2 id ="arguments "> Arguments</ h2 >
151
+ < p > all_plugins: all the plugins at disposal
152
+ language: the language to select</ p >
153
+ < h2 id ="returns "> Returns</ h2 >
154
+ < p > A language plugin corresponding to the language requested</ p > </ div >
155
+ < details class ="source ">
156
+ < summary >
157
+ < span > Expand source code</ span >
158
+ </ summary >
159
+ < pre > < code class ="python "> def fetch_project_language_plugin(all_plugins: Dict[str, BaseLanguage], language: str) -> BaseLanguage:
160
+ """Fetches a language CD flow.
161
+
162
+ Arguments:
163
+ all_plugins: all the plugins at disposal
164
+ language: the language to select
165
+
166
+ Returns:
167
+ A language plugin corresponding to the language requested
168
+ """
169
+ return cast(BaseLanguage, all_plugins.get(_sanitise_program_language(language)))</ code > </ pre >
170
+ </ details >
171
+ </ dd >
100
172
< dt id ="continuous_delivery_scripts.language_specifics.get_language_specifics "> < code class ="name flex ">
101
173
< span > def < span class ="ident "> get_language_specifics</ span > </ span > (< span > ) ‑> < a title ="continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage " href ="utils/language_specifics_base.html#continuous_delivery_scripts.utils.language_specifics_base.BaseLanguage "> BaseLanguage</ a > </ span >
102
174
</ code > </ dt >
@@ -174,6 +246,8 @@ <h1>Index</h1>
174
246
</ li >
175
247
< li > < h3 > < a href ="#header-functions "> Functions</ a > </ h3 >
176
248
< ul class ="">
249
+ < li > < code > < a title ="continuous_delivery_scripts.language_specifics.all_language_plugins " href ="#continuous_delivery_scripts.language_specifics.all_language_plugins "> all_language_plugins</ a > </ code > </ li >
250
+ < li > < code > < a title ="continuous_delivery_scripts.language_specifics.fetch_project_language_plugin " href ="#continuous_delivery_scripts.language_specifics.fetch_project_language_plugin "> fetch_project_language_plugin</ a > </ code > </ li >
177
251
< li > < code > < a title ="continuous_delivery_scripts.language_specifics.get_language_specifics " href ="#continuous_delivery_scripts.language_specifics.get_language_specifics "> get_language_specifics</ a > </ code > </ li >
178
252
</ ul >
179
253
</ li >
0 commit comments