def neo4j_dataset_annotations(request): """Query Neo4J for dataset annotations per user """ if request.user.username: user_name = request.user.username else: user_name = get_anonymous_user().username url = urljoin(settings.NEO4J_BASE_URL, 'ontology/unmanaged/annotations/{}'.format(user_name)) headers = { 'Accept': 'application/json; charset=UTF-8', 'Accept-Encoding': 'gzip,deflate', 'Content-type': 'application/json' } params = {'objectification': 2} try: response = requests.get(url, params=params, headers=headers) response.raise_for_status() except HTTPError as e: logger.error(e) except requests.exceptions.ConnectionError as e: logger.error('Neo4J seems to be offline.') logger.error(e) return HttpResponse('Neo4J seems to be offline.', mimetype='text/plain', status=503) return HttpResponse(response, mimetype='application/json')
def push_users(self): datasets = DataSet.objects.all() graph = py2neo.Graph( urlparse.urljoin(settings.NEO4J_BASE_URL, 'db/data')) tx = graph.cypher.begin() statement_user = ( "MERGE (u:User {id:{user_id}, name:{user_name}}) WITH u " "MATCH (ds:DataSet {uuid:{ds_uuid}}) " "MERGE (ds)<-[:`read_access`]-(u)") public_group_id = ExtendedGroup.objects.public_group().id for dataset in datasets: owner = dataset.get_owner() users = [{'id': owner.id, 'name': str(owner)}] groups = dataset.get_groups() # Collect all users per group for group in groups: users += map(lambda u: { 'id': u.id, 'name': str(u) }, group['group'].user_set.all()) # We need to add an anonymous user so that people who haven't # logged in can still see some visualization. if group['group'].id is public_group_id: users += [{ 'id': settings.ANONYMOUS_USER_ID, 'name': get_anonymous_user().username }] for user in users: tx.append( statement_user, { 'user_id': user['id'], 'user_name': user['name'], 'ds_uuid': dataset.uuid }) tx.process() tx.commit()
def push_users(self): datasets = DataSet.objects.all() graph = py2neo.Graph(urlparse.urljoin(settings.NEO4J_BASE_URL, "db/data")) tx = graph.cypher.begin() statement_user = ( "MERGE (u:User {id:{user_id}, name:{user_name}}) WITH u " "MATCH (ds:DataSet {uuid:{ds_uuid}}) " "MERGE (ds)<-[:`read_access`]-(u)" ) public_group_id = ExtendedGroup.objects.public_group().id for dataset in datasets: owner = dataset.get_owner() users = [{"id": owner.id, "name": str(owner)}] groups = dataset.get_groups() # Collect all users per group for group in groups: users += map(lambda u: {"id": u.id, "name": str(u)}, group["group"].user_set.all()) # We need to add an anonymous user so that people who haven't # logged in can still see some visualization. if group["group"].id is public_group_id: users += [{"id": settings.ANONYMOUS_USER_ID, "name": get_anonymous_user().username}] for user in users: tx.append(statement_user, {"user_id": user["id"], "user_name": user["name"], "ds_uuid": dataset.uuid}) tx.process() tx.commit()