annotate environment.py @ 0:3c1bc3bc5a6c

pull out of homeauto/ project, and add skaffold/pipenv
author drewp@bigasterisk.com
date Thu, 31 Mar 2022 22:03:43 -0700
parents
children 0f532eb91364
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
1 #!/usr/bin/python
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
2 """
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
3 return some rdf about the environment, e.g. the current time,
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
4 daytime/night, overall modes like 'maintenance mode', etc
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
5
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
6 """
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
7 import datetime
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
8
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
9 import cyclone.web
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
10 from dateutil.relativedelta import FR, relativedelta
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
11 from dateutil.tz import tzlocal
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
12 from docopt import docopt
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
13 from rdflib import Literal, Namespace
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
14 from twisted.internet import defer, reactor, task
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
15
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
16 from standardservice.logsetup import log, verboseLogging
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
17 from patchablegraph import (CycloneGraphEventsHandler, CycloneGraphHandler, PatchableGraph)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
18
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
19 from patch_cyclone import patch_sse
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
20 from rdfdoc import Doc
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
21 from twilight import isWithinTwilight
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
22
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
23 patch_sse()
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
24
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
25 ROOM = Namespace("http://projects.bigasterisk.com/room/")
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
26 DEV = Namespace("http://projects.bigasterisk.com/device/")
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
27
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
28 # STATS = scales.collection(
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
29 # '/root',
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
30 # scales.PmfStat('update'),
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
31 # )
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
32
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
33
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
34 # see pending fix in patchablegraph.py
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
35 class CycloneGraphEventsHandlerWithCors(CycloneGraphEventsHandler):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
36
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
37 def __init__(self, application, request, masterGraph, allowOrigins=None):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
38 super().__init__(application, request, masterGraph)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
39 self.allowOrigins = allowOrigins or []
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
40
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
41 def flush(self):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
42 origin = self.request.headers.get('origin', None)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
43 if origin and origin in self.allowOrigins:
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
44 self.set_header(b"Access-Control-Allow-Origin", origin.encode('utf8'))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
45 self.set_header(b"Access-Control-Allow-Credentials", b"true")
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
46 return CycloneGraphEventsHandler.flush(self)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
47
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
48
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
49 # @STATS.update.time()
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
50 def update(masterGraph):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
51 stmt = lambda s, p, o: masterGraph.patchObject(ROOM.environment, s, p, o)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
52
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
53 now = datetime.datetime.now(tzlocal())
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
54
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
55 stmt(DEV.environment, ROOM.localHour, Literal(now.hour))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
56 stmt(DEV.environment, ROOM.localTimeToMinute, Literal(now.strftime("%H:%M")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
57
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
58 stmt(DEV.environment, ROOM.localTimeToSecond, Literal(now.strftime("%H:%M:%S")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
59
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
60 stmt(DEV.environment, ROOM.localDayOfWeek, Literal(now.strftime("%A")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
61 stmt(DEV.environment, ROOM.localMonthDay, Literal(now.strftime("%B %e")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
62 stmt(DEV.environment, ROOM.localDate, Literal(now.strftime("%Y-%m-%d")))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
63
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
64 for offset in range(-12, 7):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
65 d = now.date() + datetime.timedelta(days=offset)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
66 if d == d + relativedelta(day=31, weekday=FR(-1)):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
67 stmt(DEV.calendar, ROOM.daysToLastFridayOfMonth, Literal(offset))
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
68
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
69 stmt(DEV.calendar, ROOM.twilight, ROOM['withinTwilight'] if isWithinTwilight(now) else ROOM['daytime'])
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
70
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
71
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
72 def main():
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
73 arg = docopt("""
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
74 Usage: environment.py [options]
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
75
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
76 -v Verbose
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
77 """)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
78 verboseLogging(arg['-v'])
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
79
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
80 masterGraph = PatchableGraph()
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
81
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
82 class Application(cyclone.web.Application):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
83
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
84 def __init__(self):
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
85 handlers = [
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
86 (r"/()", cyclone.web.StaticFileHandler, {
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
87 "path": ".",
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
88 "default_filename": "index.html"
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
89 }),
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
90 (r'/graph/environment', CycloneGraphHandler, {
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
91 'masterGraph': masterGraph
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
92 }),
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
93 (r'/graph/environment/events', CycloneGraphEventsHandlerWithCors, {
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
94 'masterGraph': masterGraph,
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
95 'allowOrigins': ['http://localhost:8001'],
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
96 }),
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
97 (r'/doc', Doc), # to be shared
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
98 # (r'/stats/(.*)', StatsHandler, {
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
99 # 'serverName': 'environment'
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
100 # }),
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
101 ]
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
102 cyclone.web.Application.__init__(self, handlers, masterGraph=masterGraph)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
103
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
104 task.LoopingCall(update, masterGraph).start(1)
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
105 reactor.listenTCP(8080, Application())
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
106 reactor.run()
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
107
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
108
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
109 if __name__ == '__main__':
3c1bc3bc5a6c pull out of homeauto/ project, and add skaffold/pipenv
drewp@bigasterisk.com
parents:
diff changeset
110 main()