mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
fix(plugins): Improve hot-reload robustness for multi-inheritance plugins
This commit is contained in:
+17
-4
@@ -1,3 +1,4 @@
|
|||||||
|
import ast
|
||||||
import asyncio
|
import asyncio
|
||||||
import concurrent
|
import concurrent
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
@@ -372,10 +373,22 @@ class PluginManager(metaclass=Singleton):
|
|||||||
|
|
||||||
# 读取 __init__.py 文件,查找插件主类名
|
# 读取 __init__.py 文件,查找插件主类名
|
||||||
with open(init_file, "r", encoding="utf-8") as f:
|
with open(init_file, "r", encoding="utf-8") as f:
|
||||||
for line in f:
|
source_code = f.read()
|
||||||
if line.startswith("class") and "(_PluginBase)" in line:
|
|
||||||
# 解析出类名作为插件ID
|
tree = ast.parse(source_code)
|
||||||
return line.split("class ")[1].split("(_PluginBase)")[0].strip()
|
|
||||||
|
# 遍历AST,查找继承自 _PluginBase 的类
|
||||||
|
for node in ast.walk(tree):
|
||||||
|
# 检查节点是否为类定义
|
||||||
|
if isinstance(node, ast.ClassDef):
|
||||||
|
# 遍历该类的所有基类
|
||||||
|
for base in node.bases:
|
||||||
|
# 检查基类是否是我们寻找的 _PluginBase
|
||||||
|
# ast.Name 用于处理简单的基类名
|
||||||
|
if isinstance(base, ast.Name) and base.id == '_PluginBase':
|
||||||
|
# 返回这个类的名字
|
||||||
|
return node.name
|
||||||
|
|
||||||
return None
|
return None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"从路径解析插件ID时出错: {e}")
|
logger.error(f"从路径解析插件ID时出错: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user