File size: 1,705 Bytes
9bc1376
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import pandas as pd
from typing import Any, Dict, List

def safe_dataframe(df: pd.DataFrame) -> pd.DataFrame:
    for col in df.columns:
        df[col] = df[col].astype(str)
    return df

def analysis_to_csv(analysis: Dict[str, Any]) -> str:
    rows = []
    for sb in analysis.get("storyboard", []):
        rows.append({"Section": "Storyboard", **sb})
    for sc in analysis.get("script", []):
        rows.append({"Section": "Script", **sc})
    for met in analysis.get("video_analysis", {}).get("video_metrics", []):
        rows.append({"Section": "Metrics", **met})
    for imp in analysis.get("timestamp_improvements", []):
        rows.append({"Section": "Improvements", **imp})
    if not rows:
        return ""
    df = pd.DataFrame(rows)
    return df.to_csv(index=False)

def _normalize_list(value: Any) -> List[str]:
    if value is None:
        return []
    if isinstance(value, list):
        return [str(v) for v in value]
    return [s for s in str(value).splitlines() if s.strip()]

def _to_dataframe(items: Any, columns_map: Dict[str, str]) -> pd.DataFrame:
    if not isinstance(items, list) or not items:
        return pd.DataFrame(columns=list(columns_map.values()))
    df = pd.DataFrame(items)
    df = df.rename(columns=columns_map)
    ordered_cols = [columns_map[k] for k in columns_map.keys() if columns_map[k] in df.columns]
    df = df.reindex(columns=ordered_cols)
    return df


def _search_dataframe(df: pd.DataFrame, query: str) -> pd.DataFrame:
    if not query or df.empty:
        return df
    mask = pd.Series([False]*len(df))
    for col in df.columns:
        mask = mask | df[col].astype(str).str.contains(query, case=False, na=False)
    return df[mask]