Browser-back / ota_db.py
Nrighton233j
Add OTA update support (adapted from Messenger backend)
be03b51
Raw
History Blame Contribute Delete
2.19 kB
"""
ota_db.py — minimal SQLite store for the single "latest OTA update" record.
Browser-back has no database otherwise (accounts live on the Messenger
backend, see auth.py). This mirrors the exact schema/functions from the
Messenger backend's proven OTA implementation, scoped down to just what
Browser-back needs.
"""
import sqlite3
import time
import os
DB_PATH = os.environ.get("OTA_DB_PATH", "ota.db")
def get_conn():
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
return conn
def init_db():
conn = get_conn()
conn.execute("""
CREATE TABLE IF NOT EXISTS ota_update (
id INTEGER PRIMARY KEY,
update_id TEXT NOT NULL,
runtime_version TEXT NOT NULL,
launch_asset_json TEXT NOT NULL,
assets_json TEXT NOT NULL,
notes TEXT,
created_at INTEGER NOT NULL
)
""")
conn.commit()
conn.close()
def set_latest_ota_update(update_id, runtime_version, launch_asset_json, assets_json, notes=None):
"""Always overwrites the single row (id=1) — there's only ever one
'latest' OTA update, same pattern as the Messenger backend uses."""
conn = get_conn()
try:
conn.execute("""
INSERT INTO ota_update (id, update_id, runtime_version, launch_asset_json, assets_json, notes, created_at)
VALUES (1, ?, ?, ?, ?, ?, ?)
ON CONFLICT(id) DO UPDATE SET update_id=excluded.update_id, runtime_version=excluded.runtime_version,
launch_asset_json=excluded.launch_asset_json, assets_json=excluded.assets_json,
notes=excluded.notes, created_at=excluded.created_at
""", (update_id, runtime_version, launch_asset_json, assets_json, notes, int(time.time())))
conn.commit()
return True
finally:
conn.close()
def get_latest_ota_update():
conn = get_conn()
try:
row = conn.execute("""
SELECT update_id, runtime_version, launch_asset_json, assets_json, notes, created_at
FROM ota_update WHERE id = 1
""").fetchone()
return dict(row) if row else None
finally:
conn.close()