def handle_filter_message(message, session=None):
    """A client updating its streamer filter."""
    if "filter" not in message.payload:
        message.reply(
            {
                "type": "error",
                "error": {
                    "type": "invalid_data",
                    "description": '"filter" is missing'
                },
            },
            ok=False,
        )
        return
    filter_ = message.payload["filter"]
    try:
        jsonschema.validate(filter_, filter.SCHEMA)
    except jsonschema.ValidationError:
        message.reply(
            {
                "type": "error",
                "error": {
                    "type": "invalid_data",
                    "description": "failed to parse filter",
                },
            },
            ok=False,
        )
        return
    if session is not None:
        # Add backend expands for clauses
        _expand_clauses(session, filter_)
    message.socket.filter = filter.FilterHandler(filter_)
Beispiel #2
0
def handle_filter_message(message, session=None):
    """A client updating its streamer filter."""
    if 'filter' not in message.payload:
        message.reply(
            {
                'type': 'error',
                'error': {
                    'type': 'invalid_data',
                    'description': '"filter" is missing'
                }
            },
            ok=False)
        return
    filter_ = message.payload['filter']
    try:
        jsonschema.validate(filter_, filter.SCHEMA)
    except jsonschema.ValidationError:
        message.reply(
            {
                'type': 'error',
                'error': {
                    'type': 'invalid_data',
                    'description': 'failed to parse filter'
                }
            },
            ok=False)
        return
    if session is not None:
        # Add backend expands for clauses
        _expand_clauses(session, filter_)
    message.socket.filter = filter.FilterHandler(filter_)
Beispiel #3
0
def handle_message(message):
    socket = message.socket
    socket.request.feature.clear()

    data = json.loads(message.payload)

    try:
        msg_type = data.get('messageType', 'filter')

        if msg_type == 'filter':
            payload = data['filter']

            # Let's try to validate the schema
            jsonschema.validate(payload, filter.SCHEMA)

            # Add backend expands for clauses
            _expand_clauses(socket.request, payload)

            socket.filter = filter.FilterHandler(payload)
        elif msg_type == 'client_id':
            socket.client_id = data.get('value')
    except:
        # TODO: clean this up, catch specific errors, narrow the scope
        log.exception("Parsing filter: %s", data)
        socket.close()
        raise
Beispiel #4
0
def handle_message(message, session=None):
    """
    Handle an incoming message from a client websocket.

    Receives a :py:class:`~h.streamer.websocket.Message` instance, which holds
    references to the :py:class:`~h.streamer.websocket.WebSocket` instance
    associated with the client connection, as well as the message payload.

    It updates state on the :py:class:`~h.streamer.websocket.WebSocket`
    instance in response to the message content.

    It may also passed a database session which *must* be used for any
    communication with the database.
    """
    socket = message.socket

    data = json.loads(message.payload)

    try:
        msg_type = data.get('messageType', 'filter')

        if msg_type == 'filter':
            payload = data['filter']

            # Let's try to validate the schema
            jsonschema.validate(payload, filter.SCHEMA)

            if session is not None:
                # Add backend expands for clauses
                _expand_clauses(session, payload)

            socket.filter = filter.FilterHandler(payload)
        elif msg_type == 'client_id':
            socket.client_id = data.get('value')
    except:
        # TODO: clean this up, catch specific errors, narrow the scope
        log.exception("Parsing filter: %s", data)
        socket.close()
        raise