mirror of
https://github.com/wassname/optuna-dashboard.git
synced 2026-08-29 11:23:17 +08:00
67 lines
1.5 KiB
Python
67 lines
1.5 KiB
Python
import http.server
|
|
import socket
|
|
import socketserver
|
|
import threading
|
|
from wsgiref.simple_server import make_server
|
|
|
|
import optuna
|
|
from optuna_dashboard import wsgi
|
|
import pytest
|
|
|
|
from .utils import clear_inmemory_cache
|
|
|
|
|
|
def get_free_port() -> int:
|
|
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
tcp.bind(("", 0))
|
|
_, port = tcp.getsockname()
|
|
tcp.close()
|
|
return port
|
|
|
|
|
|
def make_test_server(
|
|
request: pytest.FixtureRequest, storage: optuna.storages.InMemoryStorage
|
|
) -> str:
|
|
addr = "127.0.0.1"
|
|
port = get_free_port()
|
|
app = wsgi(storage)
|
|
httpd = make_server(addr, port, app)
|
|
thread = threading.Thread(target=httpd.serve_forever)
|
|
thread.start()
|
|
|
|
def stop_server() -> None:
|
|
clear_inmemory_cache()
|
|
httpd.shutdown()
|
|
httpd.server_close()
|
|
thread.join()
|
|
|
|
request.addfinalizer(stop_server)
|
|
|
|
return f"http://{addr}:{port}/dashboard"
|
|
|
|
|
|
def make_standalone_server(request: pytest.FixtureRequest) -> str:
|
|
addr = "127.0.0.1"
|
|
port = get_free_port()
|
|
directory = "./standalone_app/"
|
|
|
|
Handler = http.server.SimpleHTTPRequestHandler
|
|
httpd = socketserver.TCPServer(
|
|
("", port), lambda *args, **kwargs: Handler(*args, directory=directory, **kwargs)
|
|
)
|
|
|
|
def serve_httpd():
|
|
httpd.serve_forever()
|
|
|
|
thread = threading.Thread(target=serve_httpd)
|
|
thread.start()
|
|
|
|
def stop_server() -> None:
|
|
httpd.shutdown()
|
|
httpd.server_close()
|
|
thread.join()
|
|
|
|
request.addfinalizer(stop_server)
|
|
|
|
return f"http://{addr}:{port}"
|