Ejemplo n.º 1
0
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')
Ejemplo n.º 2
0
    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()