annotate service/environment/environment.py @ 1028:70d52fa8373a

add new jsonld/SSE support to environment service as a test Ignore-this: ae671e71966dbbb9d1f97e3596802d3d darcs-hash:f724b9da306be00428ef84967f34dfe07a62a4c6
author drewp <drewp@bigasterisk.com>
date Sun, 24 Jan 2016 07:12:25 -0800
parents a06d9921c2a3
children 596c645a1fc5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
1 #!/usr/bin/python
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
2 """
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
3 return some rdf about the environment, e.g. the current time,
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
4 daytime/night, overall modes like 'maintenance mode', etc
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
5
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
6 """
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
7 import sys, datetime, cyclone.web
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
8 from twisted.internet import reactor, task
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
9 from dateutil.tz import tzlocal
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
10 from dateutil.relativedelta import relativedelta, FR
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
11 from rdflib import Namespace, Literal
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
12 sys.path.append("/my/proj/homeauto/lib")
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
13 from patchablegraph import PatchableGraph, writeGraphResponse, GraphEventsHandler
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
14 from cycloneerr import PrettyErrorHandler
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
15 from twilight import isWithinTwilight
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
16
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
17 from rdfdoc import Doc
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
18
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
19 ROOM = Namespace("http://projects.bigasterisk.com/room/")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
20 DEV = Namespace("http://projects.bigasterisk.com/device/")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
21
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
22
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
23 class GraphHandler(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
24 def get(self):
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
25 writeGraphResponse(self, self.settings.masterGraph,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
26 self.request.headers.get('accept'))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
27
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
28 def update(masterGraph):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
29 stmt = lambda s, p, o: masterGraph.patchObject(ROOM.environment, s, p, o)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
30
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
31 now = datetime.datetime.now(tzlocal())
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
32
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
33 stmt(DEV.environment, ROOM.localHour, Literal(now.hour))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
34 stmt(DEV.environment, ROOM.localTimeToMinute,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
35 Literal(now.strftime("%H:%M")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
36
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
37 stmt(DEV.environment, ROOM.localTimeToSecond,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
38 Literal(now.strftime("%H:%M:%S")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
39
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
40 stmt(DEV.environment, ROOM.localDayOfWeek,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
41 Literal(now.strftime("%A")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
42 stmt(DEV.environment, ROOM.localMonthDay,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
43 Literal(now.strftime("%B %e")))
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
44 stmt(DEV.environment, ROOM.localDate,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
45 Literal(now.strftime("%Y-%m-%d")))
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
46
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
47 for offset in range(-12, 7):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
48 d = now.date() + datetime.timedelta(days=offset)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
49 if d == d + relativedelta(day=31, weekday=FR(-1)):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
50 stmt(DEV.calendar, ROOM.daysToLastFridayOfMonth, Literal(offset))
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
51
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
52 stmt(DEV.calendar, ROOM.twilight,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
53 ROOM['withinTwilight'] if isWithinTwilight(now) else ROOM['daytime'])
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
54
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
55
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
56 def main():
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
57 from twisted.python import log as twlog
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
58 twlog.startLogging(sys.stderr)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
59 masterGraph = PatchableGraph()
965
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
60
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
61 class Application(cyclone.web.Application):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
62 def __init__(self):
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
63 handlers = [
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
64 (r"/()", cyclone.web.StaticFileHandler,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
65 {"path": ".", "default_filename": "index.html"}),
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
66 (r'/graph', GraphHandler),
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
67 (r'/graph/events', GraphEventsHandler),
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
68 (r'/doc', Doc), # to be shared
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
69 ]
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
70 cyclone.web.Application.__init__(self, handlers,
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
71 masterGraph=masterGraph)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
72 task.LoopingCall(update, masterGraph).start(1)
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
73 reactor.listenTCP(9075, Application())
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
74 reactor.run()
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
75
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
76 if __name__ == '__main__':
1028
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
77 main()
70d52fa8373a add new jsonld/SSE support to environment service as a test
drewp <drewp@bigasterisk.com>
parents: 965
diff changeset
78