screener / main.py
jarvisx17's picture
Update main.py
5bb19c3 verified
raw
history blame
2.64 kB
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi import FastAPI, Request, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from utils import StockDataFetcher
from pydantic import BaseModel
from typing import List, Dict
app = FastAPI(swagger_ui_parameters={"syntaxHighlight.theme": "obsidian"})
class StockPriceResponse(BaseModel):
ltp: float
fetcher = StockDataFetcher()
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
return templates.TemplateResponse("hello.html", {"request": request})
@app.get('/ltp', response_model=StockPriceResponse, response_model_exclude_unset=True,
summary="Get the latest price of a stock",
response_description="Latest stock price",
responses={200: {"content": {"application/json": {"example": {"ltp": 123.45}}}}}))
async def get_data(ticker: str):
try:
response = fetcher.fetch_latest_price(ticker)
return {'ltp' :response}
except:
return {"Timeout" : "Error"}
@app.get('/historical')
async def get_stocks_data(ticker: str, intervals: int, days: int):
try:
response = fetcher.fetch_stock_data(ticker, 15, 10).to_dict(orient="records")
return response
except:
return {"data" : response}
@app.get('/chain')
async def get_stocks_data(ticker: str):
try:
response = fetcher.fetch_option_chain(ticker).to_dict(orient="records")
return response
except:
return {"data" : response}
@app.get('/search')
async def get_stocks_data(ticker: str):
try:
response = fetcher.search_entity(ticker)
return response
except:
return {"data" : response}
@app.get('/news')
async def get_stocks_data(ticker: str, page: int, size: int):
try:
response = fetcher.fetch_stock_news(ticker, page=page, size=size).to_dict(orient="records")
return response
except:
return {"data" : response}
@app.get('/all')
async def get_stocks_data():
try:
response = fetcher.fetch_all_stock().to_dict(orient="records")
return response
except:
return {"data" : response}
@app.get('/signal')
async def get_stocks_data(index: str):
try:
response = fetcher.realtime_signal(index).tail(1).to_dict(orient="records")[0]
return response
except:
return {"data" : response}