@@ -38,7 +38,7 @@ <h1 class="title">Module <code>continuous_delivery_scripts.language_specifics</c
3838"""Language plugins Loader."""
3939
4040import logging
41- from typing import Optional, Dict, cast
41+ from typing import Optional, Dict, cast, Set, Type
4242
4343from continuous_delivery_scripts.utils.configuration import configuration, ConfigurationVariable
4444from continuous_delivery_scripts.utils.language_specifics_base import BaseLanguage
@@ -49,24 +49,48 @@ <h1 class="title">Module <code>continuous_delivery_scripts.language_specifics</c
4949logger = logging.getLogger(__name__)
5050
5151
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
5461
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
5682 """
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)))
6284
6385
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()
6688
6789
6890def _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+ )
7094
7195
7296class PluginLoader:
@@ -97,6 +121,54 @@ <h1 class="title">Module <code>continuous_delivery_scripts.language_specifics</c
97121< section >
98122< h2 class ="section-title " id ="header-functions "> Functions</ h2 >
99123< 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 >
100172< dt id ="continuous_delivery_scripts.language_specifics.get_language_specifics "> < code class ="name flex ">
101173< 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 >
102174</ code > </ dt >
@@ -174,6 +246,8 @@ <h1>Index</h1>
174246</ li >
175247< li > < h3 > < a href ="#header-functions "> Functions</ a > </ h3 >
176248< 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 >
177251< 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 >
178252</ ul >
179253</ li >
0 commit comments