"""HTML output adapter.""" import tempfile import webbrowser from pathlib import Path from typing import Any import pandas as pd from openbb_cli.session import Session session = Session() class HtmlOutput: """HTML output adapter - generates HTML and opens in default browser.""" def display( self, data: Any, title: str = "", export: bool = False, chart: bool = False, ) -> None: """Display as HTML in default browser.""" if export: return if hasattr(data, "model_dump"): if session.settings.USE_INTERACTIVE_DF and session.backend is not None: try: data.charting.table() return except Exception as e: session.console.print( f"[yellow]Interactive table not available: {e}[/yellow]" ) if chart: try: data.show() return except Exception as e: session.console.print( f"[yellow]Chart not available, showing table instead: {e}[/yellow]" ) if hasattr(data, "model_dump"): results = data.model_dump(exclude_unset=True, exclude_none=True).get( "results" ) if results is None: session.console.print("[yellow]No results to display[/yellow]") return if isinstance(results, pd.DataFrame): df = results elif isinstance(results, list): df = pd.DataFrame(results) elif isinstance(results, dict): df = pd.DataFrame([results]) else: df = pd.DataFrame({"value": [results]}) elif isinstance(data, pd.DataFrame): df = data if session.settings.USE_INTERACTIVE_DF and session.backend is not None: try: session.backend.send_table( df_table=df, title=title, theme=session.user.preferences.table_style, ) return except Exception: # noqa: S110 pass elif isinstance(data, pd.Series): df = data.to_frame() elif isinstance(data, dict): df = pd.DataFrame.from_dict(data, orient="columns") elif isinstance(data, (list, tuple)): df = pd.DataFrame(data) else: df = pd.DataFrame({"value": [data]}) html_content = f"""