#!/usr/bin/env python3 """ Script to create comprehensive example data for the VFX project management system. This includes episodes, assets, and project members for the Dragon Quest project. """ 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_episodes(cursor, project_id): """Create example episodes for the project.""" episodes_data = [ { "name": "The Dragon's Awakening", "episode_number": 1, "description": "Opening sequence where the ancient dragon awakens from its thousand-year slumber. Features extensive particle effects, environmental destruction, and creature animation.", "status": "in_progress" }, { "name": "The Quest Begins", "episode_number": 2, "description": "Heroes embark on their journey through magical forests and mystical landscapes. Requires complex environment work and magical effect sequences.", "status": "planning" }, { "name": "Battle of the Crystal Caves", "episode_number": 3, "description": "Epic battle sequence in underground crystal caves with magical creatures. Heavy focus on lighting effects, crystal simulations, and creature interactions.", "status": "planning" }, { "name": "The Final Confrontation", "episode_number": 4, "description": "Climactic battle between heroes and the dragon. Most VFX-intensive episode featuring fire effects, destruction, magical spells, and complex creature animation.", "status": "planning" } ] episode_ids = [] current_time = datetime.now().isoformat() for episode_data in episodes_data: # Check if episode already exists cursor.execute(""" SELECT id FROM episodes WHERE project_id = ? AND episode_number = ? """, (project_id, episode_data["episode_number"])) existing_episode = cursor.fetchone() if existing_episode: episode_ids.append(existing_episode[0]) continue insert_query = """ INSERT INTO episodes ( project_id, name, episode_number, description, status, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?, ?) """ cursor.execute(insert_query, ( project_id, episode_data["name"], episode_data["episode_number"], episode_data["description"], episode_data["status"], current_time, current_time )) episode_ids.append(cursor.lastrowid) return episode_ids def create_example_assets(cursor, project_id): """Create example assets for the project.""" assets_data = [ { "name": "Ancient Dragon", "category": "characters", "description": "Main antagonist dragon character with detailed scales, wings, and fire-breathing capabilities. Requires complex rigging and animation systems.", "status": "in_progress" }, { "name": "Hero Character - Warrior", "category": "characters", "description": "Main protagonist warrior character with armor, weapons, and facial animation capabilities.", "status": "completed" }, { "name": "Hero Character - Mage", "category": "characters", "description": "Magical character with spell-casting animations and mystical effects integration.", "status": "in_progress" }, { "name": "Crystal Cave Environment", "category": "sets", "description": "Underground cave system with glowing crystals, stalactites, and magical lighting effects.", "status": "in_progress" }, { "name": "Enchanted Forest", "category": "sets", "description": "Magical forest environment with animated trees, floating particles, and dynamic lighting.", "status": "not_started" }, { "name": "Dragon's Lair", "category": "sets", "description": "Massive cave environment where the dragon resides, featuring treasure piles and ancient architecture.", "status": "not_started" }, { "name": "Excalibur Sword", "category": "props", "description": "Legendary sword with magical glow effects and particle systems.", "status": "approved" }, { "name": "Magic Staff", "category": "props", "description": "Mage's staff with crystal orb and magical energy effects.", "status": "in_progress" }, { "name": "Dragon Armor Set", "category": "props", "description": "Protective armor made from dragon scales with metallic and organic textures.", "status": "not_started" }, { "name": "Dragon Wings", "category": "props", "description": "Detailed dragon wing assets for close-up shots and animation reference.", "status": "in_progress" }, { "name": "Flying Carpet", "category": "vehicles", "description": "Magical flying carpet for transportation sequences with cloth simulation.", "status": "completed" }, { "name": "War Chariot", "category": "vehicles", "description": "Battle chariot for epic combat sequences with destruction capabilities.", "status": "not_started" } ] asset_ids = [] current_time = datetime.now().isoformat() for asset_data in assets_data: # Check if asset already exists cursor.execute(""" SELECT id FROM assets WHERE project_id = ? AND name = ? """, (project_id, asset_data["name"])) existing_asset = cursor.fetchone() if existing_asset: asset_ids.append(existing_asset[0]) continue insert_query = """ INSERT INTO assets ( project_id, name, category, description, status, created_at, updated_at ) VALUES (?, ?, ?, ?, ?, ?, ?) """ cursor.execute(insert_query, ( project_id, asset_data["name"], asset_data["category"], asset_data["description"], asset_data["status"], current_time, current_time )) asset_ids.append(cursor.lastrowid) return asset_ids def create_example_data(): """Create comprehensive example data for the VFX project.""" print("Creating Example VFX Project Data") print("=" * 40) db_path = get_database_path() print(f"Using database: {db_path}") try: conn = sqlite3.connect(db_path) cursor = conn.cursor() # Get the Dragon Quest project ID cursor.execute("SELECT id FROM projects WHERE code_name = 'DRAGON_QUEST_2024'") project_result = cursor.fetchone() if not project_result: print("āŒ Dragon Quest project not found. Please run create_example_project.py first.") return False project_id = project_result[0] print(f"āœ… Found Dragon Quest project (ID: {project_id})") # Create episodes print("\nšŸ“ŗ Creating example episodes...") episode_ids = create_example_episodes(cursor, project_id) print(f"āœ… Created/found {len(episode_ids)} episodes") # Create assets print("\nšŸŽØ Creating example assets...") asset_ids = create_example_assets(cursor, project_id) print(f"āœ… Created/found {len(asset_ids)} assets") # Commit all changes conn.commit() # Show summary print(f"\nšŸ“Š Summary:") print(f" Project: Dragon Quest: The Awakening") print(f" Episodes: {len(episode_ids)}") print(f" Assets: {len(asset_ids)}") # Show episode breakdown cursor.execute(""" SELECT name, episode_number, status FROM episodes WHERE project_id = ? ORDER BY episode_number """, (project_id,)) episodes = cursor.fetchall() print(f"\nšŸ“ŗ Episodes:") for episode in episodes: status_emoji = {"not_started": "ā³", "planning": "šŸ“‹", "in_progress": "šŸŽ¬", "completed": "āœ…"} print(f" {status_emoji.get(episode[2], 'ā“')} Episode {episode[1]}: {episode[0]} ({episode[2].replace('_', ' ').title()})") # Show asset breakdown by category cursor.execute(""" SELECT category, COUNT(*) as count FROM assets WHERE project_id = ? GROUP BY category ORDER BY count DESC """, (project_id,)) asset_categories = cursor.fetchall() print(f"\nšŸŽØ Assets by Category:") category_emojis = {"characters": "šŸ‘¤", "sets": "šŸŒ", "props": "āš”ļø", "vehicles": "šŸš—"} for category, count in asset_categories: emoji = category_emojis.get(category, "šŸ“¦") print(f" {emoji} {category.title()}: {count}") # Show asset status breakdown cursor.execute(""" SELECT status, COUNT(*) as count FROM assets WHERE project_id = ? GROUP BY status ORDER BY count DESC """, (project_id,)) asset_statuses = cursor.fetchall() print(f"\nšŸ“ˆ Asset Status:") status_emojis = {"not_started": "ā³", "planning": "šŸ“‹", "in_progress": "šŸŽ¬", "completed": "āœ…"} for status, count in asset_statuses: emoji = status_emojis.get(status, "ā“") print(f" {emoji} {status.replace('_', ' ').title()}: {count}") 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() if __name__ == "__main__": print("VFX Project Management - Example Data Creator") print("=" * 50) success = create_example_data() if success: print("\nšŸŽ¬ Example data created successfully!") print("The Dragon Quest project now has realistic episodes and assets for testing.") else: print("\nāŒ Failed to create example data.")