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 2019/09/04 13:22:22 UTC

[tinkerpop] 12/40: Added Graph/Vertex/VertexProperty to python graphbinary

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 eea1ca3af648d5615b0ba98334d4c75319187eb6
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Wed Jul 31 14:06:23 2019 -0400

    Added Graph/Vertex/VertexProperty to python graphbinary
---
 .../gremlin_python/structure/io/graphbinaryV1.py   | 62 +++++++++++++++++++++-
 .../tests/structure/io/test_graphbinaryV1.py       | 10 ++++
 2 files changed, 71 insertions(+), 1 deletion(-)

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 c12ffca..551db60 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
@@ -37,7 +37,7 @@ from isodate import parse_duration, duration_isoformat
 from gremlin_python import statics
 from gremlin_python.statics import FloatType, FunctionType, IntType, LongType, TypeType, DictType, ListType, SetType, SingleByte, ByteBufferType, SingleChar
 from gremlin_python.process.traversal import Binding, Bytecode, P, TextP, Traversal, Traverser, TraversalStrategy, T
-from gremlin_python.structure.graph import Edge, Property, Vertex, VertexProperty, Path
+from gremlin_python.structure.graph import Graph, Edge, Property, Vertex, VertexProperty, Path
 
 log = logging.getLogger(__name__)
 
@@ -65,6 +65,9 @@ class DataType(Enum):
     edge = 0x0d
     path = 0x0e
     property = 0x0f
+    tinkergraph = 0x10
+    vertex = 0x11
+    vertexproperty = 0x12
 
 
 class GraphBinaryTypeType(type):
@@ -444,3 +447,60 @@ class PropertyIO(_GraphBinaryTypeIO):
         p = Property(cls.read_string(b), reader.readObject(b), None)
         b.read(1)
         return p
+
+
+class TinkerGraphIO(_GraphBinaryTypeIO):
+
+    python_type = Graph
+    graphbinary_type = DataType.tinkergraph
+
+    @classmethod
+    def dictify(cls, obj, writer):
+        raise AttributeError("TinkerGraph serialization is not currently supported by gremlin-python")
+
+    @classmethod
+    def objectify(cls, b, reader):
+        raise AttributeError("TinkerGraph deserialization is not currently supported by gremlin-python")
+
+
+class VertexIO(_GraphBinaryTypeIO):
+
+    python_type = Vertex
+    graphbinary_type = DataType.vertex
+
+    @classmethod
+    def dictify(cls, obj, writer):
+        ba = bytearray([cls.graphbinary_type.value])
+        ba.extend(writer.writeObject(obj.id))
+        ba.extend(cls.string_as_bytes(obj.label))
+        ba.extend([DataType.null.value])
+        return ba
+
+    @classmethod
+    def objectify(cls, b, reader):
+        vertex = Vertex(reader.readObject(b), cls.read_string(b))
+        b.read(1)
+        return vertex
+
+
+class VertexPropertyIO(_GraphBinaryTypeIO):
+
+    python_type = VertexProperty
+    graphbinary_type = DataType.vertexproperty
+
+    @classmethod
+    def dictify(cls, obj, writer):
+        ba = bytearray([cls.graphbinary_type.value])
+        ba.extend(writer.writeObject(obj.id))
+        ba.extend(cls.string_as_bytes(obj.label))
+        ba.extend(writer.writeObject(obj.value))
+        ba.extend([DataType.null.value])
+        ba.extend([DataType.null.value])
+        return ba
+
+    @classmethod
+    def objectify(cls, b, reader):
+        vp = VertexProperty(reader.readObject(b), cls.read_string(b), reader.readObject(b), None)
+        b.read(1)
+        b.read(1)
+        return vp
\ No newline at end of file
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphbinaryV1.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphbinaryV1.py
index 3c4ef34..cdf52fc 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphbinaryV1.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphbinaryV1.py
@@ -139,3 +139,13 @@ class TestGraphSONWriter(object):
         x = Property("name", "stephen", None)
         output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
         assert x == output
+
+    def test_vertex(self):
+        x = Vertex(123, "person")
+        output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
+        assert x == output
+
+    def test_vertexproperty(self):
+        x = VertexProperty(123, "name", "stephen", None)
+        output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
+        assert x == output