Mercurial > code > home > repos > homeauto
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 |
rev | line source |
---|---|
805 | 1 #!/usr/bin/python |
2 """ | |
3 return some rdf about the environment, e.g. the current time, | |
4 daytime/night, overall modes like 'maintenance mode', etc | |
5 | |
6 """ | |
7 import sys, datetime, cyclone.web | |
8 from twisted.internet import reactor | |
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 | 11 from rdflib import Namespace, Literal |
12 sys.path.append("/my/site/magma") | |
13 from stategraph import StateGraph | |
14 sys.path.append("/my/proj/homeauto/lib") | |
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 | 17 |
18 ROOM = Namespace("http://projects.bigasterisk.com/room/") | |
19 DEV = Namespace("http://projects.bigasterisk.com/device/") | |
20 | |
21 class GraphHandler(PrettyErrorHandler, cyclone.web.RequestHandler): | |
22 def get(self): | |
23 g = StateGraph(ROOM.environment) | |
24 now = datetime.datetime.now(tzlocal()) | |
25 | |
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 | 53 |
54 class Application(cyclone.web.Application): | |
55 def __init__(self): | |
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 | 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 | 61 ] |
62 cyclone.web.Application.__init__(self, handlers) | |
63 | |
64 if __name__ == '__main__': | |
65 reactor.listenTCP(9075, Application()) | |
66 reactor.run() |