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:
@ -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,16 +48,17 @@ _Widgets = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_plugin_widgets = get_all_plugin_widgets()
|
try:
|
||||||
plugin_client = get_plugin_client_module()
|
_plugin_widgets = get_all_plugin_widgets()
|
||||||
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
|
plugin_client = get_plugin_client_module()
|
||||||
|
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
|
||||||
|
|
||||||
if (_overlap := _Widgets.keys() & _plugin_widgets.keys()) != set():
|
if (_overlap := _Widgets.keys() & _plugin_widgets.keys()) != set():
|
||||||
for _widget in _overlap:
|
for _widget in _overlap:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f"Detected duplicate widget {_widget} in plugin repo file: {inspect.getfile(_plugin_widgets[_widget])} !"
|
f"Detected duplicate widget {_widget} in plugin repo file: {inspect.getfile(_plugin_widgets[_widget])} !"
|
||||||
)
|
)
|
||||||
for plugin_name, plugin_class in inspect.getmembers(plugin_client, inspect.isclass):
|
for plugin_name, plugin_class in inspect.getmembers(plugin_client, inspect.isclass):
|
||||||
if issubclass(plugin_class, RPCBase) and plugin_class is not RPCBase:
|
if issubclass(plugin_class, RPCBase) and plugin_class is not RPCBase:
|
||||||
if plugin_name in globals():
|
if plugin_name in globals():
|
||||||
conflicting_file = (
|
conflicting_file = (
|
||||||
@ -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):
|
||||||
|
@ -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,14 +108,15 @@ _Widgets = {
|
|||||||
if self._base:
|
if self._base:
|
||||||
self.content += """
|
self.content += """
|
||||||
|
|
||||||
_plugin_widgets = get_all_plugin_widgets()
|
try:
|
||||||
plugin_client = get_plugin_client_module()
|
_plugin_widgets = get_all_plugin_widgets()
|
||||||
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
|
plugin_client = get_plugin_client_module()
|
||||||
|
Widgets = _WidgetsEnumType("Widgets", {name: name for name in _plugin_widgets} | _Widgets)
|
||||||
|
|
||||||
if (_overlap := _Widgets.keys() & _plugin_widgets.keys()) != set():
|
if (_overlap := _Widgets.keys() & _plugin_widgets.keys()) != set():
|
||||||
for _widget in _overlap:
|
for _widget in _overlap:
|
||||||
logger.warning(f"Detected duplicate widget {_widget} in plugin repo file: {inspect.getfile(_plugin_widgets[_widget])} !")
|
logger.warning(f"Detected duplicate widget {_widget} in plugin repo file: {inspect.getfile(_plugin_widgets[_widget])} !")
|
||||||
for plugin_name, plugin_class in inspect.getmembers(plugin_client, inspect.isclass):
|
for plugin_name, plugin_class in inspect.getmembers(plugin_client, inspect.isclass):
|
||||||
if issubclass(plugin_class, RPCBase) and plugin_class is not RPCBase:
|
if issubclass(plugin_class, RPCBase) and plugin_class is not RPCBase:
|
||||||
if plugin_name in globals():
|
if plugin_name in globals():
|
||||||
conflicting_file = (
|
conflicting_file = (
|
||||||
@ -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):
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user