This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 2e5d31bf76fe8e35337a7134aab8ca5bcbe6de34
Merge: 33c67ac b1d0ab3
Author: stephen <spmalle...@gmail.com>
AuthorDate: Thu Jan 2 12:35:26 2020 -0500

    Merge branch 'tp34'

 CHANGELOG.asciidoc                                 |  1 +
 docs/src/upgrade/release-3.3.x.asciidoc            | 30 ++++++++++++++++++++++
 gremlin-dotnet/glv/GraphTraversal.template         |  8 ++++++
 .../Process/Traversal/GraphTraversal.cs            |  8 ++++++
 .../DriverRemoteConnection/GraphTraversalTests.cs  | 13 ++++++++++
 .../glv/GraphTraversalSource.template              |  8 ++++++
 .../lib/process/graph-traversal.js                 |  8 ++++++
 .../test/integration/traversal-test.js             | 14 ++++++++++
 gremlin-python/glv/GraphTraversalSource.template   |  3 +++
 .../gremlin_python/process/graph_traversal.py      |  3 +++
 .../tests/driver/test_driver_remote_connection.py  |  7 +++++
 11 files changed, 103 insertions(+)

diff --cc 
gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
index 41fc3d1,0000000..48d1224
mode 100644,000000..100644
--- 
a/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
+++ 
b/gremlin-python/src/main/python/tests/driver/test_driver_remote_connection.py
@@@ -1,190 -1,0 +1,197 @@@
 +#
 +# Licensed to the Apache Software Foundation (ASF) under one
 +# or more contributor license agreements.  See the NOTICE file
 +# distributed with this work for additional information
 +# regarding copyright ownership.  The ASF licenses this file
 +# to you under the Apache License, Version 2.0 (the
 +# "License"); you may not use this file except in compliance
 +# with the License.  You may obtain a copy of the License at
 +#
 +# http://www.apache.org/licenses/LICENSE-2.0
 +#
 +# Unless required by applicable law or agreed to in writing,
 +# software distributed under the License is distributed on an
 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 +# KIND, either express or implied.  See the License for the
 +# specific language governing permissions and limitations
 +# under the License.
 +#
 +import pytest
 +
 +from tornado import ioloop, gen
 +
 +from gremlin_python import statics
 +from gremlin_python.driver.protocol import GremlinServerError
 +from gremlin_python.statics import long
 +from gremlin_python.driver.driver_remote_connection import (
 +    DriverRemoteConnection)
 +from gremlin_python.process.traversal import Traverser
 +from gremlin_python.process.traversal import TraversalStrategy
 +from gremlin_python.process.traversal import P
 +from gremlin_python.process.graph_traversal import __
 +from gremlin_python.process.anonymous_traversal import traversal
 +from gremlin_python.structure.graph import Vertex
 +from gremlin_python.process.strategies import SubgraphStrategy, 
ReservedKeysVerificationStrategy
 +
 +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 +
 +
 +class TestDriverRemoteConnection(object):
 +    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
 +
 +    def test_lambda_traversals(self, remote_connection):
 +        statics.load_statics(globals())
 +        assert "remoteconnection[ws://localhost:45940/gremlin,gmodern]" == 
str(remote_connection)
 +        g = traversal().withRemote(remote_connection)
 +
 +        assert 24.0 == g.withSack(1.0, lambda: ("x -> x + 1", 
"gremlin-groovy")).V().both().sack().sum().next()
 +        assert 24.0 == g.withSack(lambda: ("{1.0d}", "gremlin-groovy"), 
lambda: ("x -> x + 1", "gremlin-groovy")).V().both().sack().sum().next()
 +
 +        assert 48.0 == g.withSack(1.0, lambda: ("x, y ->  x + y + 1", 
"gremlin-groovy")).V().both().sack().sum().next()
 +        assert 48.0 == g.withSack(lambda: ("{1.0d}", "gremlin-groovy"), 
lambda: ("x, y ->  x + y + 1", "gremlin-groovy")).V().both().sack().sum().next()
 +
 +    def test_iteration(self, remote_connection):
 +        statics.load_statics(globals())
 +        g = traversal().withRemote(remote_connection)
 +
 +        t = g.V().count()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert 6 == t.next()
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +
 +        t = g.V().has('name', P.within('marko', 
'peter')).values('name').order()
 +        assert "marko" == t.next()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert t.hasNext()
 +        assert "peter" == t.next()
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +        assert not(t.hasNext())
 +
 +        try:
 +            t.next()
 +            assert False
 +        except StopIteration:
 +            assert True
 +
 +    def test_strategies(self, remote_connection):
 +        statics.load_statics(globals())
 +        g = traversal().withRemote(remote_connection). \
 +            withStrategies(TraversalStrategy("SubgraphStrategy",
 +                                             {"vertices": 
__.hasLabel("person"),
 +                                              "edges": 
__.hasLabel("created")},
 +                                              
"org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy"))
 +        assert 4 == g.V().count().next()
 +        assert 0 == g.E().count().next()
 +        assert 1 == g.V().label().dedup().count().next()
 +        assert 4 == g.V().filter(lambda: ("x -> true", 
"gremlin-groovy")).count().next()
 +        assert "person" == g.V().label().dedup().next()
 +        #
 +        g = traversal().withRemote(remote_connection). \
 +            withStrategies(SubgraphStrategy(vertices=__.hasLabel("person"), 
edges=__.hasLabel("created")))
 +        assert 4 == g.V().count().next()
 +        assert 0 == g.E().count().next()
 +        assert 1 == g.V().label().dedup().count().next()
 +        assert "person" == g.V().label().dedup().next()
 +        #
 +        g = traversal().withRemote(remote_connection). \
 +            withStrategies(SubgraphStrategy(edges=__.hasLabel("created")))
 +        assert 6 == g.V().count().next()
 +        assert 4 == g.E().count().next()
 +        assert 1 == g.E().label().dedup().count().next()
 +        assert "created" == g.E().label().dedup().next()
 +        #
 +        g = g.withoutStrategies(SubgraphStrategy). \
 +            withComputer(vertices=__.has("name", "marko"), edges=__.limit(0))
 +        assert 1 == g.V().count().next()
 +        assert 0 == g.E().count().next()
 +        assert "person" == g.V().label().next()
 +        assert "marko" == g.V().name.next()
 +        #
 +        g = traversal().withRemote(remote_connection).withComputer()
 +        assert 6 == g.V().count().next()
 +        assert 6 == g.E().count().next()
 +        #
 +        g = traversal().withRemote(remote_connection). \
 +            
withStrategies(ReservedKeysVerificationStrategy(throw_exception=True))
 +        try:
 +            g.addV("person").property("id", "please-don't-use-id").iterate()
 +            assert False
 +        except GremlinServerError as gse:
 +            assert gse.status_code == 500
++
++    def test_clone(self, remote_connection):
++        g = traversal().withRemote(remote_connection)
++        t = g.V().count()
++        assert 6 == t.next()
++        assert 6 == t.clone().next()
++        assert 6 == t.clone().next()

Reply via email to