Skip to main content
Glama
migrate_booking_sessions.py5.87 kB
#!/usr/bin/env python3 """ Migration Script: Booking Sessions from JSON to PostgreSQL Migrates existing booking sessions from booking_sessions.json to database """ import os import sys import json import logging from pathlib import Path # Add src to path sys.path.insert(0, str(Path(__file__).parent)) from src.database.database import create_tables from src.database.models import HybridBookingSession from src.database.booking_sessions import BookingSessionManager logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) def migrate_sessions_from_json(json_file_path: str = "booking_sessions.json"): """ Migrate booking sessions from JSON file to PostgreSQL database Args: json_file_path: Path to the JSON file containing sessions """ logger.info("=" * 60) logger.info("BOOKING SESSIONS MIGRATION: JSON → PostgreSQL") logger.info("=" * 60) # Step 1: Create database tables logger.info("Step 1: Creating database tables...") try: create_tables() logger.info("✅ Database tables created successfully") except Exception as e: logger.error(f"❌ Failed to create tables: {e}") return # Step 2: Load sessions from JSON file logger.info(f"Step 2: Loading sessions from {json_file_path}...") if not os.path.exists(json_file_path): logger.warning(f"⚠️ JSON file not found: {json_file_path}") logger.info("No sessions to migrate. Database is ready for new sessions.") return try: with open(json_file_path, 'r') as f: sessions_data = json.load(f) session_count = len(sessions_data) logger.info(f"✅ Loaded {session_count} sessions from JSON") if session_count == 0: logger.info("No sessions to migrate. Database is ready for new sessions.") return except Exception as e: logger.error(f"❌ Failed to load JSON file: {e}") return # Step 3: Migrate each session to database logger.info("Step 3: Migrating sessions to PostgreSQL...") manager = BookingSessionManager() migrated_count = 0 failed_count = 0 for session_id, session_data in sessions_data.items(): try: # Check if session already exists existing = manager.get_session(session_id) if existing: logger.info(f"⏭️ Session {session_id} already exists, skipping") continue # Create session in database manager.create_session( session_id=session_data['session_id'], organizer_email=session_data['organizer_email'], organizer_name=session_data['organizer_name'], external_email=session_data['external_email'], external_name=session_data['external_name'], proposed_slots=session_data['proposed_slots'], meeting_subject=session_data['meeting_subject'], meeting_duration=session_data['meeting_duration'], booking_url=session_data['booking_url'], internal_attendees=session_data.get('internal_attendees', []) ) # Update status if confirmed if session_data.get('status') == 'confirmed': manager.update_session_status( session_id=session_id, status='confirmed', confirmed_slot=session_data.get('confirmed_slot'), event_id=session_data.get('event_id') ) migrated_count += 1 logger.info(f"✅ Migrated session: {session_id} (status: {session_data.get('status', 'pending')})") except Exception as e: failed_count += 1 logger.error(f"❌ Failed to migrate session {session_id}: {e}") # Step 4: Summary logger.info("=" * 60) logger.info("MIGRATION SUMMARY") logger.info("=" * 60) logger.info(f"Total sessions found: {session_count}") logger.info(f"Successfully migrated: {migrated_count}") logger.info(f"Failed: {failed_count}") logger.info(f"Skipped (already exist): {session_count - migrated_count - failed_count}") if migrated_count > 0: logger.info("=" * 60) logger.info("✅ MIGRATION COMPLETED SUCCESSFULLY") logger.info("=" * 60) logger.info(f"You can now backup/remove the JSON file: {json_file_path}") logger.info("All new sessions will be stored in PostgreSQL database.") else: logger.info("=" * 60) logger.info("ℹ️ NO NEW SESSIONS MIGRATED") logger.info("=" * 60) def verify_migration(): """Verify migration by checking database contents""" logger.info("\n" + "=" * 60) logger.info("VERIFICATION: Checking database contents") logger.info("=" * 60) try: manager = BookingSessionManager() # Get all pending sessions pending = manager.get_pending_sessions() logger.info(f"Pending sessions in database: {len(pending)}") for session in pending: logger.info(f" - {session.session_id}: {session.external_email} (created: {session.created_at})") logger.info("✅ Database verification completed") except Exception as e: logger.error(f"❌ Verification failed: {e}") if __name__ == "__main__": # Get JSON file path from command line or use default json_file = sys.argv[1] if len(sys.argv) > 1 else "booking_sessions.json" # Run migration migrate_sessions_from_json(json_file) # Verify results verify_migration()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ilvolodel/iris-legacy'

If you have feedback or need assistance with the MCP directory API, please join our Discord server