36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
import asyncio
|
|
|
|
from config import load_config
|
|
from docker_manager import DockerManager
|
|
from middleware import ProxyMiddleware
|
|
|
|
|
|
docker_mgr = DockerManager()
|
|
routes = load_config("config.yml")
|
|
|
|
|
|
class _LifespanApp:
|
|
"""Minimal ASGI app that only handles lifespan events."""
|
|
|
|
async def __call__(self, scope, receive, send):
|
|
if scope["type"] != "lifespan":
|
|
return
|
|
task = None
|
|
while True:
|
|
event = await receive()
|
|
if event["type"] == "lifespan.startup":
|
|
task = asyncio.create_task(docker_mgr.idle_watcher())
|
|
await send({"type": "lifespan.startup.complete"})
|
|
elif event["type"] == "lifespan.shutdown":
|
|
if task:
|
|
task.cancel()
|
|
try:
|
|
await task
|
|
except asyncio.CancelledError:
|
|
pass
|
|
await send({"type": "lifespan.shutdown.complete"})
|
|
return
|
|
|
|
|
|
app = ProxyMiddleware(_LifespanApp(), routes=routes, docker=docker_mgr)
|