ErisPulse 1.0.13__py3-none-any.whl → 1.0.14__py3-none-any.whl

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