Ejemplo n.º 1
0
 def addIndex(self, label, field):
     url = self.url + "/index/" + label
     response = requests.post(url,
                              json={"field": field},
                              auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 2
0
    def __stream(self, debug=False):
        """
        Execute the query and return an iterator.
        """
        log_level = logging.INFO
        if debug:
            log_level = logging.DEBUG
        logger = logging.getLogger(__name__)
        logger.handlers = []
        stream_handler = logging.StreamHandler()
        stream_handler.setFormatter(
            logging.Formatter('[%(levelname)s]\t%(asctime)s\t%(message)s'))
        stream_handler.setLevel(log_level)
        logger.setLevel(log_level)
        logger.addHandler(stream_handler)

        rate = Rate(logger)
        rate.init()
        response = self.session.post(self.url,
                                     json=self.to_dict(),
                                     stream=True)
        logger.debug('POST %s', self.url)
        logger.debug('BODY %s', self.to_json())
        logger.debug('STATUS CODE %s', response.status_code)
        raise_for_status(response)

        for result in response.iter_lines(chunk_size=None):
            try:
                result_dict = json.loads(result.decode())
            except Exception as e:
                logger.error("Failed to decode: %s", result)
                raise e

            if "vertex" in result_dict:
                extracted = result_dict["vertex"]
            elif "edge" in result_dict:
                extracted = result_dict["edge"]
            elif "aggregations" in result_dict:
                extracted = result_dict["aggregations"]["aggregations"]
            elif "selections" in result_dict:
                extracted = result_dict["selections"]["selections"]
                for k in extracted:
                    if "vertex" in extracted[k]:
                        extracted[k] = extracted[k]["vertex"]
                    elif "edge" in extracted[k]:
                        extracted[k] = extracted[k]["edge"]
            elif "render" in result_dict:
                extracted = result_dict["render"]
            elif "count" in result_dict:
                extracted = result_dict
            else:
                extracted = result_dict

            if isinstance(extracted, dict):
                yield AttrDict(extracted)
            else:
                yield extracted

            rate.tick()
        rate.close()
Ejemplo n.º 3
0
 def getSchema(self):
     """
     Get the schema for a graph.
     """
     response = self.session.get(self.url + "/schema")
     raise_for_status(response)
     return response.json()
Ejemplo n.º 4
0
 def execute(self):
     payload = "\n".join(self.elements)
     response = requests.post(self.url,
                              data=payload,
                              auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 5
0
 def deleteGraph(self, name):
     """
     Delete graph.
     """
     response = requests.delete(self.url + "/" + name,
                                auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 6
0
 def getEdge(self, gid):
     """
     Get an edge by id.
     """
     url = self.url + "/edge/" + gid
     response = requests.get(url, auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 7
0
 def getVertex(self, gid):
     """
     Get a vertex by id.
     """
     url = self.url + "/vertex/" + gid
     response = self.session.get(url)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 8
0
 def deleteVertex(self, gid):
     """
     Delete a vertex from the graph.
     """
     url = self.url + "/vertex/" + gid
     response = self.session.delete(url)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 9
0
 def addSchema(self, vertices=[], edges=[]):
     """
     Add vertex to a graph.
     """
     payload = {"graph": self.graph, "vertices": vertices, "edges": edges}
     response = self.session.post(self.url + "/schema", json=payload)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 10
0
 def addVertex(self, gid, label, data={}):
     """
     Add vertex to a graph.
     """
     payload = {"gid": gid, "label": label, "data": data}
     response = self.session.post(self.url + "/vertex", json=payload)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 11
0
 def addGraph(self, name):
     """
     Create a new graph.
     """
     response = requests.post(self.url + "/" + name, {},
                              auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 12
0
 def deleteEdge(self, gid):
     """
     Delete an edge from the graph.
     """
     url = self.url + "/edge/" + gid
     response = self.session.delete(url)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 13
0
 def getEdge(self, gid):
     """
     Get an edge by id.
     """
     url = self.url + "/edge/" + gid
     response = self.session.get(url)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 14
0
 def deleteEdge(self, gid):
     """
     Delete an edge from the graph.
     """
     url = self.url + "/edge/" + gid
     response = requests.delete(url, auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 15
0
 def getVertex(self, gid):
     """
     Get a vertex by id.
     """
     url = self.url + "/vertex/" + gid
     response = requests.get(url, auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 16
0
 def aggregate(self, aggregations):
     if not isinstance(aggregations, list):
         aggregations = [aggregations]
     payload = {
         "aggregations": aggregations,
     }
     url = self.url + "/aggregate"
     response = self.session.post(url, json=payload)
     raise_for_status(response)
     return response.json()["aggregations"]
Ejemplo n.º 17
0
 def addEdge(self, src, dst, label, data={}, gid=None):
     """
     Add edge to the graph.
     """
     payload = {"from": src, "to": dst, "label": label, "data": data}
     if gid is not None:
         payload["gid"] = gid
     response = self.session.post(self.url + "/edge", json=payload)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 18
0
 def addVertex(self, gid, label, data={}):
     """
     Add vertex to a graph.
     """
     payload = {"gid": gid, "label": label, "data": data}
     response = requests.post(self.url + "/vertex",
                              json=payload,
                              auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()
Ejemplo n.º 19
0
 def listIndices(self):
     url = self.url + "/index"
     response = requests.get(url,
                             stream=True,
                             auth=(self.user, self.password))
     raise_for_status(response)
     output = []
     for result in response.iter_lines():
         d = json.loads(result)
         output.append(d)
     return output
Ejemplo n.º 20
0
 def aggregate(self, aggregations):
     if not isinstance(aggregations, list):
         aggregations = [aggregations]
     payload = {
         "aggregations": aggregations,
     }
     url = self.url + "/aggregate"
     response = requests.post(url,
                              json=payload,
                              auth=(self.user, self.password))
     raise_for_status(response)
     return response.json()["aggregations"]
Ejemplo n.º 21
0
 def listGraphs(self):
     """
     List graphs.
     """
     response = requests.get(self.url,
                             stream=True,
                             auth=(self.user, self.password))
     raise_for_status(response)
     output = []
     for line in response.iter_lines():
         output.append(json.loads(line)['graph'])
     return output
Ejemplo n.º 22
0
 def listIndices(self):
     url = self.url + "/index"
     response = self.session.get(url, headers=self._request_header())
     raise_for_status(response)
     return response.json()["indices"]
Ejemplo n.º 23
0
 def listLabels(self):
     url = self.url + "/label"
     response = self.session.get(url)
     raise_for_status(response)
     return response.json()
Ejemplo n.º 24
0
 def addIndex(self, label, field):
     url = self.url + "/index/" + label
     response = self.session.post(url, json={"field": field})
     raise_for_status(response)
     return response.json()
Ejemplo n.º 25
0
 def execute(self):
     payload = "\n".join(self.elements)
     response = self.session.post(self.url, data=payload)
     raise_for_status(response)
     return response.json()