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()
Exemple #2
0
 def test_numbers(self):
     x = GraphSONReader.readObject(
         json.dumps({
             "@type": "g:Int32",
             "@value": 31
         }))
     assert isinstance(x, int)
     assert 31 == x
     ##
     x = GraphSONReader.readObject(
         json.dumps({
             "@type": "g:Int64",
             "@value": 31
         }))
     assert isinstance(x, long)
     assert long(31) == x
     ##
     x = GraphSONReader.readObject(
         json.dumps({
             "@type": "g:Float",
             "@value": 31.3
         }))
     assert isinstance(x, float)
     assert 31.3 == x
     ##
     x = GraphSONReader.readObject(
         json.dumps({
             "@type": "g:Double",
             "@value": 31.2
         }))
     assert isinstance(x, float)
     assert 31.2 == x
 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()
Exemple #4
0
 def deserialize_message(cls, message):
     if isinstance(message, dict):
         if message.get('@type', '') == 'g:Traverser':
             obj = GraphSONReader._objectify(message)
         else:
             obj = Traverser(message.get('@value', message))
     else:
         obj = Traverser(message)
     return obj
Exemple #5
0
 def test_graph(self):
     vertex = GraphSONReader.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)
Exemple #6
0
 def deserialize_message(cls, message):
     if isinstance(message, dict):
         if message.get('@type', '') == 'g:Traverser':
             obj = GraphSONReader._objectify(message)
         else:
             obj = Traverser(message.get('@value', message))
     else:
         obj = Traverser(message)
     return obj
Exemple #7
0
    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()
Exemple #8
0
 def test_path(self):
     path = GraphSONReader.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)
Exemple #9
0
    def receive(self):
        if self._closed:
            return
        recv_message = yield self._websocket.read_message()
        recv_message = json.loads(recv_message.decode('utf-8'))
        status_code = recv_message["status"]["code"]
        aggregateTo = recv_message["result"]["meta"].get("aggregateTo", "list")

        # authentification required then
        if status_code == 407:
            self._websocket.write_message(b"".join([
                b"\x21", b"application/vnd.gremlin-v2.0+json",
                json.dumps(
                    {
                        "requestId": {
                            "@type": "g:UUID",
                            "@value": str(uuid.uuid4())
                        },
                        "op": "authentication",
                        "processor": "traversal",
                        "args": {
                            "sasl":
                            base64.b64encode(b"".join([
                                b"\x00",
                                self._username.encode("utf-8"), b"\x00",
                                self._password.encode("utf-8")
                            ])).decode()
                        }
                    },
                    separators=(',', ':')).encode("utf-8")
            ]),
                                          binary=True)
            results = yield self.receive()
            raise gen.Return(results)
        elif status_code == 204:
            self._closed = True
            return
        elif status_code in [200, 206]:
            results = []
            for item in recv_message["result"]["data"]:
                results.append(GraphSONReader._objectify(item))
            if status_code == 200:
                self._closed = True
            raise gen.Return((aggregateTo, results))
        else:
            self._closed = True
            raise GremlinServerError("{0}: {1}".format(
                status_code, recv_message["status"]["message"]))
    def receive(self):
        if self._closed:
            return
        recv_message = yield self._websocket.read_message()
        recv_message = json.loads(recv_message.decode('utf-8'))
        status_code = recv_message["status"]["code"]
        aggregateTo = recv_message["result"]["meta"].get("aggregateTo", "list")

        # authentification required then
        if status_code == 407:
            self._websocket.write_message(
                b"".join([b"\x21",
                          b"application/vnd.gremlin-v2.0+json",
                          json.dumps({
                              "requestId": {
                                  "@type": "g:UUID",
                                  "@value": str(uuid.uuid4())
                              },
                              "op": "authentication",
                              "processor": "traversal",
                              "args": {
                                  "sasl": base64.b64encode(
                                      b"".join([b"\x00", self._username.encode("utf-8"),
                                                b"\x00", self._password.encode("utf-8")])).decode()
                              }
                          }, separators=(',', ':')).encode("utf-8")]), binary=True)
            results = yield self.receive()
            raise gen.Return(results)
        elif status_code == 204:
            self._closed = True
            return
        elif status_code in [200, 206]:
            results = []
            for item in recv_message["result"]["data"]:
                results.append(GraphSONReader._objectify(item))
            if status_code == 200:
                self._closed = True
            raise gen.Return((aggregateTo, results))
        else:
            self._closed = True
            raise GremlinServerError(
                "{0}: {1}".format(status_code, recv_message["status"]["message"]))
Exemple #11
0
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.
    """
Exemple #12
0
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()
Exemple #13
0
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()