diff --git a/bec_widgets/cli/client_utils.py b/bec_widgets/cli/client_utils.py index 6b9b88b6..ab9c7d87 100644 --- a/bec_widgets/cli/client_utils.py +++ b/bec_widgets/cli/client_utils.py @@ -14,18 +14,21 @@ from typing import TYPE_CHECKING, Literal, TypeAlias, cast from bec_lib.endpoints import MessageEndpoints from bec_lib.logger import bec_logger -from bec_lib.utils.import_utils import lazy_import_from +from bec_lib.utils.import_utils import lazy_import, lazy_import_from from rich.console import Console from rich.table import Table -import bec_widgets.cli.client as client from bec_widgets.cli.rpc.rpc_base import RPCBase, RPCReference from bec_widgets.utils.serialization import register_serializer_extension if TYPE_CHECKING: # pragma: no cover from bec_lib.messages import GUIRegistryStateMessage + + import bec_widgets.cli.client as client else: GUIRegistryStateMessage = lazy_import_from("bec_lib.messages", "GUIRegistryStateMessage") + client = lazy_import("bec_widgets.cli.client") + logger = bec_logger.logger diff --git a/bec_widgets/utils/bec_plugin_helper.py b/bec_widgets/utils/bec_plugin_helper.py index 8f5ca0c8..242adbdc 100644 --- a/bec_widgets/utils/bec_plugin_helper.py +++ b/bec_widgets/utils/bec_plugin_helper.py @@ -38,9 +38,11 @@ def _loaded_submodules_from_specs( try: submodule.__loader__.exec_module(submodule) except Exception as e: - logger.error( - f"Error loading plugin {submodule}: \n{''.join(traceback.format_exception(e))}" - ) + exception_text = "".join(traceback.format_exception(e)) + if "(most likely due to a circular import)" in exception_text: + logger.warning(f"Circular import encountered while loading {submodule}") + else: + logger.error(f"Error loading plugin {submodule}: \n{exception_text}") yield submodule @@ -59,7 +61,8 @@ def _get_widgets_from_module(module: ModuleType) -> BECClassContainer: module, predicate=lambda item: inspect.isclass(item) and issubclass(item, BECWidget) - and item is not BECWidget, + and item is not BECWidget + and not item.__module__.startswith("bec_widgets"), ) return BECClassContainer( BECClassInfo(name=k, module=module.__name__, file=module.__loader__.get_filename(), obj=v)