ErisPulse 1.0.13__tar.gz → 1.0.14.dev2__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.
@@ -1,139 +1,146 @@
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
+
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