annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
1 '''
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
2 GET /data
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
3
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
4 fetch https://bigasterisk.com/gcalendarwatch/graph/calendar/countdown/events
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
5 {
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
6 countdown: [
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
7 {'label': 'asher birthday', 'when': '6 days 🌞🌞🌞🌞🌞🌞'}.
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
8 ]
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
9 }
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
10
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
11 fetch iphone location events service in /my/serv/icloud-sync
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
12 {
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
13 map: {
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
14 image: 'bayarea.png',
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
15 locations: [
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
16 {'label':'K', x: px, y: px}
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
17 ]
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
18 }
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
19 }
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
20
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
21 fetch calendar upcoming
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
22 {
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
23 time: {
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
24 label: "23:30",
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
25 daySec: 20000,
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
26 scheduleRanges: [
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
27 {label: 'youtube', startDaySec: 59400, endDaySec: 63000},
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
28 {label: 'minecraft', startDaySec: 64800, endDaySec: 68400},
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
29 {label: 'roblox', startDaySec: 64800, endDaySec: 68400},
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
30 ]
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
31 }
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
32 }
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
33 '''
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
34
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
35 import asyncio
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
36 import datetime
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
37 import json
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
38
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
39 from sse_starlette.sse import EventSourceResponse
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
40 from starlette.applications import Starlette
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
41 from starlette.routing import Route
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
42
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
43
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
44 def daySec(t: datetime.datetime):
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
45 return (
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
46 t -
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
47 t.replace(hour=0, minute=0, second=0, microsecond=0)).total_seconds()
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
48
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
49
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
50 async def updates():
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
51 while True:
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
52 now = datetime.datetime.now()
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
53 yield json.dumps({
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
54 'time': {
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
55 'label': now.strftime("%H:%M"),
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
56 'daySec': daySec(now),
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
57
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
58 },
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
59 'map': {},
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
60 'countdown': {},
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
61 })
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
62 await asyncio.sleep(60)
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
63
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
64
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
65 async def events(request) -> EventSourceResponse:
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
66 generator = updates()
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
67 return EventSourceResponse(generator,
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
68 headers={
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
69 'Access-Control-Allow-Origin': '*',
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
70 })
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
71
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
72
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
73 app = Starlette(routes=[
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
74 Route("/events", events),
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
75 ])
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
76
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
77 if __name__ == "__main__":
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
78 import uvicorn
4092f674046d + schedule_server.py
drewp@bigasterisk.com
parents:
diff changeset
79 uvicorn.run(app, host="0.0.0.0", port=8005)