def get_prices_plots_data()

in src/backend/entrypoints/llm_backend/api/plots.py [0:0]


def get_prices_plots_data(request_model: DataRequestModel = Depends(), session: Session = Depends(get_session)):
    if not session.flow_status.is_step_done(Steps.FETCH_TICKERS):
        raise DataNotFetchedError

    plots_meta = session.flow_status.step_fetch["plots_meta"]["symbols"]

    for symbol in request_model.symbols:
        if symbol not in plots_meta:
            raise DataNotFetchedError(f"Data for '{symbol}' wasn't fetched")

    data: dict[str, pd.DataFrame] = {
        **session["data_by_symbol"],
        **session.get("data_by_synth", {}),
    }

    response = defaultdict(list)

    for symbol in request_model.symbols:
        dividends_lines: list[str] = [line["name"] for chart in plots_meta[symbol]["charts"] for line in chart]
        dividends_lines.remove("close")
        keys_to_add = ["open", "high", "low", "close"] + dividends_lines

        for idx, row in data[symbol].iterrows():
            info = {key: (row[key] if not np.isnan(row[key]) else None) for key in keys_to_add if key in row}
            info["date"] = idx.strftime("%Y-%m-%d")
            response[symbol].append(info)

    return response