82 lines
2.3 KiB
Python
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
|