comparison d3s_examples/python-neo4jrestclient/sphaera.py @ 8:18ef6948d689

new d3s examples
author Dirk Wintergruen <dwinter@mpiwg-berlin.mpg.de>
date Thu, 01 Oct 2015 17:17:27 +0200
parents
children
comparison
equal deleted inserted replaced
7:45dad9e38c82 8:18ef6948d689
1 #!/usr/bin/env python
2 from json import dumps
3
4 from flask import Flask, Response, request, send_from_directory
5
6 from neo4jrestclient.client import GraphDatabase, Node, Relationship
7
8 app = Flask(__name__, static_url_path='/static/')
9 #gdb = GraphDatabase("http://localhost:7474")
10 gdb = GraphDatabase("http://euler.mpiwg-berlin.mpg.de:7474")
11
12
13 @app.route('/json/<path:path>')
14 def send_json(path):
15 return send_from_directory('static/json', path)
16
17 @app.route('/platin/<path:path>')
18 def send_platin(path):
19 return send_from_directory('static/platin', path)
20
21
22
23 @app.route("/")
24 def get_index():
25 return app.send_static_file('index.html')
26
27 @app.route("/sphaera")
28 def get_sphaera():
29 return app.send_static_file('index_sphaera.html')
30
31
32 @app.route("/graph")
33 def get_graph():
34
35 query = ("MATCH (m:Edition)<-[r]-(e:Edition) "
36 "RETURN m,r,e "
37 "LIMIT {limit}")
38 results = gdb.query(query,
39 params={"limit": request.args.get("limit", 10000)},returns=(Node,Relationship,Node))
40 nodes = []
41 rels = []
42 nodesIdSet=set()
43 i = 0
44 for ed1,r,ed2 in results:
45 ed1id = ed1.properties["Nid"]
46
47 #lon = ed1.properties.get("lon","")
48 #lat = ed1.properties.get("lat","")
49 node = ed1.properties.copy()
50 node["title"]=ed1id
51 if ed1id not in nodesIdSet:
52 nodes.append(node)
53 nodesIdSet.add(ed1id)
54
55 target = nodes.index(node)
56
57
58 #lon = ed2.properties.get("lon","")
59 #lat = ed2.properties.get("lat","")
60 ed2id = ed2.properties["Nid"]
61 node = ed2.properties.copy()
62 node["title"]=ed2id
63
64 if ed2id not in nodesIdSet:
65 nodes.append(node)
66 nodesIdSet.add(ed2id)
67
68 source =nodes.index(node)
69
70 rels.append({"source": source, "target": target})
71
72 return Response(dumps({"nodes": nodes, "links": rels}),
73 mimetype="application/json")
74
75
76 @app.route("/search")
77 def get_search():
78 try:
79 q = request.args["q"]
80 except KeyError:
81 return []
82 else:
83 query = ("MATCH (ed:Edition) "
84 "WHERE ed.name =~ {title} "
85 "RETURN ed")
86 results = gdb.query(
87 query,
88 returns=Node,
89 params={"title": "(?i).*" + q + ".*"}
90 )
91
92 return Response(dumps([{"edition": row.properties}
93 for [row] in results]),
94 mimetype="application/json")
95
96
97 @app.route("/edition/<nid>")
98 def get_movie(nid):
99 query = ("MATCH (ed:Edition {Nid:{Nid}}) "
100 "RETURN ed.Nid as Nid,"
101 "ed.Title as Title "
102 "LIMIT 1")
103 results = gdb.query(query, params={"Nid": nid})
104 nid, title = results[0]
105 return Response(dumps({"title": nid,
106 "name": title}),
107 mimetype="application/json")
108
109
110 if __name__ == '__main__':
111 app.debug = True
112 app.run(port=8080)