Initial public release

This commit is contained in:
sinmb79
2026-03-30 13:19:11 +09:00
commit 92a692b63c
116 changed files with 5822 additions and 0 deletions

52
hydra/api/regime.py Normal file
View File

@@ -0,0 +1,52 @@
# hydra/api/regime.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_regime(redis_client) -> None:
global _redis
_redis = redis_client
@router.get("/regime")
async def get_regime(
market: str,
symbol: str,
timeframe: str,
_: str = Depends(verify_api_key),
):
if _redis is None:
raise HTTPException(status_code=503, detail="Redis not initialized")
key = f"hydra:regime:{market}:{symbol}:{timeframe}"
raw = _redis.get(key)
if raw is None:
raise HTTPException(status_code=404, detail="No regime cached for this symbol")
data = json.loads(raw)
return {
"market": market,
"symbol": symbol,
"timeframe": timeframe,
"regime": data["regime"],
"detected_at": data["detected_at"],
}
@router.get("/regime/list")
async def list_regimes(_: str = Depends(verify_api_key)):
if _redis is None:
raise HTTPException(status_code=503, detail="Redis not initialized")
keys = _redis.keys("hydra:regime:*")
result = []
for key in keys:
parts = key.split(":")
if len(parts) >= 5:
result.append({
"market": parts[2],
"symbol": ":".join(parts[3:-1]),
"timeframe": parts[-1],
})
return result