# HG changeset patch # User drewp@bigasterisk.com # Date 1717710574 25200 # Node ID 4092f674046d0171382cf7b2054ba39ef7badf53 # Parent affb3c8f3f587a71e5b78a33bc3aa9406a8e002c + schedule_server.py diff -r affb3c8f3f58 -r 4092f674046d schedule_server.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/schedule_server.py Thu Jun 06 14:49:34 2024 -0700 @@ -0,0 +1,79 @@ +''' +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)