Mercurial > code > home > repos > front-door-display
view schedule_server.py @ 21:a90cb6927c7d default tip
fix countdown queries. Display "now" instead of "In -0.4 hours"
author | drewp@bigasterisk.com |
---|---|
date | Sat, 07 Sep 2024 17:47:36 -0700 |
parents | 4092f674046d |
children |
line wrap: on
line source
''' GET /data fetch https://bigasterisk.com/gcalendarwatch/graph/calendar/countdown/events { countdown: [ {'label': 'asher birthday', 'when': '6 days 🌞🌞🌞🌞🌞🌞'}. ] } fetch iphone location events service in /my/serv/icloud-sync { map: { image: 'bayarea.png', locations: [ {'label':'K', x: px, y: px} ] } } fetch calendar upcoming { time: { label: "23:30", daySec: 20000, scheduleRanges: [ {label: 'youtube', startDaySec: 59400, endDaySec: 63000}, {label: 'minecraft', startDaySec: 64800, endDaySec: 68400}, {label: 'roblox', startDaySec: 64800, endDaySec: 68400}, ] } } ''' import asyncio import datetime import json from sse_starlette.sse import EventSourceResponse from starlette.applications import Starlette from starlette.routing import Route def daySec(t: datetime.datetime): return ( t - t.replace(hour=0, minute=0, second=0, microsecond=0)).total_seconds() async def updates(): while True: now = datetime.datetime.now() yield json.dumps({ 'time': { 'label': now.strftime("%H:%M"), 'daySec': daySec(now), }, 'map': {}, 'countdown': {}, }) await asyncio.sleep(60) async def events(request) -> EventSourceResponse: generator = updates() return EventSourceResponse(generator, headers={ 'Access-Control-Allow-Origin': '*', }) app = Starlette(routes=[ Route("/events", events), ]) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8005)