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
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)
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)