onekeylog_diagv2/src/backend/back_service.py
leimingsheng 58e568869d code sync
2025-09-01 09:38:03 +08:00

80 lines
2.4 KiB
Python

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()