Skip to content

Commit 66931f7

Browse files
committed
- 1.4.0
1 parent 357711c commit 66931f7

File tree

3 files changed

+13
-45
lines changed

3 files changed

+13
-45
lines changed

ISAT/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
# @Author : LG
33

44
__author__ = 'yatengLG'
5-
__version__ = '1.3.6'
5+
__version__ = '1.4.0'

ISAT/widgets/plugin_manager_dialog.py

Lines changed: 11 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
# -*- coding: utf-8 -*-
22
# @Author : LG
33
import os
4-
import importlib
5-
import inspect
4+
from importlib.metadata import entry_points
65
from ISAT.ui.plugin_manager_dialog import Ui_Dialog
7-
from ISAT.widgets.plugin_base import PluginBase
86
from PyQt5 import QtWidgets, QtCore, QtGui
9-
import sys
107

118

129
class PluginManagerDialog(QtWidgets.QDialog, Ui_Dialog):
@@ -30,49 +27,19 @@ def __init__(self, parent, mainwindow):
3027

3128
def load_plugins(self):
3229
self.tableWidget.setRowCount(0)
33-
"""从插件目录加载所有插件"""
3430
print('loading plugins')
35-
if not os.path.exists(self.plugin_dir):
36-
os.makedirs(self.plugin_dir)
37-
return
38-
39-
for plugin_name in os.listdir(self.plugin_dir):
40-
plugin_path = os.path.join(self.plugin_dir, plugin_name)
41-
if os.path.isdir(plugin_path):
42-
self._load_single_plugin(plugin_path, plugin_name)
43-
44-
self.update_gui()
45-
46-
def _load_single_plugin(self, plugin_path, plugin_name):
47-
"""加载单个插件"""
48-
init_path = os.path.join(plugin_path, "main.py")
49-
module_name = f"plugins.{plugin_name}"
50-
51-
if os.path.exists(init_path):
31+
eps = entry_points().get("isat.plugins", [])
32+
for ep in eps:
5233
try:
53-
# 动态导入插件模块
54-
spec = importlib.util.spec_from_file_location(module_name, init_path)
55-
plugin_module = importlib.util.module_from_spec(spec)
56-
sys.modules[module_name] = plugin_module
57-
spec.loader.exec_module(plugin_module)
58-
59-
# 查找插件实现类
60-
for name, obj in inspect.getmembers(plugin_module):
61-
if inspect.isclass(obj) and issubclass(obj, PluginBase) and obj != PluginBase:
62-
plugin_instance = obj()
63-
self._initialize_plugin(plugin_instance)
64-
34+
plugin_class = ep.load()
35+
plugin_instance = plugin_class()
36+
plugin_instance.init_plugin(self.mainwindow)
37+
self.plugins.append(plugin_instance)
38+
print('loaded plugin: ', plugin_instance.get_plugin_name())
6539
except Exception as e:
66-
print(f"Failed to load plugin {plugin_name}: {str(e)}")
67-
68-
def _initialize_plugin(self, plugin_instance):
69-
"""初始化插件"""
70-
try:
71-
plugin_instance.init_plugin(self.mainwindow)
72-
self.plugins.append(plugin_instance)
73-
print(f"Loaded plugin: {plugin_instance.get_plugin_name()}")
74-
except Exception as e:
75-
print(f"Failed to initialize plugin: {str(e)}")
40+
print('failed to load plugin [{ep}]: ', e)
41+
42+
self.update_gui()
7643

7744
def update_gui(self):
7845
self.tableWidget.setRowCount(0)

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,6 @@ def get_install_requires():
8585
"console_scripts": [
8686
"isat-sam=ISAT.main:main",
8787
],
88+
"isat.plugins": [] # 插件注册
8889
},
8990
)

0 commit comments

Comments
 (0)