30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
import pkgutil
|
|
import importlib
|
|
import server.connectors
|
|
from server.connectors.base import BaseConnector
|
|
|
|
def _discover_connectors() -> list[type[BaseConnector]]:
|
|
"""Walk the connectors package and collect all BaseConnector subclasses."""
|
|
for _, module_name, _ in pkgutil.iter_modules(server.connectors.__path__):
|
|
if module_name in ("base", "registry"):
|
|
continue
|
|
importlib.import_module(f"server.connectors.{module_name}")
|
|
|
|
return [
|
|
cls for cls in BaseConnector.__subclasses__()
|
|
if cls.source_name # guard against abstract intermediaries
|
|
]
|
|
|
|
def get_available_connectors() -> dict[str, type[BaseConnector]]:
|
|
return {c.source_name: c for c in _discover_connectors() if c.is_available()}
|
|
|
|
def get_connector_metadata() -> dict[str, dict]:
|
|
res = {}
|
|
for id, obj in get_available_connectors().items():
|
|
res[id] = {"id": id,
|
|
"label": obj.display_name,
|
|
"search_enabled": obj.search_enabled,
|
|
"categories_enabled": obj.categories_enabled
|
|
}
|
|
|
|
return res |