File size: 2,639 Bytes
a8cf3d1
 
 
 
4799cc5
5bb19c3
 
c0c8bed
a8cf3d1
705f945
a8cf3d1
5bb19c3
 
 
c0c8bed
 
a8cf3d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5bb19c3
 
 
 
c0c8bed
a8cf3d1
c0c8bed
 
a8cf3d1
 
 
c0c8bed
 
a8cf3d1
c0c8bed
a8cf3d1
5bb19c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a8cf3d1
c0c8bed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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}