import argparse
import logging
from typing import Any
import marimo
from fastapi import FastAPI
import uvicorn
LOG_LEVELS = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
def parse_args(args: list[str] | None = None) -> dict[str, Any]:
parser = argparse.ArgumentParser()
parser.add_argument("--log-file", "-l")
parser.add_argument("--host", default="0.0.0.0")
parser.add_argument("--log-level", default="INFO", choices=LOG_LEVELS)
parser.add_argument("--dir", default="./notebooks")
parsed_args, unknown = parser.parse_known_args(args=args)
logging.info(f'unknown args - {unknown}')
return vars(parsed_args)
def start_server(host: str, dir: str) -> None:
server = (
marimo.create_asgi_app()
.with_app(path="", root=f'{dir}/workflow-metrics.py')
)
# Create a FastAPI app
app = FastAPI(host=host)
app.mount("/", server.build())
uvicorn.run(app, host=host, port=8080)
def main() -> None:
args = parse_args()
start_server(args.pop("host"), args.pop("dir"))
if __name__ == "__main__":
main()