annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
1 import logging
5
75b54be050bc show one subdir of archive at once, with folders and parents-breadcrumbs
drewp@bigasterisk.com
parents: 4
diff changeset
2
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
3 from prometheus_client import Gauge
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
4 from starlette.applications import Starlette
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
5 from starlette.requests import Request
4
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
6 from starlette.responses import HTMLResponse, JSONResponse
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
7 from starlette.routing import Route
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
8 from starlette_exporter import PrometheusMiddleware, handle_metrics
5
75b54be050bc show one subdir of archive at once, with folders and parents-breadcrumbs
drewp@bigasterisk.com
parents: 4
diff changeset
9
75b54be050bc show one subdir of archive at once, with folders and parents-breadcrumbs
drewp@bigasterisk.com
parents: 4
diff changeset
10 from video_service import findInDir, findSubdirs
0
drewp@bigasterisk.com
parents:
diff changeset
11
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
12 logging.basicConfig(level=logging.DEBUG)
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
13 log = logging.getLogger()
0
drewp@bigasterisk.com
parents:
diff changeset
14
drewp@bigasterisk.com
parents:
diff changeset
15
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
16 def root(req):
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
17 return HTMLResponse("api")
0
drewp@bigasterisk.com
parents:
diff changeset
18
drewp@bigasterisk.com
parents:
diff changeset
19
4
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
20 def videos(req: Request) -> JSONResponse:
5
75b54be050bc show one subdir of archive at once, with folders and parents-breadcrumbs
drewp@bigasterisk.com
parents: 4
diff changeset
21 subdir = req.query_params.get('subdir', '/') # danger user input
4
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
22 return JSONResponse({
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
23 "videos": [{
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
24 'webRelPath': vf.webRelPath,
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
25 'label': vf.label,
5
75b54be050bc show one subdir of archive at once, with folders and parents-breadcrumbs
drewp@bigasterisk.com
parents: 4
diff changeset
26 } for vf in findInDir(subdir)],
75b54be050bc show one subdir of archive at once, with folders and parents-breadcrumbs
drewp@bigasterisk.com
parents: 4
diff changeset
27 "subdirs":
75b54be050bc show one subdir of archive at once, with folders and parents-breadcrumbs
drewp@bigasterisk.com
parents: 4
diff changeset
28 list(findSubdirs(subdir)),
4
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
29 })
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
30
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
31
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
32 def main():
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
33
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
34 app = Starlette(
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
35 debug=True,
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
36 routes=[
4
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
37 Route('/video/api/', root),
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
38 Route('/video/api/videos', videos),
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
39 ],
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
40 )
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
41
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
42 app.add_middleware(PrometheusMiddleware, app_name='video_api')
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
43 app.add_route("/metrics", handle_metrics)
4
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
44 return app
3
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
45
ee55ed10faec start py service deployment
drewp@bigasterisk.com
parents: 0
diff changeset
46
4
c8a41359505c server provides video listing from disk
drewp@bigasterisk.com
parents: 3
diff changeset
47 app = main()