Exemple #1
0
def get_node_from_index(request, graph_id):
    node_id = request.GET.get('node_id', None)
    node_type = request.GET.get('node_type', None)
    gdb = get_graphdb_connection(GRAPHDB_HOST)
    idx = gdb.nodes.indexes.get('sylva_nodes')
    result = filter_by_property(idx.get('_slug')[node_id],
                                '_type', node_type)
    result = filter_by_property(result, '_graph', graph_id)
    return result[0] if len(result) == 1 else None
Exemple #2
0
def search_node(request, graph_id, node_field='', _field_value=''):
    graph = GraphDB.objects.get(pk=graph_id)
    predef_properties = []
    if request.method == 'GET':
        gdb = get_graphdb_connection(GRAPHDB_HOST)
        if not gdb:
            error_message = "The host %s is not available" % GRAPHDB_HOST
            return index(request, error_message)
        field_value = request.GET.get('field_value', _field_value)
        if not node_field:
            node_field = '_slug'
        try:
            if field_value:
                idx = gdb.nodes.indexes.get('sylva_nodes')
                result = idx.get(node_field)[field_value]
                # Strings including node_type
                if not result and field_value.endswith(')'):
                    clean_value = field_value[0:field_value.rfind('(') - 1]
                    result = idx.get(node_field)[clean_value]
            else:
                result = []
        except neo4jclient.NotFoundError:
            result = []
        # Multigraph DB filtering
        result = filter_by_property(result, '_graph', graph_id)
        if node_field != '_type':
            node_type = request.GET.get('node_type', '')
        else:
            node_type = field_value
        if field_value and node_field == '_type':
            result = filter_by_property(result, '_type', node_type)
            node_type_obj= NodeType.objects.filter(name=field_value,
                                                graph=graph)[0]
            predef_properties = ['_type']
            predef_properties.extend([n.key \
                            for n in node_type_obj.nodeproperty_set.all()])
        response = [{'url': reverse('graph.views.node_info',
                                    args=[graph_id, r.id]),
                    'neo_id': r.id,
                    'properties': {'slug': r.properties['_slug'],
                                'type': r.properties['_type']},
                    'values': get_element_predefs(predef_properties, r)}
                    for r in result]
        if request.is_ajax():
            return HttpResponse(simplejson.dumps({'results': response}))
        else:
            return search_results(request, graph_id, response,
                                    predef_properties, field_value)
Exemple #3
0
def search_relationships_by_field(request, graph_id, field, value):
    graph = GraphDB.objects.get(pk=graph_id)
    if not graph.public and \
            not request.user.has_perm("schema.%s_can_see" % graph.name):
        return unauthorized_user(request)
    gdb = get_graphdb_connection(GRAPHDB_HOST)
    idx = gdb.relationships.indexes.get('sylva_relationships')
    result = idx.get(field)[value]
    result = filter_by_property(result, '_graph', graph_id)
    if field == '_type':
        edge_type_obj= EdgeType.objects.filter(name=value,
                                                graph=graph)[0]
        predef_properties = ['_type']
        predef_properties.extend([e.key \
                            for e in edge_type_obj.edgeproperty_set.all()])
    else:
        predef_properties = []

    response = [{'url': reverse('graph.views.relation_info',
                                args=[graph_id, r.id]),
                'neo_id': r.id,
                'values': get_element_predefs(predef_properties,r),
                'properties': {'slug': r.properties['_slug'],
                                'type': r.properties['_type']}}
                    for r in result]
    return search_results(request, graph_id, response,
                            predef_properties, value)