ErisPulse 1.0.13__tar.gz → 1.0.14.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse/__init__.py +146 -139
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse/__main__.py +694 -931
- erispulse-1.0.13/ErisPulse/envManager.py → erispulse-1.0.14.dev1/ErisPulse/db.py +227 -227
- erispulse-1.0.14.dev1/ErisPulse/logger.py +123 -0
- erispulse-1.0.14.dev1/ErisPulse/raiserr.py +44 -0
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse/util.py +1 -3
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse.egg-info/PKG-INFO +73 -96
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse.egg-info/SOURCES.txt +3 -3
- erispulse-1.0.14.dev1/ErisPulse.egg-info/requires.txt +1 -0
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/PKG-INFO +73 -96
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/README.md +51 -55
- erispulse-1.0.14.dev1/pyproject.toml +39 -0
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/setup.cfg +4 -4
- erispulse-1.0.13/ErisPulse/errors.py +0 -16
- erispulse-1.0.13/ErisPulse/logger.py +0 -48
- erispulse-1.0.13/ErisPulse.egg-info/requires.txt +0 -3
- erispulse-1.0.13/setup.py +0 -41
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse.egg-info/dependency_links.txt +0 -0
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse.egg-info/entry_points.txt +0 -0
- {erispulse-1.0.13 → erispulse-1.0.14.dev1}/ErisPulse.egg-info/top_level.txt +0 -0
|
@@ -1,139 +1,146 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import sys
|
|
3
|
-
import types
|
|
4
|
-
from . import util
|
|
5
|
-
from . import
|
|
6
|
-
from . import logger
|
|
7
|
-
from .
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
sdkInstalledModuleNames
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
import types
|
|
4
|
+
from . import util
|
|
5
|
+
from .raiserr import raiserr
|
|
6
|
+
from .logger import logger
|
|
7
|
+
from .db import env
|
|
8
|
+
|
|
9
|
+
# 注册 ErrorHook 并预注册常用错误类型
|
|
10
|
+
raiserr.register("MissingDependencyError", doc="缺少依赖错误")
|
|
11
|
+
raiserr.register("InvalidDependencyError", doc="依赖无效错误")
|
|
12
|
+
raiserr.register("CycleDependencyError" , doc="依赖循环错误")
|
|
13
|
+
raiserr.register("ModuleLoadError" , doc="模块加载错误")
|
|
14
|
+
|
|
15
|
+
sdk = types.SimpleNamespace()
|
|
16
|
+
setattr(sdk, "env", env)
|
|
17
|
+
setattr(sdk, "raiserr", raiserr)
|
|
18
|
+
setattr(sdk, "logger", logger)
|
|
19
|
+
setattr(sdk, "util", util)
|
|
20
|
+
|
|
21
|
+
env.load_env_file()
|
|
22
|
+
|
|
23
|
+
def init():
|
|
24
|
+
try:
|
|
25
|
+
sdkModulePath = os.path.join(os.path.dirname(__file__), "modules")
|
|
26
|
+
|
|
27
|
+
if not os.path.exists(sdkModulePath):
|
|
28
|
+
os.makedirs(sdkModulePath)
|
|
29
|
+
|
|
30
|
+
sys.path.append(sdkModulePath)
|
|
31
|
+
|
|
32
|
+
TempModules = [
|
|
33
|
+
x for x in os.listdir(sdkModulePath)
|
|
34
|
+
if os.path.isdir(os.path.join(sdkModulePath, x))
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
sdkInstalledModuleNames: list[str] = []
|
|
38
|
+
disabledModules: list[str] = []
|
|
39
|
+
|
|
40
|
+
for module_name in TempModules:
|
|
41
|
+
try:
|
|
42
|
+
moduleObj = __import__(module_name)
|
|
43
|
+
if not hasattr(moduleObj, "moduleInfo") or not isinstance(moduleObj.moduleInfo, dict):
|
|
44
|
+
logger.warning(f"模块 {module_name} 缺少有效的 'moduleInfo' 字典.")
|
|
45
|
+
continue
|
|
46
|
+
if "name" not in moduleObj.moduleInfo.get("meta", {}):
|
|
47
|
+
logger.warning(f"模块 {module_name} 的 'moduleInfo' 字典 缺少必要 'name' 键.")
|
|
48
|
+
continue
|
|
49
|
+
if not hasattr(moduleObj, "Main"):
|
|
50
|
+
logger.warning(f"模块 {module_name} 缺少 'Main' 类.")
|
|
51
|
+
continue
|
|
52
|
+
|
|
53
|
+
module_info = env.get_module(moduleObj.moduleInfo.get("meta", {}).get("name", None))
|
|
54
|
+
if module_info is None:
|
|
55
|
+
module_info = {
|
|
56
|
+
"status": True,
|
|
57
|
+
"info": moduleObj.moduleInfo
|
|
58
|
+
}
|
|
59
|
+
env.set_module(moduleObj.moduleInfo.get("meta", {}).get("name", None), module_info)
|
|
60
|
+
logger.info(f"模块 {moduleObj.moduleInfo.get('meta', {}).get('name', None)} 信息已初始化并存储到数据库")
|
|
61
|
+
|
|
62
|
+
if not module_info.get('status', True):
|
|
63
|
+
disabledModules.append(module_name)
|
|
64
|
+
logger.warning(f"模块 {moduleObj.moduleInfo.get('meta', {}).get('name', None)} 已禁用,跳过加载")
|
|
65
|
+
continue
|
|
66
|
+
|
|
67
|
+
required_deps = moduleObj.moduleInfo.get("dependencies", []).get("requires", [])
|
|
68
|
+
missing_required_deps = [dep for dep in required_deps if dep not in TempModules]
|
|
69
|
+
if missing_required_deps:
|
|
70
|
+
logger.error(f"模块 {module_name} 缺少必需依赖: {missing_required_deps}")
|
|
71
|
+
raiserr.MissingDependencyError(f"模块 {module_name} 缺少必需依赖: {missing_required_deps}")
|
|
72
|
+
|
|
73
|
+
# 检查可选依赖部分
|
|
74
|
+
optional_deps = moduleObj.moduleInfo.get("dependencies", []).get("optional", [])
|
|
75
|
+
if optional_deps:
|
|
76
|
+
available_optional_deps = []
|
|
77
|
+
for dep in optional_deps:
|
|
78
|
+
if isinstance(dep, list):
|
|
79
|
+
available_deps = [d for d in dep if d in TempModules]
|
|
80
|
+
if available_deps:
|
|
81
|
+
available_optional_deps.extend(available_deps)
|
|
82
|
+
elif dep in TempModules:
|
|
83
|
+
available_optional_deps.append(dep)
|
|
84
|
+
|
|
85
|
+
if available_optional_deps:
|
|
86
|
+
logger.info(f"模块 {module_name} 加载了部分可选依赖: {available_optional_deps}")
|
|
87
|
+
else:
|
|
88
|
+
logger.warning(f"模块 {module_name} 缺少所有可选依赖: {optional_deps}")
|
|
89
|
+
|
|
90
|
+
sdkInstalledModuleNames.append(module_name)
|
|
91
|
+
except Exception as e:
|
|
92
|
+
logger.warning(f"模块 {module_name} 加载失败: {e}")
|
|
93
|
+
continue
|
|
94
|
+
|
|
95
|
+
sdkModuleDependencies = {}
|
|
96
|
+
for module_name in sdkInstalledModuleNames:
|
|
97
|
+
moduleObj = __import__(module_name)
|
|
98
|
+
moduleDependecies: list[str] = moduleObj.moduleInfo.get("dependencies", []).get("requires", [])
|
|
99
|
+
|
|
100
|
+
optional_deps = moduleObj.moduleInfo.get("dependencies", []).get("optional", [])
|
|
101
|
+
available_optional_deps = [dep for dep in optional_deps if dep in sdkInstalledModuleNames]
|
|
102
|
+
moduleDependecies.extend(available_optional_deps)
|
|
103
|
+
|
|
104
|
+
for dep in moduleDependecies:
|
|
105
|
+
if dep in disabledModules:
|
|
106
|
+
logger.warning(f"模块 {module_name} 的依赖模块 {dep} 已禁用,跳过加载")
|
|
107
|
+
continue
|
|
108
|
+
|
|
109
|
+
if not all(dep in sdkInstalledModuleNames for dep in moduleDependecies):
|
|
110
|
+
raiserr.InvalidDependencyError(
|
|
111
|
+
f"模块 {module_name} 的依赖无效: {moduleDependecies}"
|
|
112
|
+
)
|
|
113
|
+
sdkModuleDependencies[module_name] = moduleDependecies
|
|
114
|
+
|
|
115
|
+
sdkInstalledModuleNames: list[str] = sdk.util.topological_sort(
|
|
116
|
+
sdkInstalledModuleNames, sdkModuleDependencies, raiserr.CycleDependencyError
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
all_modules_info = {}
|
|
120
|
+
for module_name in sdkInstalledModuleNames:
|
|
121
|
+
moduleObj = __import__(module_name)
|
|
122
|
+
moduleInfo: dict = moduleObj.moduleInfo
|
|
123
|
+
|
|
124
|
+
module_info = env.get_module(moduleInfo.get("meta", {}).get("name", None))
|
|
125
|
+
env.set_module(moduleInfo.get("meta", {}).get("name", None), {
|
|
126
|
+
"status": True,
|
|
127
|
+
"info": moduleInfo
|
|
128
|
+
})
|
|
129
|
+
logger.debug("所有模块信息已加载并存储到数据库")
|
|
130
|
+
|
|
131
|
+
for module_name in sdkInstalledModuleNames:
|
|
132
|
+
moduleObj = __import__(module_name)
|
|
133
|
+
moduleInfo = moduleObj.moduleInfo
|
|
134
|
+
module_status = env.get_module_status(moduleInfo.get("meta", {}).get("name", None))
|
|
135
|
+
if not module_status:
|
|
136
|
+
continue
|
|
137
|
+
|
|
138
|
+
moduleMain = moduleObj.Main(sdk)
|
|
139
|
+
setattr(moduleMain, "moduleInfo", moduleInfo)
|
|
140
|
+
setattr(sdk, moduleInfo.get("meta", {}).get("name", None), moduleMain)
|
|
141
|
+
logger.debug(f"模块 {moduleInfo.get('meta', {}).get('name', None)} 正在初始化")
|
|
142
|
+
except Exception as e:
|
|
143
|
+
logger.error(f"初始化失败: {e}")
|
|
144
|
+
raise e
|
|
145
|
+
|
|
146
|
+
sdk.init = init
|