release: v1.0.117 沉淀多数据源契约(SQLite 默认 + 可选 MySQL 云库)
All checks were successful
技能自动化发布 / release (push) Successful in 9s

新增 DATA_SOURCES.md、data-sources 示例与双后端 connection 骨架;CLI 与宿主 UI 可读写同一库。要求匠厂 Host ≥ 6.9.28。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-26 16:39:13 +08:00
parent 78c24a515d
commit 166007b460
24 changed files with 451 additions and 20 deletions

49
tests/test_db_backend.py Normal file
View File

@@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
"""数据库后端选择:默认 SQLite,DSN 解析。"""
from __future__ import annotations
import os
import unittest
from _support import IsolatedDataRoot
class TestDbBackend(unittest.TestCase):
def test_resolve_backend_defaults_to_sqlite(self) -> None:
with IsolatedDataRoot():
from db.backend import resolve_backend
self.assertEqual(resolve_backend(), "sqlite")
def test_parse_mysql_dsn(self) -> None:
with IsolatedDataRoot():
from db.backend import parse_mysql_dsn
params = parse_mysql_dsn("mysql://root:secret@192.168.0.20:3306/demo_db")
self.assertEqual(params["host"], "192.168.0.20")
self.assertEqual(params["port"], 3306)
self.assertEqual(params["user"], "root")
self.assertEqual(params["password"], "secret")
self.assertEqual(params["database"], "demo_db")
def test_resolve_backend_uses_mysql_dsn_from_env(self) -> None:
with IsolatedDataRoot():
from db.backend import resolve_backend
os.environ["MYSQL_DSN"] = "mysql://u:p@127.0.0.1:3306/t"
try:
self.assertEqual(resolve_backend(), "mysql")
finally:
os.environ.pop("MYSQL_DSN", None)
def test_describe_active_store_sqlite(self) -> None:
with IsolatedDataRoot():
from db.connection import describe_active_store
info = describe_active_store()
self.assertEqual(info["backend"], "sqlite")
self.assertIn("db_path", info)
if __name__ == "__main__":
unittest.main()