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:23 UTC

[tinkerpop] 13/40: Add enum graphbinary support in python

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 39742d755b86113904720c7154e83b5f582cbd5b
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Thu Aug 1 10:22:47 2019 -0400

    Add enum graphbinary support in python
---
 .../gremlin_python/structure/io/graphbinaryV1.py   | 82 ++++++++++++++++++++--
 .../tests/structure/io/test_graphbinaryV1.py       |  7 +-
 2 files changed, 82 insertions(+), 7 deletions(-)

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 551db60..7a91edf 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
@@ -35,8 +35,10 @@ from aenum import Enum
 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.statics import FloatType, FunctionType, IntType, LongType, TypeType, DictType, ListType, SetType, \
+                                   SingleByte, ByteBufferType, SingleChar
+from gremlin_python.process.traversal import Barrier, Binding, Bytecode, Cardinality, Column, Direction, Operator, \
+                                             Order, Pick, Pop, P, TextP, Traversal, Traverser, TraversalStrategy, T
 from gremlin_python.structure.graph import Graph, Edge, Property, Vertex, VertexProperty, Path
 
 log = logging.getLogger(__name__)
@@ -65,9 +67,19 @@ class DataType(Enum):
     edge = 0x0d
     path = 0x0e
     property = 0x0f
-    tinkergraph = 0x10
+    graph = 0x10
     vertex = 0x11
     vertexproperty = 0x12
+    barrier = 0x13
+    binding = 0x14      # todo
+    bytecode = 0x15     # todo
+    cardinality = 0x16
+    column = 0x17
+    direction = 0x18
+    operator = 0x19
+    order = 0x1a
+    pick = 0x1b
+    pop = 0x1c
 
 
 class GraphBinaryTypeType(type):
@@ -133,7 +145,8 @@ class _GraphBinaryTypeIO(object):
 
     symbolMap = {"global_": "global", "as_": "as", "in_": "in", "and_": "and",
                  "or_": "or", "is_": "is", "not_": "not", "from_": "from",
-                 "set_": "set", "list_": "list", "all_": "all", "with_": "with"}
+                 "set_": "set", "list_": "list", "all_": "all", "with_": "with",
+                 "filter_": "filter", "id_": "id", "max_": "max", "min_": "min", "sum_": "sum"}
 
     @classmethod
     def as_bytes(cls, graphbin_type=None, size=None, *args):
@@ -452,7 +465,7 @@ class PropertyIO(_GraphBinaryTypeIO):
 class TinkerGraphIO(_GraphBinaryTypeIO):
 
     python_type = Graph
-    graphbinary_type = DataType.tinkergraph
+    graphbinary_type = DataType.graph
 
     @classmethod
     def dictify(cls, obj, writer):
@@ -503,4 +516,61 @@ class VertexPropertyIO(_GraphBinaryTypeIO):
         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
+        return vp
+
+
+class _EnumIO(_GraphBinaryTypeIO):
+
+    python_type = Enum
+    base_enum = None
+
+    @classmethod
+    def dictify(cls, obj, writer):
+        ba = bytearray([cls.graphbinary_type.value])
+        ba.extend(cls.string_as_bytes(cls.unmangleKeyword(str(obj.name))))
+        return ba
+
+    @classmethod
+    def objectify(cls, b, reader):
+        return cls.base_enum[cls.read_string(b)]
+
+
+class BarrierIO(_EnumIO):
+    graphbinary_type = DataType.barrier
+    base_enum = Barrier
+
+
+class CardinalityIO(_EnumIO):
+    graphbinary_type = DataType.cardinality
+    base_enum = Cardinality
+
+
+class ColumnIO(_EnumIO):
+    graphbinary_type = DataType.column
+    base_enum = Column
+
+
+class DirectionIO(_EnumIO):
+    graphbinary_type = DataType.direction
+    base_enum = Direction
+
+
+class OperatorIO(_EnumIO):
+    graphbinary_type = DataType.operator
+    base_enum = Operator
+
+
+class OrderIO(_EnumIO):
+    graphbinary_type = DataType.order
+    base_enum = Order
+
+
+class PickIO(_EnumIO):
+    graphbinary_type = DataType.pick
+    base_enum = Pick
+
+
+class PopIO(_EnumIO):
+    graphbinary_type = DataType.pop
+    base_enum = Pop
+
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 cdf52fc..10c77c1 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
@@ -31,7 +31,7 @@ import six
 from gremlin_python.statics import timestamp, long
 from gremlin_python.structure.graph import Vertex, Edge, Property, VertexProperty, Graph, Path
 from gremlin_python.structure.io.graphbinaryV1 import GraphBinaryWriter, GraphBinaryReader, DataType
-from gremlin_python.process.traversal import P
+from gremlin_python.process.traversal import P, Barrier
 from gremlin_python.process.strategies import SubgraphStrategy
 from gremlin_python.process.graph_traversal import __
 
@@ -149,3 +149,8 @@ class TestGraphSONWriter(object):
         x = VertexProperty(123, "name", "stephen", None)
         output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
         assert x == output
+        
+    def test_barrier(self):
+        x = Barrier.normSack
+        output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
+        assert x == output