diff service/frontDoorLock/front_door_lock.py @ 563:7f57d171d6d3

py3 and new build Ignore-this: 69cf69e5d43adfa65b3f62c5c0af2014
author drewp@bigasterisk.com
date Wed, 01 May 2019 00:30:54 -0700
parents 82e9480c3b7d
children 2d8a5532f1b5
line wrap: on
line diff
--- a/service/frontDoorLock/front_door_lock.py	Wed May 01 00:24:13 2019 -0700
+++ b/service/frontDoorLock/front_door_lock.py	Wed May 01 00:30:54 2019 -0700
@@ -6,15 +6,17 @@
 
 reasoning can infer :frontDoorLock :putState ?s to do that put request.
 """
+import time, json
+
 from docopt import docopt
-from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
 from rdflib import Namespace, URIRef, Literal, Graph
 from rdflib.parser import StringInputSource
 from twisted.internet import reactor, task
 import cyclone.web
-import logging, time, json
+
 from mqtt_client import MqttClient
-from logsetup import log, enableTwistedLog
+from patchablegraph import PatchableGraph, CycloneGraphHandler, CycloneGraphEventsHandler
+from standardservice.logsetup import log, verboseLogging
 
 ROOM = Namespace('http://projects.bigasterisk.com/room/')
 
@@ -25,36 +27,38 @@
     g.parse(StringInputSource(body), format='nt')
     return g
 
-def mqttMessageFromState(state):
+def mqttMessageFromState(state: URIRef):
     return {
         ROOM['locked']: b'OFF',
         ROOM['unlocked']: b'ON',
         }[state]
 
-def stateFromMqtt(msg):
+def stateFromMqtt(msg: bytes):
     return {
-        'OFF': ROOM['locked'],
-        'ON': ROOM['unlocked'],
-    }[msg.decode('ascii')]
+        b'OFF': ROOM['locked'],
+        b'ON': ROOM['unlocked'],
+    }[bytes(msg)]
     
 class OutputPage(cyclone.web.RequestHandler):
     def put(self):
         try:
-            user = URIRef(self.request.headers['x-foaf-agent'])
+            # what happened to the case-insens dict?
+            h = dict((k.lower(), v) for k,v in self.request.headers.items())
+            user = URIRef(h['x-foaf-agent'])
         except KeyError:
-            log.warn('request without x-foaf-agent: %s', self.request.headers)
+            log.warn('request without x-foaf-agent: %s', h)
             self.set_status(403, 'need x-foaf-agent')
             return
         arg = self.request.arguments
         if arg.get('s') and arg.get('p'):
             subj = URIRef(arg['s'][-1])
             pred = URIRef(arg['p'][-1])
-            obj = URIRef(self.request.body)
+            obj = URIRef(self.request.body.strip().decode('ascii'))
             stmt = (subj, pred, obj)
         else:
             g = rdfGraphBody(self.request.body, self.request.headers)
             assert len(g) == 1, len(g)
-            stmt = g.triples((None, None, None)).next()
+            stmt = next(g.triples((None, None, None)))
         self._onStatement(user, stmt)
     post = put
     
@@ -66,7 +70,7 @@
                 self.settings.autoLock.onUnlockedStmt()
             if stmt[2] == ROOM['locked']:
                 self.settings.autoLock.onLockedStmt()
-            self.settings.mqtt.publish("frontdoor/switch/strike/command",
+            self.settings.mqtt.publish(b"frontdoor/switch/strike/command",
                                        mqttMessageFromState(stmt[2]))
             return
         log.warn("ignoring %s", stmt)
@@ -83,7 +87,7 @@
 
     def relock(self):
         log.info('autolock is up: requesting lock')
-        self.mqtt.publish("frontdoor/switch/strike/command",
+        self.mqtt.publish(b"frontdoor/switch/strike/command",
                           mqttMessageFromState(ROOM['locked']))
 
     def reportTimes(self, unlockedFor):
@@ -144,7 +148,8 @@
         log.info('POST bluetoothButton %r', body)
         if body['addr'] == 'zz:zz:zz:zz:zz:zz' and body['key'] == 'top':
             log.info('unlock for %r', body['addr'])
-            self.settings.mqtt.publish("frontdoor/switch/strike/command", 'ON')
+            self.settings.mqtt.publish(
+                b"frontdoor/switch/strike/command", b'ON')
 
             
 if __name__ == '__main__':
@@ -153,10 +158,7 @@
 
     -v   Verbose
     """)
-    log.setLevel(logging.INFO)
-    if arg['-v']:
-        enableTwistedLog()
-        log.setLevel(logging.DEBUG)
+    verboseLogging(arg['-v'])
 
     masterGraph = PatchableGraph()
     mqtt = MqttClient(brokerPort=10010)
@@ -167,7 +169,7 @@
         masterGraph.patchObject(ctx, ROOM['frontDoorLock'], ROOM['state'],
                                 stateFromMqtt(payload))
 
-    mqtt.subscribe("frontdoor/switch/strike/state").subscribe(on_next=toGraph)
+    mqtt.subscribe(b"frontdoor/switch/strike/state").subscribe(on_next=toGraph)
     port = 10011
     reactor.listenTCP(port, cyclone.web.Application(
         [