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 2018/10/04 18:53:58 UTC
[02/10] tinkerpop git commit: TINKERPOP-2055 Support for special
numbers in python
TINKERPOP-2055 Support for special numbers in python
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/854914e6
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/854914e6
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/854914e6
Branch: refs/heads/master
Commit: 854914e6e3adbf7f0854eb0fec0c3a38b61d4644
Parents: afc12bd
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Oct 2 16:55:50 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Oct 2 16:55:50 2018 -0400
----------------------------------------------------------------------
.../gremlin_python/structure/io/graphson.py | 26 ++++++++++++++++++++
.../jython/tests/structure/io/test_graphson.py | 25 +++++++++++++++++++
2 files changed, 51 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/854914e6/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
index 24e86bb..f3411ba 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/graphson.py
@@ -20,6 +20,7 @@ import datetime
import json
import time
import uuid
+import math
from collections import OrderedDict
import six
@@ -381,6 +382,31 @@ class FloatIO(_NumberIO):
graphson_type = "g:Float"
graphson_base_type = "Float"
+ @classmethod
+ def dictify(cls, n, writer):
+ if isinstance(n, bool): # because isinstance(False, int) and isinstance(True, int)
+ return n
+ elif math.isnan(n):
+ return GraphSONUtil.typedValue(cls.graphson_base_type, "NaN")
+ elif math.isinf(n) and n > 0:
+ return GraphSONUtil.typedValue(cls.graphson_base_type, "Infinity")
+ elif math.isinf(n) and n < 0:
+ return GraphSONUtil.typedValue(cls.graphson_base_type, "-Infinity")
+ else:
+ return GraphSONUtil.typedValue(cls.graphson_base_type, n)
+
+ @classmethod
+ def objectify(cls, v, _):
+ if isinstance(v, str):
+ if v == 'NaN':
+ return float('nan')
+ elif v == "Infinity":
+ return float('inf')
+ elif v == "-Infinity":
+ return float('-inf')
+
+ return cls.python_type(v)
+
class DoubleIO(FloatIO):
graphson_type = "g:Double"
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/854914e6/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
index 928b33f..37e99c6 100644
--- a/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -22,6 +22,7 @@ import datetime
import time
import json
import uuid
+import math
from mock import Mock
@@ -70,6 +71,27 @@ class TestGraphSONReader(object):
}))
assert isinstance(x, float)
assert 31.2 == x
+ ##
+ x = self.graphson_reader.readObject(json.dumps({
+ "@type": "g:Double",
+ "@value": "NaN"
+ }))
+ assert isinstance(x, float)
+ assert math.isnan(x)
+ ##
+ x = self.graphson_reader.readObject(json.dumps({
+ "@type": "g:Double",
+ "@value": "Infinity"
+ }))
+ assert isinstance(x, float)
+ assert math.isinf(x) and x > 0
+ ##
+ x = self.graphson_reader.readObject(json.dumps({
+ "@type": "g:Double",
+ "@value": "-Infinity"
+ }))
+ assert isinstance(x, float)
+ assert math.isinf(x) and x < 0
def test_graph(self):
vertex = self.graphson_reader.readObject(
@@ -163,6 +185,9 @@ class TestGraphSONWriter(object):
assert {"@type": "g:Int64", "@value": 2} == json.loads(self.graphson_writer.writeObject(long(2)))
assert {"@type": "g:Int32", "@value": 1} == json.loads(self.graphson_writer.writeObject(1))
assert {"@type": "g:Double", "@value": 3.2} == json.loads(self.graphson_writer.writeObject(3.2))
+ assert {"@type": "g:Double", "@value": "NaN"} == json.loads(self.graphson_writer.writeObject(float('nan')))
+ assert {"@type": "g:Double", "@value": "Infinity"} == json.loads(self.graphson_writer.writeObject(float('inf')))
+ assert {"@type": "g:Double", "@value": "-Infinity"} == json.loads(self.graphson_writer.writeObject(float('-inf')))
assert """true""" == self.graphson_writer.writeObject(True)
def test_P(self):