def match(data, query): """Checks if `data` object satisfies `query`""" ast = parser.parse(query) # validation KeyExistenceValidatorVisitor(ast).evaluate() dq = DataQueryVisitor(ast) return dq.evaluate(data)
def filter(data, query, use_nested_keys=True, key_separator='.', case_sensitive=True, raise_keyerror=False): """Filters iterable. Checks if each item satisfies `query`""" ast = parser.parse(query) dq = DataQueryVisitor(ast, use_nested_keys=use_nested_keys, key_separator=key_separator, case_sensitive=case_sensitive, raise_keyerror=raise_keyerror) for item in data: if not dq.evaluate(item): continue yield item
def test_visit_empty(self): parser = DataQueryParser() ast = parser.parse('') dqv = DataQueryVisitor(ast) self.assertFalse(dqv.evaluate({}))