Files
QuantumTerminal/backend/version_info.py
T

82 lines
2.3 KiB
Python

# version: v2 (Quantum Terminal)
"""
version_info.py — Quantum Terminal version endpoint.
Exposes:
GET /api/version
→ {
current: "1.0.0",
latest: "1.0.0",
update_available: false,
download_url: "https://github.com/YourUsername/QuantumTerminal/releases",
released_at: "",
banner_message: "",
telegram_url: "",
checked_at: "2026-05-21T00:00:00Z",
}
Behavior:
- current reads VERSION from bundled data (PyInstaller) or repo root (dev).
- No remote update checking in open-source version.
"""
from __future__ import annotations
import logging
import sys
import time
from datetime import datetime, timezone
from pathlib import Path
from typing import Optional
from fastapi import APIRouter
log = logging.getLogger("qt.version")
DOWNLOAD_BASE = "https://github.com/YourUsername/QuantumTerminal/releases"
CACHE_TTL_SEC = 600 # 10 min
def _read_bundled_version() -> str:
"""Load VERSION from PyInstaller bundle or dev repo root. Falls back to '1.0.0'."""
candidates = []
if getattr(sys, "frozen", False):
candidates.append(Path(getattr(sys, "_MEIPASS", ".")) / "VERSION")
candidates.append(Path(__file__).resolve().parents[2] / "VERSION") # repo root
candidates.append(Path(__file__).resolve().parents[1] / "VERSION")
candidates.append(Path.cwd() / "VERSION")
for p in candidates:
try:
if p.is_file():
v = p.read_text(encoding="utf-8").strip()
if v:
return v
except Exception:
continue
log.warning("VERSION file not found — using 1.0.0")
return "1.0.0"
CURRENT_VERSION = _read_bundled_version()
log.info(f"Quantum Terminal version: {CURRENT_VERSION}")
def create_version_router() -> APIRouter:
router = APIRouter(tags=["version"])
@router.get("/api/version")
async def api_version(refresh: bool = False):
return {
"current": CURRENT_VERSION,
"latest": CURRENT_VERSION,
"update_available": False,
"download_url": DOWNLOAD_BASE,
"released_at": "",
"banner_message": "",
"telegram_url": "",
"checked_at": datetime.now(timezone.utc).isoformat(),
}
return router