Skip to content
Snippets Groups Projects
Commit 66bbd08a authored by Marc Feger's avatar Marc Feger
Browse files

Add route to load discussion-graph of live-version by slug

parent eb70f4ac
No related branches found
No related tags found
No related merge requests found
from neo4j import GraphDatabase from neo4j import GraphDatabase
import time import time
from api.graphql.graphql import Discussion
URL = 'jdbc:postgresql://db/discussion?user=postgres&password=FooBar' URL = 'jdbc:postgresql://db/discussion?user=postgres&password=FooBar'
...@@ -158,3 +160,14 @@ class Graph(object): ...@@ -158,3 +160,14 @@ class Graph(object):
"DETACH DELETE a" "DETACH DELETE a"
) )
return result return result
@staticmethod
def _load_discussion(tx, slug):
result = tx.run(
Discussion(
protocol='https',
host='dbas.cs.uni-duesseldorf.de',
port=443
).to_cypher(slug)
)
return result
import json
import logging
import time
import requests
from neo4j import GraphDatabase
class GraphQl(object):
def __init__(self, protocol, host, port):
self.protocol = protocol
self.host = host
self.port = port
@staticmethod
def _json_to_dict(col):
if isinstance(col, dict):
return col
elif isinstance(col, bytes):
col = col.decode("utf-8")
return json.loads(col)
def request(self, query):
url = "{}://{}:{}/api/v2/query?q={}".format(self.protocol, self.host, self.port, query)
try:
response = requests.get(url)
except requests.exceptions.ConnectionError:
logging.error("Connection Error")
return {}
ret = self._json_to_dict(response.content)
return ret
class Discussion(GraphQl):
def __init__(self, protocol, host, port, uri, user, password):
super().__init__(protocol, host, port)
self._driver = GraphDatabase.driver(uri, auth=(user, password))
def close(self):
self._driver.close()
@staticmethod
def _cypher_query(slug):
return """
query{{
issue(slug: "{0}"){{
completeGraphCypher
}}
}}
""".format(slug)
def to_cypher(self, slug):
result = super().request(query=self._cypher_query(slug))
return result['issue']['completeGraphCypher']
@staticmethod
def _create_discussion(tx, query):
result = tx.run(
query
)
return result
def inject_to_neo(self, slug):
t1 = time.time()
query = self.to_cypher(slug)
with self._driver.session() as session:
session.write_transaction(self._create_discussion, query)
return {"total": time.time() - t1}
Flask==0.10.1 Flask==0.10.1
flask-cors==3.0.7 flask-cors==3.0.7
neo4j==1.7.1 neo4j==1.7.1
requests==2.18.4
\ No newline at end of file
...@@ -2,20 +2,32 @@ from flask import Flask, render_template, jsonify ...@@ -2,20 +2,32 @@ from flask import Flask, render_template, jsonify
from flask_cors import CORS from flask_cors import CORS
from api.graph import Graph from api.graph import Graph
from api.graphql.graphql import Discussion
app = Flask(__name__, template_folder='.') app = Flask(__name__, template_folder='.')
CORS(app) CORS(app)
@app.route('/<file>') @app.route('/<file>')
def root(file): def load_html(file):
return render_template('html/' + file) return render_template('html/' + file)
@app.route('/load') @app.route('/load')
def test(): def load_graph():
return jsonify(Graph(uri='bolt://neo:7687', user='neo4j', password='neo4j').load()) return jsonify(Graph(uri='bolt://neo:7687', user='neo4j', password='neo4j').load())
@app.route('/load/<slug>')
def load_discussion(slug):
result = Discussion(protocol='https',
host='dbas.cs.uni-duesseldorf.de',
port='443',
uri='bolt://neo:7687',
user='neo4j',
password='neo4j').inject_to_neo(slug)
return jsonify(result)
if __name__ == '__main__': if __name__ == '__main__':
app.run(debug=True, host="0.0.0.0", port=5000) app.run(debug=True, host="0.0.0.0", port=5000)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment