#!/usr/bin/env python3
"""
π Preference Migration Script
This script migrates existing JSON-based user preferences to the new
unified database system, creating a single source of truth.
"""
import json
import logging
from pathlib import Path
from datetime import datetime
# Setup logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def migrate_preferences():
"""Migrate preferences from JSON to database"""
logger.info("π Starting preference migration...")
try:
# Import the unified preference manager
from unified_preference_manager import migrate_preferences_to_database
# Perform migration
success = migrate_preferences_to_database()
if success:
logger.info("β
Preferences successfully migrated to database!")
logger.info("π― Now using single source of truth for all systems")
else:
logger.warning("β οΈ Migration completed with warnings - check logs")
return success
except ImportError as e:
logger.error(f"β Cannot import unified preference manager: {e}")
logger.error("Make sure unified_preference_manager.py is available")
return False
except Exception as e:
logger.error(f"β Migration failed: {e}")
return False
def verify_migration():
"""Verify that migration was successful"""
logger.info("π Verifying migration...")
try:
from unified_preference_manager import get_user_preferences_unified
# Get preferences from unified system
preferences = get_user_preferences_unified()
if preferences and "User Preferences:" in preferences:
logger.info("β
Migration verification successful!")
logger.info("π Unified preferences loaded:")
# Show first few lines
lines = preferences.split('\n')[:10]
for line in lines:
if line.strip():
logger.info(f" {line}")
return True
else:
logger.error("β Migration verification failed - no preferences loaded")
return False
except Exception as e:
logger.error(f"β Verification failed: {e}")
return False
def cleanup_old_files():
"""Clean up old JSON preference files after successful migration"""
logger.info("π§Ή Cleaning up old preference files...")
try:
# List of old preference files to remove
old_files = [
"./data/dynamic_config/user_preferences.json",
"./data/dynamic_config/agent_metadata.json"
]
for file_path in old_files:
path = Path(file_path)
if path.exists():
# Create backup first
backup_path = path.with_suffix(f'.backup.{datetime.now().strftime("%Y%m%d_%H%M%S")}')
path.rename(backup_path)
logger.info(f"β
Backed up {file_path} to {backup_path}")
else:
logger.info(f"βΉοΈ {file_path} not found, skipping")
logger.info("β
Cleanup completed - old files backed up")
return True
except Exception as e:
logger.error(f"β Cleanup failed: {e}")
return False
def main():
"""Main migration function"""
logger.info("=" * 60)
logger.info("π USER PREFERENCES MIGRATION TO UNIFIED DATABASE")
logger.info("=" * 60)
# Step 1: Migrate preferences
logger.info("\nπ Step 1: Migrating preferences to database...")
migration_success = migrate_preferences()
if not migration_success:
logger.error("β Migration failed, stopping process")
return False
# Step 2: Verify migration
logger.info("\nπ Step 2: Verifying migration...")
verification_success = verify_migration()
if not verification_success:
logger.error("β Verification failed, migration may be incomplete")
return False
# Step 3: Cleanup old files (optional)
logger.info("\nπ§Ή Step 3: Cleaning up old files...")
cleanup_success = cleanup_old_files()
if cleanup_success:
logger.info("β
Migration process completed successfully!")
logger.info("\nπ― BENEFITS OF UNIFIED SYSTEM:")
logger.info(" β’ Single source of truth for all preferences")
logger.info(" β’ Real-time updates across all systems")
logger.info(" β’ Database persistence and reliability")
logger.info(" β’ Consistent preference loading everywhere")
logger.info(" β’ No more duplicate preference functions")
else:
logger.warning("β οΈ Migration completed but cleanup failed")
return True
if __name__ == "__main__":
success = main()
if success:
logger.info("\nπ MIGRATION COMPLETED SUCCESSFULLY!")
logger.info("Your system now uses a unified preference database!")
else:
logger.error("\nβ MIGRATION FAILED!")
logger.error("Check the logs above for details")