cloud: worker dispatch, DB abstraction, packaging 0.1.0, repo CI workflow

This commit is contained in:
host committed 2026-10-26 01:44:15 +08:00
1 parent 076ba01c74
commit 07ef869267
13 files changed
+1916 -9

No files matched your search

+20 -3
View File
@@ -29,6 +29,8 @@ audit_log 三张表;本 server 用 projects/tasks 两张表,表名不冲突
启动:
python3 -m cloud.server [--host 127.0.0.1] [--port 8765] [--db <路径>]
后端由 CLOUD_DB_BACKEND 选(sqlite 默认;postgres 目前只是骨架,
驱动缺失时启动即明确报错,见 cloud/db.py)。
测试用 create_server(db_path, host, port) 只返回 ThreadingHTTPServer
实例,不自动 serve。
@@ -47,6 +49,7 @@ from urllib.parse import parse_qs, urlparse
from cloud.auth import AuthStore
from cloud.cost import CostStore
from cloud.db import connect as _db_connect
from cloud.db import create_database as _create_database
from cloud.kb import KBStore
from cloud.memory import MemoryStore
from cloud.oauth import (
@@ -1157,9 +1160,19 @@ class CloudControlPlaneHandler(BaseHTTPRequestHandler):
self._send_json(200, parse_slack_command(text))
def create_server(db_path, host="127.0.0.1", port=8765):
"""建 server 实例(不自动 serve,供测试与 __main__ 共用)。"""
def create_server(db_path, host="127.0.0.1", port=8765, backend=None):
"""建 server 实例(不自动 serve,供测试与 __main__ 共用)。
backend 为 None 时读环境变量 CLOUD_DB_BACKEND,未设则默认
sqlite(旧行为不变)。选 postgres 时在建表之前就调用工厂:
驱动缺失则初始化即抛明确错误(文案含 psycopg),启动即失败,
绝不在运行时中途才炸、也绝不静默回落到 SQLite;Postgres
目前只是骨架,即使驱动已装也尚未接通,见 cloud/db.py 与 README。
"""
db_path = str(db_path)
# 后端校验必须在 init_db 之前:postgres 骨架不能先建 SQLite 表
# 再失败,那会假装 sqlite 已可用。
_create_database(backend=backend, db_path=db_path)
init_db(db_path)
# 确保 AuthStore 的三张表也存在,后续请求才能直接查 project_members。
with _auth_store(db_path):
@@ -1175,8 +1188,12 @@ def main(argv=None):
parser.add_argument("--host", default="127.0.0.1")
parser.add_argument("--port", type=int, default=8765)
parser.add_argument("--db", default="cloud-control-plane.db")
parser.add_argument("--db-backend", default=None,
help="sqlite(默认)或 postgres;未给则读 "
"CLOUD_DB_BACKEND 环境变量")
args = parser.parse_args(argv)
server = create_server(args.db, args.host, args.port)
server = create_server(args.db, args.host, args.port,
backend=args.db_backend)
print(
"cloud-control-plane listening on %s:%d db=%s"
% (args.host, server.server_address[1], args.db),