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

Refactor GraphQl by abstracting a Adapter class

parent 66bbd08a
No related branches found
No related tags found
No related merge requests found
from neo4j import GraphDatabase
import time
from api.graphql.graphql import Discussion
from api.interface.graphql import Discussion
URL = 'jdbc:postgresql://db/discussion?user=postgres&password=FooBar'
......
File moved
......@@ -6,12 +6,9 @@ import requests
from neo4j import GraphDatabase
class GraphQl(object):
def __init__(self, protocol, host, port):
self.protocol = protocol
self.host = host
self.port = port
class Adapter(object):
def __init__(self, url):
self.url = url
@staticmethod
def _json_to_dict(col):
......@@ -21,10 +18,9 @@ class GraphQl(object):
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)
def request(self):
try:
response = requests.get(url)
response = requests.get(self.url)
except requests.exceptions.ConnectionError:
logging.error("Connection Error")
return {}
......@@ -33,10 +29,20 @@ class GraphQl(object):
return ret
class GraphQl(Adapter):
def __init__(self, protocol, host, port, query):
self.protocol = protocol
self.host = host
self.port = port
self.query = query
super().__init__("{}://{}:{}/api/v2/query?q={}".format(self.protocol, self.host, self.port, query))
class Discussion(GraphQl):
def __init__(self, protocol, host, port, uri, user, password):
super().__init__(protocol, host, port)
def __init__(self, protocol, host, port, uri, user, password, slug):
super().__init__(protocol, host, port, query=self._cypher_query(slug))
self._driver = GraphDatabase.driver(uri, auth=(user, password))
def close(self):
......@@ -52,8 +58,8 @@ class Discussion(GraphQl):
}}
""".format(slug)
def to_cypher(self, slug):
result = super().request(query=self._cypher_query(slug))
def to_cypher(self):
result = super().request()
return result['issue']['completeGraphCypher']
@staticmethod
......@@ -63,9 +69,9 @@ class Discussion(GraphQl):
)
return result
def inject_to_neo(self, slug):
def inject_to_neo(self):
t1 = time.time()
query = self.to_cypher(slug)
query = self.to_cypher()
with self._driver.session() as session:
session.write_transaction(self._create_discussion, query)
......
......@@ -2,7 +2,7 @@ from flask import Flask, render_template, jsonify
from flask_cors import CORS
from api.graph import Graph
from api.graphql.graphql import Discussion
from api.interface.graphql import Discussion
app = Flask(__name__, template_folder='.')
CORS(app)
......@@ -25,7 +25,8 @@ def load_discussion(slug):
port='443',
uri='bolt://neo:7687',
user='neo4j',
password='neo4j').inject_to_neo(slug)
password='neo4j',
slug=slug).inject_to_neo()
return jsonify(result)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment