File size: 2,367 Bytes
c0ad3ec
088cf8e
c0ad3ec
 
 
 
088cf8e
 
c0ad3ec
 
088cf8e
 
 
c0ad3ec
088cf8e
c0ad3ec
088cf8e
 
c0ad3ec
 
 
 
 
 
 
 
 
 
 
 
088cf8e
c0ad3ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
492b8ad
 
c0ad3ec
 
 
 
 
 
 
 
 
 
 
088cf8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from fastapi import APIRouter
from fastapi.responses import RedirectResponse, JSONResponse
from pathlib import Path
from pydantic import BaseModel
import toml
from loguru import logger
from environs import Env
import json


env = Env()
env.read_env()
REDIRECT_TO_GRADIO_UI = env.bool("REDIRECT_TO_GRADIO_UI", True)

router = APIRouter(tags=["management"])


#### Health Check #################################################
class HealthResponse(BaseModel):
    status: str = "ok"


@router.get("/management/health", response_model=HealthResponse)
async def health_check():
    """
    Health check endpoint, returns 200 if the system is running
    """
    return HealthResponse()


#### Version #######################################################
__version__ = None


def _load_version():
    global __version__
    if __version__ is not None:
        return __version__

    current_dir = Path(__file__).resolve().parent.parent.parent
    for i in range(3):
        pyproject_path = current_dir / "pyproject.toml"
        if pyproject_path.exists():
            with open(pyproject_path, "r") as f:
                config = toml.load(f)
                __version__ = config["project"]["version"]
                logger.info(f"API Version: {__version__}")
                return __version__

    __version__ = "unknown"
    logger.warning(f"App Version is not found in pyproject.toml path: {pyproject_path}")
    return __version__


@router.get("/version")
@router.get("/management/version")
async def version_api():
    """
    Version endpoint, returns the version of the system
    """
    return {"version": _load_version()}


def _get_manifest() -> JSONResponse:
    print("get manifest")
    current_dir = Path(__file__).resolve().parent.parent.parent
    manifest_path = current_dir / "static" / "manifest.json"
    with open(manifest_path, "r") as f:
        return JSONResponse(json.load(f))


### root ##########################################################
@router.get("/")
async def root():
    """
    Redirect root to Gradio UI
    """
    if REDIRECT_TO_GRADIO_UI:
        return RedirectResponse(url="/ui")
    else:
        return _get_manifest()


### manifest #######################################################
@router.get("/manifest.json")
async def get_manifest():
    """Return the web app manifest"""
    return _get_manifest()