245 lines
8.4 KiB
Python
245 lines
8.4 KiB
Python
#!/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.") |