1313# limitations under the License.
1414
1515import inspect
16+ import sys
1617from importlib .metadata import entry_points
1718
1819from garf_core import exceptions , report_fetcher
1920
2021
2122def find_fetchers () -> set [str ]:
2223 """Identifiers all available report fetchers."""
23- return {fetcher .name for fetcher in entry_points (group = 'garf' )}
24+ if entrypoints := _get_entrypoints ('garf' ):
25+ return {fetcher .name for fetcher in entrypoints }
26+ return set ()
2427
2528
2629def get_report_fetcher (source : str ) -> type [report_fetcher .ApiReportFetcher ]:
@@ -38,8 +41,7 @@ def get_report_fetcher(source: str) -> type[report_fetcher.ApiReportFetcher]:
3841 """
3942 if source not in find_fetchers ():
4043 raise report_fetcher .MissingApiReportFetcherError (source )
41- fetchers = entry_points (group = 'garf' )
42- for fetcher in fetchers :
44+ for fetcher in _get_entrypoints ('garf' ):
4345 if fetcher .name == source :
4446 try :
4547 fetcher_module = fetcher .load ()
@@ -53,3 +55,14 @@ def get_report_fetcher(source: str) -> type[report_fetcher.ApiReportFetcher]:
5355 raise exceptions .ApiReportFetcherError (
5456 f'No fetcher available for the source "{ source } "'
5557 )
58+
59+
60+ def _get_entrypoints (group = 'garf' ):
61+ if sys .version_info .major == 3 and sys .version_info .minor == 9 :
62+ try :
63+ fetchers = entry_points ()[group ]
64+ except KeyError :
65+ fetchers = []
66+ else :
67+ fetchers = entry_points (group = group )
68+ return fetchers
0 commit comments