secondme-api / scripts /migrate_add_instance_password.py
Gemini
feat: add detailed logging
01d5a5d
raw
history blame
3.77 kB
#!/usr/bin/env python
"""
Database Migration Script - Add instance_password column to tables with instance_id
This script adds the instance_password column to tables that have instance_id but not instance_password in the SQLite database.
It should be run once to update the database schema.
"""
import os
import sqlite3
import logging
from pathlib import Path
import sys
# Add project root to path
project_root = str(Path(__file__).parent.parent)
sys.path.insert(0, project_root)
from lpm_kernel.configs.config import Config
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def get_db_path():
"""Get the database path from environment or use default"""
config = Config.from_env()
db_path = config.get("SQLITE_DB_PATH", os.path.join(project_root, "data", "sqlite", "lpm.db"))
return db_path
def migrate_database():
"""Add instance_password column to tables with instance_id"""
db_path = get_db_path()
logger.info(f"Using database at: {db_path}")
# Check if database file exists
if not os.path.exists(db_path):
logger.error(f"Database file not found at {db_path}")
return False
# Default password to use
default_password = "mindverse666"
try:
# Connect to the database
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# List all tables
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
tables = cursor.fetchall()
logger.info(f"Tables in database: {[table[0] for table in tables]}")
# Check for any table that might have instance_id but not instance_password
for table_name in [table[0] for table in tables]:
# Get columns for this table
cursor.execute(f"PRAGMA table_info({table_name})")
table_columns = cursor.fetchall()
table_column_names = [column[1] for column in table_columns]
# If table has instance_id but not instance_password
if "instance_id" in table_column_names and "instance_password" not in table_column_names:
logger.info(f"Table {table_name} has instance_id but not instance_password")
logger.info(f"Adding instance_password column to {table_name} table")
cursor.execute(f"ALTER TABLE {table_name} ADD COLUMN instance_password VARCHAR(255) DEFAULT '{default_password}'")
logger.info(f"Added instance_password column to {table_name} table with default value '{default_password}'")
# Update existing rows to set the default password where instance_id is not null
cursor.execute(f"UPDATE {table_name} SET instance_password = '{default_password}' WHERE instance_id IS NOT NULL AND instance_password IS NULL")
updated_rows = cursor.rowcount
logger.info(f"Updated {updated_rows} rows in {table_name} with default password")
# Commit the changes
conn.commit()
logger.info("Migration completed successfully")
# Close the connection
conn.close()
return True
except sqlite3.Error as e:
logger.error(f"SQLite error: {e}")
return False
except Exception as e:
logger.error(f"Error during migration: {e}")
return False
if __name__ == "__main__":
logger.info("Starting database migration")
success = migrate_database()
if success:
logger.info("Migration completed successfully")
sys.exit(0)
else:
logger.error("Migration failed")
sys.exit(1)