annotate service/environment/environment.py @ 965:a06d9921c2a3

add more date strings. Accept-header support Ignore-this: 48067831b72ffc7b95ee433d3fa7245c darcs-hash:20150209081103-312f9-c11692a1518583cd48bf7feca8cc5e768537e84e
author drewp <drewp@bigasterisk.com>
date Mon, 09 Feb 2015 00:11:03 -0800
parents 98311a863d7e
children 9236b736bc34
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
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
8 from twisted.internet import reactor
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/site/magma")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
13 from stategraph import StateGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
14 sys.path.append("/my/proj/homeauto/lib")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
15 from cycloneerr import PrettyErrorHandler
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
16 from twilight import isWithinTwilight
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
17
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
18 ROOM = Namespace("http://projects.bigasterisk.com/room/")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
19 DEV = Namespace("http://projects.bigasterisk.com/device/")
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
20
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
21 class GraphHandler(PrettyErrorHandler, cyclone.web.RequestHandler):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
22 def get(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
23 g = StateGraph(ROOM.environment)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
24 now = datetime.datetime.now(tzlocal())
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
25
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
26 g.add((DEV.environment, ROOM.localHour, Literal(now.hour)))
939
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
27 g.add((DEV.environment, ROOM.localTimeToMinute,
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
28 Literal(now.strftime("%H:%M"))))
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
29 g.add((DEV.environment, ROOM.localTimeToSecond,
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
30 Literal(now.strftime("%H:%M:%S"))))
965
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
31 g.add((DEV.environment, ROOM.localDayOfWeek,
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
32 Literal(now.strftime("%A"))))
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
33 g.add((DEV.environment, ROOM.localMonthDay,
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
34 Literal(now.strftime("%B %e"))))
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
35 g.add((DEV.environment, ROOM.localDate,
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
36 Literal(now.strftime("%Y-%m-%d"))))
876
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
37
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
38 for offset in range(-12, 7):
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
39 d = now.date() + datetime.timedelta(days=offset)
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
40 if d == d + relativedelta(day=31, weekday=FR(-1)):
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
41 g.add((DEV.calendar, ROOM.daysToLastFridayOfMonth,
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
42 Literal(offset)))
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
43
351292938d7c twilight computation for rules to use
drewp <drewp@bigasterisk.com>
parents: 805
diff changeset
44 g.add((DEV.calendar, ROOM.twilight,
939
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
45 ROOM['withinTwilight'] if isWithinTwilight(now) else
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
46 ROOM['daytime']))
965
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
47
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
48 ct, body = g.asAccepted(self.request.headers.get('accept'))
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
49 self.set_header('Content-type', ct)
a06d9921c2a3 add more date strings. Accept-header support
drewp <drewp@bigasterisk.com>
parents: 941
diff changeset
50 self.write(body)
941
98311a863d7e testing rdfs:comment display on enironment's graph viewer
drewp <drewp@bigasterisk.com>
parents: 939
diff changeset
51
98311a863d7e testing rdfs:comment display on enironment's graph viewer
drewp <drewp@bigasterisk.com>
parents: 939
diff changeset
52 from rdfdoc import Doc
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
53
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
54 class Application(cyclone.web.Application):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
55 def __init__(self):
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
56 handlers = [
939
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
57 (r"/()", cyclone.web.StaticFileHandler,
f2a2d0cc22b4 more demo statements for use in examples
drewp <drewp@bigasterisk.com>
parents: 876
diff changeset
58 {"path": ".", "default_filename": "index.html"}),
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
59 (r'/graph', GraphHandler),
941
98311a863d7e testing rdfs:comment display on enironment's graph viewer
drewp <drewp@bigasterisk.com>
parents: 939
diff changeset
60 (r'/doc', Doc), # to be shared
805
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
61 ]
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
62 cyclone.web.Application.__init__(self, handlers)
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
63
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
64 if __name__ == '__main__':
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
65 reactor.listenTCP(9075, Application())
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
66 reactor.run()