File size: 1,464 Bytes
2b2ebe7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""ASGI app entrypoint expected by openenv validate."""

from __future__ import annotations

import importlib.util
import os
import sys
from pathlib import Path
from typing import NoReturn

import uvicorn


def _load_impl_app() -> object:
    """Load FastAPI app from code-review-env/server.py."""

    repo_root = Path(__file__).resolve().parents[1]
    impl_root = repo_root / "code-review-env"
    impl_server = impl_root / "server.py"
    if not impl_server.exists():
        raise RuntimeError("Implementation server not found at code-review-env/server.py")
    if str(impl_root) not in sys.path:
        sys.path.insert(0, str(impl_root))
    spec = importlib.util.spec_from_file_location("code_review_env_impl_server", impl_server)
    if spec is None or spec.loader is None:
        raise RuntimeError("Failed to create module spec for implementation server")
    module = importlib.util.module_from_spec(spec)
    sys.modules["code_review_env_impl_server"] = module
    spec.loader.exec_module(module)
    if not hasattr(module, "app"):
        raise RuntimeError("Implementation server module does not define app")
    return getattr(module, "app")


app = _load_impl_app()


def main() -> NoReturn:
    """Run the ASGI app with uvicorn on port 7860."""

    host = os.getenv("HOST", "0.0.0.0")
    port = int(os.getenv("PORT", "7860"))
    uvicorn.run("server:app", host=host, port=port)
    raise SystemExit(0)


if __name__ == "__main__":
    main()