Mercurial > code > home > repos > environment
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 |
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() |