You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2017/07/27 00:09:37 UTC
tinkerpop git commit: Attempt to fix BigDecimal serialization issues
in Gremlin-Python.
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1736-master [created] c0af6eec8
Attempt to fix BigDecimal serialization issues in Gremlin-Python.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c0af6eec
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c0af6eec
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c0af6eec
Branch: refs/heads/TINKERPOP-1736-master
Commit: c0af6eec8ed6ceade364e03a427868fe5067896b
Parents: 3a4406a
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu Jul 27 02:07:56 2017 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu Jul 27 02:07:56 2017 +0200
----------------------------------------------------------------------
.../gremlin/process/traversal/Bytecode.java | 4 +++
.../structure/io/graphson/GraphSONModule.java | 3 ++
.../io/graphson/GraphSONSerializersV3d0.java | 30 ++++++++++++++++++++
.../gremlin/python/jsr223/PythonTranslator.java | 3 ++
.../python/jsr223/JythonScriptEngineSetup.java | 1 +
5 files changed, 41 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0af6eec/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
index a3ba9f0..9c69f8e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.io.Serializable;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -294,6 +295,9 @@ public final class Bytecode implements Cloneable, Serializable {
set.add(convertArgument(item, true));
}
return set;
+ } else if (argument instanceof BigDecimal) {
+ final BigDecimal bd = (BigDecimal) argument;
+ return bd.scale() > 0 ? bd : bd.setScale(1, BigDecimal.ROUND_HALF_UP);
} else
return argument;
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0af6eec/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 9354eac..5cd2956 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -74,6 +74,7 @@ import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSeriali
import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV3d0;
import org.apache.tinkerpop.gremlin.util.function.Lambda;
+import java.math.BigDecimal;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
@@ -215,6 +216,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
// need to explicitly add serializers for those types because Jackson doesn't do it at all.
addSerializer(Integer.class, new GraphSONSerializersV3d0.IntegerGraphSONSerializer());
addSerializer(Double.class, new GraphSONSerializersV3d0.DoubleGraphSONSerializer());
+ addSerializer(BigDecimal.class, new GraphSONSerializersV3d0.BigDecimalGraphSONSerializer());
// traversal
addSerializer(Traversal.class, new TraversalSerializersV3d0.TraversalJacksonSerializer());
@@ -255,6 +257,7 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
// numbers
addDeserializer(Integer.class, new GraphSONSerializersV3d0.IntegerJackonsDeserializer());
addDeserializer(Double.class, new GraphSONSerializersV3d0.DoubleJackonsDeserializer());
+ addDeserializer(BigDecimal.class, new GraphSONSerializersV3d0.BigDecimalJackonsDeserializer());
// traversal
addDeserializer(Bytecode.class, new TraversalSerializersV3d0.BytecodeJacksonDeserializer());
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0af6eec/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3d0.java
index 8c601b1..a5f1990 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV3d0.java
@@ -59,6 +59,7 @@ import org.apache.tinkerpop.shaded.jackson.databind.type.TypeFactory;
import org.javatuples.Pair;
import java.io.IOException;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
@@ -349,6 +350,18 @@ class GraphSONSerializersV3d0 {
}
}
+ final static class BigDecimalGraphSONSerializer extends StdScalarSerializer<BigDecimal> {
+ public BigDecimalGraphSONSerializer() {
+ super(BigDecimal.class);
+ }
+
+ @Override
+ public void serialize(final BigDecimal bigDecimalValue, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ jsonGenerator.writeNumber(bigDecimalValue);
+ }
+ }
+
final static class TraversalMetricsJacksonSerializer extends StdScalarSerializer<TraversalMetrics> {
public TraversalMetricsJacksonSerializer() {
super(TraversalMetrics.class);
@@ -721,4 +734,21 @@ class GraphSONSerializersV3d0 {
return true;
}
}
+
+ static class BigDecimalJackonsDeserializer extends StdDeserializer<BigDecimal> {
+
+ protected BigDecimalJackonsDeserializer() {
+ super(BigDecimal.class);
+ }
+
+ @Override
+ public BigDecimal deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ return jsonParser.getDecimalValue();
+ }
+
+ @Override
+ public boolean isCachable() {
+ return true;
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0af6eec/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
index d4b9202..7372309 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
@@ -44,6 +44,7 @@ import org.apache.tinkerpop.gremlin.util.iterator.ArrayIterator;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.lang.reflect.Method;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -168,6 +169,8 @@ public class PythonTranslator implements Translator.ScriptTranslator {
return map.length() > 1 ? map.substring(0, map.length() - 1) + "}" : map.append("}").toString();
} else if (object instanceof Long)
return object + "L";
+ else if (object instanceof BigDecimal)
+ return "Decimal(\"" + object.toString() + "\")";
else if (object instanceof TraversalStrategyProxy) {
final TraversalStrategyProxy proxy = (TraversalStrategyProxy) object;
if (proxy.getConfiguration().isEmpty())
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0af6eec/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
index bfbd8c4..7cfc27f 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
@@ -39,6 +39,7 @@ public class JythonScriptEngineSetup {
public static PyScriptEngine setup(final PyScriptEngine jythonEngine) {
try {
jythonEngine.eval("import gremlin_python.statics");
+ jythonEngine.eval("from decimal import *");
jythonEngine.eval("from gremlin_python.process.traversal import *");
jythonEngine.eval("from gremlin_python.process.graph_traversal import *");
jythonEngine.eval("from gremlin_python.process.graph_traversal import __");