d7a58e52fd
lint / lint (push) Successful in 54s
test / integration-docker (pull_request) Successful in 38s
test / unit (pull_request) Successful in 45s
test / integration-firecracker (pull_request) Successful in 3m31s
test / coverage (pull_request) Successful in 18s
test / publish-infra (pull_request) Has been skipped
tracker-policy-pr / check-pr (pull_request) Failing after 6s
Move the DbStore base (db_store), the shared schema-migration base (migrations / TableMigrations), the concrete stores (audit_store, config_store, queue_store), and StoreManager out of the package root into a bot_bottle/store/ package, so persistence lives in one place rather than scattered across the root. Callers use direct submodule imports (from bot_bottle.store.store_manager import StoreManager). Inside the moved modules the relative imports point back up to their non-store siblings (..paths, ..supervise_types) while co-moved siblings stay package-local; the flat-import fallbacks are untouched. The orchestrator's own stores (config_store, secret_store, registry) stay in orchestrator/ and repoint to the moved DbStore / TableMigrations. No behavior change; full unit suite green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
"""SQLite migration runner for bot-bottle stores."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
|
|
|
|
class TableMigrations:
|
|
"""Runs a sequential list of DDL migrations tracked by schema_key in schema_versions."""
|
|
|
|
def __init__(self, schema_key: str, migrations: list[str]) -> None:
|
|
self.schema_key = schema_key
|
|
self.migrations = migrations
|
|
|
|
def apply(self, conn: sqlite3.Connection) -> None:
|
|
conn.execute(
|
|
"""
|
|
CREATE TABLE IF NOT EXISTS schema_versions (
|
|
module TEXT PRIMARY KEY,
|
|
version INTEGER NOT NULL DEFAULT 0
|
|
)
|
|
"""
|
|
)
|
|
row = conn.execute(
|
|
"SELECT version FROM schema_versions WHERE module = ?",
|
|
(self.schema_key,),
|
|
).fetchone()
|
|
version = row[0] if row else 0
|
|
for i, sql in enumerate(self.migrations[version:], start=version + 1):
|
|
conn.execute(sql)
|
|
conn.execute(
|
|
"INSERT OR REPLACE INTO schema_versions (module, version) VALUES (?, ?)",
|
|
(self.schema_key, i),
|
|
)
|
|
|
|
|
|
__all__ = ["TableMigrations"]
|