#!/usr/bin/env python3 """ Script to create an example VFX project in the database with realistic data. """ import sqlite3 import json from datetime import date, datetime from pathlib import Path def get_database_path(): """Get the database path.""" possible_paths = [ "vfx_project_management.db", "database.db" ] for path in possible_paths: if Path(path).exists(): return path return "vfx_project_management.db" def create_example_project(): """Create an example VFX project with realistic data.""" print("Creating Example VFX Project") print("=" * 40) db_path = get_database_path() print(f"Using database: {db_path}") try: conn = sqlite3.connect(db_path) cursor = conn.cursor() # Check if projects table exists cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='projects'") if not cursor.fetchone(): print("❌ Projects table not found. Please run the application first to create the database schema.") return False # Check if example project already exists cursor.execute("SELECT id FROM projects WHERE code_name = 'DRAGON_QUEST_2024'") existing_project = cursor.fetchone() if existing_project: print(f"✅ Example project already exists (ID: {existing_project[0]})") return True # Create example project data project_data = { "name": "Dragon Quest: The Awakening", "code_name": "DRAGON_QUEST_2024", "client_name": "Epic Fantasy Studios", "project_type": "cinema", "description": "A high-budget fantasy film featuring dragons, magic, and epic battles. Requires extensive VFX work including creature animation, environmental effects, and magical elements.", "status": "in_progress", "start_date": "2024-01-15", "end_date": "2024-12-20", "frame_rate": 24.0, "data_drive_path": "/projects/dragon_quest_2024/data", "publish_storage_path": "/projects/dragon_quest_2024/publish", "delivery_image_resolution": "4096x2160", "delivery_movie_specs_by_department": { "layout": { "resolution": "1920x1080", "format": "mov", "codec": "h264", "quality": "medium" }, "animation": { "resolution": "2048x1080", "format": "mov", "codec": "h264", "quality": "high" }, "lighting": { "resolution": "4096x2160", "format": "exr", "codec": None, "quality": "high" }, "composite": { "resolution": "4096x2160", "format": "mov", "codec": "prores", "quality": "high" }, "modeling": { "resolution": "1920x1080", "format": "mov", "codec": "h264", "quality": "medium" }, "rigging": { "resolution": "1920x1080", "format": "mov", "codec": "h264", "quality": "medium" }, "surfacing": { "resolution": "2048x1080", "format": "mov", "codec": "h264", "quality": "high" } } } # Convert delivery specs to JSON string delivery_specs_json = json.dumps(project_data["delivery_movie_specs_by_department"]) # Insert the project insert_query = """ INSERT INTO projects ( name, code_name, client_name, project_type, description, status, start_date, end_date, frame_rate, data_drive_path, publish_storage_path, delivery_image_resolution, delivery_movie_specs_by_department, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """ current_time = datetime.now().isoformat() cursor.execute(insert_query, ( project_data["name"], project_data["code_name"], project_data["client_name"], project_data["project_type"], project_data["description"], project_data["status"], project_data["start_date"], project_data["end_date"], project_data["frame_rate"], project_data["data_drive_path"], project_data["publish_storage_path"], project_data["delivery_image_resolution"], delivery_specs_json, current_time, current_time )) project_id = cursor.lastrowid # Commit the changes conn.commit() print(f"✅ Example project created successfully!") print(f" Project ID: {project_id}") print(f" Name: {project_data['name']}") print(f" Code: {project_data['code_name']}") print(f" Client: {project_data['client_name']}") print(f" Type: {project_data['project_type'].upper()}") print(f" Status: {project_data['status'].replace('_', ' ').title()}") print(f" Frame Rate: {project_data['frame_rate']} fps") print(f" Resolution: {project_data['delivery_image_resolution']}") print(f" Departments: {', '.join(project_data['delivery_movie_specs_by_department'].keys())}") # Verify the project was created correctly cursor.execute(""" SELECT name, code_name, frame_rate, delivery_image_resolution FROM projects WHERE id = ? """, (project_id,)) verification = cursor.fetchone() if verification: print(f"\n✅ Verification successful:") print(f" Database Name: {verification[0]}") print(f" Database Code: {verification[1]}") print(f" Database Frame Rate: {verification[2]} fps") print(f" Database Resolution: {verification[3]}") return True except sqlite3.Error as e: print(f"❌ Database error: {e}") if conn: conn.rollback() return False except Exception as e: print(f"❌ Unexpected error: {e}") if conn: conn.rollback() return False finally: if conn: conn.close() def show_all_projects(): """Display all projects in the database.""" print("\nAll Projects in Database:") print("-" * 40) db_path = get_database_path() try: conn = sqlite3.connect(db_path) cursor = conn.cursor() cursor.execute(""" SELECT id, name, code_name, client_name, project_type, status, frame_rate, delivery_image_resolution FROM projects ORDER BY created_at DESC """) projects = cursor.fetchall() if not projects: print("No projects found in database.") return for project in projects: print(f"ID: {project[0]}") print(f" Name: {project[1]}") print(f" Code: {project[2]}") print(f" Client: {project[3]}") print(f" Type: {project[4].upper()}") print(f" Status: {project[5].replace('_', ' ').title()}") print(f" Frame Rate: {project[6]} fps") print(f" Resolution: {project[7]}") print() except sqlite3.Error as e: print(f"❌ Database error: {e}") except Exception as e: print(f"❌ Unexpected error: {e}") finally: if conn: conn.close() if __name__ == "__main__": print("VFX Project Management - Example Project Creator") print("=" * 50) success = create_example_project() if success: show_all_projects() print("\n🎬 Example project created successfully!") print("You can now test the VFX project management system with realistic data.") else: print("\n❌ Failed to create example project.")