view video.py @ 4:c8a41359505c

server provides video listing from disk
author drewp@bigasterisk.com
date Sat, 25 Mar 2023 16:01:56 -0700
parents ee55ed10faec
children 75b54be050bc
line wrap: on
line source

import asyncio
import logging
from typing import List
from pathlib import Path
import uvicorn
from prometheus_client import Gauge
from starlette.applications import Starlette
from starlette.requests import Request
from starlette.responses import HTMLResponse, JSONResponse
from starlette.routing import Route
from starlette_exporter import PrometheusMiddleware, handle_metrics
from video_service import findAll

logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger()


def root(req):
    return HTMLResponse("api")


def videos(req: Request) -> JSONResponse:
    return JSONResponse({
        "videos": [{
            'webRelPath': vf.webRelPath,
            'label': vf.label,
        } for vf in findAll()]
    })


def main():

    app = Starlette(
        debug=True,
        routes=[
            Route('/video/api/', root),
            Route('/video/api/videos', videos),
        ],
    )

    app.add_middleware(PrometheusMiddleware, app_name='video_api')
    app.add_route("/metrics", handle_metrics)
    return app


app = main()