Esempio n. 1
0
    def _parse_message(self, payload: bytes, is_binary: bool) -> object:
        """Parse a client message into a JSON object.

        :raise WebSocketError: if the message doesn't contain UTF-8 encoded
                               text or cannot be parsed as JSON
        """
        if is_binary:
            raise WebSocketError('malformed_message', 'message is binary')
        try:
            text = payload.decode()
            logger.debug('Received text message from client %s: %s',
                         self._client, text)
            return loads(text)
        except ValueError as err:
            raise WebSocketError('malformed_message', err.args[0])
Esempio n. 2
0
 def _raise_if_unknown_field_value(self, field_name: str,
                                   err: colander.Invalid,
                                   json_object: dict):
     """Raise an 'unknown_xxx' WebSocketError error if appropriate."""
     errdict = err.asdict()
     if (self._is_only_key(errdict, field_name)
             and field_name in json_object):
         field_value = json_object[field_name]
         raise WebSocketError('unknown_' + field_name, field_value)
Esempio n. 3
0
 def _dispatch_event_notification_to_subscribers(self, notification: dict):
     event = notification['event']
     resource = notification['resource']
     if event == 'created':
         self._dispatch_created_event(resource)
     elif event == 'modified':
         self._dispatch_modified_event(resource)
     elif event == 'removed':
         self._dispatch_removed_event(resource)
     elif event == 'changed_descendants':
         self._dispatch_changed_descendants_event(resource)
     else:
         details = 'unknown event: {}'.format(event)
         raise WebSocketError('invalid_json', details)
Esempio n. 4
0
 def _raise_invalid_json_from_exception(self, err: Exception):
     raise WebSocketError('invalid_json', str(err))  # pragma: no cover
Esempio n. 5
0
 def _raise_invalid_json_from_colander_invalid(self, err: colander.Invalid):
     errdict = err.asdict()
     errlist = ['{}: {}'.format(k, errdict[k]) for k in errdict.keys()]
     details = ' / '.join(sorted(errlist))
     raise WebSocketError('invalid_json', details)
Esempio n. 6
0
 def test_str(self):
     from adhocracy_core.websockets import WebSocketError
     err = WebSocketError('malformed_message', 'message is binary')
     assert str(err) == 'malformed_message: message is binary'