Esempio n. 1
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

    SocketFilter.set_filter(message.socket, filter_)
Esempio n. 2
0
    def test_speed(self, factories, db_session):  # pragma: no cover
        # I think the max number connected at once is 4096
        sockets = [FakeSocket() for _ in range(4096)]

        for socket in sockets:
            SocketFilter.set_filter(socket, self.get_randomized_filter())

        ann = factories.Annotation(target_uri="https://example.org")

        start = datetime.utcnow()
        # This returns a generator, we need to force it to produce answers
        tuple(SocketFilter.matching(sockets, ann, db_session))

        diff = datetime.utcnow() - start
        ms = diff.seconds * 1000 + diff.microseconds / 1000
        print(ms, "ms")
Esempio n. 3
0
    def test_set_filter(self, field, value, expected):
        socket = FakeSocket()

        filter_ = {
            "match_policy": "include_any",
            "actions": {},
            "clauses": [{
                "field": field,
                "operator": "one_of",
                "value": value
            }],
        }

        SocketFilter.set_filter(socket, filter_)

        assert socket.filter_rows == Any.iterable.containing(expected).only()
Esempio n. 4
0
        def filter_matches(filter, annotation):
            socket = FakeSocket()
            SocketFilter.set_filter(socket, filter)

            return bool(
                tuple(SocketFilter.matching([socket], annotation, db_session)))