ErisPulse 2.5.2.dev2__py3-none-any.whl → 2.5.2.dev3__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/Core/adapter.py CHANGED
@@ -701,12 +701,12 @@ class AdapterManager(ManagerBase):
701
701
 
702
702
  # ==================== 适配器配置管理 ====================
703
703
 
704
- def _config_register(self, platform: str, enabled: bool = False) -> bool:
704
+ def _config_register(self, platform: str, enabled: bool = True) -> bool:
705
705
  """
706
706
  注册新平台适配器(仅当平台不存在时注册)
707
707
 
708
708
  :param platform: 平台名称
709
- :param enabled: [bool] 是否启用适配器
709
+ :param enabled: [bool] 是否启用适配器 (默认: True,新适配器默认启用)
710
710
  :return: [bool] 操作是否成功
711
711
  """
712
712
  existing = config.getConfig(CONFIG_KEY_ADAPTER_STATUS_OF.format(platform))
@@ -745,16 +745,17 @@ class AdapterManager(ManagerBase):
745
745
  1. 适配器在配置文件中(ErisPulse.adapters.status.{platform} 存在)
746
746
  2. 配置值为启用状态
747
747
 
748
- 如果适配器未在配置中,返回 False
748
+ 如果适配器未在配置中,默认启用并自动写入配置
749
749
  {!--< /tips >!--}
750
750
  """
751
751
  from .config import parse_bool_config
752
752
 
753
753
  status = config.getConfig(CONFIG_KEY_ADAPTER_STATUS_OF.format(platform))
754
754
 
755
- # 适配器未在配置中,返回 False
755
+ # 适配器未在配置中,默认启用并写入配置
756
756
  if status is None:
757
- return False
757
+ config.setConfig(CONFIG_KEY_ADAPTER_STATUS_OF.format(platform), True)
758
+ return True
758
759
 
759
760
  return parse_bool_config(status)
760
761
 
@@ -825,9 +826,16 @@ class AdapterManager(ManagerBase):
825
826
  """
826
827
  列出所有平台适配器状态
827
828
 
829
+ 合并配置项与已注册适配器,确保禁用适配器也可见。
830
+
828
831
  :return: {平台名: 是否启用} 字典
829
832
  """
830
- return config.getConfig(CONFIG_KEY_ADAPTER_STATUS, {})
833
+ items = dict(config.getConfig(CONFIG_KEY_ADAPTER_STATUS, {}))
834
+ # 补充已在管理器中注册但配置中不存在的适配器
835
+ for platform in self._adapters:
836
+ if platform not in items:
837
+ items[platform] = self.is_enabled(platform)
838
+ return items
831
839
 
832
840
  # 兼容性方法 - 保持向后兼容
833
841
  def list_adapters(self) -> dict[str, bool]:
@@ -1387,6 +1395,7 @@ class AdapterManager(ManagerBase):
1387
1395
  获取适配器与Bot的完整状态摘要
1388
1396
 
1389
1397
  返回所有适配器的运行状态及各适配器下的Bot状态,便于WebUI展示。
1398
+ 包含已禁用适配器以便于管理。
1390
1399
 
1391
1400
  :return: 状态摘要字典
1392
1401
 
@@ -1403,10 +1412,17 @@ class AdapterManager(ManagerBase):
1403
1412
  >>> # "info": {"nickname": "MyBot"}
1404
1413
  >>> # }
1405
1414
  >>> # }
1415
+ >>> # },
1416
+ >>> # "disabled_platform": {
1417
+ >>> # "status": "disabled",
1418
+ >>> # "enabled": False,
1419
+ >>> # "bots": {}
1406
1420
  >>> # }
1407
1421
  >>> # }
1408
1422
  >>> # }
1409
1423
  """
1424
+ from .config import parse_bool_config
1425
+
1410
1426
  adapters_summary = {}
1411
1427
  for platform_name in self._adapters:
1412
1428
  adapter_instance = self._adapters[platform_name]
@@ -1417,9 +1433,20 @@ class AdapterManager(ManagerBase):
1417
1433
 
1418
1434
  adapters_summary[platform_name] = {
1419
1435
  "status": adapter_status,
1436
+ "enabled": self.is_enabled(platform_name),
1420
1437
  "bots": dict(self._bots.get(platform_name, {})),
1421
1438
  }
1422
1439
 
1440
+ # 补充配置中存在但未注册的适配器(被禁用的适配器),方便管理界面显示并开启
1441
+ config_status = config.getConfig(CONFIG_KEY_ADAPTER_STATUS, {})
1442
+ for platform_name in config_status:
1443
+ if platform_name not in adapters_summary:
1444
+ adapters_summary[platform_name] = {
1445
+ "status": "disabled",
1446
+ "enabled": parse_bool_config(config_status[platform_name]),
1447
+ "bots": {},
1448
+ }
1449
+
1423
1450
  return {"adapters": adapters_summary}
1424
1451
 
1425
1452
  # ==================== 工具方法 ====================
@@ -119,7 +119,7 @@ class AdapterManager(ManagerBase):
119
119
  注册新平台适配器(仅当平台不存在时注册)
120
120
 
121
121
  :param platform: 平台名称
122
- :param enabled: [bool] 是否启用适配器
122
+ :param enabled: [bool] 是否启用适配器 (默认: True,新适配器默认启用)
123
123
  :return: [bool] 操作是否成功
124
124
  """
125
125
  ...
@@ -143,7 +143,7 @@ class AdapterManager(ManagerBase):
143
143
  1. 适配器在配置文件中(ErisPulse.adapters.status.{platform} 存在)
144
144
  2. 配置值为启用状态
145
145
 
146
- 如果适配器未在配置中,返回 False
146
+ 如果适配器未在配置中,默认启用并自动写入配置
147
147
  {!--< /tips >!--}
148
148
  """
149
149
  ...
@@ -174,6 +174,8 @@ class AdapterManager(ManagerBase):
174
174
  """
175
175
  列出所有平台适配器状态
176
176
 
177
+ 合并配置项与已注册适配器,确保禁用适配器也可见。
178
+
177
179
  :return: {平台名: 是否启用} 字典
178
180
  """
179
181
  ...
@@ -298,6 +300,7 @@ class AdapterManager(ManagerBase):
298
300
  获取适配器与Bot的完整状态摘要
299
301
 
300
302
  返回所有适配器的运行状态及各适配器下的Bot状态,便于WebUI展示。
303
+ 包含已禁用适配器以便于管理。
301
304
 
302
305
  :return: 状态摘要字典
303
306
 
@@ -314,6 +317,11 @@ class AdapterManager(ManagerBase):
314
317
  >>> # "info": {"nickname": "MyBot"}
315
318
  >>> # }
316
319
  >>> # }
320
+ >>> # },
321
+ >>> # "disabled_platform": {
322
+ >>> # "status": "disabled",
323
+ >>> # "enabled": False,
324
+ >>> # "bots": {}
317
325
  >>> # }
318
326
  >>> # }
319
327
  >>> # }
ErisPulse/Core/module.py CHANGED
@@ -451,7 +451,7 @@ class ModuleManager(ManagerBase):
451
451
 
452
452
  # ==================== 模块配置管理 ====================
453
453
 
454
- def _config_register(self, module_name: str, enabled: bool = False) -> bool:
454
+ def _config_register(self, module_name: str, enabled: bool = True) -> bool:
455
455
  """
456
456
  注册新模块信息
457
457
 
@@ -459,7 +459,7 @@ class ModuleManager(ManagerBase):
459
459
  此方法仅供内部使用
460
460
 
461
461
  :param module_name: 模块名称
462
- :param enabled: 是否启用模块 (默认: False)
462
+ :param enabled: 是否启用模块 (默认: True,新模块默认启用)
463
463
  :return: 操作是否成功
464
464
  """
465
465
  existing = config.getConfig(CONFIG_KEY_MODULE_STATUS_OF.format(module_name))
@@ -490,16 +490,17 @@ class ModuleManager(ManagerBase):
490
490
  1. 模块在配置文件中(ErisPulse.modules.status.{module_name} 存在)
491
491
  2. 配置值为启用状态
492
492
 
493
- 如果模块未在配置中,返回 False
493
+ 如果模块未在配置中,默认启用并自动写入配置
494
494
  {!--< /tips >!--}
495
495
  """
496
496
  from .config import parse_bool_config
497
497
 
498
498
  status = config.getConfig(CONFIG_KEY_MODULE_STATUS_OF.format(module_name))
499
499
 
500
- # 模块未在配置中,返回 False
500
+ # 模块未在配置中,默认启用并写入配置
501
501
  if status is None:
502
- return False
502
+ config.setConfig(CONFIG_KEY_MODULE_STATUS_OF.format(module_name), True)
503
+ return True
503
504
 
504
505
  # 解析配置值
505
506
  return parse_bool_config(status)
@@ -641,9 +642,16 @@ class ModuleManager(ManagerBase):
641
642
  """
642
643
  列出所有模块状态
643
644
 
645
+ 合并配置项与已注册模块,确保禁用模块也可见。
646
+
644
647
  :return: [dict[str, bool]] {模块名: 是否启用} 字典
645
648
  """
646
- return config.getConfig(CONFIG_KEY_MODULES_STATUS, {})
649
+ items = dict(config.getConfig(CONFIG_KEY_MODULES_STATUS, {}))
650
+ # 补充已在管理器中注册但配置中不存在的模块
651
+ for name in self._module_classes:
652
+ if name not in items:
653
+ items[name] = self.is_enabled(name)
654
+ return items
647
655
 
648
656
  def get_info(self, module_name: str) -> dict | None:
649
657
  """
@@ -661,7 +669,8 @@ class ModuleManager(ManagerBase):
661
669
  """
662
670
  获取模块的完整状态摘要
663
671
 
664
- 便于WebUI展示所有模块的注册、加载和启用状态。
672
+ 便于WebUI展示所有模块的注册、加载和启用状态,
673
+ 包含已禁用模块以便于管理。
665
674
 
666
675
  :return: 状态摘要字典
667
676
 
@@ -673,10 +682,17 @@ class ModuleManager(ManagerBase):
673
682
  >>> # "status": "loaded",
674
683
  >>> # "enabled": True,
675
684
  >>> # "is_base_module": True
685
+ >>> # },
686
+ >>> # "DisabledModule": {
687
+ >>> # "status": "disabled",
688
+ >>> # "enabled": False,
689
+ >>> # "is_base_module": None
676
690
  >>> # }
677
691
  >>> # }
678
692
  >>> # }
679
693
  """
694
+ from .config import parse_bool_config
695
+
680
696
  modules_summary = {}
681
697
  for name in self._module_classes:
682
698
  module_class = self._module_classes[name]
@@ -685,6 +701,17 @@ class ModuleManager(ManagerBase):
685
701
  "enabled": self.is_enabled(name),
686
702
  "is_base_module": self._is_subclass(module_class, BaseModule),
687
703
  }
704
+
705
+ # 补充配置中存在但未加载的模块(被禁用的模块),方便管理界面显示并开启
706
+ config_status = config.getConfig(CONFIG_KEY_MODULES_STATUS, {})
707
+ for name in config_status:
708
+ if name not in modules_summary:
709
+ modules_summary[name] = {
710
+ "status": "disabled",
711
+ "enabled": parse_bool_config(config_status[name]),
712
+ "is_base_module": None,
713
+ }
714
+
688
715
  return {"modules": modules_summary}
689
716
 
690
717
  # 兼容性方法 - 保持向后兼容
ErisPulse/Core/module.pyi CHANGED
@@ -174,7 +174,7 @@ class ModuleManager(ManagerBase):
174
174
  1. 模块在配置文件中(ErisPulse.modules.status.{module_name} 存在)
175
175
  2. 配置值为启用状态
176
176
 
177
- 如果模块未在配置中,返回 False
177
+ 如果模块未在配置中,默认启用并自动写入配置
178
178
  {!--< /tips >!--}
179
179
  """
180
180
  ...
@@ -198,6 +198,8 @@ class ModuleManager(ManagerBase):
198
198
  """
199
199
  列出所有模块状态
200
200
 
201
+ 合并配置项与已注册模块,确保禁用模块也可见。
202
+
201
203
  :return: [dict[str, bool]] {模块名: 是否启用} 字典
202
204
  """
203
205
  ...
@@ -216,7 +218,8 @@ class ModuleManager(ManagerBase):
216
218
  """
217
219
  获取模块的完整状态摘要
218
220
 
219
- 便于WebUI展示所有模块的注册、加载和启用状态。
221
+ 便于WebUI展示所有模块的注册、加载和启用状态,
222
+ 包含已禁用模块以便于管理。
220
223
 
221
224
  :return: 状态摘要字典
222
225
 
@@ -228,6 +231,11 @@ class ModuleManager(ManagerBase):
228
231
  >>> # "status": "loaded",
229
232
  >>> # "enabled": True,
230
233
  >>> # "is_base_module": True
234
+ >>> # },
235
+ >>> # "DisabledModule": {
236
+ >>> # "status": "disabled",
237
+ >>> # "enabled": False,
238
+ >>> # "is_base_module": None
231
239
  >>> # }
232
240
  >>> # }
233
241
  >>> # }
ErisPulse/Core/storage.py CHANGED
@@ -517,6 +517,24 @@ class StorageManager(BaseStorage):
517
517
  ):
518
518
  conn.commit()
519
519
 
520
+ def _open_connection(self) -> sqlite3.Connection:
521
+ """
522
+ {!--< internal-use >!--}
523
+ 打开一个新的 SQLite 连接并应用标准 PRAGMA
524
+
525
+ - journal_mode=WAL:持久化在数据库文件头,重复设置无副作用
526
+ - synchronous=NORMAL:per-connection 设置,必须在每个新连接上重新应用。
527
+ 此前仅在 _init_db 的临时连接上设置过一次,而该 PRAGMA 不跨连接持久化,
528
+ 导致事务外的 get/set 等高频操作实际回落到默认的 synchronous=FULL
529
+ (每次 commit 都触发 fsync),与文档宣称的 WAL+NORMAL 提速不符。
530
+
531
+ :return: 已应用标准 PRAGMA 的 sqlite3.Connection
532
+ """
533
+ conn = sqlite3.connect(self.db_path)
534
+ conn.execute(SQLITE_JOURNAL_MODE)
535
+ conn.execute(SQLITE_SYNCHRONOUS_MODE)
536
+ return conn
537
+
520
538
  @contextmanager
521
539
  def _get_connection(self) -> sqlite3.Connection: # type: ignore
522
540
  """
@@ -524,7 +542,7 @@ class StorageManager(BaseStorage):
524
542
  获取数据库连接(支持事务)
525
543
 
526
544
  如果在事务中,返回事务的连接
527
- 否则创建新连接
545
+ 否则新建一个应用了标准 PRAGMA 的短生命周期连接
528
546
 
529
547
  :return: sqlite3.Connection 数据库连接
530
548
  """
@@ -536,7 +554,7 @@ class StorageManager(BaseStorage):
536
554
  conn = self._local.transaction_conn
537
555
  should_close = False
538
556
  else:
539
- conn = sqlite3.connect(self.db_path)
557
+ conn = self._open_connection()
540
558
  should_close = True
541
559
 
542
560
  try:
@@ -574,11 +592,8 @@ class StorageManager(BaseStorage):
574
592
  pass # 如果无法创建目录,则继续尝试连接数据库
575
593
 
576
594
  try:
577
- conn = sqlite3.connect(self.db_path)
578
-
579
- # 启用WAL模式提高并发性能
580
- conn.execute(SQLITE_JOURNAL_MODE)
581
- conn.execute(SQLITE_SYNCHRONOUS_MODE)
595
+ # 连接创建统一走 _open_connection,确保 WAL/synchronous PRAGMA 一致应用
596
+ conn = self._open_connection()
582
597
 
583
598
  cursor = conn.cursor()
584
599
  cursor.execute("""
@@ -1195,7 +1210,7 @@ class StorageManager(BaseStorage):
1195
1210
 
1196
1211
  :return: 事务对象
1197
1212
  """
1198
- self.conn = sqlite3.connect(self.storage_manager.db_path)
1213
+ self.conn = self.storage_manager._open_connection()
1199
1214
  self.cursor = self.conn.cursor()
1200
1215
  self.cursor.execute("BEGIN TRANSACTION")
1201
1216
  # 将连接存储到线程本地存储,供其他方法复用
@@ -181,13 +181,15 @@ class BaseLoader(ABC):
181
181
 
182
182
  {!--< internal-use >!--}
183
183
  内部方法,用于获取配置状态
184
+ 默认情况下(无配置),返回 True(启用)并写入配置
184
185
  {!--< /internal-use >!--}
185
186
  """
186
187
  config_key = f"{self._config_prefix}.status.{name}"
187
188
  status = config.getConfig(config_key)
188
189
 
189
190
  if status is None:
190
- return False
191
+ config.setConfig(config_key, True)
192
+ return True
191
193
 
192
194
  if isinstance(status, str):
193
195
  return status.lower() not in ("false", "0", "no", "off")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.5.2.dev2
3
+ Version: 2.5.2.dev3
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Project-URL: Homepage, https://github.com/ErisPulse/ErisPulse
6
6
  Project-URL: Documentation, https://www.erisdev.com#docs
@@ -60,8 +60,8 @@ ErisPulse/CLI/utils/package_manager.py,sha256=Br-ByZAGiP0N029A-Q88lPlaFvD5V6yUlh
60
60
  ErisPulse/CLI/utils/package_manager.pyi,sha256=XIWEy6RZ_yGVKDY7B7XQmtTolL5Ahnsp1JD76cJd5-o,14402
61
61
  ErisPulse/Core/__init__.py,sha256=i5IF96PNJ0KaWWjU6pTr_kdhxjkppj8OMyicC8ybECs,3105
62
62
  ErisPulse/Core/__init__.pyi,sha256=00koZk8zZivTvTYVUiuLGqSTOkKArf3P1xJOxBaVov0,1194
63
- ErisPulse/Core/adapter.py,sha256=KhwbHc-4ht975Bigcrg5D7hSPGXP5Mb9AoZgcNYljb0,63448
64
- ErisPulse/Core/adapter.pyi,sha256=9-BuE-gVISNwc47ZkFOHxcwl6Ncv-YasiTndG_Ql-18,15785
63
+ ErisPulse/Core/adapter.py,sha256=vVkECpnPr0DiBbvK9R3HjSMCNfNJAlkaJRzSibskqlo,64798
64
+ ErisPulse/Core/adapter.pyi,sha256=gg24wCD3hRNw8qxOxV3tELMYcn3VDE1s__OYW1dNgNw,16188
65
65
  ErisPulse/Core/client.py,sha256=RL6srGFHTEP0V6UwzaXFH2yuyMI1joqKyHMd3IRPRfU,28437
66
66
  ErisPulse/Core/client.pyi,sha256=N77P-XfmNAR5NpQ0V_BBhmSuTKc5e9-UQT7JSeJd5gE,12980
67
67
  ErisPulse/Core/config.py,sha256=81io99bwXPioEom3pnrZkL3vqJ8EXh8ccVntcc7RfFk,13221
@@ -72,11 +72,11 @@ ErisPulse/Core/lifecycle.py,sha256=Ar8X1csC2HnHQyh3usvUeW_KTwAAzfgjC-wX62cG31E,1
72
72
  ErisPulse/Core/lifecycle.pyi,sha256=uv07_NniRXuHBT3rLINOTvUmUJMGYEfhlTuTQgBeIOE,7368
73
73
  ErisPulse/Core/logger.py,sha256=FBRtibdYixssvGETaaKSp0RzBPgaZPF7fbBaMiHXArM,25826
74
74
  ErisPulse/Core/logger.pyi,sha256=Q3-4WwGv07Tt5zW_bYfZW2sWQhP2wEIAsroYvyLVGGA,12271
75
- ErisPulse/Core/module.py,sha256=tqUeFIFni2goSgoyszuKVSkCEmkp484iP-20cYEl6kk,24008
76
- ErisPulse/Core/module.pyi,sha256=SVk8C5hcbAngp7BstVHsKEe4fpIe0lPd1cb8E8qnK4Q,7631
75
+ ErisPulse/Core/module.py,sha256=duvdD9iy-MHp_KOH4S38APr8UYheT1k74gTk928JvyY,25238
76
+ ErisPulse/Core/module.pyi,sha256=N3MQaukTVd_ngxp-TnyBFXw2EYuI5ewiUKO2JvWIeOU,7992
77
77
  ErisPulse/Core/router.py,sha256=oenxENhcamPdfKgvZm6xLQX9AyjBg1yLe7Ok-5WtPyE,95570
78
78
  ErisPulse/Core/router.pyi,sha256=Xje07b4enA1Nz3QwnpPBKRkLvzdBwf9h-sJfWcv6hgY,23515
79
- ErisPulse/Core/storage.py,sha256=16dJ-NkpeJHfZjewph5U5HzglFRrDAHGX-0mKMSNgDM,48260
79
+ ErisPulse/Core/storage.py,sha256=-nx_UOc2j1PoA09RRATFNbLP61duVA78q1ww8wfeDno,49112
80
80
  ErisPulse/Core/storage.pyi,sha256=TzBwYQyuqGO6INK3YUyq9kO9bfIxRpcssrZtScsyQoU,14113
81
81
  ErisPulse/Core/Bases/__init__.py,sha256=D8VESDAg05aYslAl5l9ZjfT_9SYudecNydkbAD4oofI,1086
82
82
  ErisPulse/Core/Bases/__init__.pyi,sha256=fuG76BmANq66fM-uixDpneuZaeyvq-I0xay8MWmKH-E,714
@@ -154,7 +154,7 @@ ErisPulse/loaders/strict.py,sha256=7BGYpwkRZdTs4qi8cTCeBcM_Hf9nDR7dEM8TLkHPNqQ,9
154
154
  ErisPulse/loaders/strict.pyi,sha256=xuU8uvlBs0Pgju1BKK4dRlgU-JgwJ2nqnPicBSKXUM8,3724
155
155
  ErisPulse/loaders/bases/__init__.py,sha256=84YRT7ZYkGh7wgSFidhbeuhsheSLmWPqyfLQJH_F-rw,57
156
156
  ErisPulse/loaders/bases/__init__.pyi,sha256=lQ_0NeYF-2vNrwihouTh-At1g7eNi1ePH4x7vZ4uSwQ,155
157
- ErisPulse/loaders/bases/loader.py,sha256=PVCg0uRryblvX00FXvIT8rxVZay93dBt6MxnCKJR4kM,5908
157
+ ErisPulse/loaders/bases/loader.py,sha256=SBrgk5kIbd5u7-i-nQzdySGDVlo6QsCfgijcUUAbG90,6034
158
158
  ErisPulse/loaders/bases/loader.pyi,sha256=cqFyr7xaFHn4E3nYuF2eUfBfjsq9eU-u2ReyCHjMHQo,550
159
159
  ErisPulse/runtime/__init__.py,sha256=AhemmsI2UczBVIL6OUAd8bMXwwUUnGOPLIIIPqH7qws,1506
160
160
  ErisPulse/runtime/__init__.pyi,sha256=BMd5S3kPzsix4v5eCSfJxMbGWppTUE7XtUILLXwZXvk,857
@@ -171,8 +171,8 @@ ErisPulse/web_status/5xx.png,sha256=LeRLnGLNylELJtrXnHWv7mcjVotzg1Wj8wR5iY483kc,
171
171
  ErisPulse/web_status/__init__.py,sha256=uZv27Nwzx7T-V-h_YvH6jGH-W_5Wnno50BMu_54Y6EQ,395
172
172
  ErisPulse/web_status/__init__.pyi,sha256=hXdNh3Kfmng9B86xMuH9B0MxCJxVVuvmSWWnSNS2WdA,461
173
173
  ErisPulse/web_status/unknow.png,sha256=-yIy-rS_GxpI-8IxHN8b46Q3G5Fl2WUDLDQL-6lHtHI,314934
174
- erispulse-2.5.2.dev2.dist-info/METADATA,sha256=CBCeBqpeprzG0oW4deBtYGhtflYhbKHfEtn-xnNtoe0,23098
175
- erispulse-2.5.2.dev2.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
176
- erispulse-2.5.2.dev2.dist-info/entry_points.txt,sha256=NiOwT6-XQ7KIH1r6J8odjRO-uaKHfr_Vz_UIG96EWXg,187
177
- erispulse-2.5.2.dev2.dist-info/licenses/LICENSE,sha256=c2XbbDpZFu8YVuWV5mBZnGxE1IlYyelE1qW9TJADHV4,1071
178
- erispulse-2.5.2.dev2.dist-info/RECORD,,
174
+ erispulse-2.5.2.dev3.dist-info/METADATA,sha256=4sUyuZVpHhwZ7w2-T-SHq0VNmoTsXZ8ujhv19gIvWUw,23098
175
+ erispulse-2.5.2.dev3.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
176
+ erispulse-2.5.2.dev3.dist-info/entry_points.txt,sha256=NiOwT6-XQ7KIH1r6J8odjRO-uaKHfr_Vz_UIG96EWXg,187
177
+ erispulse-2.5.2.dev3.dist-info/licenses/LICENSE,sha256=c2XbbDpZFu8YVuWV5mBZnGxE1IlYyelE1qW9TJADHV4,1071
178
+ erispulse-2.5.2.dev3.dist-info/RECORD,,