ErisPulse 2.1.7rc1__py3-none-any.whl → 2.1.9__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.
@@ -19,17 +19,3 @@ __all__ = [
19
19
  'util',
20
20
  'adapter_server'
21
21
  ]
22
-
23
- _config = env.getConfig("ErisPulse")
24
-
25
- if _config is None:
26
- defaultConfig = {
27
- "server": {
28
- "host": "0.0.0.0",
29
- "port": 8000,
30
- "ssl_certfile": None,
31
- "ssl_keyfile": None
32
- }
33
- }
34
- env.setConfig("ErisPulse", defaultConfig)
35
- _config = defaultConfig
ErisPulse/Core/adapter.py CHANGED
@@ -402,17 +402,14 @@ class AdapterManager:
402
402
  if platforms is None:
403
403
  platforms = list(self._adapters.keys())
404
404
 
405
- from .env import env
406
- from .logger import logger
407
405
  from .server import adapter_server
408
-
409
- from . import _config
410
- server_config = _config.get("server", {})
406
+ from .core_config import get_server_config
407
+ server_config = get_server_config()
411
408
  host = server_config["host"]
412
409
  port = server_config["port"]
413
410
  ssl_cert = server_config.get("ssl_certfile", None)
414
411
  ssl_key = server_config.get("ssl_keyfile", None)
415
-
412
+
416
413
  # 启动服务器
417
414
  await adapter_server.start(
418
415
  host=host,
@@ -0,0 +1,109 @@
1
+ """
2
+ ErisPulse 配置中心
3
+
4
+ 集中管理所有配置项,避免循环导入问题
5
+ 提供自动补全缺失配置项的功能
6
+ """
7
+
8
+ from typing import Dict, Any, Optional
9
+
10
+ # 默认配置
11
+ DEFAULT_CONFIG = {
12
+ "server": {
13
+ "host": "0.0.0.0",
14
+ "port": 8000,
15
+ "ssl_certfile": None,
16
+ "ssl_keyfile": None
17
+ },
18
+ "logger": {
19
+ "level": "INFO",
20
+ "log_files": [],
21
+ "memory_limit": 1000
22
+ }
23
+ }
24
+
25
+ def _ensure_config_structure(config: Dict[str, Any]) -> Dict[str, Any]:
26
+ """
27
+ 确保配置结构完整,补全缺失的配置项
28
+
29
+ :param config: 当前配置
30
+ :return: 补全后的完整配置
31
+ """
32
+ merged_config = DEFAULT_CONFIG.copy()
33
+
34
+ # 深度合并配置
35
+ for section, default_values in DEFAULT_CONFIG.items():
36
+ if section not in config:
37
+ config[section] = default_values.copy()
38
+ continue
39
+
40
+ if not isinstance(config[section], dict):
41
+ config[section] = default_values.copy()
42
+ continue
43
+
44
+ for key, default_value in default_values.items():
45
+ if key not in config[section]:
46
+ config[section][key] = default_value
47
+
48
+ return config
49
+
50
+ def get_config() -> Dict[str, Any]:
51
+ """
52
+ 获取当前配置,自动补全缺失的配置项并保存
53
+
54
+ :return: 完整的配置字典
55
+ """
56
+ from .env import env
57
+
58
+ # 获取现有配置
59
+ current_config = env.getConfig("ErisPulse")
60
+
61
+ # 如果完全没有配置,设置默认配置
62
+ if current_config is None:
63
+ env.setConfig("ErisPulse", DEFAULT_CONFIG)
64
+ return DEFAULT_CONFIG
65
+
66
+ # 检查并补全缺失的配置项
67
+ complete_config = _ensure_config_structure(current_config)
68
+
69
+ # 如果配置有变化,更新到存储
70
+ if current_config != complete_config:
71
+ env.setConfig("ErisPulse", complete_config)
72
+
73
+ return complete_config
74
+
75
+ def update_config(new_config: Dict[str, Any]) -> bool:
76
+ """
77
+ 更新配置,自动补全缺失的配置项
78
+
79
+ :param new_config: 新的配置字典
80
+ :return: 是否更新成功
81
+ """
82
+ from .env import env
83
+
84
+ # 获取当前配置并合并新配置
85
+ current = get_config()
86
+ merged = {**current, **new_config}
87
+
88
+ # 确保合并后的配置结构完整
89
+ complete_config = _ensure_config_structure(merged)
90
+
91
+ return env.setConfig("ErisPulse", complete_config)
92
+
93
+ def get_server_config() -> Dict[str, Any]:
94
+ """
95
+ 获取服务器配置,确保结构完整
96
+
97
+ :return: 服务器配置字典
98
+ """
99
+ config = get_config()
100
+ return config["server"]
101
+
102
+ def get_logger_config() -> Dict[str, Any]:
103
+ """
104
+ 获取日志配置,确保结构完整
105
+
106
+ :return: 日志配置字典
107
+ """
108
+ config = get_config()
109
+ return config["logger"]
ErisPulse/Core/logger.py CHANGED
@@ -14,6 +14,8 @@ import logging
14
14
  import inspect
15
15
  import datetime
16
16
  from typing import List, Dict, Any, Optional, Union, Type, Set, Tuple, FrozenSet
17
+ from rich.logging import RichHandler
18
+ from rich.console import Console
17
19
 
18
20
  class Logger:
19
21
  """
@@ -28,15 +30,36 @@ class Logger:
28
30
  {!--< /tips >!--}
29
31
  """
30
32
  def __init__(self):
33
+ self._max_logs = 1000
31
34
  self._logs = {}
32
35
  self._module_levels = {}
33
36
  self._logger = logging.getLogger("ErisPulse")
34
37
  self._logger.setLevel(logging.DEBUG)
35
38
  self._file_handler = None
36
39
  if not self._logger.handlers:
37
- console_handler = logging.StreamHandler()
38
- console_handler.setFormatter(logging.Formatter("%(message)s"))
40
+ console_handler = RichHandler(
41
+ console=Console(),
42
+ show_time=False,
43
+ show_level=True,
44
+ show_path=False,
45
+ markup=True
46
+ )
39
47
  self._logger.addHandler(console_handler)
48
+ self._setup_config()
49
+
50
+ def set_memory_limit(self, limit: int) -> bool:
51
+ """
52
+ 设置日志内存存储上限
53
+
54
+ :param limit: 日志存储上限
55
+ :return: bool 设置是否成功
56
+ """
57
+ if limit > 0:
58
+ self._max_logs = limit
59
+ return True
60
+ else:
61
+ self._logger.warning("日志存储上限必须大于0。")
62
+ return False
40
63
 
41
64
  def set_level(self, level: str) -> bool:
42
65
  """
@@ -63,8 +86,8 @@ class Logger:
63
86
  :param level: 日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)
64
87
  :return: bool 设置是否成功
65
88
  """
66
- from .env import env
67
- if not env.get_module_status(module_name):
89
+ from .mods import mods
90
+ if not mods.get_module_status(module_name):
68
91
  self._logger.warning(f"模块 {module_name} 未启用,无法设置日志等级。")
69
92
  return False
70
93
  level = level.upper()
@@ -93,9 +116,9 @@ class Logger:
93
116
  for p in path:
94
117
  try:
95
118
  file_handler = logging.FileHandler(p, encoding='utf-8')
96
- file_handler.setFormatter(logging.Formatter("%(message)s"))
119
+ # 使用自定义格式化器去除rich markup标签
120
+ file_handler.setFormatter(logging.Formatter("[%(name)s] %(message)s"))
97
121
  self._logger.addHandler(file_handler)
98
- self._logger.info(f"日志输出已设置到文件: {p}")
99
122
  return True
100
123
  except Exception as e:
101
124
  self._logger.error(f"无法设置日志文件 {p}: {e}")
@@ -141,10 +164,25 @@ class Logger:
141
164
  def _save_in_memory(self, ModuleName, msg):
142
165
  if ModuleName not in self._logs:
143
166
  self._logs[ModuleName] = []
167
+
168
+ # 检查日志数量是否超过限制
169
+ if len(self._logs[ModuleName]) >= self._max_logs:
170
+ self._logs[ModuleName].pop(0)
171
+
144
172
  timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
145
173
  msg = f"{timestamp} - {msg}"
146
174
  self._logs[ModuleName].append(msg)
147
175
 
176
+ def _setup_config(self):
177
+ from .core_config import get_logger_config
178
+ logger_config = get_logger_config()
179
+ if "level" in logger_config:
180
+ self.set_level(logger_config["level"])
181
+ if "log_files" in logger_config and logger_config["log_files"]:
182
+ self.set_output_file(logger_config["log_files"])
183
+ if "memory_limit" in logger_config:
184
+ self.set_memory_limit(logger_config["memory_limit"])
185
+
148
186
  def _get_effective_level(self, module_name):
149
187
  return self._module_levels.get(module_name, self._logger.level)
150
188
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.1.7rc1
3
+ Version: 2.1.9
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=T-N56UQyBmpvlqwH2wGi5ptPzaJpbgF5tKkJt0DlkaM,26099
2
+ ErisPulse/__main__.py,sha256=QwHMu8lmWbjS3EyOYV-wea3I0xcGmH_McWNx7JSGwts,24853
3
+ ErisPulse/Core/__init__.py,sha256=tBYPahQ7-w7U6M69xy8DW0_ECa9ja-Q0y_SQqVswYBo,409
4
+ ErisPulse/Core/adapter.py,sha256=Kmm_D8UcrDBJfn9EemAbgh3NB06Aj8u3iVNrBa1htJI,18107
5
+ ErisPulse/Core/core_config.py,sha256=LwsOOIrZqm3-oUR-zkkaw_fmR3f4wMlEhFrc2tgiiRU,2847
6
+ ErisPulse/Core/env.py,sha256=D2BwtSbKggbeAsOzwwVv-kd5UkVmYlDUHtgLzFZqKUI,19841
7
+ ErisPulse/Core/logger.py,sha256=WfoFLHQfhRo4hKx-nOSTWq3maLMv-RexWLATvWQO4mc,8300
8
+ ErisPulse/Core/mods.py,sha256=2yIq8t9Ca9CBPRiZU0yr8Lc0XGmmkB7LlH-5FWqXjw4,7023
9
+ ErisPulse/Core/raiserr.py,sha256=vlyaaiOIYkyqm9dAqSW9E54JBzX-9roHDp5_r6I0yUU,5591
10
+ ErisPulse/Core/server.py,sha256=FkDTeLuHD5IBnWVxvYU8pHb6yCt8GzyvC1bpOiJ7G7I,9217
11
+ ErisPulse/Core/util.py,sha256=7rdMmn6sBFqYd4znxBCcJjuv2eyTExdeKyZopgds868,3796
12
+ erispulse-2.1.9.dist-info/METADATA,sha256=SolTFf_3ALM1br71LporfFLq_2UM_ikHkNqEbqBxV1Q,6258
13
+ erispulse-2.1.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
14
+ erispulse-2.1.9.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
15
+ erispulse-2.1.9.dist-info/licenses/LICENSE,sha256=4jyqikiB0G0n06CEEMMTzTXjE4IShghSlB74skMSPQs,1464
16
+ erispulse-2.1.9.dist-info/RECORD,,
@@ -1,15 +0,0 @@
1
- ErisPulse/__init__.py,sha256=T-N56UQyBmpvlqwH2wGi5ptPzaJpbgF5tKkJt0DlkaM,26099
2
- ErisPulse/__main__.py,sha256=QwHMu8lmWbjS3EyOYV-wea3I0xcGmH_McWNx7JSGwts,24853
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=2yIq8t9Ca9CBPRiZU0yr8Lc0XGmmkB7LlH-5FWqXjw4,7023
8
- ErisPulse/Core/raiserr.py,sha256=vlyaaiOIYkyqm9dAqSW9E54JBzX-9roHDp5_r6I0yUU,5591
9
- ErisPulse/Core/server.py,sha256=FkDTeLuHD5IBnWVxvYU8pHb6yCt8GzyvC1bpOiJ7G7I,9217
10
- ErisPulse/Core/util.py,sha256=7rdMmn6sBFqYd4znxBCcJjuv2eyTExdeKyZopgds868,3796
11
- erispulse-2.1.7rc1.dist-info/METADATA,sha256=7ITW_Im5RNEPNc6z5Nn5mMKRcfI-8FXV4kPsMYCPmeY,6261
12
- erispulse-2.1.7rc1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
13
- erispulse-2.1.7rc1.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
14
- erispulse-2.1.7rc1.dist-info/licenses/LICENSE,sha256=4jyqikiB0G0n06CEEMMTzTXjE4IShghSlB74skMSPQs,1464
15
- erispulse-2.1.7rc1.dist-info/RECORD,,