Initial public release
This commit is contained in:
53
hydra/api/supplemental.py
Normal file
53
hydra/api/supplemental.py
Normal file
@@ -0,0 +1,53 @@
|
||||
# hydra/api/supplemental.py
|
||||
import json
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from hydra.api.auth import verify_api_key
|
||||
|
||||
router = APIRouter(prefix="/data")
|
||||
_redis = None
|
||||
|
||||
|
||||
def set_redis_for_supplemental(redis_client) -> None:
|
||||
global _redis
|
||||
_redis = redis_client
|
||||
|
||||
|
||||
@router.get("/orderbook")
|
||||
async def get_orderbook(
|
||||
market: str,
|
||||
symbol: str,
|
||||
_: str = Depends(verify_api_key),
|
||||
):
|
||||
if _redis is None:
|
||||
raise HTTPException(status_code=503, detail="Redis not initialized")
|
||||
key = f"hydra:orderbook:{market}:{symbol}"
|
||||
raw = _redis.get(key)
|
||||
if raw is None:
|
||||
raise HTTPException(status_code=404, detail="No orderbook cached for this symbol")
|
||||
data = json.loads(raw)
|
||||
return {"market": market, "symbol": symbol, **data}
|
||||
|
||||
|
||||
@router.get("/events")
|
||||
async def get_events(_: str = Depends(verify_api_key)):
|
||||
if _redis is None:
|
||||
raise HTTPException(status_code=503, detail="Redis not initialized")
|
||||
raw = _redis.get("hydra:events:upcoming")
|
||||
if raw is None:
|
||||
return []
|
||||
return json.loads(raw)
|
||||
|
||||
|
||||
@router.get("/sentiment")
|
||||
async def get_sentiment(
|
||||
symbol: str,
|
||||
_: str = Depends(verify_api_key),
|
||||
):
|
||||
if _redis is None:
|
||||
raise HTTPException(status_code=503, detail="Redis not initialized")
|
||||
key = f"hydra:sentiment:{symbol}"
|
||||
raw = _redis.get(key)
|
||||
if raw is None:
|
||||
raise HTTPException(status_code=404, detail="No sentiment cached for this symbol")
|
||||
data = json.loads(raw)
|
||||
return {"symbol": symbol, **data}
|
||||
Reference in New Issue
Block a user