You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/12/16 17:19:39 UTC
[13/13] tinkerpop git commit: raise error if side effect method
called while loop is running
raise error if side effect method called while loop is running
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/79dac23b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/79dac23b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/79dac23b
Branch: refs/heads/tp32
Commit: 79dac23b2f305911e651648c5b43fb3fe59d94c8
Parents: a8c8b65
Author: davebshow <da...@gmail.com>
Authored: Wed Dec 7 16:37:05 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Dec 16 10:14:20 2016 -0500
----------------------------------------------------------------------
.../driver/driver_remote_connection.py | 4 ++--
.../gremlin_python/driver/remote_connection.py | 12 +++++++++-
.../driver/test_driver_remote_connection.py | 24 +++++++++++---------
3 files changed, 26 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/79dac23b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index babb113..b951cdf 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -54,13 +54,13 @@ class DriverRemoteConnection(RemoteConnection):
request_id = str(uuid.uuid4())
traversers = self._loop.run_sync(lambda: self.submit_traversal_bytecode(request_id, bytecode))
keys, value, close = self._get_side_effect_lambdas(request_id)
- return RemoteTraversal(iter(traversers), RemoteTraversalSideEffects(keys, value, close))
+ return RemoteTraversal(iter(traversers), RemoteTraversalSideEffects(keys, value, close, self._loop))
def submit_async(self, bytecode):
request_id = str(uuid.uuid4())
future_traversers = self.submit_traversal_bytecode(request_id, bytecode)
keys, value, close = self._get_side_effect_lambdas(request_id)
- side_effects = RemoteTraversalSideEffects(keys, value, close)
+ side_effects = RemoteTraversalSideEffects(keys, value, close, self._loop)
return RemoteTraversal(future_traversers, side_effects)
@gen.coroutine
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/79dac23b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
index 93c92b7..f7ed48e 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
@@ -57,20 +57,27 @@ class RemoteTraversal(Traversal):
class RemoteTraversalSideEffects(TraversalSideEffects):
- def __init__(self, keys_lambda, value_lambda, close_lambda):
+ def __init__(self, keys_lambda, value_lambda, close_lambda, loop):
self._keys_lambda = keys_lambda
self._value_lambda = value_lambda
self._close_lambda = close_lambda
+ self._loop = loop
self._keys = set()
self._side_effects = {}
self._closed = False
def keys(self):
+ if self._loop._running:
+ raise RuntimeError("Cannot call side effect methods"
+ "while event loop is running")
if not self._closed:
self._keys = self._keys_lambda()
return self._keys
def get(self, key):
+ if self._loop._running:
+ raise RuntimeError("Cannot call side effect methods"
+ "while event loop is running")
if not self._side_effects.get(key):
if not self._closed:
results = self._value_lambda(key)
@@ -81,6 +88,9 @@ class RemoteTraversalSideEffects(TraversalSideEffects):
return self._side_effects[key]
def close(self):
+ if self._loop._running:
+ raise RuntimeError("Cannot call side effect methods"
+ "while event loop is running")
results = self._close_lambda()
self._closed = True
return results
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/79dac23b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index c9e64c5..783cf7e 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -211,6 +211,7 @@ class TestDriverRemoteConnection(TestCase):
assert count == 6
loop.run_sync(go)
+ connection.close()
def test_promise_side_effects(self):
loop = ioloop.IOLoop.current()
@@ -224,22 +225,17 @@ class TestDriverRemoteConnection(TestCase):
@gen.coroutine
def go():
traversal = yield g.V().aggregate('a').promise()
- # Trying to get side effect keys throws error - BAD
+ # Calling synchronous side effect methods from coroutine raises.
with pytest.raises(RuntimeError):
keys = traversal.side_effects.keys()
- # IOLoop is now hosed.
- loop.run_sync(go)
+ with pytest.raises(RuntimeError):
+ keys = traversal.side_effects.get('a')
- # Get a new IOLoop - this should happen for each test case.
- connection.close()
- ioloop.IOLoop.clear_instance()
- loop.close()
- loop = ioloop.IOLoop()
- loop.make_current()
+ with pytest.raises(RuntimeError):
+ keys = traversal.side_effects.close()
- connection = DriverRemoteConnection('ws://localhost:45940/gremlin', 'g')
- g = Graph().traversal().withRemote(connection)
+ loop.run_sync(go)
# If we return the traversal though, we can use side effects per usual.
@gen.coroutine
@@ -251,6 +247,12 @@ class TestDriverRemoteConnection(TestCase):
traversal = loop.run_sync(go)
a, = traversal.side_effects.keys()
assert a == 'a'
+ results = traversal.side_effects.get('a')
+ assert results
+ results = traversal.side_effects.close()
+ assert not results
+
+ connection.close()
if __name__ == '__main__':