def test_custom_mapping(self): # extended mapping class X(object): pass type_string = "test:Xtype" override_string = "g:Int64" serdes = Mock() reader = GraphSONReader(deserializer_map={type_string: serdes}) assert type_string in reader.deserializers # base dicts are not modified assert type_string not in gremlin_python.structure.io.graphson._deserializers x = X() o = reader.toObject({GraphSONUtil.TYPE_KEY: type_string, GraphSONUtil.VALUE_KEY: x}) serdes.objectify.assert_called_once_with(x, reader) assert o is serdes.objectify() # overridden mapping type_string = "g:Int64" serdes = Mock() reader = GraphSONReader(deserializer_map={type_string: serdes, override_string: serdes}) assert gremlin_python.structure.io.graphson._deserializers[type_string] is not reader.deserializers[type_string] value = 3 o = reader.toObject({GraphSONUtil.TYPE_KEY: type_string, GraphSONUtil.VALUE_KEY: value}) serdes.objectify.assert_called_once_with(value, reader) assert o is serdes.objectify()
def __init__(self, url, traversal_source, username="", password="", loop=None, graphson_reader=None, graphson_writer=None): super(DriverRemoteConnection, self).__init__(url, traversal_source) self._url = url self._username = username self._password = password if loop is None: self._loop = ioloop.IOLoop.current() self._websocket = self._loop.run_sync(lambda: websocket.websocket_connect(self.url)) self._graphson_reader = graphson_reader or GraphSONReader() self._graphson_writer = graphson_writer or GraphSONWriter()
from dse.graph import GraphOptions from dse_graph.serializers import serializers, deserializers, dse_deserializers from dse_graph._version import __version__, __version_info__ class NullHandler(logging.Handler): def emit(self, record): pass logging.getLogger('dse_graph').addHandler(NullHandler()) log = logging.getLogger(__name__) # Create our custom GraphSONReader/Writer dse_graphson_reader = GraphSONReader(deserializer_map=dse_deserializers) graphson_reader = GraphSONReader(deserializer_map=deserializers) graphson_writer = GraphSONWriter(serializer_map=serializers) def graph_traversal_row_factory(column_names, rows): """ Row Factory that returns the decoded graphson. """ return [graphson_reader.readObject(row[0])['result'] for row in rows] def graph_traversal_dse_object_row_factory(column_names, rows): """ Row Factory that returns the decoded graphson as DSE types. """
class TestGraphSONReader(object): graphson_reader = GraphSONReader() def test_number_input(self): x = self.graphson_reader.readObject( json.dumps({ "@type": "g:Int32", "@value": 31 })) assert isinstance(x, int) assert 31 == x ## x = self.graphson_reader.readObject( json.dumps({ "@type": "g:Int64", "@value": 31 })) assert isinstance(x, long) assert long(31) == x ## x = self.graphson_reader.readObject( json.dumps({ "@type": "g:Float", "@value": 31.3 })) assert isinstance(x, float) assert 31.3 == x ## x = self.graphson_reader.readObject( json.dumps({ "@type": "g:Double", "@value": 31.2 })) assert isinstance(x, float) assert 31.2 == x def test_graph(self): vertex = self.graphson_reader.readObject(""" {"@type":"g:Vertex", "@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29}}]}}}""" ) assert isinstance(vertex, Vertex) assert "person" == vertex.label assert 1 == vertex.id assert isinstance(vertex.id, int) assert vertex == Vertex(1) ## vertex = self.graphson_reader.readObject(""" {"@type":"g:Vertex", "@value":{"id":{"@type":"g:Float","@value":45.23}}}""" ) assert isinstance(vertex, Vertex) assert 45.23 == vertex.id assert isinstance(vertex.id, FloatType) assert "vertex" == vertex.label assert vertex == Vertex(45.23) ## vertex_property = self.graphson_reader.readObject(""" {"@type":"g:VertexProperty", "@value":{"id":"anId","label":"aKey","value":true,"vertex":{"@type":"g:Int32","@value":9}}}""" ) assert isinstance(vertex_property, VertexProperty) assert "anId" == vertex_property.id assert "aKey" == vertex_property.label assert vertex_property.value assert vertex_property.vertex == Vertex(9) ## vertex_property = self.graphson_reader.readObject(""" {"@type":"g:VertexProperty", "@value":{"id":{"@type":"g:Int32","@value":1},"label":"name","value":"marko"}}""" ) assert isinstance(vertex_property, VertexProperty) assert 1 == vertex_property.id assert "name" == vertex_property.label assert "marko" == vertex_property.value assert vertex_property.vertex is None ## edge = self.graphson_reader.readObject(""" {"@type":"g:Edge", "@value":{"id":{"@type":"g:Int64","@value":17},"label":"knows","inV":"x","outV":"y","inVLabel":"xLab","properties":{"aKey":"aValue","bKey":true}}}""" ) # print edge assert isinstance(edge, Edge) assert 17 == edge.id assert "knows" == edge.label assert edge.inV == Vertex("x", "xLabel") assert edge.outV == Vertex("y", "vertex") ## property = self.graphson_reader.readObject(""" {"@type":"g:Property", "@value":{"key":"aKey","value":{"@type":"g:Int64","@value":17},"element":{"@type":"g:Edge","@value":{"id":{"@type":"g:Int64","@value":122},"label":"knows","inV":"x","outV":"y","inVLabel":"xLab"}}}}""" ) # print property assert isinstance(property, Property) assert "aKey" == property.key assert 17 == property.value assert Edge(122, Vertex("x"), "knows", Vertex("y")) == property.element def test_path(self): path = self.graphson_reader.readObject( """{"@type":"g:Path","@value":{"labels":[["a"],["b","c"],[]],"objects":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":0},"value":"marko","label":"name"}}],"age":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29},"label":"age"}}]}}},{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":3},"label":"software","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":4},"value":"lop","label":"name"}}],"lang":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":5},"value":"java","label":"lang"}}]}}},"lop"]}}""" ) assert isinstance(path, Path) if six.PY3: assert "[v[1], v[3], 'lop']" == str(path) else: assert "[v[1], v[3], u'lop']" == str(path) assert Vertex(1) == path[0] assert Vertex(1) == path["a"] assert "lop" == path[2] assert 3 == len(path) def test_custom_mapping(self): # extended mapping class X(object): pass type_string = "test:Xtype" override_string = "g:Int64" serdes = Mock() reader = GraphSONReader(deserializer_map={type_string: serdes}) assert type_string in reader.deserializers # base dicts are not modified assert type_string not in gremlin_python.structure.io.graphson._deserializers x = X() o = reader.toObject({ GraphSONUtil.TYPE_KEY: type_string, GraphSONUtil.VALUE_KEY: x }) serdes.objectify.assert_called_once_with(x, reader) assert o is serdes.objectify() # overridden mapping type_string = "g:Int64" serdes = Mock() reader = GraphSONReader(deserializer_map={ type_string: serdes, override_string: serdes }) assert gremlin_python.structure.io.graphson._deserializers[ type_string] is not reader.deserializers[type_string] value = 3 o = reader.toObject({ GraphSONUtil.TYPE_KEY: type_string, GraphSONUtil.VALUE_KEY: value }) serdes.objectify.assert_called_once_with(value, reader) assert o is serdes.objectify()
class TestGraphSONReader(TestCase): graphson_reader = GraphSONReader() def test_number_input(self): x = self.graphson_reader.readObject(json.dumps({ "@type": "g:Int32", "@value": 31 })) assert isinstance(x, int) assert 31 == x ## x = self.graphson_reader.readObject(json.dumps({ "@type": "g:Int64", "@value": 31 })) assert isinstance(x, long) assert long(31) == x ## x = self.graphson_reader.readObject(json.dumps({ "@type": "g:Float", "@value": 31.3 })) assert isinstance(x, float) assert 31.3 == x ## x = self.graphson_reader.readObject(json.dumps({ "@type": "g:Double", "@value": 31.2 })) assert isinstance(x, float) assert 31.2 == x def test_graph(self): vertex = self.graphson_reader.readObject( """{"@type":"g:Vertex", "@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29}}]}}}""") assert isinstance(vertex, Vertex) assert "person" == vertex.label assert 1 == vertex.id assert isinstance(vertex.id, int) assert vertex == Vertex(1) def test_path(self): path = self.graphson_reader.readObject( """{"@type":"g:Path","@value":{"labels":[["a"],["b","c"],[]],"objects":[{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":0},"value":"marko","label":"name"}}],"age":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29},"label":"age"}}]}}},{"@type":"g:Vertex","@value":{"id":{"@type":"g:Int32","@value":3},"label":"software","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":4},"value":"lop","label":"name"}}],"lang":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":5},"value":"java","label":"lang"}}]}}},"lop"]}}""" ) assert isinstance(path, Path) assert "[v[1], v[3], 'lop']" == str(path) assert Vertex(1) == path[0] assert Vertex(1) == path["a"] assert "lop" == path[2] assert 3 == len(path) def test_custom_mapping(self): # extended mapping class X(object): pass type_string = "test:Xtype" override_string = "g:Int64" serdes = Mock() reader = GraphSONReader(deserializer_map={type_string: serdes}) assert type_string in reader.deserializers # base dicts are not modified assert type_string not in gremlin_python.structure.io.graphson._deserializers x = X() o = reader.toObject({GraphSONUtil.TYPE_KEY: type_string, GraphSONUtil.VALUE_KEY: x}) serdes.objectify.assert_called_once_with(x, reader) assert o is serdes.objectify() # overridden mapping type_string = "g:Int64" serdes = Mock() reader = GraphSONReader(deserializer_map={type_string: serdes, override_string: serdes}) assert gremlin_python.structure.io.graphson._deserializers[type_string] is not reader.deserializers[type_string] value = 3 o = reader.toObject({GraphSONUtil.TYPE_KEY: type_string, GraphSONUtil.VALUE_KEY: value}) serdes.objectify.assert_called_once_with(value, reader) assert o is serdes.objectify()