round-12: ruff hygiene on migration code (import sort, narrow store except)

- test_chv_muse_round12.py: drop unused socket/time imports, drop
  unnecessary sys.path.insert (P3 pattern needs none), sort method-local
  imports (activity/capabilities, approval_card/channel/sentinel)
- audit_trail.py: single-line method-local imports (I001)
- swarm.py / presentation.py / browser_tasks.py: store-path fail-safe
  except narrowed from bare Exception to (sqlite3.Error, OSError)
  (DB/file failures only); transport spawn/ping/close handlers in
  browser_tasks.py deliberately stay bare Exception (arbitrary
  transport errors must map to failed/False/close_error)
- NOT fixed (pre-existing style, left as-is): UP031 % formatting
  (used throughout the codebase incl. the copied lines), BLE001/
  TRY004 in untouched code, F401 atomic_write + RUF059 swarm
  (P7/P8 pre-existing)
This commit is contained in:
host committed 2026-11-07 00:57:05 +00:00
1 parent da8d0c29fd
commit 414e245752
5 files changed
+21 -24

No files matched your search

+2 -4
View File
@@ -338,8 +338,7 @@ class StoreAuditTrail:
def _open_store(self): def _open_store(self):
"""打开宿主级状态库(每次调用新建连接,用完即关)。""" """打开宿主级状态库(每次调用新建连接,用完即关)。"""
from cloud.chv.app_state import AppStateStore, \ from cloud.chv.app_state import AppStateStore, host_state_db_path
host_state_db_path
store = AppStateStore(host_state_db_path(self.state_dir)) store = AppStateStore(host_state_db_path(self.state_dir))
store.open() store.open()
return store return store
@@ -453,8 +452,7 @@ def migrate_jsonl_to_store(path: str, state_dir: str) -> int:
raise ValueError("JSONL 审计链校验失败,拒绝迁移:行 %d" raise ValueError("JSONL 审计链校验失败,拒绝迁移:行 %d"
% bad) % bad)
rows = trail._read_all() rows = trail._read_all()
from cloud.chv.app_state import AppStateStore, \ from cloud.chv.app_state import AppStateStore, host_state_db_path
host_state_db_path
store = AppStateStore(host_state_db_path(state_dir)) store = AppStateStore(host_state_db_path(state_dir))
store.open() store.open()
try: try:
+4 -3
View File
@@ -23,6 +23,7 @@ browser-tasks.json 首次加载时自动导入并改名 ``.migrated``;
from __future__ import annotations from __future__ import annotations
import json import json
import sqlite3
import logging import logging
import os import os
import time import time
@@ -85,7 +86,7 @@ def _load_registry(state_dir: str) -> dict:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
raw = store.kv_get(_KV_NAMESPACE, _KV_KEY) raw = store.kv_get(_KV_NAMESPACE, _KV_KEY)
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_browser_tasks_store_unreadable " _LOGGER.warning("chv_browser_tasks_store_unreadable "
"state_dir=%s", state_dir) "state_dir=%s", state_dir)
return {"instances": {}} return {"instances": {}}
@@ -124,7 +125,7 @@ def _import_legacy(state_dir: str) -> dict:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data)) store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data))
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_browser_tasks_import_failed " _LOGGER.warning("chv_browser_tasks_import_failed "
"state_dir=%s", state_dir) "state_dir=%s", state_dir)
return data return data
@@ -140,7 +141,7 @@ def _save_registry(state_dir: str, data: dict) -> None:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data)) store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data))
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_browser_tasks_save_failed " _LOGGER.warning("chv_browser_tasks_save_failed "
"state_dir=%s", state_dir) "state_dir=%s", state_dir)
+4 -3
View File
@@ -24,6 +24,7 @@ notification-ledger.json 首次加载时自动导入并改名
from __future__ import annotations from __future__ import annotations
import json import json
import sqlite3
import logging import logging
import os import os
import time import time
@@ -102,7 +103,7 @@ def _load_ledger(state_dir: str) -> dict:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
raw = store.kv_get(_KV_NAMESPACE, _KV_KEY) raw = store.kv_get(_KV_NAMESPACE, _KV_KEY)
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_ledger_store_unreadable state_dir=%s", _LOGGER.warning("chv_ledger_store_unreadable state_dir=%s",
state_dir) state_dir)
return {"notified": {}} return {"notified": {}}
@@ -140,7 +141,7 @@ def _import_legacy(state_dir: str) -> dict:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data)) store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data))
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_ledger_import_failed state_dir=%s", _LOGGER.warning("chv_ledger_import_failed state_dir=%s",
state_dir) state_dir)
return data return data
@@ -160,7 +161,7 @@ def _save_ledger(state_dir: str, data: dict) -> None:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data)) store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data))
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_ledger_save_failed state_dir=%s", state_dir) _LOGGER.warning("chv_ledger_save_failed state_dir=%s", state_dir)
+4 -3
View File
@@ -21,6 +21,7 @@ orphans 同款口径),下次成功保存即覆盖自愈。
from __future__ import annotations from __future__ import annotations
import json import json
import sqlite3
import logging import logging
import os import os
import time import time
@@ -79,7 +80,7 @@ def _load_registry(state_dir: str) -> dict:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
raw = store.kv_get(_KV_NAMESPACE, _KV_KEY) raw = store.kv_get(_KV_NAMESPACE, _KV_KEY)
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_swarm_registry_store_unreadable " _LOGGER.warning("chv_swarm_registry_store_unreadable "
"state_dir=%s", state_dir) "state_dir=%s", state_dir)
return _empty_registry() return _empty_registry()
@@ -128,7 +129,7 @@ def _import_legacy(state_dir: str) -> dict:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data)) store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data))
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_swarm_registry_import_failed " _LOGGER.warning("chv_swarm_registry_import_failed "
"state_dir=%s", state_dir) "state_dir=%s", state_dir)
return data return data
@@ -148,7 +149,7 @@ def _save_registry(state_dir: str, data: dict) -> None:
try: try:
with _open_store(state_dir) as store: with _open_store(state_dir) as store:
store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data)) store.kv_put(_KV_NAMESPACE, _KV_KEY, json.dumps(data))
except Exception: except (sqlite3.Error, OSError):
_LOGGER.warning("chv_swarm_registry_save_failed " _LOGGER.warning("chv_swarm_registry_save_failed "
"state_dir=%s", state_dir) "state_dir=%s", state_dir)
+7 -11
View File
@@ -15,18 +15,14 @@
import importlib.util import importlib.util
import json import json
import os import os
import socket
import sqlite3 import sqlite3
import subprocess import subprocess
import sys
import tempfile import tempfile
import threading import threading
import time
import unittest import unittest
from pathlib import Path from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[2] REPO_ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(REPO_ROOT))
from cloud.chv.app_state import AppStateStore, host_state_db_path from cloud.chv.app_state import AppStateStore, host_state_db_path
from cloud.chv.audit_trail import ( from cloud.chv.audit_trail import (
@@ -34,16 +30,16 @@ from cloud.chv.audit_trail import (
StoreAuditTrail, StoreAuditTrail,
migrate_jsonl_to_store, migrate_jsonl_to_store,
) )
from cloud.chv.swarm import (
create_swarm,
get_swarm,
)
from cloud.chv.presentation import NotificationLedger
from cloud.chv.browser_tasks import ( from cloud.chv.browser_tasks import (
BrowserTransport, BrowserTransport,
create_instance, create_instance,
get_instance, get_instance,
) )
from cloud.chv.presentation import NotificationLedger
from cloud.chv.swarm import (
create_swarm,
get_swarm,
)
TOKEN = "fake-token-123" TOKEN = "fake-token-123"
T0 = 1700000000.0 T0 = 1700000000.0
@@ -471,12 +467,12 @@ class P12DictContractTest(unittest.TestCase):
"""P12 接线用真实 P3/P5 代码,不用替身。""" """P12 接线用真实 P3/P5 代码,不用替身。"""
def test_approval_card_from_real_p3_queue(self): def test_approval_card_from_real_p3_queue(self):
from cloud.chv.sentinel import ApprovalQueue, EgressRequest
from cloud.chv.approval_card import ( from cloud.chv.approval_card import (
build_approval_card, build_approval_card,
card_matches_channel, card_matches_channel,
) )
from cloud.chv.approval_channel import request_approval from cloud.chv.approval_channel import request_approval
from cloud.chv.sentinel import ApprovalQueue, EgressRequest
queue = ApprovalQueue(clock=lambda: T0) queue = ApprovalQueue(clock=lambda: T0)
req = EgressRequest("gitea", "POST", "https", req = EgressRequest("gitea", "POST", "https",
"gitea.tose.top", 443, "gitea.tose.top", 443,
@@ -496,8 +492,8 @@ class P12DictContractTest(unittest.TestCase):
card_matches_channel(card, channel.payload())) card_matches_channel(card, channel.payload()))
def test_permission_registry_from_real_p5_describe(self): def test_permission_registry_from_real_p5_describe(self):
from cloud.chv.capabilities import CapabilityIssuer
from cloud.chv.activity import PermissionRegistry from cloud.chv.activity import PermissionRegistry
from cloud.chv.capabilities import CapabilityIssuer
issuer = CapabilityIssuer(clock=lambda: T0) issuer = CapabilityIssuer(clock=lambda: T0)
cap = issuer.issue( cap = issuer.issue(
"one-shot", "gitea", "gitea.tose.top", ["GET"], "one-shot", "gitea", "gitea.tose.top", ["GET"],