- commit
- bd244f98e446e9d42d6265e3339b68dde7060c4a
- parent
- 693d480267073becb7504b0b063b25fb520cda4c
- Author
- Tobias Bengfort <tobias.bengfort@gmx.net>
- Date
- 2014-10-04 10:01
Merge branch 'feature-validation'
Diffstat
| A | docs/source/actions.rst | 5 | +++++ |
| M | docs/source/index.rst | 1 | + |
| A | laneya/actions.py | 16 | ++++++++++++++++ |
| M | laneya/protocol.py | 22 | ++++++++++++++++++++++ |
4 files changed, 44 insertions, 0 deletions
diff --git a/docs/source/actions.rst b/docs/source/actions.rst
@@ -0,0 +1,5 @@ -1 1 Available actions -1 2 ================= -1 3 -1 4 .. automodule:: laneya.actions -1 5 :members:
diff --git a/docs/source/index.rst b/docs/source/index.rst
@@ -9,6 +9,7 @@ Contents 9 9 10 10 quickstart 11 11 protocol -1 12 actions 12 13 deferred 13 14 14 15 Indices and tables
diff --git a/laneya/actions.py b/laneya/actions.py
@@ -0,0 +1,16 @@ -1 1 """Collection of available actions. -1 2 -1 3 This module describes the available actions. The actions are modelled as -1 4 functions that may perform arbitrary validation on the incoming data. -1 5 -1 6 The actual processing of actions happens in the server and client. -1 7 -1 8 """ -1 9 -1 10 -1 11 def echo(foo=''): -1 12 """Example server action.""" -1 13 -1 14 -1 15 def other(foo=''): -1 16 """Example client action."""
diff --git a/laneya/protocol.py b/laneya/protocol.py
@@ -68,6 +68,7 @@ from twisted.python import log 68 68 from twisted.protocols.basic import NetstringReceiver 69 69 70 70 import deferred as q -1 71 import actions 71 72 72 73 73 74 key = 0 @@ -129,13 +130,30 @@ class Protocol(JSONProtocol): 129 130 130 131 return self._sendResponse(key, 'success', **response) 131 132 -1 133 def validate_message(self, message, expected_keys): -1 134 if sorted(message.keys()) != expected_keys: -1 135 log.err('Invalid message: %s' % message) -1 136 raise InvalidError -1 137 -1 138 def validate_action(self, action, data): -1 139 try: -1 140 fn = getattr(actions, action) -1 141 fn(**data) -1 142 except: -1 143 log.err('Invalid action: %s %s' % (action, data)) -1 144 raise InvalidError -1 145 132 146 def jsonReceived(self, message): 133 147 if message['type'] == 'request': -1 148 self.validate_message(message, ['action', 'data', 'key', 'type']) -1 149 self.validate_action(message['action'], message['data']) 134 150 self._requestReceived( 135 151 message['key'], 136 152 message['action'], 137 153 **message['data']) -1 154 138 155 elif message['type'] == 'response': -1 156 self.validate_message(message, ['data', 'key', 'status', 'type']) 139 157 key = message['key'] 140 158 if key in self._responseDeferreds: 141 159 response = { @@ -147,8 +165,12 @@ class Protocol(JSONProtocol): 147 165 d.resolve(response) 148 166 else: 149 167 d.reject(response) -1 168 150 169 elif message['type'] == 'update': -1 170 self.validate_message(message, ['action', 'data', 'type']) -1 171 self.validate_action(message['action'], message['data']) 151 172 self.updateReceived(message['action'], **message['data']) -1 173 152 174 else: 153 175 log.err('Message type not known: %s' % message['type']) 154 176