2025-09-01 09:38:03 +08:00
|
|
|
import os
|
|
|
|
|
import importlib
|
|
|
|
|
|
|
|
|
|
def get_all_proj_dir():
|
|
|
|
|
proj_dirs = []
|
|
|
|
|
# 1.Search proj from src
|
|
|
|
|
from common import source_dir
|
|
|
|
|
|
|
|
|
|
backend_dir = os.path.join(source_dir, "backend")
|
|
|
|
|
# 检查路径是否存在
|
|
|
|
|
if not os.path.exists(backend_dir):
|
|
|
|
|
raise FileNotFoundError(f"指定路径不存在: {backend_dir}")
|
|
|
|
|
|
|
|
|
|
# 检查路径是否有效
|
|
|
|
|
if not os.path.isdir(backend_dir):
|
|
|
|
|
raise NotADirectoryError(f"指定路径不是一个目录: {backend_dir}")
|
|
|
|
|
|
|
|
|
|
for entry in os.listdir(backend_dir):
|
|
|
|
|
if entry.startswith("proj_"):
|
|
|
|
|
proj_dirs.append(entry)
|
|
|
|
|
|
|
|
|
|
# 2.Search proj from appdata
|
|
|
|
|
from common import get_user_appdata_path
|
|
|
|
|
app_dir = get_user_appdata_path()
|
|
|
|
|
usr_app_dir = os.path.join(app_dir, "onekeylog_diag")
|
|
|
|
|
usr_plugin_dir = os.path.join(usr_app_dir, "plugin")
|
|
|
|
|
|
|
|
|
|
# 检查路径是否存在
|
|
|
|
|
if not os.path.exists(usr_plugin_dir):
|
|
|
|
|
raise FileNotFoundError(f"指定路径不存在: {usr_plugin_dir}")
|
|
|
|
|
|
|
|
|
|
# 检查路径是否有效
|
|
|
|
|
if not os.path.isdir(usr_plugin_dir):
|
|
|
|
|
raise NotADirectoryError(f"指定路径不是一个目录: {usr_plugin_dir}")
|
|
|
|
|
|
|
|
|
|
for entry in os.listdir(usr_plugin_dir):
|
|
|
|
|
if entry.startswith("proj_"):
|
|
|
|
|
proj_dirs.append(entry)
|
|
|
|
|
|
|
|
|
|
return proj_dirs
|
|
|
|
|
|
|
|
|
|
def get_all_proj_name():
|
|
|
|
|
prefix_len = len("proj_")
|
|
|
|
|
proj_dir = get_all_proj_dir()
|
|
|
|
|
|
|
|
|
|
proj_name = [item[prefix_len:] for item in proj_dir]
|
|
|
|
|
return proj_name
|
|
|
|
|
|
|
|
|
|
def dynamic_import_lib(pacakge_name):
|
|
|
|
|
"""
|
|
|
|
|
动态拼接包名并导入模块
|
|
|
|
|
|
|
|
|
|
参数:
|
|
|
|
|
package_name : 包名
|
|
|
|
|
|
|
|
|
|
返回:
|
|
|
|
|
导入的模块对象,如果导入失败则返回None
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
package_path = "backend." + pacakge_name
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
# 动态导入模块
|
|
|
|
|
module = importlib.import_module(package_path)
|
|
|
|
|
print(f"成功导入模块: {package_path}")
|
|
|
|
|
return module
|
|
|
|
|
except ImportError:
|
|
|
|
|
print(f"无法导入模块: {package_path}")
|
|
|
|
|
return None
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"导入模块时发生错误: {e}")
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
def do_proj_parse(key="app"):
|
|
|
|
|
porj_package = "proj_" + key
|
|
|
|
|
|
|
|
|
|
pHandlers = dynamic_import_lib(porj_package)
|
|
|
|
|
if hasattr(pHandlers, "start_parse"):
|
|
|
|
|
pHandlers.start_parse()
|
|
|
|
|
|