File size: 2,527 Bytes
31c8075
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from fastapi import FastAPI

import app as app_module


def test_app_py_exports_unified_fastapi_app() -> None:
    assert isinstance(app_module.app, FastAPI)


def test_app_py_exports_gradio_demo_for_space_sdk() -> None:
    assert type(app_module.demo).__name__ == "Blocks"


def test_app_py_serves_api_and_gradio_from_one_asgi_app() -> None:
    route_paths = {getattr(route, "path", "") for route in app_module.app.routes}

    assert "/health" in route_paths
    assert "/runs" in route_paths
    assert "" in route_paths


def test_app_py_defaults_to_spaces_friendly_bind(monkeypatch) -> None:
    monkeypatch.delenv("GRADIO_SERVER_NAME", raising=False)
    monkeypatch.delenv("GRADIO_SERVER_PORT", raising=False)
    monkeypatch.delenv("HOST", raising=False)
    monkeypatch.delenv("PORT", raising=False)

    assert app_module.server_config() == {"host": "0.0.0.0", "port": 7860}
    assert app_module.gradio_launch_config() == {"server_name": "0.0.0.0", "server_port": 7860}


def test_app_py_does_not_self_bind_under_gradio_space(monkeypatch) -> None:
    monkeypatch.setenv("SPACE_ID", "build-small-hackathon/agent-swarm-workbench")
    monkeypatch.setenv("SPACE_SDK", "gradio")

    assert app_module.should_self_launch() is False
    assert app_module.should_launch_gradio_space() is True


def test_app_py_does_not_self_bind_under_space_without_sdk_env(monkeypatch) -> None:
    monkeypatch.setenv("SPACE_ID", "build-small-hackathon/agent-swarm-workbench")
    monkeypatch.delenv("SPACE_SDK", raising=False)
    monkeypatch.delenv("HF_SPACE_SDK", raising=False)

    assert app_module.should_self_launch() is False


def test_app_py_can_force_self_launch(monkeypatch) -> None:
    monkeypatch.setenv("SPACE_ID", "build-small-hackathon/agent-swarm-workbench")
    monkeypatch.setenv("FORCE_SELF_LAUNCH", "1")

    assert app_module.should_self_launch() is True
    assert app_module.should_launch_gradio_space() is False


def test_app_py_self_binds_outside_gradio_space(monkeypatch) -> None:
    monkeypatch.delenv("SPACE_ID", raising=False)
    monkeypatch.delenv("SPACE_SDK", raising=False)
    monkeypatch.delenv("FORCE_SELF_LAUNCH", raising=False)

    assert app_module.should_self_launch() is True
    assert app_module.should_launch_gradio_space() is False


def test_space_metadata_uses_gradio_sdk_app_py() -> None:
    readme = open("README.md", encoding="utf-8").read()

    assert "sdk: gradio" in readme
    assert "app_file: app.py" in readme
    assert "sdk: docker" not in readme.split("---", 2)[1]