コード例 #1
0
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
コード例 #2
0
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'
コード例 #3
0
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'
コード例 #4
0
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'
コード例 #5
0
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'
コード例 #6
0
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"
コード例 #7
0
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']
コード例 #8
0
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]
コード例 #9
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
        })
コード例 #10
0
    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
        })
コード例 #11
0
    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
        })
コード例 #12
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'
コード例 #13
0
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]
コード例 #14
0
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]
コード例 #15
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"
コード例 #16
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'
コード例 #17
0
def test_count():
    Coffee(name='Nescafe Gold', price=99).save()
    count = QueryBuilder(NodeSet(source=Coffee)).build_ast()._count()
    assert count > 0