def test_order_by(): for c in Coffee.nodes: c.delete() c1 = Coffee(name="Icelands finest", price=5).save() c2 = Coffee(name="Britains finest", price=10).save() c3 = Coffee(name="Japans finest", price=35).save() assert Coffee.nodes.order_by('price').all()[0].price == 5 assert Coffee.nodes.order_by('-price').all()[0].price == 35 ns = Coffee.nodes.order_by('-price') qb = QueryBuilder(ns).build_ast() assert qb._ast['order_by'] ns = ns.order_by(None) qb = QueryBuilder(ns).build_ast() assert not qb._ast['order_by'] ns = ns.order_by('?') qb = QueryBuilder(ns).build_ast() assert qb._ast['with'] == 'coffee, rand() as r' assert qb._ast['order_by'] == 'r' # Test order by on a relationship l = Supplier(name="lidl2").save() l.coffees.connect(c1) l.coffees.connect(c2) l.coffees.connect(c3) ordered_n = [n for n in l.coffees.order_by('name').all()] assert ordered_n[0] == c2 assert ordered_n[1] == c1 assert ordered_n[2] == c3
def test_double_traverse(): nescafe = Coffee(name='Nescafe plus', price=99).save() tesco = Supplier(name='Asda', delivery_cost=2).save() nescafe.suppliers.connect(tesco) tesco.coffees.connect(Coffee(name='Decafe', price=2).save()) ns = NodeSet(NodeSet(source=nescafe).suppliers.match()).coffees.match() qb = QueryBuilder(ns).build_ast() results = qb._execute() assert len(results) == 1 assert results[0].name == 'Decafe'
def test_simple_traverse_with_filter(): nescafe = Coffee(name='Nescafe2', price=99).save() tesco = Supplier(name='Sainsburys', delivery_cost=2).save() nescafe.suppliers.connect(tesco) qb = QueryBuilder(NodeSet(source=nescafe).suppliers.match(since__lt=datetime.now())) results = qb.build_ast()._execute() assert 'start' in qb._ast assert 'match' in qb._ast assert qb._ast['return'] == 'suppliers' assert len(results) == 1 assert results[0].name == 'Sainsburys'
def test_simple_traverse_with_filter(): nescafe = Coffee(name="Nescafe2", price=99).save() tesco = Supplier(name="Sainsburys", delivery_cost=2).save() nescafe.suppliers.connect(tesco) qb = QueryBuilder( NodeSet(source=nescafe).suppliers.match(since__lt=datetime.now())) results = qb.build_ast()._execute() assert "lookup" in qb._ast assert "match" in qb._ast assert qb._ast["return"] == "suppliers" assert len(results) == 1 assert results[0].name == "Sainsburys"
def test_order_by(): for c in Coffee.nodes: c.delete() Coffee(name="Icelands finest", price=5).save() Coffee(name="Britains finest", price=10).save() Coffee(name="Japans finest", price=35).save() assert Coffee.nodes.order_by('price').all()[0].price == 5 assert Coffee.nodes.order_by('-price').all()[0].price == 35 ns = Coffee.nodes.order_by('-price') qb = QueryBuilder(ns).build_ast() assert qb._ast['order_by'] ns = ns.order_by(None) qb = QueryBuilder(ns).build_ast() assert not qb._ast['order_by']
def test_simple_has_via_label(): nescafe = Coffee(name='Nescafe', price=99).save() tesco = Supplier(name='Tesco', delivery_cost=2).save() nescafe.suppliers.connect(tesco) ns = NodeSet(Coffee).has(suppliers=True) qb = QueryBuilder(ns).build_ast() results = qb._execute() assert 'SUPPLIES' in qb._ast['where'][0] assert len(results) == 1 assert results[0].name == 'Nescafe' Coffee(name='nespresso', price=99).save() ns = NodeSet(Coffee).has(suppliers=False) qb = QueryBuilder(ns).build_ast() results = qb._execute() assert len(results) > 0 assert 'NOT' in qb._ast['where'][0]
def personas_con_interacciones(self, request): limit = int(request.GET.get('limit', 100)) query = PersonaNode.nodes.has(beacons=True) query_language = QueryBuilder(query).build_ast().build_query() start_time = time.time() list(query[:limit]) return Response({ 'time': time.time() - start_time, 'query': query_language })
def persona(self, request): limit = int(request.GET.get('limit', 100)) query = PersonaNode.nodes.filter() query_language = QueryBuilder(query).build_ast().build_query() start_time = time.time() list(query[:limit]) return Response({ 'time': time.time() - start_time, 'query': query_language })
def beacons_de_persona_aleatoria(self, request): limit = int(request.GET.get('limit', 100)) persona = PersonaNode.nodes.has(beacons=True).order_by('?')[0] query = persona.beacons.filter() query_language = QueryBuilder(query).build_ast().build_query() start_time = time.time() list(query[:limit]) return Response({ 'time': time.time() - start_time, 'query': query_language })
def test_filter_exclude_via_labels(): Coffee(name='Java', price=99).save() node_set = NodeSet(Coffee) qb = QueryBuilder(node_set).build_ast() results = qb._execute() assert '(coffee:Coffee)' in qb._ast['match'] assert 'result_class' in qb._ast assert len(results) == 1 assert isinstance(results[0], Coffee) assert results[0].name == 'Java' # with filter and exclude Coffee(name='Kenco', price=3).save() node_set = node_set.filter(price__gt=2).exclude(price__gt=6, name='Java') qb = QueryBuilder(node_set).build_ast() results = qb._execute() assert '(coffee:Coffee)' in qb._ast['match'] assert 'NOT' in qb._ast['where'][0] assert len(results) == 1 assert results[0].name == 'Kenco'
def test_simple_has_via_label(): nescafe = Coffee(name="Nescafe", price=99).save() tesco = Supplier(name="Tesco", delivery_cost=2).save() nescafe.suppliers.connect(tesco) ns = NodeSet(Coffee).has(suppliers=True) qb = QueryBuilder(ns).build_ast() results = qb._execute() assert "COFFEE SUPPLIERS" in qb._ast["where"][0] assert len(results) == 1 assert results[0].name == "Nescafe" Coffee(name="nespresso", price=99).save() ns = NodeSet(Coffee).has(suppliers=False) qb = QueryBuilder(ns).build_ast() results = qb._execute() assert len(results) > 0 assert "NOT" in qb._ast["where"][0]
def test_filter_exclude_via_labels(): Coffee(name="Java", price=99).save() node_set = NodeSet(Coffee) qb = QueryBuilder(node_set).build_ast() results = qb._execute() assert "(coffee:Coffee)" in qb._ast["match"] assert "result_class" in qb._ast assert len(results) == 1 assert isinstance(results[0], Coffee) assert results[0].name == "Java" # with filter and exclude Coffee(name="Kenco", price=3).save() node_set = node_set.filter(price__gt=2).exclude(price__gt=6, name="Java") qb = QueryBuilder(node_set).build_ast() results = qb._execute() assert "(coffee:Coffee)" in qb._ast["match"] assert "NOT" in qb._ast["where"][0] assert len(results) == 1 assert results[0].name == "Kenco"
def test_count(): Coffee(name='Nescafe Gold', price=99).save() count = QueryBuilder(NodeSet(source=Coffee)).build_ast()._count() assert count > 0