view d3s_examples/python-neo4jrestclient/sphaera.py @ 27:ed8b4e3f2a73

ISMI.HTML -- Better implementation of query boxes using Select2 on ismi.html, however when the first drop down is changed the ccorresponding one doesn't delete old data. select2('data', null) and similar methods of deleting has been unsuccessful so far
author arussell
date Wed, 02 Dec 2015 00:53:02 -0500
parents 18ef6948d689
children
line wrap: on
line source

#!/usr/bin/env python
from json import dumps

from flask import Flask, Response, request, send_from_directory

from neo4jrestclient.client import GraphDatabase, Node, Relationship

app = Flask(__name__, static_url_path='/static/')
#gdb = GraphDatabase("http://localhost:7474")
gdb = GraphDatabase("http://euler.mpiwg-berlin.mpg.de:7474")


@app.route('/json/<path:path>')
def send_json(path):
    return send_from_directory('static/json', path)

@app.route('/platin/<path:path>')
def send_platin(path):
    return send_from_directory('static/platin', path)



@app.route("/")
def get_index():
    return app.send_static_file('index.html')

@app.route("/sphaera")
def get_sphaera():
    return app.send_static_file('index_sphaera.html')


@app.route("/graph")
def get_graph():
   
    query = ("MATCH (m:Edition)<-[r]-(e:Edition) "
             "RETURN m,r,e "
             "LIMIT {limit}")
    results = gdb.query(query,
                        params={"limit": request.args.get("limit", 10000)},returns=(Node,Relationship,Node))
    nodes = []
    rels = []
    nodesIdSet=set()
    i = 0
    for ed1,r,ed2   in results:
        ed1id = ed1.properties["Nid"]
      
        #lon = ed1.properties.get("lon","")
        #lat = ed1.properties.get("lat","")
        node = ed1.properties.copy()
        node["title"]=ed1id
        if ed1id not in nodesIdSet:    
            nodes.append(node)
            nodesIdSet.add(ed1id)
            
        target = nodes.index(node)
          
        
        #lon = ed2.properties.get("lon","")
        #lat = ed2.properties.get("lat","")
        ed2id = ed2.properties["Nid"]
        node = ed2.properties.copy()
        node["title"]=ed2id
          
        if ed2id not in nodesIdSet:
            nodes.append(node)
            nodesIdSet.add(ed2id)
            
        source =nodes.index(node)
        
        rels.append({"source": source, "target": target})
        
    return Response(dumps({"nodes": nodes, "links": rels}),
                    mimetype="application/json")


@app.route("/search")
def get_search():
    try:
        q = request.args["q"]
    except KeyError:
        return []
    else:
        query = ("MATCH (ed:Edition) "
                 "WHERE ed.name =~ {title} "
                 "RETURN ed")
        results = gdb.query(
            query,
            returns=Node,
            params={"title": "(?i).*" + q + ".*"}
        )
       
        return Response(dumps([{"edition": row.properties}
                               for [row] in results]),
                        mimetype="application/json")


@app.route("/edition/<nid>")
def get_movie(nid):
    query = ("MATCH (ed:Edition {Nid:{Nid}}) "
             "RETURN ed.Nid as Nid,"
             "ed.Title as Title "
             "LIMIT 1")
    results = gdb.query(query, params={"Nid": nid})
    nid, title = results[0]
    return Response(dumps({"title": nid,
                           "name":  title}),
                    mimetype="application/json")


if __name__ == '__main__':
    app.debug = True
    app.run(port=8080)