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:40 UTC
[tinkerpop] 30/40: All GLV tests passing for 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 37fc9a0374ce70b2cbcdba9e94c2efa23063333c
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Thu Aug 15 15:27:09 2019 -0400
All GLV tests passing for GraphBinary
Had to make a nubmer of tweaks to get this working. Most specifically PSerializer which wasn't properly accounting for the normalization that java seems to do.
---
.../gremlin/driver/ser/binary/types/PSerializer.java | 18 ++++++++++++------
.../binary/GraphBinaryReaderWriterRoundTripTest.java | 1 +
gremlin-python/pom.xml | 2 +-
.../gremlin_python/structure/io/graphbinaryV1.py | 9 ++++++++-
.../jython/tests/structure/io/test_graphbinaryV1.py | 11 ++++++++++-
5 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PSerializer.java
index f83816f..be399f0 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/types/PSerializer.java
@@ -62,14 +62,15 @@ public class PSerializer<T extends P> extends SimpleTypeSerializer<T> {
args[i] = context.read(buffer);
argumentClasses[i] = args[i].getClass();
}
-
- if ("and".equals(predicateName)) {
+
+ if ("and".equals(predicateName))
return (T) ((P) args[0]).and((P) args[1]);
- } else if ("or".equals(predicateName)) {
+ else if ("or".equals(predicateName))
return (T) ((P) args[0]).or((P) args[1]);
- }
+ else if ("not".equals(predicateName))
+ return (T) P.not((P) args[0]);
- CheckedFunction<Object[], T> f = getMethod(predicateName, argumentClasses);
+ final CheckedFunction<Object[], T> f = getMethod(predicateName, argumentClasses);
try {
return f.apply(args);
@@ -99,7 +100,12 @@ public class PSerializer<T extends P> extends SimpleTypeSerializer<T> {
try {
m = classOfP.getMethod(predicateName, Object.class);
} catch (NoSuchMethodException ex2) {
- throw new SerializationException(String.format("Can't find predicate method: '%s'", predicateName), ex2);
+ // finally go for the generics
+ try {
+ m = classOfP.getMethod(predicateName, Object.class, Object.class);
+ } catch (NoSuchMethodException ex3) {
+ throw new SerializationException(String.format("Can't find predicate method: '%s'", predicateName), ex2);
+ }
}
}
}
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java
index 48e324c..8f7874e 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryReaderWriterRoundTripTest.java
@@ -228,6 +228,7 @@ public class GraphBinaryReaderWriterRoundTripTest {
new Object[] {"Por", P.gt(1).or(P.lt(2)), null},
new Object[] {"Pnot", P.not(P.lte(1)), null},
new Object[] {"Pwithout", P.without(1,2,3,4), null},
+ new Object[] {"Pinside", P.inside(0.0d, 0.6d), null},
new Object[] {"TextP", TextP.startingWith("mark"), null},
// graph
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 48a45b0..4fd9c47 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -419,7 +419,7 @@ limitations under the License.
<env key="PYTHONPATH" value=""/>
<arg line="setup.py install"/>
</exec>
- <!-- run for graphson 2.0 -->
+ <!-- run for graphson 3.0 -->
<exec executable="env/bin/radish" dir="${project.build.directory}/python2"
failonerror="true">
<env key="PYTHONPATH" value=""/>
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 ce03f40..738cfe7 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
@@ -16,6 +16,8 @@ KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
"""
+
+import six
import datetime
import calendar
import struct
@@ -127,7 +129,12 @@ class GraphBinaryWriter(object):
def toDict(self, obj):
try:
- return self.serializers[type(obj)].dictify(obj, self)
+ t = type(obj)
+
+ # coerce unicode to str so the serializer will be found properly in the cache...better way?
+ if not six.PY3:
+ t = str if isinstance(obj, unicode) else t
+ return self.serializers[t].dictify(obj, self)
except KeyError:
for key, serializer in self.serializers.items():
if isinstance(obj, key):
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 bcaad3d..917e7f2 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
@@ -119,7 +119,16 @@ class TestGraphSONWriter(object):
987: ["go", "deep", {"here": "!"}]}
output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
assert x == output
-
+
+ x = {"marko": [666], "noone": ["blah"]}
+ output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
+ assert x == output
+
+ x = {"ripple": [], "peter": ["created"], "noone": ["blah"], "vadas": [],
+ "josh": ["created", "created"], "lop": [], "marko": [666, "created", "knows", "knows"]}
+ output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))
+ assert x == output
+
def test_uuid(self):
x = uuid.UUID("41d2e28a-20a4-4ab0-b379-d810dede3786")
output = self.graphbinary_reader.readObject(self.graphbinary_writer.writeObject(x))