view video.py @ 5:75b54be050bc

show one subdir of archive at once, with folders and parents-breadcrumbs
author drewp@bigasterisk.com
date Thu, 30 Mar 2023 20:39:40 -0700
parents c8a41359505c
children ccfea3625cf6
line wrap: on
line source

import logging

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 findInDir, findSubdirs

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


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


def videos(req: Request) -> JSONResponse:
    subdir = req.query_params.get('subdir', '/')  # danger user input
    return JSONResponse({
        "videos": [{
            'webRelPath': vf.webRelPath,
            'label': vf.label,
        } for vf in findInDir(subdir)],
        "subdirs":
        list(findSubdirs(subdir)),
    })


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()