import gradio as gr from datetime import datetime import time # Simulated Airflow DAG steps def extract(): time.sleep(1) return {"data": ["apple", "banana", "cherry"], "timestamp": datetime.now().isoformat()} def transform(data): time.sleep(1) return [item.upper() for item in data] def load(data): time.sleep(1) return f"Loaded {len(data)} items into target system at {datetime.now().isoformat()}" # DAG runner def run_pipeline(): log = [] extracted = extract() log.append(f"✅ Extracted: {extracted['data']} at {extracted['timestamp']}") transformed = transform(extracted["data"]) log.append(f"🔄 Transformed: {transformed}") result = load(transformed) log.append(f"📦 Load Result: {result}") return "\n".join(log) # Gradio UI demo = gr.Interface(fn=run_pipeline, inputs=[], outputs="text", title="Airflow-style ETL Pipeline", description="Simulated DAG with Extract → Transform → Load") demo.launch()