Skip to content

Commit 18a85f5

Browse files
committed
Open browser after uvicorn is ready
1 parent 489beb8 commit 18a85f5

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

sphinx_autobuild/__main__.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import argparse
66
import shlex
77
import sys
8+
import webbrowser
9+
from contextlib import asynccontextmanager
810
from pathlib import Path
911

1012
import colorama
@@ -22,7 +24,7 @@
2224
from sphinx_autobuild.filter import IgnoreFilter
2325
from sphinx_autobuild.middleware import JavascriptInjectorMiddleware
2426
from sphinx_autobuild.server import RebuildServer
25-
from sphinx_autobuild.utils import find_free_port, open_browser, show_message
27+
from sphinx_autobuild.utils import find_free_port, show_message
2628

2729

2830
def main(argv=()):
@@ -81,32 +83,40 @@ def main(argv=()):
8183
ignore_dirs = list(filter(None, ignore_dirs))
8284
ignore_handler = IgnoreFilter(ignore_dirs, args.re_ignore)
8385

84-
app = _create_app(watch_dirs, ignore_handler, builder, serve_dir, url_host)
86+
app = _create_app(
87+
watch_dirs, ignore_handler, builder, serve_dir, url_host, args.open_browser
88+
)
8589

8690
if not args.no_initial_build:
8791
show_message("Starting initial build")
8892
builder(changed_paths=())
8993

90-
if args.open_browser:
91-
open_browser(url_host)
92-
9394
show_message("Waiting to detect changes...")
9495
try:
9596
uvicorn.run(app, host=host_name, port=port_num, log_level="warning")
9697
except KeyboardInterrupt:
9798
show_message("Server ceasing operations. Cheerio!")
9899

99100

100-
def _create_app(watch_dirs, ignore_handler, builder, out_dir, url_host):
101+
def _create_app(
102+
watch_dirs, ignore_handler, builder, out_dir, url_host, open_browser=False
103+
):
101104
watcher = RebuildServer(watch_dirs, ignore_handler, change_callback=builder)
102105

106+
@asynccontextmanager
107+
async def lifespan(app):
108+
async with watcher.lifespan(app):
109+
if open_browser:
110+
webbrowser.open(f"http://{url_host}")
111+
yield
112+
103113
return Starlette(
104114
routes=[
105115
WebSocketRoute("/websocket-reload", watcher, name="reload"),
106116
Mount("/", app=StaticFiles(directory=out_dir, html=True), name="static"),
107117
],
108118
middleware=[Middleware(JavascriptInjectorMiddleware, ws_url=url_host)],
109-
lifespan=watcher.lifespan,
119+
lifespan=lifespan,
110120
)
111121

112122

sphinx_autobuild/utils.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import shlex
66
import socket
7-
import webbrowser
87

98
from colorama import Fore, Style
109

@@ -20,10 +19,6 @@ def find_free_port():
2019
return s.getsockname()[1]
2120

2221

23-
def open_browser(url_host: str) -> None:
24-
webbrowser.open(f"http://{url_host}")
25-
26-
2722
def _log(text, *, colour):
2823
print(f"{Fore.GREEN}[sphinx-autobuild] {colour}{text}{Style.RESET_ALL}")
2924

0 commit comments

Comments
 (0)