From 9ef1da53656e6ff6abc853d4cb72d180747aeda6 Mon Sep 17 00:00:00 2001 From: feger <marc.feger@hhu.de> Date: Mon, 4 Mar 2019 14:00:33 +0100 Subject: [PATCH] Refactor GraphQl by abstracting a Adapter class --- api/graph.py | 2 +- api/{graphql => interface}/__init__.py | 0 api/{graphql => interface}/graphql.py | 36 +++++++++++++++----------- api/server.py | 5 ++-- 4 files changed, 25 insertions(+), 18 deletions(-) rename api/{graphql => interface}/__init__.py (100%) rename api/{graphql => interface}/graphql.py (71%) diff --git a/api/graph.py b/api/graph.py index 378057c..cffad49 100644 --- a/api/graph.py +++ b/api/graph.py @@ -1,7 +1,7 @@ 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' diff --git a/api/graphql/__init__.py b/api/interface/__init__.py similarity index 100% rename from api/graphql/__init__.py rename to api/interface/__init__.py diff --git a/api/graphql/graphql.py b/api/interface/graphql.py similarity index 71% rename from api/graphql/graphql.py rename to api/interface/graphql.py index 266c7aa..1b854f7 100644 --- a/api/graphql/graphql.py +++ b/api/interface/graphql.py @@ -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) diff --git a/api/server.py b/api/server.py index 14b271e..3920c23 100644 --- a/api/server.py +++ b/api/server.py @@ -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) -- GitLab