ErisPulse 2.1.3__py3-none-any.whl → 2.1.5__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.
@@ -5,8 +5,10 @@ from .mods import mods
5
5
  from .raiserr import raiserr
6
6
  from .util import util
7
7
  from .server import adapter_server
8
+ BaseAdapter = AdapterFather
8
9
 
9
10
  __all__ = [
11
+ 'BaseAdapter',
10
12
  'AdapterFather',
11
13
  'SendDSL',
12
14
  'adapter',
ErisPulse/Core/env.py CHANGED
@@ -21,7 +21,6 @@ from pathlib import Path
21
21
  from datetime import datetime
22
22
  from functools import lru_cache
23
23
  from typing import List, Dict, Optional, Any, Set, Tuple, Union, Type, FrozenSet
24
- from .raiserr import raiserr
25
24
 
26
25
  class EnvManager:
27
26
  """
@@ -370,22 +369,10 @@ class EnvManager:
370
369
  try:
371
370
  time_diff = current_time - self._last_snapshot_time
372
371
  if not isinstance(time_diff, (int, float)):
373
- raiserr.register(
374
- "ErisPulseEnvTimeDiffTypeError",
375
- doc = "时间差应为数值类型",
376
- )
377
- raiserr.ErisPulseEnvTimeDiffTypeError(
378
- f"时间差应为数值类型,实际为: {type(time_diff)}"
379
- )
372
+ raise ValueError("时间差应为数值类型")
380
373
 
381
374
  if not isinstance(self._snapshot_interval, (int, float)):
382
- raiserr.register(
383
- "ErisPulseEnvSnapshotIntervalTypeError",
384
- doc = "快照间隔应为数值类型",
385
- )
386
- raiserr.ErisPulseEnvSnapshotIntervalTypeError(
387
- f"快照间隔应为数值类型,实际为: {type(self._snapshot_interval)}"
388
- )
375
+ raise ValueError("快照间隔应为数值类型")
389
376
 
390
377
  if time_diff > self._snapshot_interval:
391
378
  self._last_snapshot_time = current_time
ErisPulse/Core/logger.py CHANGED
@@ -189,8 +189,6 @@ class Logger:
189
189
  if self._get_effective_level(caller_module) <= logging.CRITICAL:
190
190
  self._save_in_memory(caller_module, msg)
191
191
  self._logger.critical(f"[{caller_module}] {msg}", *args, **kwargs)
192
- from .raiserr import raiserr
193
- raiserr.register("CriticalError", doc="发生致命错误")
194
- raiserr.CriticalError(f"程序发生致命错误:{msg}", exit=True)
192
+ raise Exception(msg)
195
193
 
196
194
  logger = Logger()
ErisPulse/Core/raiserr.py CHANGED
@@ -1,12 +1,12 @@
1
1
  """
2
2
  ErisPulse 错误管理系统
3
3
 
4
- 提供错误类型注册、抛出和管理功能,集成全局异常处理。支持自定义错误类型、错误链追踪和全局异常捕获。
4
+ 提供全局异常捕获功能。不再推荐使用自定义错误注册功能。
5
5
 
6
6
  {!--< tips >!--}
7
- 1. 使用register注册自定义错误类型
8
- 2. 通过info获取错误信息
9
- 3. 自动捕获未处理异常
7
+ 1. 请使用Python原生异常抛出方法
8
+ 2. 系统会自动捕获并格式化所有未处理异常
9
+ 3. 注册功能已标记为弃用,将在未来版本移除
10
10
  {!--< /tips >!--}
11
11
  """
12
12
 
@@ -19,12 +19,11 @@ class Error:
19
19
  """
20
20
  错误管理器
21
21
 
22
- 提供错误类型注册和抛出功能
22
+ {!--< deprecated >!--} 请使用Python原生异常抛出方法 | 2025-07-18
23
23
 
24
24
  {!--< tips >!--}
25
- 1. 通过register方法注册自定义错误类型
26
- 2. 通过动态属性访问抛出错误
27
- 3. 通过info方法获取错误信息
25
+ 1. 注册功能将在未来版本移除
26
+ 2. 请直接使用raise Exception("message")方式抛出异常
28
27
  {!--< /tips >!--}
29
28
  """
30
29
 
@@ -35,16 +34,12 @@ class Error:
35
34
  """
36
35
  注册新的错误类型
37
36
 
37
+ {!--< deprecated >!--} 请使用Python原生异常抛出方法 | 2025-07-18
38
+
38
39
  :param name: 错误类型名称
39
40
  :param doc: 错误描述文档
40
41
  :param base: 基础异常类
41
42
  :return: 注册的错误类
42
-
43
- :example:
44
- >>> # 注册简单错误
45
- >>> raiserr.register("SimpleError", "简单的错误类型")
46
- >>> # 注册自定义基类的错误
47
- >>> raiserr.register("AdvancedError", "高级错误", CustomBaseError)
48
43
  """
49
44
  if name not in self._types:
50
45
  err_cls = type(name, (base,), {"__doc__": doc})
@@ -55,6 +50,8 @@ class Error:
55
50
  """
56
51
  动态获取错误抛出函数
57
52
 
53
+ {!--< deprecated >!--} 请使用Python原生异常抛出方法 | 2025-07-18
54
+
58
55
  :param name: 错误类型名称
59
56
  :return: 错误抛出函数
60
57
 
@@ -85,14 +82,10 @@ class Error:
85
82
  """
86
83
  获取错误信息
87
84
 
85
+ {!--< deprecated >!--} 此功能将在未来版本移除 | 2025-07-18
86
+
88
87
  :param name: 错误类型名称(可选)
89
88
  :return: 错误信息字典
90
-
91
- :example:
92
- >>> # 获取特定错误信息
93
- >>> error_info = raiserr.info("SimpleError")
94
- >>> # 获取所有错误信息
95
- >>> all_errors = raiserr.info()
96
89
  """
97
90
  result = {}
98
91
  for err_name, err_cls in self._types.items():
@@ -119,34 +112,65 @@ class Error:
119
112
 
120
113
  raiserr = Error()
121
114
 
122
- # 全局异常处理器
123
115
  def global_exception_handler(exc_type: Type[Exception], exc_value: Exception, exc_traceback: Any) -> None:
124
116
  """
125
- {!--< internal-use >!--}
126
117
  全局异常处理器
127
118
 
128
119
  :param exc_type: 异常类型
129
120
  :param exc_value: 异常值
130
121
  :param exc_traceback: 追踪信息
131
122
  """
132
- error_message = ''.join(traceback.format_exception(exc_type, exc_value, exc_traceback))
133
- raiserr.ExternalError(
134
- f"{exc_type.__name__}: {exc_value}\nTraceback:\n{error_message}"
135
- )
123
+ RED = '\033[91m'
124
+ YELLOW = '\033[93m'
125
+ BLUE = '\033[94m'
126
+ RESET = '\033[0m'
127
+
128
+ error_title = f"{RED}{exc_type.__name__}{RESET}: {YELLOW}{exc_value}{RESET}"
129
+ traceback_lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
136
130
 
131
+ colored_traceback = []
132
+ for line in traceback_lines:
133
+ if "File " in line and ", line " in line:
134
+ parts = line.split(', line ')
135
+ colored_line = f"{BLUE}{parts[0]}{RESET}, line {parts[1]}"
136
+ colored_traceback.append(colored_line)
137
+ else:
138
+ colored_traceback.append(f"{RED}{line}{RESET}")
139
+
140
+ full_error = f"{error_title}\n{RED}Traceback:{RESET}\n{''.join(colored_traceback)}"
141
+
142
+ sys.stderr.write(full_error)
143
+
137
144
  def async_exception_handler(loop: asyncio.AbstractEventLoop, context: Dict[str, Any]) -> None:
138
145
  """
139
- {!--< internal-use >!--}
140
146
  异步异常处理器
141
147
 
142
148
  :param loop: 事件循环
143
149
  :param context: 上下文字典
144
150
  """
151
+ RED = '\033[91m'
152
+ YELLOW = '\033[93m'
153
+ BLUE = '\033[94m'
154
+ RESET = '\033[0m'
155
+
145
156
  exception = context.get('exception')
146
- tb = ''.join(traceback.format_exception(type(exception), exception, exception.__traceback__))
147
- raiserr.ExternalError(
148
- f"{type(exception).__name__}: {exception}\nTraceback:\n{tb}"
149
- )
157
+ if exception:
158
+ tb = ''.join(traceback.format_exception(type(exception), exception, exception.__traceback__))
159
+
160
+ colored_tb = []
161
+ for line in tb.split('\n'):
162
+ if "File " in line and ", line " in line:
163
+ parts = line.split(', line ')
164
+ colored_line = f"{BLUE}{parts[0]}{RESET}, line {parts[1]}"
165
+ colored_tb.append(colored_line)
166
+ else:
167
+ colored_tb.append(f"{RED}{line}{RESET}")
168
+
169
+ error_msg = f"{RED}{type(exception).__name__}{RESET}: {YELLOW}{exception}{RESET}\n{RED}Traceback:{RESET}\n{'\n'.join(colored_tb)}"
170
+ sys.stderr.write(error_msg)
171
+ else:
172
+ msg = context.get('message', 'Unknown async error')
173
+ sys.stderr.write(f"{RED}Async Error{RESET}: {YELLOW}{msg}{RESET}")
150
174
 
151
175
  sys.excepthook = global_exception_handler
152
176
  asyncio.get_event_loop().set_exception_handler(async_exception_handler)
ErisPulse/Core/util.py CHANGED
@@ -87,11 +87,8 @@ class Util:
87
87
  try:
88
88
  return await loop.run_in_executor(None, lambda: func(*args, **kwargs))
89
89
  except Exception as e:
90
- from . import logger, raiserr
90
+ from . import logger
91
91
  logger.error(f"线程内发生未处理异常:\n{''.join(traceback.format_exc())}")
92
- raiserr.CaughtExternalError(
93
- f"检测到线程内异常,请优先使用 sdk.raiserr 抛出错误。\n原始异常: {type(e).__name__}: {e}"
94
- )
95
92
  return wrapper
96
93
 
97
94
  def retry(self, max_attempts: int = 3, delay: int = 1) -> Callable:
ErisPulse/__init__.py CHANGED
@@ -44,21 +44,9 @@ BaseModules = {
44
44
  "BaseAdapter": AdapterFather
45
45
  }
46
46
 
47
- BaseErrors = {
48
- "ExternalError": "外部捕获异常",
49
- "CaughtExternalError": "捕获的非SDK抛出的异常",
50
- "InitError": "SDK初始化错误",
51
- "ModuleLoadError": "模块加载错误",
52
- "LazyLoadError": "懒加载错误"
53
- }
54
-
55
47
  for module, moduleObj in BaseModules.items():
56
48
  setattr(sdk, module, moduleObj)
57
49
 
58
- for error, doc in BaseErrors.items():
59
- raiserr.register(error, doc=doc)
60
-
61
-
62
50
  class LazyModule:
63
51
  """
64
52
  懒加载模块包装器
@@ -109,7 +97,7 @@ class LazyModule:
109
97
  logger.debug(f"模块 {self._module_name} 初始化完成")
110
98
  except Exception as e:
111
99
  logger.error(f"模块 {self._module_name} 初始化失败: {e}")
112
- raise raiserr.LazyLoadError(f"无法初始化模块 {self._module_name}: {e}")
100
+ raise
113
101
 
114
102
  def __getattr__(self, name: str) -> Any:
115
103
  """
@@ -511,7 +499,6 @@ class ModuleInitializer:
511
499
 
512
500
  except Exception as e:
513
501
  logger.critical(f"SDK初始化严重错误: {e}")
514
- raiserr.InitError(f"sdk初始化失败: {e}", exit=True)
515
502
  return False
516
503
 
517
504
  @staticmethod
@@ -733,6 +720,7 @@ def init() -> bool:
733
720
 
734
721
  :raises InitError: 当初始化失败时抛出
735
722
  """
723
+
736
724
  if not _prepare_environment():
737
725
  return False
738
726
 
ErisPulse/__main__.py CHANGED
@@ -84,7 +84,8 @@ class PyPIManager:
84
84
  async with aiohttp.ClientSession(timeout=timeout) as session:
85
85
  async with session.get(PyPIManager.REMOTE_SOURCES[0]) as response:
86
86
  if response.status == 200:
87
- data = await response.json()
87
+ data = await response.text()
88
+ data = json.loads(data)
88
89
  return {
89
90
  "modules": data.get("modules", {}),
90
91
  "adapters": data.get("adapters", {})
@@ -97,7 +98,8 @@ class PyPIManager:
97
98
  async with aiohttp.ClientSession(timeout=timeout) as session:
98
99
  async with session.get(PyPIManager.REMOTE_SOURCES[1]) as response:
99
100
  if response.status == 200:
100
- data = await response.json()
101
+ data = await response.text()
102
+ data = json.loads(data)
101
103
  return {
102
104
  "modules": data.get("modules", {}),
103
105
  "adapters": data.get("adapters", {})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.1.3
3
+ Version: 2.1.5
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>, runoneall <runoobsteve@gmail.com>
6
6
  License: MIT License
@@ -0,0 +1,16 @@
1
+ ErisPulse/__init__.py,sha256=hsgvpT1GTBvjHpUlGSljVzuTwGgtlraQ4WnLMUFm5EM,27013
2
+ ErisPulse/__main__.py,sha256=qqx1F8bPRKhjalKVapI3RtLupHuLlYPRk503oduYADY,19947
3
+ ErisPulse/Core/__init__.py,sha256=XnQFMn4HMKzxa6KHJEvOpwt0v8jp21vAbw6aG0O8sPs,722
4
+ ErisPulse/Core/adapter.py,sha256=lw5T336EsNtjUgSPdevcOZReZNkA8oYvvTRCHk_fo_o,18149
5
+ ErisPulse/Core/env.py,sha256=D2BwtSbKggbeAsOzwwVv-kd5UkVmYlDUHtgLzFZqKUI,19841
6
+ ErisPulse/Core/logger.py,sha256=VYhWKPXn88ib7S_OKCr_MibdnMH8k5sHkwLtNDZP3QM,7034
7
+ ErisPulse/Core/mods.py,sha256=5SPutuzbMrA-VZwiXeNxYWfrdbpLRdYfQ0RvEkFuQgg,7308
8
+ ErisPulse/Core/raiserr.py,sha256=TQCKbYrfqu8tjX7dJiJemK0lZCQ4-5875nUGXgb8HUk,5606
9
+ ErisPulse/Core/server.py,sha256=FkDTeLuHD5IBnWVxvYU8pHb6yCt8GzyvC1bpOiJ7G7I,9217
10
+ ErisPulse/Core/shellprint.py,sha256=-BFoyFho_D3XEhxIoKt6x5gO4C62LKwmJWKDUGiPjNY,5908
11
+ ErisPulse/Core/util.py,sha256=7rdMmn6sBFqYd4znxBCcJjuv2eyTExdeKyZopgds868,3796
12
+ erispulse-2.1.5.dist-info/METADATA,sha256=9R7jlHvOoAtXb7irzBiubt-Yub3ynOVvQGzw2MtDy0U,6190
13
+ erispulse-2.1.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
14
+ erispulse-2.1.5.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
15
+ erispulse-2.1.5.dist-info/licenses/LICENSE,sha256=4jyqikiB0G0n06CEEMMTzTXjE4IShghSlB74skMSPQs,1464
16
+ erispulse-2.1.5.dist-info/RECORD,,
@@ -1,16 +0,0 @@
1
- ErisPulse/__init__.py,sha256=kQr2n1oeThlJVy7NY_ZMXgDsgZuhsBC5V6ysl2I59PQ,27471
2
- ErisPulse/__main__.py,sha256=yxlB-rCQKy7D5XMWqP5id1sOQbzLuPx048NNpLaCDf8,19851
3
- ErisPulse/Core/__init__.py,sha256=Wnkb4rI5kZhg8cdJE1sBfNRch55Aqp56npQ0DGXyHMA,675
4
- ErisPulse/Core/adapter.py,sha256=lw5T336EsNtjUgSPdevcOZReZNkA8oYvvTRCHk_fo_o,18149
5
- ErisPulse/Core/env.py,sha256=9WYNadD9h2jP_2wxOVBJEhH1uDzbctW7eB4Ba9RSjA4,20409
6
- ErisPulse/Core/logger.py,sha256=40vDe_D3L6ople-RZX8eGXntrZpFGHHzSl3pYxK-FLI,7196
7
- ErisPulse/Core/mods.py,sha256=5SPutuzbMrA-VZwiXeNxYWfrdbpLRdYfQ0RvEkFuQgg,7308
8
- ErisPulse/Core/raiserr.py,sha256=QLQ3r7p4iFP86XBLq9mtf1wv1xSlgny35i8t5-l4DXo,4620
9
- ErisPulse/Core/server.py,sha256=FkDTeLuHD5IBnWVxvYU8pHb6yCt8GzyvC1bpOiJ7G7I,9217
10
- ErisPulse/Core/shellprint.py,sha256=-BFoyFho_D3XEhxIoKt6x5gO4C62LKwmJWKDUGiPjNY,5908
11
- ErisPulse/Core/util.py,sha256=kyydBAJHHG9I7rMRzKWtLAQMZoJyBqHiBAweqcraFkU,4001
12
- erispulse-2.1.3.dist-info/METADATA,sha256=2BMh2bNQUugV9gVX8Ch39Jx4PqN183z0F4umn2k-rko,6190
13
- erispulse-2.1.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
14
- erispulse-2.1.3.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
15
- erispulse-2.1.3.dist-info/licenses/LICENSE,sha256=4jyqikiB0G0n06CEEMMTzTXjE4IShghSlB74skMSPQs,1464
16
- erispulse-2.1.3.dist-info/RECORD,,