Source code for httk.web.api
from pathlib import Path
from starlette.applications import Starlette
from .engine.site_engine import SiteEngine
from .model.config import SiteConfig
from .model.page import PublishReport
from .publishing.static import publish_site
from .runtime.asgi import create_app
from .runtime.devserver import run_dev_server
[docs]
def create_asgi_app(
srcdir: str | Path,
*,
baseurl: str | None = None,
compatibility_mode: bool = False,
config_name: str = "config",
debug: bool = False,
) -> Starlette:
config = SiteConfig.from_srcdir(
srcdir=srcdir,
baseurl=baseurl,
compatibility_mode=compatibility_mode,
config_name=config_name,
)
engine = SiteEngine(config)
return create_app(engine=engine, debug=debug)
[docs]
def serve(
srcdir: str | Path,
*,
host: str = "127.0.0.1",
port: int = 8080,
baseurl: str | None = None,
compatibility_mode: bool = False,
config_name: str = "config",
debug: bool = False,
) -> None:
app = create_asgi_app(
srcdir=srcdir,
baseurl=baseurl,
compatibility_mode=compatibility_mode,
config_name=config_name,
debug=debug,
)
run_dev_server(app=app, host=host, port=port)
[docs]
def publish(
srcdir: str | Path,
outdir: str | Path,
baseurl: str,
*,
compatibility_mode: bool = False,
config_name: str = "config",
use_urls_without_ext: bool | None = None,
) -> PublishReport:
publish_use_urls_without_ext = use_urls_without_ext if use_urls_without_ext is not None else not compatibility_mode
config = SiteConfig.from_srcdir(
srcdir=srcdir,
baseurl=baseurl,
compatibility_mode=compatibility_mode,
config_name=config_name,
publish_use_urls_without_ext=publish_use_urls_without_ext,
)
engine = SiteEngine(config)
return publish_site(engine=engine, outdir=outdir)