This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch TINKERPOP-2279 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit f74ff214e3f023ca15d382105e6fe84996dd2f7d Author: Stephen Mallette <[email protected]> AuthorDate: Tue Aug 13 11:46:50 2019 -0400 Fixed a basic integration test runs for python 2. --- .../src/main/jython/gremlin_python/driver/serializer.py | 8 +++++++- .../jython/gremlin_python/structure/io/graphbinaryV1.py | 14 ++++++++++---- gremlin-python/src/main/jython/tests/conftest.py | 6 +++++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/serializer.py b/gremlin-python/src/main/jython/gremlin_python/driver/serializer.py index a95d292..a0493f4 100644 --- a/gremlin-python/src/main/jython/gremlin_python/driver/serializer.py +++ b/gremlin-python/src/main/jython/gremlin_python/driver/serializer.py @@ -237,7 +237,13 @@ class GraphBinarySerializersV1(object): ba.extend(struct.pack(">i", len(args))) for k, v in args.items(): ba.extend(self._graphbinary_writer.writeObject(k)) - ba.extend(self._graphbinary_writer.writeObject(v)) + + # processor_obj.get_op_args in serialize_message() seems to already handle bytecode. in python 3 + # because bytearray isn't bound to a type in graphbinary it falls through the writeObject() and + # just works but python 2 bytearray is bound to ByteBufferType so it writes DataType.bytebuffer + # rather than DataType.bytecode and the server gets confused. special casing this for now until + # it can be refactored + ba.extend(v if k == "gremlin" else self._graphbinary_writer.writeObject(v)) return bytes(ba) diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphbinaryV1.py b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphbinaryV1.py index dd829cf..e730c8e 100644 --- a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphbinaryV1.py +++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphbinaryV1.py @@ -40,6 +40,7 @@ from gremlin_python.statics import FloatType, FunctionType, IntType, LongType, T from gremlin_python.process.traversal import Barrier, Binding, Bytecode, Cardinality, Column, Direction, Operator, \ Order, Pick, Pop, P, Scope, TextP, Traversal, Traverser, \ TraversalStrategy, T +from gremlin_python.process.graph_traversal import GraphTraversal from gremlin_python.structure.graph import Graph, Edge, Property, Vertex, VertexProperty, Path log = logging.getLogger(__name__) @@ -663,17 +664,18 @@ class BytecodeIO(_GraphBinaryTypeIO): @classmethod def dictify(cls, obj, writer, as_value=False, nullable=True): + bc = obj.bytecode if isinstance(obj, Traversal) else obj ba = bytearray() - ba.extend(struct.pack(">i", len(obj.step_instructions))) - for inst in obj.step_instructions: + ba.extend(struct.pack(">i", len(bc.step_instructions))) + for inst in bc.step_instructions: inst_name, inst_args = inst[0], inst[1:] if len(inst) > 1 else [] ba.extend(cls.string_as_bytes(inst_name)) ba.extend(struct.pack(">i", len(inst_args))) for arg in inst_args: ba.extend(writer.writeObject(arg)) - ba.extend(struct.pack(">i", len(obj.source_instructions))) - for inst in obj.source_instructions: + ba.extend(struct.pack(">i", len(bc.source_instructions))) + for inst in bc.source_instructions: inst_name, inst_args = inst[0], inst[1:] if len(inst) > 1 else [] ba.extend(cls.string_as_bytes(inst_name)) ba.extend(struct.pack(">i", len(inst_args))) @@ -720,6 +722,10 @@ class BytecodeIO(_GraphBinaryTypeIO): return bytecode +class TraversalIO(BytecodeIO): + python_type = GraphTraversal + + class LambdaIO(_GraphBinaryTypeIO): python_type = FunctionType diff --git a/gremlin-python/src/main/jython/tests/conftest.py b/gremlin-python/src/main/jython/tests/conftest.py index 9597f4d..a1224ac 100644 --- a/gremlin-python/src/main/jython/tests/conftest.py +++ b/gremlin-python/src/main/jython/tests/conftest.py @@ -32,6 +32,7 @@ from gremlin_python.driver.serializer import ( GraphBinarySerializersV1) from gremlin_python.driver.tornado.transport import TornadoTransport +# docker Gremlin Server = 172.17.0.2 gremlin_server_host = "localhost" gremlin_server_url = 'ws://' + gremlin_server_host + ':45940/gremlin' @@ -92,8 +93,11 @@ def remote_connection(request): elif request.param == 'graphsonv2': remote_conn = DriverRemoteConnection(gremlin_server_url, 'gmodern', message_serializer=serializer.GraphSONSerializersV2d0()) + elif request.param == 'graphsonv3': + remote_conn = DriverRemoteConnection(gremlin_server_url, 'gmodern', + message_serializer=serializer.GraphSONSerializersV3d0()) else: - remote_conn = DriverRemoteConnection(gremlin_server_url, 'gmodern') + raise ValueError("Invalid serializer option - " + request.param) except OSError: pytest.skip('Gremlin Server is not running') else:
