add api key for more security

This commit is contained in:
MuslemRahimi 2024-07-18 20:45:41 +02:00
parent 384cbe9375
commit faa3b7bdb9

View File

@ -24,11 +24,12 @@ from contextlib import contextmanager
from pocketbase import PocketBase from pocketbase import PocketBase
# FastAPI and related imports # FastAPI and related imports
from fastapi import FastAPI, Depends, HTTPException, status from fastapi import FastAPI, Depends, HTTPException, Security, status
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from fastapi.openapi.docs import get_swagger_ui_html from fastapi.openapi.docs import get_swagger_ui_html
from fastapi.openapi.utils import get_openapi from fastapi.openapi.utils import get_openapi
from fastapi.security import HTTPBasic, HTTPBasicCredentials from fastapi.security import HTTPBasic, HTTPBasicCredentials
from fastapi.security.api_key import APIKeyHeader
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
# DB constants & context manager # DB constants & context manager
@ -135,6 +136,7 @@ app.add_middleware(
) )
security = HTTPBasic() security = HTTPBasic()
#Hide /docs and /openai.json behind authentication #Hide /docs and /openai.json behind authentication
@ -153,13 +155,22 @@ def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
return credentials.username return credentials.username
STOCKNEAR_API_KEY = os.getenv('STOCKNEAR_API_KEY')
api_key_header = APIKeyHeader(name="X-API-KEY")
async def get_api_key(api_key: str = Security(api_key_header)):
if api_key != STOCKNEAR_API_KEY:
raise HTTPException(status_code=403, detail="Could not validate credentials")
@app.get("/docs") @app.get("/docs")
async def get_documentation(username: str = Depends(get_current_username)): async def get_documentation(username: str = Depends(get_current_username), api_key: str = Security(get_api_key)):
return get_swagger_ui_html(openapi_url="/openapi.json", title="docs") return get_swagger_ui_html(openapi_url="/openapi.json", title="docs")
@app.get("/openapi.json") @app.get("/openapi.json")
async def openapi(username: str = Depends(get_current_username)): async def openapi(username: str = Depends(get_current_username), api_key: str = Security(get_api_key)):
return get_openapi(title = "FastAPI", version="0.1.0", routes=app.routes) return get_openapi(title = "FastAPI", version="0.1.0", routes=app.routes)
@ -276,13 +287,13 @@ def clean_financial_data(list1, list2):
@app.get("/") @app.get("/")
async def hello_world(): async def hello_world(api_key: str = Security(get_api_key)):
return {"stocknear api"} return {"stocknear api"}
@app.post("/stock-correlation") @app.post("/stock-correlation")
async def rating_stock(data: TickerData): async def rating_stock(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -316,7 +327,7 @@ async def rating_stock(data: TickerData):
@app.post("/stock-rating") @app.post("/stock-rating")
async def rating_stock(data: TickerData): async def rating_stock(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"stock-rating-{ticker}" cache_key = f"stock-rating-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -334,7 +345,7 @@ async def rating_stock(data: TickerData):
return res return res
@app.post("/historical-price") @app.post("/historical-price")
async def get_stock(data: HistoricalPrice): async def get_stock(data: HistoricalPrice, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
time_period = data.timePeriod time_period = data.timePeriod
@ -367,7 +378,7 @@ async def get_stock(data: HistoricalPrice):
@app.post("/one-day-price") @app.post("/one-day-price")
async def get_stock(data: TickerData): async def get_stock(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
cache_key = f"one-day-price-{ticker}" cache_key = f"one-day-price-{ticker}"
@ -407,7 +418,7 @@ def shuffle_list(lst):
@app.post("/similar-stocks") @app.post("/similar-stocks")
async def similar_stocks(data: TickerData): async def similar_stocks(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"similar-stocks-{ticker}" cache_key = f"similar-stocks-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -425,7 +436,7 @@ async def similar_stocks(data: TickerData):
@app.post("/similar-etfs") @app.post("/similar-etfs")
async def get_similar_etfs(data: TickerData): async def get_similar_etfs(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"similar-etfs-{ticker}" cache_key = f"similar-etfs-{ticker}"
@ -470,7 +481,7 @@ async def get_similar_etfs(data: TickerData):
@app.get("/market-movers") @app.get("/market-movers")
async def get_market_movers(): async def get_market_movers(api_key: str = Security(get_api_key)):
cache_key = f"get-market-movers" cache_key = f"get-market-movers"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -498,7 +509,7 @@ async def get_market_movers():
) )
@app.get("/mini-plots-index") @app.get("/mini-plots-index")
async def get_market_movers(): async def get_market_movers(api_key: str = Security(get_api_key)):
cache_key = f"get-mini-plots-index" cache_key = f"get-mini-plots-index"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -517,7 +528,7 @@ async def get_market_movers():
@app.get("/market-news") @app.get("/market-news")
async def get_market_news(): async def get_market_news(api_key: str = Security(get_api_key)):
cache_key = f"get-market-news" cache_key = f"get-market-news"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -544,7 +555,7 @@ async def get_market_news():
) )
@app.get("/general-news") @app.get("/general-news")
async def get_general_news(): async def get_general_news(api_key: str = Security(get_api_key)):
cache_key = f"get-general-news" cache_key = f"get-general-news"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -571,7 +582,7 @@ async def get_general_news():
) )
@app.get("/crypto-news") @app.get("/crypto-news")
async def get_crypto_news(): async def get_crypto_news(api_key: str = Security(get_api_key)):
cache_key = f"get-crypto-news" cache_key = f"get-crypto-news"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -599,7 +610,7 @@ async def get_crypto_news():
@app.post("/stock-news") @app.post("/stock-news")
async def stock_news(data: TickerData): async def stock_news(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"stock-news-{ticker}" cache_key = f"stock-news-{ticker}"
@ -633,7 +644,7 @@ async def stock_news(data: TickerData):
@app.post("/stock-dividend") @app.post("/stock-dividend")
async def stock_dividend(data: TickerData): async def stock_dividend(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"stock-dividend-{ticker}" cache_key = f"stock-dividend-{ticker}"
@ -683,7 +694,7 @@ async def stock_dividend(data: TickerData):
@app.post("/stock-quote") @app.post("/stock-quote")
async def stock_dividend(data: TickerData): async def stock_dividend(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"stock-quote-{ticker}" cache_key = f"stock-quote-{ticker}"
@ -702,7 +713,7 @@ async def stock_dividend(data: TickerData):
return res return res
@app.post("/history-employees") @app.post("/history-employees")
async def history_employees(data: TickerData): async def history_employees(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -732,7 +743,7 @@ async def history_employees(data: TickerData):
return res return res
@app.post("/stock-income") @app.post("/stock-income")
async def stock_income(data: TickerData): async def stock_income(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -767,7 +778,7 @@ async def stock_income(data: TickerData):
return res return res
@app.post("/stock-balance-sheet") @app.post("/stock-balance-sheet")
async def stock_balance_sheet(data: TickerData): async def stock_balance_sheet(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -802,7 +813,7 @@ async def stock_balance_sheet(data: TickerData):
return res return res
@app.post("/stock-ratios") @app.post("/stock-ratios")
async def stock_ratios(data: TickerData): async def stock_ratios(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -832,7 +843,7 @@ async def stock_ratios(data: TickerData):
@app.post("/stock-cash-flow") @app.post("/stock-cash-flow")
async def stock_cash_flow(data: TickerData): async def stock_cash_flow(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -865,7 +876,7 @@ async def stock_cash_flow(data: TickerData):
@app.get("/economic-calendar") @app.get("/economic-calendar")
async def economic_calendar(): async def economic_calendar(api_key: str = Security(get_api_key)):
cache_key = f"economic-calendar" cache_key = f"economic-calendar"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -896,7 +907,7 @@ async def economic_calendar():
@app.get("/earnings-calendar") @app.get("/earnings-calendar")
async def earnings_calendar(): async def earnings_calendar(api_key: str = Security(get_api_key)):
cache_key = f"earnings-calendar" cache_key = f"earnings-calendar"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -923,7 +934,7 @@ async def earnings_calendar():
@app.get("/dividends-calendar") @app.get("/dividends-calendar")
async def dividends_calendar(): async def dividends_calendar(api_key: str = Security(get_api_key)):
cache_key = f"dividends-calendar" cache_key = f"dividends-calendar"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -953,7 +964,7 @@ async def dividends_calendar():
) )
@app.get("/stock-splits-calendar") @app.get("/stock-splits-calendar")
async def stock_splits_calendar(): async def stock_splits_calendar(api_key: str = Security(get_api_key)):
cache_key = f"stock-splits-calendar" cache_key = f"stock-splits-calendar"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -983,7 +994,7 @@ async def stock_splits_calendar():
@app.post("/stockdeck") @app.post("/stockdeck")
async def rating_stock(data: TickerData): async def rating_stock(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"stockdeck-{ticker}" cache_key = f"stockdeck-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -1001,7 +1012,7 @@ async def rating_stock(data: TickerData):
@app.post("/analyst-summary-rating") @app.post("/analyst-summary-rating")
async def get_analyst_rating(data: TickerData): async def get_analyst_rating(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"analyst-summary-rating-{ticker}" cache_key = f"analyst-summary-rating-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -1018,7 +1029,7 @@ async def get_analyst_rating(data: TickerData):
return res return res
@app.post("/analyst-ticker-history") @app.post("/analyst-ticker-history")
async def get_analyst_ticke_history(data: TickerData): async def get_analyst_ticke_history(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"analyst-ticker-history-{ticker}" cache_key = f"analyst-ticker-history-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -1049,7 +1060,7 @@ async def get_analyst_ticke_history(data: TickerData):
@app.post("/get-watchlist") @app.post("/get-watchlist")
async def get_watchlist(data: GetWatchList): async def get_watchlist(data: GetWatchList, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
watchlist_id = data['watchListId'] watchlist_id = data['watchListId']
result = pb.collection("watchlist").get_one(watchlist_id) result = pb.collection("watchlist").get_one(watchlist_id)
@ -1136,7 +1147,7 @@ async def get_watchlist(data: GetWatchList):
@app.post("/price-prediction") @app.post("/price-prediction")
async def brownian_motion(data:TickerData): async def brownian_motion(data:TickerData, api_key: str = Security(get_api_key)):
data= data.dict() data= data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -1177,7 +1188,7 @@ async def brownian_motion(data:TickerData):
@app.get("/stock-screener-data") @app.get("/stock-screener-data")
async def stock_finder(): async def stock_finder(api_key: str = Security(get_api_key)):
cache_key = f"stock-screener-data" cache_key = f"stock-screener-data"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -1212,7 +1223,7 @@ async def stock_finder():
@app.post("/get-quant-stats") @app.post("/get-quant-stats")
async def get_quant_stats(data: TickerData): async def get_quant_stats(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
cache_key = f"get-quant-stats-{ticker}" cache_key = f"get-quant-stats-{ticker}"
@ -1256,7 +1267,7 @@ async def get_quant_stats(data: TickerData):
@app.post("/trading-signals") @app.post("/trading-signals")
async def get_trading_signals(data: TickerData): async def get_trading_signals(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -1300,7 +1311,7 @@ async def get_trading_signals(data: TickerData):
@app.post("/fair-price") @app.post("/fair-price")
async def get_fair_price(data: TickerData): async def get_fair_price(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
cache_key = f"get-fair-price-{ticker}" cache_key = f"get-fair-price-{ticker}"
@ -1330,7 +1341,7 @@ async def get_fair_price(data: TickerData):
@app.post("/congress-trading-ticker") @app.post("/congress-trading-ticker")
async def get_fair_price(data: TickerData): async def get_fair_price(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"get-congress-trading-{ticker}" cache_key = f"get-congress-trading-{ticker}"
@ -1352,7 +1363,7 @@ async def get_fair_price(data: TickerData):
@app.post("/shareholders") @app.post("/shareholders")
async def get_fair_price(data: TickerData): async def get_fair_price(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -1385,7 +1396,7 @@ async def get_fair_price(data: TickerData):
@app.post("/cik-data") @app.post("/cik-data")
async def get_hedge_funds_data(data: GetCIKData): async def get_hedge_funds_data(data: GetCIKData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
cik = data['cik'] cik = data['cik']
@ -1432,7 +1443,7 @@ async def get_hedge_funds_data(data: GetCIKData):
@app.get("/searchbar-data") @app.get("/searchbar-data")
async def get_stock(): async def get_stock(api_key: str = Security(get_api_key)):
cache_key = f"searchbar-data" cache_key = f"searchbar-data"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -1458,7 +1469,7 @@ async def get_stock():
@app.post("/revenue-segmentation") @app.post("/revenue-segmentation")
async def revenue_segmentation(data: TickerData): async def revenue_segmentation(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -1500,7 +1511,7 @@ async def revenue_segmentation(data: TickerData):
@app.post("/crypto-profile") @app.post("/crypto-profile")
async def get_crypto_profile(data: TickerData): async def get_crypto_profile(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"crypto-profile-{ticker}" cache_key = f"crypto-profile-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -1534,7 +1545,7 @@ async def get_crypto_profile(data: TickerData):
@app.post("/etf-profile") @app.post("/etf-profile")
async def get_fair_price(data: TickerData): async def get_fair_price(data: TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -1574,7 +1585,7 @@ async def get_fair_price(data: TickerData):
@app.post("/etf-holdings") @app.post("/etf-holdings")
async def etf_holdings(data: TickerData): async def etf_holdings(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"etf-holdings-{ticker}" cache_key = f"etf-holdings-{ticker}"
@ -1595,7 +1606,7 @@ async def etf_holdings(data: TickerData):
return res return res
@app.post("/etf-country-weighting") @app.post("/etf-country-weighting")
async def etf_holdings(data: TickerData): async def etf_holdings(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"etf-country-weighting-{ticker}" cache_key = f"etf-country-weighting-{ticker}"
@ -1628,7 +1639,7 @@ async def etf_holdings(data: TickerData):
@app.get("/ai-signals") @app.get("/ai-signals")
async def top_ai_signals(): async def top_ai_signals(api_key: str = Security(get_api_key)):
cache_key = f"ai-signals" cache_key = f"ai-signals"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -1648,7 +1659,7 @@ async def top_ai_signals():
@app.post("/exchange-constituents") @app.post("/exchange-constituents")
async def top_ai_signals(data:FilterStockList): async def top_ai_signals(data:FilterStockList, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
filter_list = data['filterList'] filter_list = data['filterList']
@ -1677,7 +1688,7 @@ async def top_ai_signals(data:FilterStockList):
@app.get("/all-stock-tickers") @app.get("/all-stock-tickers")
async def get_all_stock_tickers(): async def get_all_stock_tickers(api_key: str = Security(get_api_key)):
cache_key = f"all_stock_tickers" cache_key = f"all_stock_tickers"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -1707,7 +1718,7 @@ async def get_all_stock_tickers():
@app.get("/all-etf-tickers") @app.get("/all-etf-tickers")
async def get_all_etf_tickers(): async def get_all_etf_tickers(api_key: str = Security(get_api_key)):
cache_key = f"all-etf-tickers" cache_key = f"all-etf-tickers"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -1736,7 +1747,7 @@ async def get_all_etf_tickers():
) )
@app.get("/all-crypto-tickers") @app.get("/all-crypto-tickers")
async def get_all_crypto_tickers(): async def get_all_crypto_tickers(api_key: str = Security(get_api_key)):
cache_key = f"all-crypto-tickers" cache_key = f"all-crypto-tickers"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -1765,7 +1776,7 @@ async def get_all_crypto_tickers():
) )
@app.get("/congress-rss-feed") @app.get("/congress-rss-feed")
async def get_congress_rss_feed(): async def get_congress_rss_feed(api_key: str = Security(get_api_key)):
cache_key = f"congress-rss-feed" cache_key = f"congress-rss-feed"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -1781,7 +1792,7 @@ async def get_congress_rss_feed():
return res return res
@app.get("/analysts-price-targets-rss-feed") @app.get("/analysts-price-targets-rss-feed")
async def get_analysts_price_targets_rss_feed(): async def get_analysts_price_targets_rss_feed(api_key: str = Security(get_api_key)):
cache_key = f"analysts-price-targets-rss-feed" cache_key = f"analysts-price-targets-rss-feed"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -1809,7 +1820,7 @@ async def get_analysts_price_targets_rss_feed():
@app.get("/analysts-upgrades-downgrades-rss-feed") @app.get("/analysts-upgrades-downgrades-rss-feed")
async def get_analysts_upgrades_downgrades_rss_feed(): async def get_analysts_upgrades_downgrades_rss_feed(api_key: str = Security(get_api_key)):
cache_key = f"analysts-upgrades-downgrades-rss-feed" cache_key = f"analysts-upgrades-downgrades-rss-feed"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -1836,7 +1847,7 @@ async def get_analysts_upgrades_downgrades_rss_feed():
) )
@app.get("/delisted-companies") @app.get("/delisted-companies")
async def get_delisted_companies(): async def get_delisted_companies(api_key: str = Security(get_api_key)):
cache_key = f"delisted-companies" cache_key = f"delisted-companies"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -1855,7 +1866,7 @@ async def get_delisted_companies():
@app.post("/filter-stock-list") @app.post("/filter-stock-list")
async def filter_stock_list(data:FilterStockList): async def filter_stock_list(data:FilterStockList, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
filter_list = data['filterList'] filter_list = data['filterList']
cache_key = f"filter-list-{filter_list}" cache_key = f"filter-list-{filter_list}"
@ -1964,7 +1975,7 @@ def extract_names_and_descriptions(text):
@app.post("/earnings-call-transcripts") @app.post("/earnings-call-transcripts")
async def get_earnings_call_transcripts(data:TranscriptData): async def get_earnings_call_transcripts(data:TranscriptData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'] ticker = data['ticker']
year = data['year'] year = data['year']
@ -1993,7 +2004,7 @@ async def get_earnings_call_transcripts(data:TranscriptData):
return res return res
@app.get("/ticker-mentioning") @app.get("/ticker-mentioning")
async def get_ticker_mentioning(): async def get_ticker_mentioning(api_key: str = Security(get_api_key)):
cache_key = f"get-ticker-mentioning" cache_key = f"get-ticker-mentioning"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2012,7 +2023,7 @@ async def get_ticker_mentioning():
@app.post("/top-etf-ticker-holder") @app.post("/top-etf-ticker-holder")
async def top_etf_ticker_holder(data: TickerData): async def top_etf_ticker_holder(data: TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"top-etf-{ticker}-holder" cache_key = f"top-etf-{ticker}-holder"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2030,7 +2041,7 @@ async def top_etf_ticker_holder(data: TickerData):
@app.get("/popular-etfs") @app.get("/popular-etfs")
async def get_popular_etfs(): async def get_popular_etfs(api_key: str = Security(get_api_key)):
cache_key = "popular-etfs" cache_key = "popular-etfs"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -2058,7 +2069,7 @@ async def get_popular_etfs():
@app.get("/all-etf-providers") @app.get("/all-etf-providers")
async def get_all_etf_providers(): async def get_all_etf_providers(api_key: str = Security(get_api_key)):
cache_key = f"get-all-etf-providers" cache_key = f"get-all-etf-providers"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2077,7 +2088,7 @@ async def get_all_etf_providers():
@app.post("/etf-provider") @app.post("/etf-provider")
async def etf_provider(data: ETFProviderData): async def etf_provider(data: ETFProviderData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
etf_provider = data['etfProvider'].lower() etf_provider = data['etfProvider'].lower()
@ -2106,7 +2117,7 @@ async def etf_provider(data: ETFProviderData):
return sorted_res return sorted_res
@app.get("/etf-new-launches") @app.get("/etf-new-launches")
async def etf_provider(): async def etf_provider(api_key: str = Security(get_api_key)):
cache_key = f"etf-new-launches" cache_key = f"etf-new-launches"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
limit = 100 limit = 100
@ -2127,7 +2138,7 @@ async def etf_provider():
return res return res
@app.get("/etf-bitcoin-list") @app.get("/etf-bitcoin-list")
async def get_etf_bitcoin_list(): async def get_etf_bitcoin_list(api_key: str = Security(get_api_key)):
cache_key = f"get-etf-bitcoin-list" cache_key = f"get-etf-bitcoin-list"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2145,7 +2156,7 @@ async def get_etf_bitcoin_list():
@app.post("/analyst-estimate") @app.post("/analyst-estimate")
async def get_analyst_estimate(data:TickerData): async def get_analyst_estimate(data:TickerData, api_key: str = Security(get_api_key)):
data = data.dict() data = data.dict()
ticker = data['ticker'].upper() ticker = data['ticker'].upper()
@ -2166,7 +2177,7 @@ async def get_analyst_estimate(data:TickerData):
@app.post("/insider-trading") @app.post("/insider-trading")
async def get_insider_trading(data:TickerData): async def get_insider_trading(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"insider-trading-{ticker}" cache_key = f"insider-trading-{ticker}"
@ -2200,7 +2211,7 @@ async def get_insider_trading(data:TickerData):
@app.post("/insider-trading-statistics") @app.post("/insider-trading-statistics")
async def get_insider_trading_statistics(data:TickerData): async def get_insider_trading_statistics(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"insider-trading-statistics-{ticker}" cache_key = f"insider-trading-statistics-{ticker}"
@ -2219,7 +2230,7 @@ async def get_insider_trading_statistics(data:TickerData):
return res return res
@app.post("/get-executives") @app.post("/get-executives")
async def get_executives(data:TickerData): async def get_executives(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"get-executives-{ticker}" cache_key = f"get-executives-{ticker}"
@ -2238,7 +2249,7 @@ async def get_executives(data:TickerData):
return res return res
@app.post("/get-sec-filings") @app.post("/get-sec-filings")
async def get_sec_filings(data:TickerData): async def get_sec_filings(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"get-sec-filings-{ticker}" cache_key = f"get-sec-filings-{ticker}"
@ -2271,7 +2282,7 @@ async def get_sec_filings(data:TickerData):
@app.get("/magnificent-seven") @app.get("/magnificent-seven")
async def get_magnificent_seven(): async def get_magnificent_seven(api_key: str = Security(get_api_key)):
cache_key = f"all_magnificent_seven" cache_key = f"all_magnificent_seven"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -2300,7 +2311,7 @@ async def get_magnificent_seven():
) )
@app.post("/ipo-calendar") @app.post("/ipo-calendar")
async def get_ipo_calendar(data:IPOData): async def get_ipo_calendar(data:IPOData, api_key: str = Security(get_api_key)):
year = data.year year = data.year
cache_key = f"ipo-calendar-{year}" cache_key = f"ipo-calendar-{year}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2330,7 +2341,7 @@ async def get_ipo_calendar(data:IPOData):
) )
@app.get("/trending") @app.get("/trending")
async def get_trending(): async def get_trending(api_key: str = Security(get_api_key)):
cache_key = f"get-trending" cache_key = f"get-trending"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -2357,7 +2368,7 @@ async def get_trending():
) )
@app.post("/heatmaps") @app.post("/heatmaps")
async def get_trending(data: HeatMapData): async def get_trending(data: HeatMapData, api_key: str = Security(get_api_key)):
index = data.index index = data.index
cache_key = f"get-heatmaps-{index}" cache_key = f"get-heatmaps-{index}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2385,7 +2396,7 @@ async def get_trending(data: HeatMapData):
) )
@app.post("/pre-post-quote") @app.post("/pre-post-quote")
async def get_pre_post_quote(data:TickerData): async def get_pre_post_quote(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"get-pre-post-quote-{ticker}" cache_key = f"get-pre-post-quote-{ticker}"
@ -2404,7 +2415,7 @@ async def get_pre_post_quote(data:TickerData):
return res return res
@app.post("/bull-bear-say") @app.post("/bull-bear-say")
async def get_bull_bear_say(data:TickerData): async def get_bull_bear_say(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"bull-bear-say-{ticker}" cache_key = f"bull-bear-say-{ticker}"
@ -2424,7 +2435,7 @@ async def get_bull_bear_say(data:TickerData):
@app.post("/options-net-flow-ticker") @app.post("/options-net-flow-ticker")
async def get_options_net_flow(data:TickerData): async def get_options_net_flow(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"options-net-flow-ticker-{ticker}" cache_key = f"options-net-flow-ticker-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2442,7 +2453,7 @@ async def get_options_net_flow(data:TickerData):
return res return res
@app.post("/options-plot-ticker") @app.post("/options-plot-ticker")
async def get_options_plot_ticker(data:TickerData): async def get_options_plot_ticker(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"options-plot-ticker-{ticker}" cache_key = f"options-plot-ticker-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2461,7 +2472,7 @@ async def get_options_plot_ticker(data:TickerData):
@app.post("/options-flow-ticker") @app.post("/options-flow-ticker")
async def get_options_flow_ticker(data:TickerData): async def get_options_flow_ticker(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"options-flow-{ticker}" cache_key = f"options-flow-{ticker}"
@ -2498,7 +2509,7 @@ async def get_options_flow_ticker(data:TickerData):
) )
@app.get("/options-flow-feed") @app.get("/options-flow-feed")
async def get_options_flow_feed(): async def get_options_flow_feed(api_key: str = Security(get_api_key)):
try: try:
with open(f"json/options-flow/feed/data.json", 'rb') as file: with open(f"json/options-flow/feed/data.json", 'rb') as file:
res_list = orjson.loads(file.read()) res_list = orjson.loads(file.read())
@ -2514,7 +2525,7 @@ async def get_options_flow_feed():
@app.get("/options-zero-dte") @app.get("/options-zero-dte")
async def get_options_flow_feed(): async def get_options_flow_feed(api_key: str = Security(get_api_key)):
try: try:
with open(f"json/options-flow/zero-dte/data.json", 'rb') as file: with open(f"json/options-flow/zero-dte/data.json", 'rb') as file:
res_list = orjson.loads(file.read()) res_list = orjson.loads(file.read())
@ -2530,7 +2541,7 @@ async def get_options_flow_feed():
@app.post("/options-bubble") @app.post("/options-bubble")
async def get_options_bubble(data:TickerData): async def get_options_bubble(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"options-bubble-{ticker}" cache_key = f"options-bubble-{ticker}"
@ -2550,7 +2561,7 @@ async def get_options_bubble(data:TickerData):
@app.get("/top-analysts") @app.get("/top-analysts")
async def get_all_analysts(): async def get_all_analysts(api_key: str = Security(get_api_key)):
cache_key = f"top-analysts" cache_key = f"top-analysts"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -2567,7 +2578,7 @@ async def get_all_analysts():
return res return res
@app.get("/top-analysts-stocks") @app.get("/top-analysts-stocks")
async def get_all_analysts(): async def get_all_analysts(api_key: str = Security(get_api_key)):
cache_key = f"top-analysts-stocks" cache_key = f"top-analysts-stocks"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -2584,7 +2595,7 @@ async def get_all_analysts():
return res return res
@app.post("/analyst-stats") @app.post("/analyst-stats")
async def get_all_analysts(data:AnalystId): async def get_all_analysts(data:AnalystId, api_key: str = Security(get_api_key)):
analyst_id = data.analystId analyst_id = data.analystId
cache_key = f"analyst-stats-{analyst_id}" cache_key = f"analyst-stats-{analyst_id}"
@ -2603,7 +2614,7 @@ async def get_all_analysts(data:AnalystId):
return res return res
@app.post("/wiim") @app.post("/wiim")
async def get_wiim(data:TickerData): async def get_wiim(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"wiim-{ticker}" cache_key = f"wiim-{ticker}"
@ -2622,7 +2633,7 @@ async def get_wiim(data:TickerData):
return res return res
@app.get("/rss-feed-wiim") @app.get("/rss-feed-wiim")
async def get_rss_feed_wiim(): async def get_rss_feed_wiim(api_key: str = Security(get_api_key)):
cache_key = f"rss_feed_wiim" cache_key = f"rss_feed_wiim"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2639,7 +2650,7 @@ async def get_rss_feed_wiim():
return res return res
@app.post("/sentiment-analysis") @app.post("/sentiment-analysis")
async def get_sentiment_analysis(data:TickerData): async def get_sentiment_analysis(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"sentiment-analysis-{ticker}" cache_key = f"sentiment-analysis-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2656,7 +2667,7 @@ async def get_sentiment_analysis(data:TickerData):
return res return res
@app.post("/trend-analysis") @app.post("/trend-analysis")
async def get_trend_analysis(data:TickerData): async def get_trend_analysis(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"trend-analysis-{ticker}" cache_key = f"trend-analysis-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2673,7 +2684,7 @@ async def get_trend_analysis(data:TickerData):
return res return res
@app.post("/price-analysis") @app.post("/price-analysis")
async def get_price_analysis(data:TickerData): async def get_price_analysis(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"price-analysis-{ticker}" cache_key = f"price-analysis-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2704,7 +2715,7 @@ async def get_price_analysis(data:TickerData):
@app.post("/fundamental-predictor-analysis") @app.post("/fundamental-predictor-analysis")
async def get_fundamental_predictor_analysis(data:TickerData): async def get_fundamental_predictor_analysis(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"fundamental-predictor-analysis-{ticker}" cache_key = f"fundamental-predictor-analysis-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2722,7 +2733,7 @@ async def get_fundamental_predictor_analysis(data:TickerData):
@app.post("/value-at-risk") @app.post("/value-at-risk")
async def get_trend_analysis(data:TickerData): async def get_trend_analysis(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"value-at-risk-{ticker}" cache_key = f"value-at-risk-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2739,7 +2750,7 @@ async def get_trend_analysis(data:TickerData):
return res return res
@app.post("/government-contract") @app.post("/government-contract")
async def get_government_contract(data:TickerData): async def get_government_contract(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"government-contract-{ticker}" cache_key = f"government-contract-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2756,7 +2767,7 @@ async def get_government_contract(data:TickerData):
return res return res
@app.post("/lobbying") @app.post("/lobbying")
async def get_lobbying(data:TickerData): async def get_lobbying(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"lobbying-{ticker}" cache_key = f"lobbying-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2773,7 +2784,7 @@ async def get_lobbying(data:TickerData):
return res return res
@app.post("/enterprise-values") @app.post("/enterprise-values")
async def get_enterprise_values(data:TickerData): async def get_enterprise_values(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"enterprise-values-{ticker}" cache_key = f"enterprise-values-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2791,7 +2802,7 @@ async def get_enterprise_values(data:TickerData):
@app.post("/share-statistics") @app.post("/share-statistics")
async def get_enterprise_values(data:TickerData): async def get_enterprise_values(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"share-statistics-{ticker}" cache_key = f"share-statistics-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2809,7 +2820,7 @@ async def get_enterprise_values(data:TickerData):
@app.post("/politician-stats") @app.post("/politician-stats")
async def get_politician_stats(data:PoliticianId): async def get_politician_stats(data:PoliticianId, api_key: str = Security(get_api_key)):
politician_id = data.politicianId.lower() politician_id = data.politicianId.lower()
cache_key = f"politician-stats-{politician_id}" cache_key = f"politician-stats-{politician_id}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2839,7 +2850,7 @@ async def get_politician_stats(data:PoliticianId):
) )
@app.get("/all-politicians") @app.get("/all-politicians")
async def get_all_politician(): async def get_all_politician(api_key: str = Security(get_api_key)):
cache_key = f"all-politician" cache_key = f"all-politician"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2871,7 +2882,7 @@ async def get_all_politician():
@app.get("/most-shorted-stocks") @app.get("/most-shorted-stocks")
async def get_most_shorted_stocks(): async def get_most_shorted_stocks(api_key: str = Security(get_api_key)):
cache_key = f"most-shorted-stocks" cache_key = f"most-shorted-stocks"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -2887,7 +2898,7 @@ async def get_most_shorted_stocks():
return res return res
@app.get("/most-retail-volume") @app.get("/most-retail-volume")
async def get_most_retail_volume(): async def get_most_retail_volume(api_key: str = Security(get_api_key)):
cache_key = f"most-retail-volume" cache_key = f"most-retail-volume"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -2904,7 +2915,7 @@ async def get_most_retail_volume():
@app.post("/retail-volume") @app.post("/retail-volume")
async def get_retail_volume(data:TickerData): async def get_retail_volume(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"retail-volume-{ticker}" cache_key = f"retail-volume-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2921,7 +2932,7 @@ async def get_retail_volume(data:TickerData):
return res return res
@app.post("/dark-pool") @app.post("/dark-pool")
async def get_dark_pool(data:TickerData): async def get_dark_pool(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"dark-pool-{ticker}" cache_key = f"dark-pool-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2939,7 +2950,7 @@ async def get_dark_pool(data:TickerData):
@app.get("/dark-pool-flow") @app.get("/dark-pool-flow")
async def get_dark_pool_flow(): async def get_dark_pool_flow(api_key: str = Security(get_api_key)):
cache_key = f"dark-flow-flow" cache_key = f"dark-flow-flow"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2967,7 +2978,7 @@ async def get_dark_pool_flow():
@app.post("/market-maker") @app.post("/market-maker")
async def get_market_maker(data:TickerData): async def get_market_maker(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"market-maker-{ticker}" cache_key = f"market-maker-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -2984,7 +2995,7 @@ async def get_market_maker(data:TickerData):
return res return res
@app.post("/clinical-trial") @app.post("/clinical-trial")
async def get_clinical_trial(data:TickerData): async def get_clinical_trial(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"clinical-trial-{ticker}" cache_key = f"clinical-trial-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -3015,7 +3026,7 @@ async def get_clinical_trial(data:TickerData):
@app.get("/fda-calendar") @app.get("/fda-calendar")
async def get_market_maker(): async def get_market_maker(api_key: str = Security(get_api_key)):
cache_key = f"fda-calendar" cache_key = f"fda-calendar"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
if cached_result: if cached_result:
@ -3032,7 +3043,7 @@ async def get_market_maker():
@app.post("/fail-to-deliver") @app.post("/fail-to-deliver")
async def get_fail_to_deliver(data:TickerData): async def get_fail_to_deliver(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"fail-to-deliver-{ticker}" cache_key = f"fail-to-deliver-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -3049,7 +3060,7 @@ async def get_fail_to_deliver(data:TickerData):
return res return res
@app.post("/borrowed-share") @app.post("/borrowed-share")
async def get_borrowed_share(data:TickerData): async def get_borrowed_share(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"borrowed-share-{ticker}" cache_key = f"borrowed-share-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -3067,7 +3078,7 @@ async def get_borrowed_share(data:TickerData):
@app.post("/analyst-insight") @app.post("/analyst-insight")
async def get_analyst_insight(data:TickerData): async def get_analyst_insight(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"analyst-insight-{ticker}" cache_key = f"analyst-insight-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)
@ -3085,7 +3096,7 @@ async def get_analyst_insight(data:TickerData):
@app.post("/implied-volatility") @app.post("/implied-volatility")
async def get_clinical_trial(data:TickerData): async def get_clinical_trial(data:TickerData, api_key: str = Security(get_api_key)):
ticker = data.ticker.upper() ticker = data.ticker.upper()
cache_key = f"implied-volatility-{ticker}" cache_key = f"implied-volatility-{ticker}"
cached_result = redis_client.get(cache_key) cached_result = redis_client.get(cache_key)