Exemplo n.º 1
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
Exemplo n.º 2
0
 async def _deserialize_result(self, result):
     if isinstance(result, Traverser):
         bulk = result.bulk
         obj = result.object
         if isinstance(obj, (Vertex, Edge)):
             hashable_id = self._get_hashable_id(obj.id)
             current = self.current.get(hashable_id, None)
             if isinstance(obj, Vertex):
                 # why doesn't this come in on the vertex?
                 label = await self._g.V(obj.id).label().next()
                 if not current:
                     current = self.app.vertices.get(label, GenericVertex)()
                 props = await self._get_vertex_properties(obj.id, label)
             if isinstance(obj, Edge):
                 props = await self._g.E(obj.id).valueMap(True).next()
                 if not current:
                     current = self.app.edges.get(
                         props.get(T.label), GenericEdge)()
                     current.source = GenericVertex()
                     current.target = GenericVertex()
             element = current.__mapping__.mapper_func(obj, props, current)
             self.current[hashable_id] = element
             return Traverser(element, bulk)
         else:
             return result
     # Recursive serialization is broken in goblin
     elif isinstance(result, dict):
         for key in result:
             result[key] = self._deserialize_result(result[key])
         return result
     elif isinstance(result, list):
         return [self._deserialize_result(item) for item in result]
     else:
         return result
Exemplo n.º 3
0
 def test_traversals(self):
     statics.load_statics(globals())
     connection = DriverRemoteConnection('ws://localhost:8182/gremlin', 'g')
     assert "remoteconnection[ws://localhost:8182/gremlin,g]" == str(
         connection)
     #
     g = Graph().traversal().withRemote(connection)
     #
     assert 6L == g.V().count().toList()[0]
     #
     assert Vertex(1) == g.V(1).next()
     assert 1 == g.V(1).id().next()
     assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
     assert 1 == len(g.V(1).toList())
     assert isinstance(g.V(1).toList(), list)
     #
     results = g.V().repeat(out()).times(2).name.toList()
     assert 2 == len(results)
     assert "lop" in results
     assert "ripple" in results
     #
     assert 10 == g.V().repeat(both()).times(5)[0:10].count().next()
     assert 1 == g.V().repeat(both()).times(5)[0].count().next()
     assert 0 == g.V().repeat(both()).times(5)[0:0].count().next()
     assert 4 == g.V()[2:].count().next()
     assert 2 == g.V()[:2].count().next()
     # todo: need a traversal metrics deserializer
     g.V().out().profile().next()
     connection.close()
Exemplo n.º 4
0
 async def test_traversals(self, remote_connection):
     statics.load_statics(globals())
     g = Graph().traversal().withRemote(remote_connection)
     result = await g.V().count().toList()
     assert long(6) == result[0]
     # #
     assert Vertex(1) == await g.V(1).next()
     assert 1 == await g.V(1).id().next()
     assert Traverser(Vertex(1)) == await g.V(1).nextTraverser()
     result = await g.V(1).toList()
     assert 1 == len(result)
     result = await g.V(1).toList()
     assert isinstance(result, list)
     results = g.V().repeat(out()).times(2).name
     results = await results.toList()
     assert 2 == len(results)
     assert "lop" in results  # FIXME : Test fails here.
     assert "ripple" in results
     # # #
     assert 10 == await g.V().repeat(both()).times(5)[0:10].count().next()
     assert 1 == await g.V().repeat(both()).times(5)[0:1].count().next()
     assert 0 == await g.V().repeat(both()).times(5)[0:0].count().next()
     assert 4 == await g.V()[2:].count().next()
     assert 2 == await g.V()[:2].count().next()
     # # #
     results = await g.withSideEffect('a', [
         'josh', 'peter'
     ]).V(1).out('created').in_('created').values('name').where(within('a')
                                                                ).toList()
     assert 2 == len(results)
     assert 'josh' in results
     assert 'peter' in results
     # # # todo: need a traversal metrics deserializer
     # g.V().out().profile().next()
     await remote_connection.close()
Exemplo n.º 5
0
 def _handle_query_results(result_set, gremlin_future):
     try:
         traversers = [Traverser(t) for t in result_set]
         gremlin_future.set_result(
             RemoteTraversal(iter(traversers), TraversalSideEffects()))
     except Exception as e:
         gremlin_future.set_exception(e)
    def test_traversals(self, remote_connection):
        statics.load_statics(globals())
        assert "remoteconnection[ws://localhost:45940/gremlin,g]" == str(
            remote_connection)
        g = Graph().traversal().withRemote(remote_connection)

        assert long(6) == g.V().count().toList()[0]
        # #
        assert Vertex(1) == g.V(1).next()
        assert 1 == g.V(1).id().next()
        assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
        assert 1 == len(g.V(1).toList())
        assert isinstance(g.V(1).toList(), list)
        results = g.V().repeat(out()).times(2).name
        results = results.toList()
        assert 2 == len(results)
        assert "lop" in results
        assert "ripple" in results
        # #
        assert 10 == g.V().repeat(both()).times(5)[0:10].count().next()
        assert 1 == g.V().repeat(both()).times(5)[0:1].count().next()
        assert 0 == g.V().repeat(both()).times(5)[0:0].count().next()
        assert 4 == g.V()[2:].count().next()
        assert 2 == g.V()[:2].count().next()
        # #
        results = g.withSideEffect(
            'a', ['josh', 'peter'
                  ]).V(1).out('created').in_('created').values('name').where(
                      within('a')).toList()
        assert 2 == len(results)
        assert 'josh' in results
        assert 'peter' in results
        # # todo: need a traversal metrics deserializer
        g.V().out().profile().next()
Exemplo n.º 7
0
    def test_traversals(self, remote_connection):
        statics.load_statics(globals())
        g = traversal().withRemote(remote_connection)

        assert long(6) == g.V().count().toList()[0]
        # #
        assert Vertex(1) == g.V(1).next()
        assert 1 == g.V(1).id().next()
        assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
        assert 1 == len(g.V(1).toList())
        assert isinstance(g.V(1).toList(), list)
        results = g.V().repeat(out()).times(2).name
        results = results.toList()
        assert 2 == len(results)
        assert "lop" in results
        assert "ripple" in results
        # #
        assert 10 == g.V().repeat(both()).times(5)[0:10].count().next()
        assert 1 == g.V().repeat(both()).times(5)[0:1].count().next()
        assert 0 == g.V().repeat(both()).times(5)[0:0].count().next()
        assert 4 == g.V()[2:].count().next()
        assert 2 == g.V()[:2].count().next()
        # #
        results = g.withSideEffect('a', ['josh', 'peter']).V(1).out('created').in_('created').values('name').where(P.within('a')).toList()
        assert 2 == len(results)
        assert 'josh' in results
        assert 'peter' in results
        # #
        results = g.V().out().profile().toList()
        assert 1 == len(results)
        assert 'metrics' in results[0]
        assert 'dur' in results[0]
        # #
        results = g.V().has('name', 'peter').as_('a').out('created').as_('b').select('a', 'b').by(
            __.valueMap()).toList()
        assert 1 == len(results)
        assert 'peter' == results[0]['a']['name'][0]
        assert 35 == results[0]['a']['age'][0]
        assert 'lop' == results[0]['b']['name'][0]
        assert 'java' == results[0]['b']['lang'][0]
        assert 2 == len(results[0]['a'])
        assert 2 == len(results[0]['b'])
        # #
        results = g.V(1).inject(g.V(2).next()).values('name').toList()
        assert 2 == len(results)
        assert 'marko' in results
        assert 'vadas' in results
        # #
        results = g.V().has('person', 'name', 'marko').map(lambda: ("it.get().value('name')", "gremlin-groovy")).toList()
        assert 1 == len(results)
        assert 'marko' in results
        # #
        # this test just validates that the underscored versions of steps conflicting with Gremlin work
        # properly and can be removed when the old steps are removed - TINKERPOP-2272
        results = g.V().filter_(__.values('age').sum_().and_(
            __.max_().is_(gt(0)), __.min_().is_(gt(0)))).range_(0, 1).id_().next()
        assert 1 == results
Exemplo n.º 8
0
        def submit(self, bytecode):
            # the only reason I don't use submitAsync here
            # is to avoid an unuseful future wrap
            query, ep = self._prepare_query(bytecode)

            traversers = self.session.execute_graph(query,
                                                    execution_profile=ep)
            traversers = [Traverser(t) for t in traversers]
            return RemoteTraversal(iter(traversers), TraversalSideEffects())
    def test_traversals(self, remote_connection):
        statics.load_statics(globals())
        assert "remoteconnection[ws://localhost:45940/gremlin,gmodern]" == str(remote_connection)
        g = traversal().withRemote(remote_connection)

        assert long(6) == g.V().count().toList()[0]
        # #
        assert Vertex(1) == g.V(1).next()
        assert 1 == g.V(1).id().next()
        assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
        assert 1 == len(g.V(1).toList())
        assert isinstance(g.V(1).toList(), list)
        results = g.V().repeat(out()).times(2).name
        results = results.toList()
        assert 2 == len(results)
        assert "lop" in results
        assert "ripple" in results
        # #
        assert 10 == g.V().repeat(both()).times(5)[0:10].count().next()
        assert 1 == g.V().repeat(both()).times(5)[0:1].count().next()
        assert 0 == g.V().repeat(both()).times(5)[0:0].count().next()
        assert 4 == g.V()[2:].count().next()
        assert 2 == g.V()[:2].count().next()
        # #
        results = g.withSideEffect('a', ['josh', 'peter']).V(1).out('created').in_('created').values('name').where(
            within('a')).toList()
        assert 2 == len(results)
        assert 'josh' in results
        assert 'peter' in results
        # #
        results = g.V().out().profile().toList()
        assert 1 == len(results)
        assert 'metrics' in results[0]
        assert 'dur' in results[0]
        # #
        results = g.V().has('name', 'peter').as_('a').out('created').as_('b').select('a', 'b').by(
            __.valueMap()).toList()
        assert 1 == len(results)
        assert 'peter' == results[0]['a']['name'][0]
        assert 35 == results[0]['a']['age'][0]
        assert 'lop' == results[0]['b']['name'][0]
        assert 'java' == results[0]['b']['lang'][0]
        assert 2 == len(results[0]['a'])
        assert 2 == len(results[0]['b'])
        # #
        results = g.V(1).inject(g.V(2).next()).values('name').toList()
        assert 2 == len(results)
        assert 'marko' in results
        assert 'vadas' in results
Exemplo n.º 10
0
    def submit(self, bytecode):

        query = DseGraph.query_from_traversal(bytecode)
        ep = self.session.execution_profile_clone_update(
            self.execution_profile, row_factory=graph_traversal_row_factory)
        graph_options = ep.graph_options.copy()
        graph_options.graph_language = DseGraph.DSE_GRAPH_QUERY_LANGUAGE
        if self.graph_name:
            graph_options.graph_name = self.graph_name

        ep.graph_options = graph_options

        traversers = self.session.execute_graph(query, execution_profile=ep)
        traversers = [Traverser(t) for t in traversers]
        return RemoteTraversal(iter(traversers), TraversalSideEffects())
    def test_traversals(self, remote_connection):
        statics.load_statics(globals())
        g = traversal().withRemote(remote_connection)

        assert long(6) == g.V().count().toList()[0]
        # #
        assert Vertex(1) == g.V(1).next()
        assert 1 == g.V(1).id().next()
        assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
        assert 1 == len(g.V(1).toList())
        assert isinstance(g.V(1).toList(), list)
        results = g.V().repeat(out()).times(2).name
        results = results.toList()
        assert 2 == len(results)
        assert "lop" in results
        assert "ripple" in results
        # #
        assert 10 == g.V().repeat(both()).times(5)[0:10].count().next()
        assert 1 == g.V().repeat(both()).times(5)[0:1].count().next()
        assert 0 == g.V().repeat(both()).times(5)[0:0].count().next()
        assert 4 == g.V()[2:].count().next()
        assert 2 == g.V()[:2].count().next()
        # #
        results = g.withSideEffect(
            'a', ['josh', 'peter'
                  ]).V(1).out('created').in_('created').values('name').where(
                      P.within('a')).toList()
        assert 2 == len(results)
        assert 'josh' in results
        assert 'peter' in results
        # #
        results = g.V().out().profile().toList()
        assert 1 == len(results)
        assert 'metrics' in results[0]
        assert 'dur' in results[0]
        # #
        results = g.V().has('name',
                            'peter').as_('a').out('created').as_('b').select(
                                'a', 'b').by(__.valueMap()).toList()
        assert 1 == len(results)
        assert 'peter' == results[0]['a']['name'][0]
        assert 35 == results[0]['a']['age'][0]
        assert 'lop' == results[0]['b']['name'][0]
        assert 'java' == results[0]['b']['lang'][0]
        assert 2 == len(results[0]['a'])
        assert 2 == len(results[0]['b'])
        # #
        results = g.V(1).inject(g.V(2).next()).values('name').toList()
        assert 2 == len(results)
        assert 'marko' in results
        assert 'vadas' in results
        # #
        results = g.V().has('person', 'name', 'marko').map(
            lambda: ("it.get().value('name')", "gremlin-groovy")).toList()
        assert 1 == len(results)
        assert 'marko' in results
        # #
        # this test just validates that the underscored versions of steps conflicting with Gremlin work
        # properly and can be removed when the old steps are removed - TINKERPOP-2272
        results = g.V().filter_(
            __.values('age').sum_().and_(__.max_().is_(gt(0)),
                                         __.min_().is_(gt(0)))).range_(
                                             0, 1).id_().next()
        assert 1 == results
        # #
        # test binding in P
        results = g.V().has('person', 'age',
                            Bindings.of('x', lt(30))).count().next()
        assert 2 == results
        # #
        # test dict keys which can only work on GraphBinary and GraphSON3 which include specific serialization
        # types for dict
        if not isinstance(remote_connection._client._message_serializer,
                          GraphSONSerializersV2d0):
            results = g.V().has(
                'person', 'name',
                'marko').elementMap("name").groupCount().next()
            assert {
                HashableDict.of({
                    T.id: 1,
                    T.label: 'person',
                    'name': 'marko'
                }): 1
            } == results
Exemplo n.º 12
0
 def _objectify(self, dict):
     return Traverser(
         GraphSONReader._objectify(dict[_SymbolHelper._VALUE]["value"]),
         GraphSONReader._objectify(dict[_SymbolHelper._VALUE]["bulk"]))
Exemplo n.º 13
0
 def _read_traverser(cls, b, r):
     bulk = int64_unpack(b.read(8))
     obj = r.readObject(b)
     return Traverser(obj, bulk=bulk)
Exemplo n.º 14
0
 def _traversers_generator(traversers):
     for t in traversers:
         yield Traverser(t)
Exemplo n.º 15
0
 def deserialize_message(cls, message):
     return Traverser(message)
Exemplo n.º 16
0
 def objectify(cls, d, reader):
     return Traverser(reader.toObject(d["value"]),
                      reader.toObject(d["bulk"]))
Exemplo n.º 17
0
 async def _receive(self, async_iter, response_queue):
     async for result in async_iter:
         traverser = Traverser(self._deserialize_result(result), 1)
         response_queue.put_nowait(traverser)
     response_queue.put_nowait(None)