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/08/27 00:54:59 UTC
[44/50] [abbrv] tinkerpop git commit: added aggregateTo=bulkset.
Added test cases to ensure side_effects are retrieved correctly. Added
__hash__ where needed. tests are nearly done.
added aggregateTo=bulkset. Added test cases to ensure side_effects are retrieved correctly. Added __hash__ where needed. tests are nearly done.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a0bd4130
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a0bd4130
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a0bd4130
Branch: refs/heads/master
Commit: a0bd413063af64f5bee0ce24b910fe62b756f2ce
Parents: 8569800
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 14:23:08 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 14:23:20 2016 -0600
----------------------------------------------------------------------
.../python/GraphTraversalSourceGenerator.groovy | 3 +-
.../driver/driver_remote_connection.py | 19 ++++---
.../gremlin_python/process/graph_traversal.py | 3 +-
.../jython/gremlin_python/structure/graph.py | 6 +++
.../driver/test_driver_remote_connection.py | 54 ++++++++++++++++++++
.../main/jython/tests/structure/test_graph.py | 1 +
6 files changed, 77 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index 74c6d89..aaaa5b6 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -55,6 +55,7 @@ specific language governing permissions and limitations
under the License.
'''
""")
+ pythonClass.append("import sys\n")
pythonClass.append("from .traversal import Traversal\n")
pythonClass.append("from .traversal import TraversalStrategies\n")
pythonClass.append("from .traversal import Bytecode\n")
@@ -127,7 +128,7 @@ under the License.
if isinstance(index, int):
return self.range(index, index + 1)
elif isinstance(index, slice):
- return self.range(index.start, index.stop)
+ return self.range(0 if index.start is None else index.start, sys.maxint if index.stop is None else index.stop)
else:
raise TypeError("Index must be int or slice")
def __getattr__(self, key):
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/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 3273ad4..fa61fb5 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
@@ -131,16 +131,16 @@ class DriverRemoteConnection(RemoteConnection):
recv_message = yield response.receive()
if recv_message is None:
break
-
+ aggregateTo = recv_message[0]
# on first message, get the right result data structure
if None == results:
- if "list" == recv_message[0]:
+ if "list" == aggregateTo:
results = []
- elif "set" == recv_message[0]:
+ elif "set" == aggregateTo:
results = set()
- elif "map" == recv_message[0]:
+ elif aggregateTo in ["map", "bulkset"]:
results = {}
- elif "none" == recv_message[0]:
+ elif "none" == aggregateTo:
results = None
else:
results = []
@@ -150,8 +150,12 @@ class DriverRemoteConnection(RemoteConnection):
results = recv_message[1][0]
# updating a map is different than a list or a set
elif isinstance(results, dict):
- for item in recv_message[1]:
- results.update(item)
+ if "map" == aggregateTo:
+ for item in recv_message[1]:
+ results.update(item)
+ else:
+ for item in recv_message[1]:
+ results[item.object] = item.bulk
# flat add list to result list
else:
results += recv_message[1]
@@ -160,6 +164,7 @@ class DriverRemoteConnection(RemoteConnection):
def close(self):
self._websocket.close()
+
class Response:
def __init__(self, websocket, username, password):
self._websocket = websocket
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index b7d6691..a9a1e8f 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -16,6 +16,7 @@ KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
'''
+import sys
from .traversal import Traversal
from .traversal import TraversalStrategies
from .traversal import Bytecode
@@ -90,7 +91,7 @@ class GraphTraversal(Traversal):
if isinstance(index, int):
return self.range(index, index + 1)
elif isinstance(index, slice):
- return self.range(index.start, index.stop)
+ return self.range(0 if index.start is None else index.start, sys.maxint if index.stop is None else index.stop)
else:
raise TypeError("Index must be int or slice")
def __getattr__(self, key):
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
index b047893..22403b6 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
@@ -43,6 +43,9 @@ class Element(object):
def __eq__(self, other):
return isinstance(other, self.__class__) and self.id == other.id
+ def __hash__(self):
+ return hash(self.id)
+
class Vertex(Element):
def __init__(self, id, label="vertex"):
@@ -82,3 +85,6 @@ class Property(object):
def __eq__(self, other):
return isinstance(other, self.__class__) and self.key == other.key and self.value == other.value
+
+ def __hash__(self):
+ return hash(self.key) + hash(self.value)
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/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 b47eff9..90a4ef6 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
@@ -37,6 +37,8 @@ class TestDriverRemoteConnection(TestCase):
#
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()
@@ -48,8 +50,60 @@ class TestDriverRemoteConnection(TestCase):
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()
+ def test_side_effects(self):
+ statics.load_statics(globals())
+ connection = DriverRemoteConnection('ws://localhost:8182', 'g')
+ #
+ g = Graph().traversal().withRemote(connection)
+ ###
+ t = g.V().hasLabel("project").name.iterate()
+ assert 0 == len(t.side_effects.keys())
+ try:
+ m = t.side_effects["m"]
+ raise Exception("Accessing a non-existent key should throw an error")
+ except KeyError:
+ pass
+ ###
+ t = g.V().out("created").groupCount("m").by("name")
+ results = t.toSet()
+ assert 2 == len(results)
+ assert Vertex(3) in results
+ assert Vertex(5) in results
+ assert 1 == len(t.side_effects.keys())
+ assert "m" in t.side_effects.keys()
+ m = t.side_effects["m"]
+ assert isinstance(m, dict)
+ assert 2 == len(m)
+ assert 3 == m["lop"]
+ assert 1 == m["ripple"]
+ assert isinstance(m["lop"], long)
+ assert isinstance(m["ripple"], long)
+ ###
+ t = g.V().out("created").groupCount("m").by("name").name.aggregate("n")
+ results = t.toSet()
+ assert 2 == len(results)
+ assert "lop" in results
+ assert "ripple" in results
+ assert 2 == len(t.side_effects.keys())
+ assert "m" in t.side_effects.keys()
+ assert "n" in t.side_effects.keys()
+ n = t.side_effects.get("n")
+ assert isinstance(n, dict)
+ assert 2 == len(n)
+ assert "lop" in n.keys()
+ assert "ripple" in n.keys()
+ assert 3 == n["lop"]
+ assert 1 == n["ripple"]
+
if __name__ == '__main__':
test = False
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 5f62464..6025802 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -67,6 +67,7 @@ class TestGraph(TestCase):
assert i != j
else:
assert i == j
+ assert i.__hash__() == hash(i)
if __name__ == '__main__':