Skip to content
Snippets Groups Projects
startup.py 1.22 KiB
Newer Older
from multiprocessing import Process
import requests
from requests.adapters import HTTPAdapter
from urllib3 import Retry
import uvicorn
import webbrowser


def main(host, port, confpath, reload, debug) -> None:

    server_process = Process(
        target=uvicorn.run,
        args=(f'{confpath}:app',),
        kwargs={
            'app_dir': '..',
            'host': host,
            'port': int(port),
            'log_level': 'debug',
            'reload': reload,
        },
        daemon=(reload is False),
    )
    url = f'http://{host}:{int(port):04d}/status'
    print(url)
    server_process.start()

    try:
        sesh = requests.Session()
        retries = Retry(
            total=5,
            backoff_factor=0.1,
        )
        sesh.mount('http://', HTTPAdapter(max_retries=retries))
        resp = sesh.get(url)
        assert resp.status_code == 200
    except Exception:
        print('Error starting server')
        server_process.terminate()
        exit()

    webbrowser.open(url, new=1, autoraise=True)

    if debug:
        print('Running in debug mode')
    print('Type "STOP" to stop server')
    input_str = ''
    while input_str.upper() != 'STOP':
        input_str = input()

    server_process.terminate()