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_)
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")
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()
def filter_matches(filter, annotation): socket = FakeSocket() SocketFilter.set_filter(socket, filter) return bool( tuple(SocketFilter.matching([socket], annotation, db_session)))