0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 11:41:49 +02:00

fix: wrap fetching plugin widgets in case of errors

This commit is contained in:
2025-04-15 13:45:18 +02:00
committed by wakonig_k
parent e10f5ec088
commit ef148317de
3 changed files with 72 additions and 61 deletions

View File

@ -5,6 +5,7 @@ from __future__ import annotations
import enum import enum
import inspect import inspect
import traceback
from typing import Literal, Optional from typing import Literal, Optional
from bec_lib.logger import bec_logger from bec_lib.logger import bec_logger
@ -47,6 +48,7 @@ _Widgets = {
} }
try:
_plugin_widgets = get_all_plugin_widgets() _plugin_widgets = get_all_plugin_widgets()
plugin_client = get_plugin_client_module() plugin_client = get_plugin_client_module()
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets) Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
@ -70,6 +72,8 @@ for plugin_name, plugin_class in inspect.getmembers(plugin_client, inspect.iscla
continue continue
if plugin_name not in _overlap: if plugin_name not in _overlap:
globals()[plugin_name] = plugin_class globals()[plugin_name] = plugin_class
except ImportError as e:
logger.error(f"Failed loading plugins: \n{reduce(add, traceback.format_exception(e))}")
class AutoUpdates(RPCBase): class AutoUpdates(RPCBase):

View File

@ -39,6 +39,7 @@ class ClientGenerator:
base_imports = ( base_imports = (
"""import enum """import enum
import inspect import inspect
import traceback
from typing import Literal, Optional from typing import Literal, Optional
""" """
if self._base if self._base
@ -107,6 +108,7 @@ _Widgets = {
if self._base: if self._base:
self.content += """ self.content += """
try:
_plugin_widgets = get_all_plugin_widgets() _plugin_widgets = get_all_plugin_widgets()
plugin_client = get_plugin_client_module() plugin_client = get_plugin_client_module()
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets) Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
@ -128,7 +130,8 @@ for plugin_name, plugin_class in inspect.getmembers(plugin_client, inspect.iscla
continue continue
if plugin_name not in _overlap: if plugin_name not in _overlap:
globals()[plugin_name] = plugin_class globals()[plugin_name] = plugin_class
except ImportError as e:
logger.error(f"Failed loading plugins: \\n{reduce(add, traceback.format_exception(e))}")
""" """
def generate_content_for_class(self, cls): def generate_content_for_class(self, cls):

View File

@ -72,6 +72,7 @@ def test_client_generator_with_black_formatting():
import enum import enum
import inspect import inspect
import traceback
from typing import Literal, Optional from typing import Literal, Optional
from bec_lib.logger import bec_logger from bec_lib.logger import bec_logger
@ -95,6 +96,7 @@ def test_client_generator_with_black_formatting():
} }
try:
_plugin_widgets = get_all_plugin_widgets() _plugin_widgets = get_all_plugin_widgets()
plugin_client = get_plugin_client_module() plugin_client = get_plugin_client_module()
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets) Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
@ -116,6 +118,8 @@ def test_client_generator_with_black_formatting():
continue continue
if plugin_name not in _overlap: if plugin_name not in _overlap:
globals()[plugin_name] = plugin_class globals()[plugin_name] = plugin_class
except ImportError as e:
logger.error(f"Failed loading plugins: \\n{reduce(add, traceback.format_exception(e))}")
class MockBECFigure(RPCBase): class MockBECFigure(RPCBase):
@rpc_call @rpc_call