Implement smarter reload handing on fastapi_vue.server(), simplify __main__, reload the main folder regardless of CWD.

This commit is contained in:
2026-06-29 18:49:18 +00:00
parent ec6a084969
commit 03aa31cedb
2 changed files with 13 additions and 5 deletions
+11 -3
View File
@@ -4,6 +4,7 @@ import asyncio
import logging import logging
import os import os
from contextlib import suppress from contextlib import suppress
from pathlib import Path
from typing import Any from typing import Any
import uvicorn import uvicorn
@@ -19,7 +20,7 @@ def run(
*, *,
listen: str | list[str] | None = None, listen: str | list[str] | None = None,
default_port: int = 8000, default_port: int = 8000,
reload: bool = False, reload: bool | Path = False,
workers: int | None = None, workers: int | None = None,
**uvicorn_config: Any, # noqa: ANN401 **uvicorn_config: Any, # noqa: ANN401
) -> None: ) -> None:
@@ -29,7 +30,9 @@ def run(
app: The ASGI application path (e.g., "myapp.main:app") app: The ASGI application path (e.g., "myapp.main:app")
listen: Endpoint string(s) (see parse_endpoint for formats). listen: Endpoint string(s) (see parse_endpoint for formats).
default_port: Port to use when not specified in listen args. default_port: Port to use when not specified in listen args.
reload: Enable auto-reload (requires uvicorn.run, single endpoint only). reload: Enable auto-reload. If a Path is given, reload watches that
directory. True enables reload without setting a reload directory.
False disables reload and clears any reload_dirs.
workers: Number of worker processes (requires uvicorn.run, single endpoint only). workers: Number of worker processes (requires uvicorn.run, single endpoint only).
**uvicorn_config: Additional uvicorn config options (overrides all other settings). **uvicorn_config: Additional uvicorn config options (overrides all other settings).
@@ -39,7 +42,12 @@ def run(
msg = "No endpoints to serve; check listen configuration" msg = "No endpoints to serve; check listen configuration"
raise ValueError(msg) raise ValueError(msg)
conf: dict[str, object] = {"app": app, "reload": reload, "workers": workers} if isinstance(reload, Path):
uvicorn_config["reload_dirs"] = [str(reload)]
elif not reload:
uvicorn_config.pop("reload_dirs", None)
conf: dict[str, object] = {"app": app, "reload": bool(reload), "workers": workers}
proxy = os.getenv("FORWARDED_ALLOW_IPS", "127.0.0.1,::1") proxy = os.getenv("FORWARDED_ALLOW_IPS", "127.0.0.1,::1")
if proxy: if proxy:
conf["proxy_headers"] = True conf["proxy_headers"] = True
+2 -2
View File
@@ -3,6 +3,7 @@
import argparse import argparse
import os import os
from pathlib import Path
from fastapi_vue import server from fastapi_vue import server
@@ -20,12 +21,11 @@ def main() -> None:
help=(f"Endpoint (default: localhost:{DEFAULT_PORT})."), help=(f"Endpoint (default: localhost:{DEFAULT_PORT})."),
) )
args = parser.parse_args() args = parser.parse_args()
dev = {"reload": True, "reload_dirs": ["MODULE_NAME"]} if DEVMODE else {}
server.run( server.run(
"APP_MODULE:APP_VAR", "APP_MODULE:APP_VAR",
listen=args.listen, listen=args.listen,
default_port=DEFAULT_PORT, default_port=DEFAULT_PORT,
**dev, reload=Path(__file__).parent if DEVMODE else False,
) )