def test_merge_term() -> None: next_foo = Query.by( AllTerm()).traverse_in(until=Navigation.Max).filter("foo") query = Query.by( MergeTerm(Query.mk_term("bla"), [MergeQuery("foo123", next_foo)], Query.mk_term("bla"))) assert_round_trip(term_parser, query)
def test_query() -> None: query = (Query.by( "ec2", P("cpu") > 4, (P("mem") < 23) | (P("mem") < 59)).merge_with( "cloud", Navigation(1, Navigation.Max, direction=Direction.inbound), Query.mk_term("cloud")).traverse_out().filter( P("some.int.value") < 1, P("some.other") == 23).traverse_out().filter( P("active") == 12, P.function("in_subnet").on( "ip", "1.2.3.4/96")).filter_with( WithClause(WithClauseFilter( "==", 0), Navigation())).group_by([ AggregateVariable( AggregateVariableName("foo")) ], [AggregateFunction("sum", "cpu")]).add_sort( Sort("test", "asc")).with_limit(10)) assert str(query) == ( 'aggregate(foo: sum(cpu)):((is("ec2") and cpu > 4) and (mem < 23 or mem < 59)) ' '{cloud: all <-default[1:]- is("cloud")} -default-> ' "(some.int.value < 1 and some.other == 23) -default-> " '(active == 12 and in_subnet(ip, "1.2.3.4/96")) ' "with(empty, -default->) sort test asc limit 10") assert_round_trip(query_parser, query)
async def test_query_not(filled_graph_db: ArangoGraphDB, foo_model: Model) -> None: # select everything that is not foo --> should be blas blas = Query.by(Query.mk_term("foo").not_term()) async with await filled_graph_db.search_list( QueryModel(blas.on_section("reported"), foo_model)) as gen: result = [from_js(x["reported"], Bla) async for x in gen] assert len(result) == 102
def test_with_clause() -> None: predicate_term.parse("foo == bla") wc: WithClause = with_clause_parser.parse( "with(empty, -delete-> foo == bla and test > 23 with(any, -delete->))") assert wc.with_filter == WithClauseFilter("==", 0) assert wc.navigation == Navigation(maybe_edge_types=["delete"]) assert str(wc.term) == '(foo == "bla" and test > 23)' assert str(wc.with_clause) == "with(any, -delete->)" term = Query.mk_term("foo", P("test") == 23) clause_filter = WithClauseFilter(">", 23) nav = Navigation() def edge(wc: WithClause) -> WithClause: wcr = replace(wc, with_clause=edge( wc.with_clause)) if wc.with_clause else wc return replace(wcr, navigation=replace(wcr.navigation, maybe_edge_types=[EdgeType.default])) assert_round_trip( with_clause_parser, WithClause(clause_filter, nav, term, WithClause(clause_filter, nav)), edge) assert_round_trip(with_clause_parser, WithClause(clause_filter, nav), edge)