88from __future__ import annotations
99
1010import asyncio
11+ from collections .abc import Callable
1112from functools import lru_cache
1213from typing import Any
1314
14- from conda_forge_metadata .autotick_bot .import_to_pkg import (
15- get_pkgs_for_import ,
16- map_import_to_package ,
17- )
1815from fastmcp .exceptions import ToolError
1916
2017from .registry import register_tool
2118
19+ DISABLED_MESSAGE = "Disabled, enable via installing the package conda-forge-metadata"
20+
21+ GetPkgsForImport = Callable [[str ], tuple [set [str ] | None , str ]]
22+ MapImportToPackage = Callable [[str ], str ]
23+ get_pkgs_for_import : GetPkgsForImport | None
24+ map_import_to_package : MapImportToPackage | None
25+
26+ try :
27+ from conda_forge_metadata .autotick_bot .import_to_pkg import (
28+ get_pkgs_for_import as _get_pkgs_for_import ,
29+ )
30+ from conda_forge_metadata .autotick_bot .import_to_pkg import (
31+ map_import_to_package as _map_import_to_package ,
32+ )
33+ except ImportError :
34+ get_pkgs_for_import = None
35+ map_import_to_package = None
36+ else :
37+ get_pkgs_for_import = _get_pkgs_for_import
38+ map_import_to_package = _map_import_to_package
39+
2240
2341@lru_cache (maxsize = 1024 )
2442def _map_import (import_name : str , get_keys : str = "" ) -> dict [str , Any ]:
@@ -28,6 +46,8 @@ def _map_import(import_name: str, get_keys: str = "") -> dict[str, Any]:
2846 """
2947 if not import_name or not import_name .strip ():
3048 raise ValueError ("import_name must be a non-empty string" )
49+ if get_pkgs_for_import is None or map_import_to_package is None :
50+ raise ToolError (DISABLED_MESSAGE )
3151
3252 query = import_name .strip ()
3353
@@ -105,6 +125,8 @@ async def import_mapping(import_name: str, get_keys: str = "") -> dict[str, Any]
105125 """
106126 try :
107127 return await asyncio .to_thread (_map_import , import_name , get_keys )
128+ except ToolError :
129+ raise
108130 except ValueError as ve :
109131 raise ToolError (f"'import_mapping' invalid input: { ve } " ) from ve
110132 except Exception as e : # pragma: no cover - generic protection
0 commit comments