Source code for uarango.graph

# -*- coding: utf8 -*-

import requests, json
import random


__all__ = ["Graph"]

def test_unicode(text):
    if type(text) == unicode:
        text = str(text)
    return text

[docs]class Graph: def __init__(self): self.url = 'http://localhost:8529' self.graph_name = 'graph' + str(random.randint(1, 1000)) print("Current graph_name : "+self.graph_name) """ Info """
[docs] def info_graph(self): temps = [] lvd = self.list_vertex_collections() temp = dict() if lvd.has_key('collections'): for name in lvd['collections']: result = requests.put(self.url + '/_api/collection/' + name + '/load').json() if result.has_key('count'): temp[name] = result['count'] temps.append(temp) led = self.list_edge_definitions() temp = dict() if led.has_key('collections'): for name in led['collections']: result = requests.put(self.url + '/_api/collection/' + name + '/load').json() if result.has_key('count'): temp[name] = result['count'] temps.append(temp) return temps
""" Management """
[docs] def list_graph(self): """ List all graphs """ r = requests.get(self.url + '/_api/gharial') return r.json()
[docs] def create_graph(self, collection_name, from_list, to_list): """ Create a graph """ if type(from_list) != list: from_list = [from_list] if type(to_list) != list: to_list = [to_list] data = { "name": self.graph_name, "edgeDefinitions": [ { "collection": collection_name, "from": from_list, "to": to_list } ] } r = requests.post(self.url + '/_api/gharial', data=json.dumps(data)) return r.json()
[docs] def drop_graph(self): """ Drop a graph """ r = requests.delete(self.url + '/_api/gharial/' + self.graph_name) return r.json()
[docs] def get_graph(self): """ Get a graph """ r = requests.get(self.url + '/_api/gharial/' + self.graph_name) return r.json()
[docs] def list_vertex_collections(self): """ List vertex collections """ r = requests.get(self.url + '/_api/gharial/' + self.graph_name + '/vertex') return r.json()
[docs] def add_vertex_collection(self, collection_name): """ Add vertex collection""" data = { "collection": collection_name } r = requests.post(self.url + '/_api/gharial/' + self.graph_name + '/vertex', data=json.dumps(data)) return r.json()
[docs] def remove_vertex_collection(self, collection_name): """ Remove vertex collection """ r = requests.delete(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name) return r.json()
[docs] def list_edge_definitions(self): """ List edge collections """ r = requests.get(self.url + '/_api/gharial/' + self.graph_name + '/edge') return r.json()
[docs] def add_edge_definition(self, collection_name, from_list, to_list): """ Add edge collection """ if type(from_list) != list: from_list = [from_list] if type(to_list) != list: to_list = [to_list] data = { "collection": collection_name, "from": from_list, "to": to_list } r = requests.post(self.url + '/_api/gharial/' + self.graph_name + '/edge', data=json.dumps(data)) return r.json()
[docs] def replace_edge_definition(self, collection_name, from_list, to_list): """ Replace edge definition """ if type(from_list) != list: from_list = list(from_list) if type(to_list) != list: to_list = list(to_list) data = { "collection": collection_name, "from": from_list, "to": to_list } r = requests.post(self.url + '/_api/gharial/' + self.graph_name + '/edge' + collection_name, data=json.dumps(data)) return r.json()
[docs] def remove_edge_definition(self, collection_name): """ Remove edge definition """ r = requests.delete(self.url + '/_api/gharial/' + self.graph_name + '/edge/' + collection_name) return r.json()
""" Vertices """
[docs] def create_vertex(self, collection_name, data): """ Create a vertex """ r = requests.post(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name, data=json.dumps(data)) return r.json()
[docs] def create_vertex_key(self, collection_name, data): """ Create a vertex and Get a vertex key""" r = requests.post(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name, data=json.dumps(data)) return r.json()['vertex']['_key']
[docs] def is_vertex(self, collection_name, vertex_key): """ Check a existence of vertex """ value = self.get_vertex(collection_name, vertex_key) if value.has_key('code'): if value['code'] == 200: return True else: return False else: return value
[docs] def get_vertex(self, collection_name, vertex_key): """ Get a vertex """ r = requests.get(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name + '/' + vertex_key) return r.json()
[docs] def get_vertex_key(self, collection_name, vertex_key): """ Get a vertex key """ r = requests.get(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name + '/' + vertex_key) return r.json()['vertex']['_key']
[docs] def modify_vertex(self, collection_name, vertex_key, data): """ Modify a vertex """ r = requests.patch(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name + '/' + vertex_key, data=json.dumps(data)) return r.json()
[docs] def replace_vertex(self, collection_name, vertex_key, data): """ Replace a vertex """ r = requests.put(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name + '/' + vertex_key, data=json.dumps(data)) return r.json()
[docs] def remove_vertex(self, collection_name, vertex_key): """ Remove a vertex """ r = requests.delete(self.url + '/_api/gharial/' + self.graph_name + '/vertex/' + collection_name + '/' + vertex_key) return r.json()
[docs] def unicode2key(self, text): """ Convert unicode to key string e.g., '한국어' to 'e3a38b24-e999-509d-958f-25f5b717c376' """ import uuid text = unicode(text) text = ''.join(e for e in text if e.isalnum()) # remove special characters key = str(uuid.uuid5(uuid.NAMESPACE_DNS, repr(text))) return key
""" Edges """
[docs] def create_edge(self, collection_name, data): """ Create an edge Free style json body data = { "_key" : "key1", "_from" : "a/2781783", "_to" : "b/2781736" } """ r = requests.post(self.url + '/_api/gharial/' + self.graph_name + '/edge/' + collection_name, data=json.dumps(data)) return r.json() # if result['code'] == ''
[docs] def get_edge(self, collection_name, edge_key): """ Get a edge """ r = requests.get(self.url + '/_api/gharial/' + self.graph_name + '/edge/' + collection_name + '/' + edge_key) return r.json()
[docs] def modify_edge(self, collection_name, edge_key, data): """ Modify a edge """ r = requests.patch(self.url + '/_api/gharial/' + self.graph_name + '/edge/' + collection_name + '/' + edge_key, data=json.dumps(data)) return r.json()
[docs] def replace_edge(self, collection_name, edge_key, data): """ Replace a edge """ r = requests.put(self.url + '/_api/gharial/' + self.graph_name + '/edge/' + collection_name + '/' + edge_key, data=json.dumps(data)) return r.json()
[docs] def remove_edge(self, collection_name, edge_key): """ Remove a edge """ r = requests.delete(self.url + '/_api/gharial/' + self.graph_name + '/edge/' + collection_name + '/' + edge_key) return r.json()
""" Traversal """
[docs] def traversal(self, startVertex, graph_name=1, direction='any', data=1): """ Graph traversal """ if graph_name == 1: graph_name = self.graph_name if data == 1: data = { "startVertex": startVertex, "graphName": graph_name, "direction": direction, } r = requests.post(self.url + '/_api/traversal/', data=json.dumps(data)) return r.json()
""" Documents """
[docs] def all_keys(self, collection_name): data = { "collection": collection_name } r = requests.put(self.url + '/_api/simple/all-keys', data=json.dumps(data)) return r.json()