import omni.ocio as ocio
def get_displays_views_and_looks(ocio_ctx):
    """
    Extract all displays, views, and looks from an OCIO context.
    
    Args:
        ocio_ctx: An OpenColorIO context
        
    Returns:
        A tuple of (displays, views_per_display, looks) lists
    """
    displays = []
    views = []
    looks = []
    # Get all displays
    display_count = ocio.get_display_count(ocio_ctx)
    for i in range(display_count):
        display_name = str(ocio.get_display_name(ocio_ctx, i))
        displays.append(display_name)
        
        # Get all views for this display
        disp_views = []
        view_count = ocio.get_view_count(ocio_ctx, i)
        for k in range(view_count):
            view_name = str(ocio.get_view_name(ocio_ctx, i, k))
            disp_views.append(view_name)
        views.append(disp_views)
    # Get all looks
    look_count = ocio.get_look_count(ocio_ctx)
    for j in range(look_count):
        look_name = str(ocio.get_look_name(ocio_ctx, j))
        looks.append(look_name)
    return displays, views, looks
# Example usage
ocio_ctx = ocio.get_context("ocio://studio-config-latest")
displays, views_per_display, looks = get_displays_views_and_looks(ocio_ctx)
# Print some results
print(f"Total displays: {len(displays)}")
print(f"First display: {displays[0]} with views: {views_per_display[0]}")
print(f"Available looks: {looks}")
# Direct API usage example (alternative to the function approach)
print("\nDirect API usage example:")
display_idx = 0
if display_idx < len(displays):
    view_count = ocio.get_view_count(ocio_ctx, display_idx)
    print(f"Display '{displays[display_idx]}' has {view_count} views")
# Clean up
ocio.release_context(ocio_ctx)