import json from pathlib import Path import pandas as pd from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse app = FastAPI() origins = [ "https://pro.openbb.dev", "https://pro.openbb.co", "https://excel.openbb.co", "https://excel.openbb.dev", ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) ROOT_PATH = Path(__file__).parent.resolve() @app.get("/") def read_root(): return {"Info": "Full example for OpenBB Custom Backend"} @app.get("/csv-data") def csv_data(): """Read mock csv data and return it as a table to your widget""" # Specify the path to your CSV file csv_file_path = "mock_data.csv" try: # Convert the DataFrame to a dictionary and return the data return pd.read_csv((ROOT_PATH / csv_file_path).open()).to_dict(orient="records") except Exception as e: # Handle error cases here error_message = f"Error reading the CSV file: {str(e)}" return JSONResponse(content={"error": error_message}, status_code=500) from pydantic import BaseModel import random import time # Define a Pydantic model for stock data class StockData(BaseModel): ticker: str price: float volume: int timestamp: float # Create a mock function to simulate fetching stock data def generate_mock_stock_data(ticker: str): return { "ticker": ticker, "price": round(random.uniform(100, 500), 2), # Generate a random stock price "volume": random.randint(1000, 10000), # Random trading volume "timestamp": time.time() # Current timestamp } # Define the /api/stocks endpoint @app.get("/api/stocks", response_model=StockData) async def get_stock_data(ticker: str): """ Fetches stock data for a given ticker symbol. The data includes price, volume, and timestamp. """ # Generate mock data for the given ticker stock_data = generate_mock_stock_data(ticker) return stock_data