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 2016/08/27 00:54:16 UTC

[01/50] [abbrv] tinkerpop git commit: A few tweaks to GraphSON format.

Repository: tinkerpop
Updated Branches:
  refs/heads/master 3f722e661 -> 39648a536


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
index 56956ea..7401750 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
@@ -1,6 +1,6 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int32","@value":2},"value":{"@type":"gremlin:int32","@value":29}}]}}
-{"id":{"@type":"gremlin:int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int32","@value":4},"value":{"@type":"gremlin:int32","@value":27}}]}}
-{"id":{"@type":"gremlin:int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int32","@value":6},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int32","@value":8},"value":{"@type":"gremlin:int32","@value":32}}]}}
-{"id":{"@type":"gremlin:int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int32","@value":10},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int32","@value":12},"value":{"@type":"gremlin:int32","@value":35}}]}}
+{"id":{"@type":"g:Int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Float","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Float","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int32","@value":2},"value":{"@type":"g:Int32","@value":29}}]}}
+{"id":{"@type":"g:Int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"g:Int32","@value":7},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"g:Int32","@value":4},"value":{"@type":"g:Int32","@value":27}}]}}
+{"id":{"@type":"g:Int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"g:Int32","@value":9},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Float","@value":0.4}}},{"id":{"@type":"g:Int32","@value":11},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Float","@value":0.4}}},{"id":{"@type":"g:Int32","@value":12},"outV":{"@type":"g:Int32","@value":6},"properties":{"weight":{"@type":"g:Float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"g:Int32","@value":6},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"g:Int32","@value":8},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"g:Int32","@value":10},"inV":{"@type":"g:Int32","@value":5},"properties":{"weight":{"@type":"g:Float","@value":1.0}}},{"id":{"@type":"g:Int32","@value":11},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"g:Int32","@value":8},"value":{"@type":"g:Int32","@value":32}}]}}
+{"id":{"@type":"g:Int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"g:Int32","@value":10},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"g:Int32","@value":10},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"g:Int32","@value":12},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"g:Int32","@value":12},"value":{"@type":"g:Int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
index e688520..77344c0 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
@@ -1,6 +1,6 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"gremlin:int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"gremlin:int32","@value":1997},"endTime":{"@type":"gremlin:int32","@value":2001}}},{"id":{"@type":"gremlin:int6
 4","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"gremlin:int32","@value":2001},"endTime":{"@type":"gremlin:int32","@value":2004}}},{"id":{"@type":"gremlin:int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"gremlin:int32","@value":2005}}}]}}
-{"id":{"@type":"gremlin:int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"gremlin:int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"gremlin:int32","@value":1990},"endTime":{"@type":"gremlin:int32","@value":2000}}},{"id":{"@type":"gremlin
 :int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"gremlin:int32","@value":2000},"endTime":{"@type":"gremlin:int32","@value":2006}}},{"id":{"@type":"gremlin:int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"gremlin:int32","@value":2006}}}]}}
-{"id":{"@type":"gremlin:int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"gremlin:int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2007}}},{"id":{"@type":"gremlin:int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"gremlin:int32","@value":2007},"endTime":{"@type":"gremlin:int32","@value":2011}
 }},{"id":{"@type":"gremlin:int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"gremlin:int32","@value":2011},"endTime":{"@type":"gremlin:int32","@value":2014}}},{"id":{"@type":"gremlin:int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"gremlin:int32","@value":2014}}}]}}
-{"id":{"@type":"gremlin:int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"gremlin:int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"gremlin:int32","@value":1982},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"gremlin:int32","@value":2005},"endTime":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"gremlin:int32","@value":2009}}}]}}
-{"id":{"@type":"gremlin:int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":22},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":24},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":21},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}},{"id":
 {"@type":"gremlin:int32","@value":13},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}}]},"outE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"gremlin"}]}}
-{"id":{"@type":"gremlin:int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"outV":{"@type":"gremlin:int32","@value":10}}],"uses":[{"id":{"@type":"gremlin:int32","@value":16},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":23},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":25},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":18},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}},{"id":{"@type":"gremlin:int32","@value":14},"outV":{"@
 type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":5},"value":"tinkergraph"}]}}
+{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":16},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":15},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":4}}}],"develops":[{"id":{"@type":"g:Int32","@value":13},"inV":{"@type":"g:Int32","@value":10},"properties":{"since":{"@type":"g:Int32","@value":2009}}},{"id":{"@type":"g:Int32","@value":14},"inV":{"@type":"g:Int32","@value":11},"properties":{"since":{"@type":"g:Int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"g:Int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"g:Int32","@value":1997},"endTime":{"@type":"g:Int32","@value":2001}}},{"id":{"@type":"g:Int64","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"g:Int32","@value":2001},"endTime":{"
 @type":"g:Int32","@value":2004}}},{"id":{"@type":"g:Int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"g:Int32","@value":2004},"endTime":{"@type":"g:Int32","@value":2005}}},{"id":{"@type":"g:Int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"g:Int32","@value":2005}}}]}}
+{"id":{"@type":"g:Int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":19},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":20},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":4}}}],"develops":[{"id":{"@type":"g:Int32","@value":17},"inV":{"@type":"g:Int32","@value":10},"properties":{"since":{"@type":"g:Int32","@value":2010}}},{"id":{"@type":"g:Int32","@value":18},"inV":{"@type":"g:Int32","@value":11},"properties":{"since":{"@type":"g:Int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"g:Int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"g:Int32","@value":1990},"endTime":{"@type":"g:Int32","@value":2000}}},{"id":{"@type":"g:Int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"g:Int32","@value":2000},"endTime":
 {"@type":"g:Int32","@value":2006}}},{"id":{"@type":"g:Int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"g:Int32","@value":2006}}}]}}
+{"id":{"@type":"g:Int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":22},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":3}}},{"id":{"@type":"g:Int32","@value":23},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":3}}}],"develops":[{"id":{"@type":"g:Int32","@value":21},"inV":{"@type":"g:Int32","@value":10},"properties":{"since":{"@type":"g:Int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"g:Int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"g:Int32","@value":2004},"endTime":{"@type":"g:Int32","@value":2007}}},{"id":{"@type":"g:Int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"g:Int32","@value":2007},"endTime":{"@type":"g:Int32","@value":2011}}},{"id":{"@type":"g:Int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"g:Int32
 ","@value":2011},"endTime":{"@type":"g:Int32","@value":2014}}},{"id":{"@type":"g:Int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"g:Int32","@value":2014}}}]}}
+{"id":{"@type":"g:Int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":24},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":25},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"g:Int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"g:Int32","@value":1982},"endTime":{"@type":"g:Int32","@value":2005}}},{"id":{"@type":"g:Int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"g:Int32","@value":2005},"endTime":{"@type":"g:Int32","@value":2009}}},{"id":{"@type":"g:Int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"g:Int32","@value":2009}}}]}}
+{"id":{"@type":"g:Int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"g:Int32","@value":19},"outV":{"@type":"g:Int32","@value":7},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":22},"outV":{"@type":"g:Int32","@value":8},"properties":{"skill":{"@type":"g:Int32","@value":3}}},{"id":{"@type":"g:Int32","@value":24},"outV":{"@type":"g:Int32","@value":9},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":15},"outV":{"@type":"g:Int32","@value":1},"properties":{"skill":{"@type":"g:Int32","@value":4}}}],"develops":[{"id":{"@type":"g:Int32","@value":17},"outV":{"@type":"g:Int32","@value":7},"properties":{"since":{"@type":"g:Int32","@value":2010}}},{"id":{"@type":"g:Int32","@value":21},"outV":{"@type":"g:Int32","@value":8},"properties":{"since":{"@type":"g:Int32","@value":2012}}},{"id":{"@type":"g:Int32","@value":13},"outV":{"@type":"g:Int32","@value":1},"properties":{"since":{"@type":"g:Int32","@v
 alue":2009}}}]},"outE":{"traverses":[{"id":{"@type":"g:Int32","@value":26},"inV":{"@type":"g:Int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":4},"value":"gremlin"}]}}
+{"id":{"@type":"g:Int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"g:Int32","@value":26},"outV":{"@type":"g:Int32","@value":10}}],"uses":[{"id":{"@type":"g:Int32","@value":16},"outV":{"@type":"g:Int32","@value":1},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":20},"outV":{"@type":"g:Int32","@value":7},"properties":{"skill":{"@type":"g:Int32","@value":4}}},{"id":{"@type":"g:Int32","@value":23},"outV":{"@type":"g:Int32","@value":8},"properties":{"skill":{"@type":"g:Int32","@value":3}}},{"id":{"@type":"g:Int32","@value":25},"outV":{"@type":"g:Int32","@value":9},"properties":{"skill":{"@type":"g:Int32","@value":3}}}],"develops":[{"id":{"@type":"g:Int32","@value":18},"outV":{"@type":"g:Int32","@value":7},"properties":{"since":{"@type":"g:Int32","@value":2011}}},{"id":{"@type":"g:Int32","@value":14},"outV":{"@type":"g:Int32","@value":1},"properties":{"since":{"@type":"g:Int32","@value":2010}}}]},"properties":{"name":[{"id
 ":{"@type":"g:Int64","@value":5},"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
index 9a297c3..20973ec 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
@@ -1,6 +1,6 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":29}}]}}
-{"id":{"@type":"gremlin:int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int64","@value":3},"value":{"@type":"gremlin:int32","@value":27}}]}}
-{"id":{"@type":"gremlin:int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int64","@value":5},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":32}}]}}
-{"id":{"@type":"gremlin:int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int64","@value":9},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int64","@value":11},"value":{"@type":"gremlin:int32","@value":35}}]}}
+{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29}}]}}
+{"id":{"@type":"g:Int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"g:Int32","@value":7},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"g:Int64","@value":3},"value":{"@type":"g:Int32","@value":27}}]}}
+{"id":{"@type":"g:Int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"g:Int32","@value":9},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Double","@value":0.4}}},{"id":{"@type":"g:Int32","@value":11},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":0.4}}},{"id":{"@type":"g:Int32","@value":12},"outV":{"@type":"g:Int32","@value":6},"properties":{"weight":{"@type":"g:Double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"g:Int64","@value":5},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"g:Int32","@value":8},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"g:Int32","@value":10},"inV":{"@type":"g:Int32","@value":5},"properties":{"weight":{"@type":"g:Double","@value":1.0}}},{"id":{"@type":"g:Int32","@value":11},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"g:Int64","@value":7},"value":{"@type":"g:Int32","@value":32}}]}}
+{"id":{"@type":"g:Int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"g:Int32","@value":10},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"g:Int64","@value":9},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":12},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"g:Int64","@value":11},"value":{"@type":"g:Int32","@value":35}}]}}


[37/50] [abbrv] tinkerpop git commit: more test cases. this time around Graph objects. Found lots of bugs. So glad we hooked up python unit testing.

Posted by sp...@apache.org.
more test cases. this time around Graph objects. Found lots of bugs. So glad we hooked up python unit testing.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/078f7606
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/078f7606
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/078f7606

Branch: refs/heads/master
Commit: 078f76064f0c693c67731b1ff7df6bf10614f04b
Parents: 1652bd6
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 11:59:06 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 11:59:06 2016 -0600

----------------------------------------------------------------------
 .../jython/gremlin_python/driver/__init__.py    |  5 --
 .../jython/gremlin_python/structure/graph.py    |  7 +++
 .../jython/tests/structure/io/test_graphson.py  |  2 +-
 .../main/jython/tests/structure/test_graph.py   | 56 ++++++++++++++++++++
 .../src/main/jython/tests/test_statics.py       |  4 +-
 5 files changed, 66 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/078f7606/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py b/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
index 8266cd2..1371364 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
@@ -21,9 +21,4 @@ from .remote_connection import RemoteStrategy
 from .remote_connection import RemoteTraversal
 from .remote_connection import RemoteTraversalSideEffects
 
-try:
-    from .driver_remote_connection import DriverRemoteConnection
-except ImportError:
-    pass
-
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/078f7606/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
index 7a50418..e07aaf2 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
@@ -40,6 +40,9 @@ class Element(object):
         self.id = id
         self.label = label
 
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.id == other.id
+
 
 class Vertex(Element):
     def __init__(self, id, label="vertex"):
@@ -63,6 +66,7 @@ class VertexProperty(Element):
     def __init__(self, id, label, value):
         Element.__init__(self, id, label)
         self.value = value
+        self.key = self.label
 
     def __repr__(self):
         return "vp[" + str(self.label) + "->" + str(self.value)[0:20] + "]"
@@ -75,3 +79,6 @@ class Property(object):
 
     def __repr__(self):
         return "p[" + str(self.key) + "->" + str(self.value)[0:20] + "]"
+
+        def __eq__(self, other):
+            return isinstance(other, self.__class__) and self.key == other.key and self.value == other.value

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/078f7606/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 6f38f82..f8a64f8 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
@@ -19,8 +19,8 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
-import unittest
 import json
+import unittest
 from unittest import TestCase
 
 from gremlin_python.structure.io.graphson import GraphSONReader

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/078f7606/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
new file mode 100644
index 0000000..9ba32c9
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -0,0 +1,56 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
+
+import unittest
+from unittest import TestCase
+
+from gremlin_python.structure import Edge
+from gremlin_python.structure import Vertex
+from gremlin_python.structure import VertexProperty
+
+
+class TestGraph(TestCase):
+    def testGraphObjects(self):
+        vertex = Vertex(1)
+        assert "v[1]" == str(vertex)
+        assert "vertex" == vertex.label
+        assert "person" == Vertex(1, "person").label
+        assert vertex == Vertex(1)
+        #
+        edge = Edge(2, Vertex(1), "said", Vertex("hello", "phrase"))
+        assert "e[2][1-said->hello]" == str(edge)
+        assert Vertex(1) == edge.outV
+        assert Vertex("hello") == edge.inV
+        assert "said" == edge.label
+        assert "phrase" == edge.inV.label
+        #
+        vp = VertexProperty(24L, "name", "marko")
+        assert "vp[name->marko]" == str(vp)
+        assert "name" == vp.label
+        assert "name" == vp.key
+        assert "marko" == vp.value
+        assert 24L == vp.id
+        assert isinstance(vp.id, long)
+        assert vp == VertexProperty(24L, "name", "marko")
+
+
+if __name__ == '__main__':
+    unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/078f7606/gremlin-python/src/main/jython/tests/test_statics.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/test_statics.py b/gremlin-python/src/main/jython/tests/test_statics.py
index 6893b6a..246101f 100644
--- a/gremlin-python/src/main/jython/tests/test_statics.py
+++ b/gremlin-python/src/main/jython/tests/test_statics.py
@@ -30,6 +30,7 @@ from gremlin_python.process.traversal import Pop
 
 class TestStatics(TestCase):
     def test_enums(self):
+        statics.load_statics(globals())
         assert isinstance(_list, Cardinality)
         assert _list is Cardinality._list
         #
@@ -38,9 +39,8 @@ class TestStatics(TestCase):
         #
         assert isinstance(first, Pop)
         assert first == Pop.first
+        statics.unload_statics(globals())
 
 
 if __name__ == '__main__':
-    statics.load_statics(globals())
     unittest.main()
-    statics.unload_statics(globals())


[49/50] [abbrv] tinkerpop git commit: Add docs for building gremlin-python

Posted by sp...@apache.org.
Add docs for building gremlin-python


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/dd202e2f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/dd202e2f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/dd202e2f

Branch: refs/heads/master
Commit: dd202e2fcdf70c5b0f8730fbed5864c445ed582e
Parents: 6463cff
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 17:51:18 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 17:51:18 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/developer/development-environment.asciidoc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/dd202e2f/docs/src/dev/developer/development-environment.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/developer/development-environment.asciidoc b/docs/src/dev/developer/development-environment.asciidoc
index da6dc16..0d11d85 100644
--- a/docs/src/dev/developer/development-environment.asciidoc
+++ b/docs/src/dev/developer/development-environment.asciidoc
@@ -21,7 +21,10 @@ Development Environment
 Building and Testing
 --------------------
 
-TinkerPop requires `Java 1.8.0_40+` for proper building and proper operations.
+TinkerPop requires `Java 1.8.0_40+` for standard building and operations. In addition, it optionally requires Python
+2.x to work with the `gremlin-python` module. If Python is not installed, TinkerPop will still build with Maven, but
+native Python tests and Java tests that require Python code will be skipped. It will also not be possible to do
+deployments.
 
 * Build Project: `mvn clean install`
 ** Specify specific tests in a TinkerPop Suite to run with the `GREMLIN_TESTS` environment variable, along with the
@@ -34,6 +37,7 @@ mvn -Dmaven.javadoc.skip=true --projects tinkergraph-gremlin test
 ** Clean the `.groovy/grapes/org.apache.tinkerpop` directory on build: `mvn clean install -DcleanGrapes`
 ** Turn off "heavy" logging in the "process" tests: `mvn clean install -DargLine="-DmuteTestLogs=true"`
 ** The test suite for `neo4j-gremlin` is disabled by default - to turn it on: `mvn clean install -DincludeNeo4j`
+** Build the `gremlin-python` module with native Python tests (which require that Python be installed on the system): `mvn clean install -DglvPython`
 * Regenerate test data (only necessary given changes to IO classes): `mvn clean install -Dio` from `tinkergraph-gremlin` directory
 ** If there are changes to the Gryo format, it may be necessary to generate the Grateful Dead dataset from GraphSON (see `IoDataGenerationTest.shouldWriteGratefulDead`)
 * Check license headers are present: `mvn apache-rat:check`


[18/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/192da0a1
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/192da0a1
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/192da0a1

Branch: refs/heads/master
Commit: 192da0a1127b5386f5efad976a6969304b6919dd
Parents: db88424 af4f923
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 25 08:53:20 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Aug 25 08:53:20 2016 -0400

----------------------------------------------------------------------
 .../gremlin/groovy/GroovyEnvironmentSuite.java  |  1 +
 .../gremlin/groovy/GroovyTranslatorTest.java    | 90 --------------------
 .../groovy/jsr223/GroovyTranslatorTest.java     | 90 ++++++++++++++++++++
 3 files changed, 91 insertions(+), 90 deletions(-)
----------------------------------------------------------------------



[47/50] [abbrv] tinkerpop git commit: Improved performance on GraphSON 2.0 deserialization.

Posted by sp...@apache.org.
Improved performance on GraphSON 2.0 deserialization.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/99cba4f6
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/99cba4f6
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/99cba4f6

Branch: refs/heads/master
Commit: 99cba4f690fdd30f72226fe674ff496635dfda89
Parents: e2f12c3
Author: Kevin Gallardo <ke...@datastax.com>
Authored: Thu Aug 25 10:40:01 2016 +0100
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 16:33:29 2016 -0400

----------------------------------------------------------------------
 .../io/graphson/GraphSONTypeDeserializer.java   | 72 +++++++++++---------
 1 file changed, 40 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/99cba4f6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
index de51490..9e6bd1e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
@@ -115,12 +115,13 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
             if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
                 buf.writeStartObject();
                 String typeName = null;
-                boolean valueCalled = false;
+                boolean valueDetected = false;
+                boolean valueDetectedFirst = false;
 
                 for (int i = 0; i < 2; i++) {
                     String nextFieldName = jsonParser.nextFieldName();
                     if (nextFieldName == null) {
-                        // empty map or less than 2 fields.
+                        // empty map or less than 2 fields, go out.
                         break;
                     }
                     if (!nextFieldName.equals(this.propertyName) && !nextFieldName.equals(this.valuePropertyName)) {
@@ -129,25 +130,30 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
                     }
 
                     if (nextFieldName.equals(this.propertyName)) {
+                        // detected "@type" field.
                         typeName = jsonParser.nextTextValue();
                         // keeping the spare buffer up to date in case it's a false detection (only the "@type" property)
                         buf.writeStringField(this.propertyName, typeName);
                         continue;
                     }
                     if (nextFieldName.equals(this.valuePropertyName)) {
+                        // detected "@value" field.
                         jsonParser.nextValue();
-                        // keeping the spare buffer up to date in case it's a false detection (only the "@value" property)
-                        buf.writeFieldName(this.valuePropertyName);
-                        // this is not greatly efficient, would need to find better
-                        // but the problem is that the fields "@value" and "@type" could be in any order
-                        localCopy.copyCurrentStructure(jsonParser);
-                        valueCalled = true;
+
+                        if (typeName == null) {
+                            // keeping the spare buffer up to date in case it's a false detection (only the "@value" property)
+                            // the problem is that the fields "@value" and "@type" could be in any order
+                            buf.writeFieldName(this.valuePropertyName);
+                            valueDetectedFirst = true;
+                            localCopy.copyCurrentStructure(jsonParser);
+                        }
+                        valueDetected = true;
                         continue;
                     }
                 }
 
-                if (typeName != null && valueCalled) {
-                    // Type pattern detected.
+                if (typeName != null && valueDetected) {
+                    // Type has been detected pattern detected.
                     final JavaType typeFromId = idRes.typeFromId(typeName);
 
                     if (!baseType.isJavaLangObject() && !baseType.equals(typeFromId)) {
@@ -160,8 +166,15 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
 
                     final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(typeFromId, null);
 
-                    final JsonParser tokenParser = localCopy.asParser();
-                    tokenParser.nextToken();
+                    JsonParser tokenParser;
+
+                    if (valueDetectedFirst) {
+                        tokenParser = localCopy.asParser();
+                        tokenParser.nextToken();
+                    } else {
+                        tokenParser = jsonParser;
+                    }
+
                     final Object value = jsonDeserializer.deserialize(tokenParser, deserializationContext);
 
                     final JsonToken t = jsonParser.nextToken();
@@ -182,41 +195,36 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
             throw deserializationContext.mappingException("Could not deserialize the JSON value as required. Nested exception: " + e.toString());
         }
 
-        // While searching for the type pattern, we may have moved the cursor of the original JsonParser in param.
+        // Type pattern wasn't detected, however,
+        // while searching for the type pattern, we may have moved the cursor of the original JsonParser in param.
         // To compensate, we have filled consistently a TokenBuffer that should contain the equivalent of
         // what we skipped while searching for the pattern.
         // This has a huge positive impact on performances, since JsonParser does not have a 'rewind()',
         // the only other solution would have been to copy the whole original JsonParser. Which we avoid here and use
         // an efficient structure made of TokenBuffer + JsonParserSequence/Concat.
+        // Concatenate buf + localCopy + end of original content(jsonParser).
+        final JsonParser[] concatenatedArray = {buf.asParser(), localCopy.asParser(), jsonParser};
+        final JsonParser parserToUse = new JsonParserConcat(concatenatedArray);
+        parserToUse.nextToken();
 
-        // Concatenate buf + localCopy + end of original content
-
-        final JsonParser bufferParser = buf.asParser();
-        final JsonParser localCopyParser = localCopy.asParser();
-
-        final JsonParser[] array = {bufferParser, localCopyParser, jsonParser};
-
-        final JsonParser toUseParser = new JsonParserConcat(array);
-        toUseParser.nextToken();
-
-        // If a type has been specified in parameter :
+        // If a type has been specified in parameter, use it to find a deserializer and deserialize:
         if (!baseType.isJavaLangObject()) {
             final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
-            return jsonDeserializer.deserialize(toUseParser, deserializationContext);
+            return jsonDeserializer.deserialize(parserToUse, deserializationContext);
         }
-        // Otherwise, detect the current structure :
+        // Otherwise, detect the current structure:
         else {
-            if (toUseParser.isExpectedStartArrayToken()) {
-                return deserializationContext.findContextualValueDeserializer(arrayJavaType, null).deserialize(toUseParser, deserializationContext);
-            } else if (toUseParser.isExpectedStartObjectToken()) {
-                return deserializationContext.findContextualValueDeserializer(mapJavaType, null).deserialize(toUseParser, deserializationContext);
+            if (parserToUse.isExpectedStartArrayToken()) {
+                return deserializationContext.findContextualValueDeserializer(arrayJavaType, null).deserialize(parserToUse, deserializationContext);
+            } else if (parserToUse.isExpectedStartObjectToken()) {
+                return deserializationContext.findContextualValueDeserializer(mapJavaType, null).deserialize(parserToUse, deserializationContext);
             } else {
-                // There's JavaLangObject in param, there's no type detected in the payload, the payload isn't a JSON Map or JSON List
+                // There's "java.lang.Object" in param, there's no type detected in the payload, the payload isn't a JSON Map or JSON List
                 // then consider it a simple type, even though we shouldn't be here if it was a simple type.
                 // TODO : maybe throw an error instead?
                 // throw deserializationContext.mappingException("Roger, we have a problem deserializing");
                 final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
-                return jsonDeserializer.deserialize(toUseParser, deserializationContext);
+                return jsonDeserializer.deserialize(parserToUse, deserializationContext);
             }
         }
     }


[03/50] [abbrv] tinkerpop git commit: A few tweaks to GraphSON format.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/data/tinkerpop-classic-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-v2d0-typed.json b/data/tinkerpop-classic-v2d0-typed.json
index 56956ea..7401750 100644
--- a/data/tinkerpop-classic-v2d0-typed.json
+++ b/data/tinkerpop-classic-v2d0-typed.json
@@ -1,6 +1,6 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int32","@value":2},"value":{"@type":"gremlin:int32","@value":29}}]}}
-{"id":{"@type":"gremlin:int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int32","@value":4},"value":{"@type":"gremlin:int32","@value":27}}]}}
-{"id":{"@type":"gremlin:int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int32","@value":6},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int32","@value":8},"value":{"@type":"gremlin:int32","@value":32}}]}}
-{"id":{"@type":"gremlin:int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int32","@value":10},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int32","@value":12},"value":{"@type":"gremlin:int32","@value":35}}]}}
+{"id":{"@type":"g:Int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Float","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Float","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int32","@value":2},"value":{"@type":"g:Int32","@value":29}}]}}
+{"id":{"@type":"g:Int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"g:Int32","@value":7},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"g:Int32","@value":4},"value":{"@type":"g:Int32","@value":27}}]}}
+{"id":{"@type":"g:Int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"g:Int32","@value":9},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Float","@value":0.4}}},{"id":{"@type":"g:Int32","@value":11},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Float","@value":0.4}}},{"id":{"@type":"g:Int32","@value":12},"outV":{"@type":"g:Int32","@value":6},"properties":{"weight":{"@type":"g:Float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"g:Int32","@value":6},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"g:Int32","@value":8},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"g:Int32","@value":10},"inV":{"@type":"g:Int32","@value":5},"properties":{"weight":{"@type":"g:Float","@value":1.0}}},{"id":{"@type":"g:Int32","@value":11},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"g:Int32","@value":8},"value":{"@type":"g:Int32","@value":32}}]}}
+{"id":{"@type":"g:Int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"g:Int32","@value":10},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"g:Int32","@value":10},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"g:Int32","@value":12},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"g:Int32","@value":12},"value":{"@type":"g:Int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/data/tinkerpop-crew-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-v2d0-typed.json b/data/tinkerpop-crew-v2d0-typed.json
index e688520..77344c0 100644
--- a/data/tinkerpop-crew-v2d0-typed.json
+++ b/data/tinkerpop-crew-v2d0-typed.json
@@ -1,6 +1,6 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"gremlin:int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"gremlin:int32","@value":1997},"endTime":{"@type":"gremlin:int32","@value":2001}}},{"id":{"@type":"gremlin:int6
 4","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"gremlin:int32","@value":2001},"endTime":{"@type":"gremlin:int32","@value":2004}}},{"id":{"@type":"gremlin:int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"gremlin:int32","@value":2005}}}]}}
-{"id":{"@type":"gremlin:int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"gremlin:int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"gremlin:int32","@value":1990},"endTime":{"@type":"gremlin:int32","@value":2000}}},{"id":{"@type":"gremlin
 :int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"gremlin:int32","@value":2000},"endTime":{"@type":"gremlin:int32","@value":2006}}},{"id":{"@type":"gremlin:int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"gremlin:int32","@value":2006}}}]}}
-{"id":{"@type":"gremlin:int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"gremlin:int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2007}}},{"id":{"@type":"gremlin:int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"gremlin:int32","@value":2007},"endTime":{"@type":"gremlin:int32","@value":2011}
 }},{"id":{"@type":"gremlin:int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"gremlin:int32","@value":2011},"endTime":{"@type":"gremlin:int32","@value":2014}}},{"id":{"@type":"gremlin:int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"gremlin:int32","@value":2014}}}]}}
-{"id":{"@type":"gremlin:int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"gremlin:int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"gremlin:int32","@value":1982},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"gremlin:int32","@value":2005},"endTime":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"gremlin:int32","@value":2009}}}]}}
-{"id":{"@type":"gremlin:int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":22},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":24},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":21},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}},{"id":
 {"@type":"gremlin:int32","@value":13},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}}]},"outE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"gremlin"}]}}
-{"id":{"@type":"gremlin:int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"outV":{"@type":"gremlin:int32","@value":10}}],"uses":[{"id":{"@type":"gremlin:int32","@value":16},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":23},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":25},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":18},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}},{"id":{"@type":"gremlin:int32","@value":14},"outV":{"@
 type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":5},"value":"tinkergraph"}]}}
+{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":16},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":15},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":4}}}],"develops":[{"id":{"@type":"g:Int32","@value":13},"inV":{"@type":"g:Int32","@value":10},"properties":{"since":{"@type":"g:Int32","@value":2009}}},{"id":{"@type":"g:Int32","@value":14},"inV":{"@type":"g:Int32","@value":11},"properties":{"since":{"@type":"g:Int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"g:Int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"g:Int32","@value":1997},"endTime":{"@type":"g:Int32","@value":2001}}},{"id":{"@type":"g:Int64","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"g:Int32","@value":2001},"endTime":{"
 @type":"g:Int32","@value":2004}}},{"id":{"@type":"g:Int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"g:Int32","@value":2004},"endTime":{"@type":"g:Int32","@value":2005}}},{"id":{"@type":"g:Int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"g:Int32","@value":2005}}}]}}
+{"id":{"@type":"g:Int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":19},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":20},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":4}}}],"develops":[{"id":{"@type":"g:Int32","@value":17},"inV":{"@type":"g:Int32","@value":10},"properties":{"since":{"@type":"g:Int32","@value":2010}}},{"id":{"@type":"g:Int32","@value":18},"inV":{"@type":"g:Int32","@value":11},"properties":{"since":{"@type":"g:Int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"g:Int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"g:Int32","@value":1990},"endTime":{"@type":"g:Int32","@value":2000}}},{"id":{"@type":"g:Int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"g:Int32","@value":2000},"endTime":
 {"@type":"g:Int32","@value":2006}}},{"id":{"@type":"g:Int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"g:Int32","@value":2006}}}]}}
+{"id":{"@type":"g:Int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":22},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":3}}},{"id":{"@type":"g:Int32","@value":23},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":3}}}],"develops":[{"id":{"@type":"g:Int32","@value":21},"inV":{"@type":"g:Int32","@value":10},"properties":{"since":{"@type":"g:Int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"g:Int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"g:Int32","@value":2004},"endTime":{"@type":"g:Int32","@value":2007}}},{"id":{"@type":"g:Int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"g:Int32","@value":2007},"endTime":{"@type":"g:Int32","@value":2011}}},{"id":{"@type":"g:Int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"g:Int32
 ","@value":2011},"endTime":{"@type":"g:Int32","@value":2014}}},{"id":{"@type":"g:Int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"g:Int32","@value":2014}}}]}}
+{"id":{"@type":"g:Int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"g:Int32","@value":24},"inV":{"@type":"g:Int32","@value":10},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":25},"inV":{"@type":"g:Int32","@value":11},"properties":{"skill":{"@type":"g:Int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"g:Int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"g:Int32","@value":1982},"endTime":{"@type":"g:Int32","@value":2005}}},{"id":{"@type":"g:Int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"g:Int32","@value":2005},"endTime":{"@type":"g:Int32","@value":2009}}},{"id":{"@type":"g:Int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"g:Int32","@value":2009}}}]}}
+{"id":{"@type":"g:Int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"g:Int32","@value":19},"outV":{"@type":"g:Int32","@value":7},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":22},"outV":{"@type":"g:Int32","@value":8},"properties":{"skill":{"@type":"g:Int32","@value":3}}},{"id":{"@type":"g:Int32","@value":24},"outV":{"@type":"g:Int32","@value":9},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":15},"outV":{"@type":"g:Int32","@value":1},"properties":{"skill":{"@type":"g:Int32","@value":4}}}],"develops":[{"id":{"@type":"g:Int32","@value":17},"outV":{"@type":"g:Int32","@value":7},"properties":{"since":{"@type":"g:Int32","@value":2010}}},{"id":{"@type":"g:Int32","@value":21},"outV":{"@type":"g:Int32","@value":8},"properties":{"since":{"@type":"g:Int32","@value":2012}}},{"id":{"@type":"g:Int32","@value":13},"outV":{"@type":"g:Int32","@value":1},"properties":{"since":{"@type":"g:Int32","@v
 alue":2009}}}]},"outE":{"traverses":[{"id":{"@type":"g:Int32","@value":26},"inV":{"@type":"g:Int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":4},"value":"gremlin"}]}}
+{"id":{"@type":"g:Int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"g:Int32","@value":26},"outV":{"@type":"g:Int32","@value":10}}],"uses":[{"id":{"@type":"g:Int32","@value":16},"outV":{"@type":"g:Int32","@value":1},"properties":{"skill":{"@type":"g:Int32","@value":5}}},{"id":{"@type":"g:Int32","@value":20},"outV":{"@type":"g:Int32","@value":7},"properties":{"skill":{"@type":"g:Int32","@value":4}}},{"id":{"@type":"g:Int32","@value":23},"outV":{"@type":"g:Int32","@value":8},"properties":{"skill":{"@type":"g:Int32","@value":3}}},{"id":{"@type":"g:Int32","@value":25},"outV":{"@type":"g:Int32","@value":9},"properties":{"skill":{"@type":"g:Int32","@value":3}}}],"develops":[{"id":{"@type":"g:Int32","@value":18},"outV":{"@type":"g:Int32","@value":7},"properties":{"since":{"@type":"g:Int32","@value":2011}}},{"id":{"@type":"g:Int32","@value":14},"outV":{"@type":"g:Int32","@value":1},"properties":{"since":{"@type":"g:Int32","@value":2010}}}]},"properties":{"name":[{"id
 ":{"@type":"g:Int64","@value":5},"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/data/tinkerpop-modern-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-v2d0-typed.json b/data/tinkerpop-modern-v2d0-typed.json
index 9a297c3..20973ec 100644
--- a/data/tinkerpop-modern-v2d0-typed.json
+++ b/data/tinkerpop-modern-v2d0-typed.json
@@ -1,6 +1,6 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":29}}]}}
-{"id":{"@type":"gremlin:int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int64","@value":3},"value":{"@type":"gremlin:int32","@value":27}}]}}
-{"id":{"@type":"gremlin:int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int64","@value":5},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":32}}]}}
-{"id":{"@type":"gremlin:int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int64","@value":9},"value":"java"}]}}
-{"id":{"@type":"gremlin:int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int64","@value":11},"value":{"@type":"gremlin:int32","@value":35}}]}}
+{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29}}]}}
+{"id":{"@type":"g:Int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"g:Int32","@value":7},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"g:Int64","@value":3},"value":{"@type":"g:Int32","@value":27}}]}}
+{"id":{"@type":"g:Int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"g:Int32","@value":9},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Double","@value":0.4}}},{"id":{"@type":"g:Int32","@value":11},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":0.4}}},{"id":{"@type":"g:Int32","@value":12},"outV":{"@type":"g:Int32","@value":6},"properties":{"weight":{"@type":"g:Double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"g:Int64","@value":5},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"g:Int32","@value":8},"outV":{"@type":"g:Int32","@value":1},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"g:Int32","@value":10},"inV":{"@type":"g:Int32","@value":5},"properties":{"weight":{"@type":"g:Double","@value":1.0}}},{"id":{"@type":"g:Int32","@value":11},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"g:Int64","@value":7},"value":{"@type":"g:Int32","@value":32}}]}}
+{"id":{"@type":"g:Int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"g:Int32","@value":10},"outV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"g:Int64","@value":9},"value":"java"}]}}
+{"id":{"@type":"g:Int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":12},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"g:Int64","@value":11},"value":{"@type":"g:Int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index 06fe51c..1378f6e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -188,7 +188,7 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
                 AtomicBoolean.class,
                 AtomicReference.class,
                 TokenBuffer.class
-        ).forEach(e -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", GraphSONTokens.GREMLIN_TYPE_NAMESPACE, e.getSimpleName().toLowerCase()), e));
+        ).forEach(e -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", GraphSONTokens.GREMLIN_TYPE_NAMESPACE, e.getSimpleName()), e));
     }
 
     public static class Builder implements Mapper.Builder<Builder> {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/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 efbee8f..cf80428 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
@@ -90,41 +90,41 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                 new LinkedHashMap<Class, String>() {{
                     // Those don't have deserializers because handled by Jackson,
                     // but we still want to rename them in GraphSON
-                    put(ByteBuffer.class, "bytebuffer");
-                    put(Short.class, "int16");
-                    put(Integer.class, "int32");
-                    put(Long.class, "int64");
-                    put(Double.class, "double");
-                    put(Float.class, "float");
+                    put(ByteBuffer.class, "ByteBuffer");
+                    put(Short.class, "Int16");
+                    put(Integer.class, "Int32");
+                    put(Long.class, "Int64");
+                    put(Double.class, "Double");
+                    put(Float.class, "Float");
 
                     // Time serializers/deserializers
-                    put(Duration.class, "duration");
-                    put(Instant.class, "instant");
-                    put(LocalDate.class, "localdate");
-                    put(LocalDateTime.class, "localdatetime");
-                    put(LocalTime.class, "localtime");
-                    put(MonthDay.class, "monthday");
-                    put(OffsetDateTime.class, "offsetdatetime");
-                    put(OffsetTime.class, "offsettime");
-                    put(Period.class, "period");
-                    put(Year.class, "year");
-                    put(YearMonth.class, "yearmonth");
-                    put(ZonedDateTime.class, "zoneddatetime");
-                    put(ZoneOffset.class, "zoneoffset");
+                    put(Duration.class, "Duration");
+                    put(Instant.class, "Instant");
+                    put(LocalDate.class, "LocalDate");
+                    put(LocalDateTime.class, "LocalDateTime");
+                    put(LocalTime.class, "LocalTime");
+                    put(MonthDay.class, "MonthDay");
+                    put(OffsetDateTime.class, "OffsetDateTime");
+                    put(OffsetTime.class, "OffsetTime");
+                    put(Period.class, "Period");
+                    put(Year.class, "Year");
+                    put(YearMonth.class, "YearMonth");
+                    put(ZonedDateTime.class, "ZonedDateTime");
+                    put(ZoneOffset.class, "ZoneOffset");
 
                     // Tinkerpop Graph objects
-                    put(Lambda.class, "lambda");
-                    put(Vertex.class, "vertex");
-                    put(Edge.class, "edge");
-                    put(Property.class, "property");
-                    put(Path.class, "path");
-                    put(VertexProperty.class, "vertexproperty");
+                    put(Lambda.class, "Lambda");
+                    put(Vertex.class, "Vertex");
+                    put(Edge.class, "Edge");
+                    put(Property.class, "Property");
+                    put(Path.class, "Path");
+                    put(VertexProperty.class, "VertexProperty");
                     put(Metrics.class, "metrics");
-                    put(TraversalMetrics.class, "traversalmetrics");
-                    put(Traverser.class, "traverser");
-                    put(Tree.class, "tree");
-                    put(Bytecode.class, "bytecode");
-                    put(Bytecode.Binding.class, "binding");
+                    put(TraversalMetrics.class, "TraversalMetrics");
+                    put(Traverser.class, "Traverser");
+                    put(Tree.class, "Tree");
+                    put(Bytecode.class, "Bytecode");
+                    put(Bytecode.Binding.class, "Binding");
                     put(AndP.class, "P");
                     put(OrP.class, "P");
                     put(P.class, "P");
@@ -341,11 +341,11 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             addSerializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonSerializer());
             addSerializer(Traverser.class, new GraphSONTraversalSerializersV2d0.TraverserJacksonSerializer());*/
             // -- deserializers for traversal
-            addDeserializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonDeserializer());
+            //addDeserializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonDeserializer());
             //addDeserializer(Enum.class, new GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer());
-            addDeserializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonDeserializer());
-            addDeserializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonDeserializer());
-            addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());
+            //addDeserializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonDeserializer());
+            //addDeserializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonDeserializer());
+            //addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());
 
         }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
index 7a50b63..ff8cfd6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
@@ -47,7 +47,7 @@ public final class GraphSONTokens {
     public static final String OBJECTS = "objects";
     public static final String IN_LABEL = "inVLabel";
     public static final String OUT_LABEL = "outVLabel";
-    public static final String GREMLIN_TYPE_NAMESPACE = "gremlin";
+    public static final String GREMLIN_TYPE_NAMESPACE = "g";
 
     // TraversalExplanation Tokens
     public static final String ORIGINAL = "original";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
index ed10a93..0136199 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
@@ -80,21 +80,21 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest extends AbstractGraphSONT
         assertEquals(myList, serializeDeserializeAuto(mapper, myList));
 
         // no "@value" property
-        String s = "{\""+GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":uuid\", \"test\":2}";
+        String s = "{\""+GraphSONTokens.VALUETYPE+"\":\"" + GraphSONTokens.GREMLIN_TYPE_NAMESPACE + ":UUID\", \"test\":2}";
         Map<String,Object> map = new LinkedHashMap<>();
-        map.put(GraphSONTokens.VALUETYPE, "gremlin:uuid");
+        map.put(GraphSONTokens.VALUETYPE, GraphSONTokens.GREMLIN_TYPE_NAMESPACE + ":UUID");
         map.put("test", 2);
         Object res = mapper.readValue(s, Object.class);
         assertEquals(map, res);
 
         // "@value" and "@type" property reversed
-        s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \""+ GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\"}";
+        s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \"" + GraphSONTokens.VALUETYPE + "\":\"" + GraphSONTokens.GREMLIN_TYPE_NAMESPACE + ":Int64\"}";
         res = mapper.readValue(s, Object.class);
         assertEquals(res, 2L);
         assertEquals(res.getClass(), Long.class);
 
         // no "@type" property.
-        s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \"id\":2}";
+        s = "{\""+GraphSONTokens.VALUEPROP + "\":2, \"id\":2}";
         map = new LinkedHashMap<>();
         map.put(GraphSONTokens.VALUEPROP, 2);
         map.put("id", 2);
@@ -104,14 +104,14 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest extends AbstractGraphSONT
 
     @Test
     public void shouldFailIfMoreThanTwoPropertiesInATypePattern() {
-        String s = "{\"" + GraphSONTokens.VALUEPROP + "\":2, \"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\", \"hello\": \"world\"}";
+        String s = "{\"" + GraphSONTokens.VALUEPROP + "\":2, \"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":Int64\", \"hello\": \"world\"}";
         try {
             mapper.readValue(s, Object.class);
             fail("Should have failed deserializing because there's more than properties in the type.");
         } catch (IOException e) {
             assertThat(e.getMessage(), containsString("Detected the type pattern in the JSON payload but the map containing the types and values contains other fields. This is not allowed by the deserializer."));
         }
-        s = "{\"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\",\"" + GraphSONTokens.VALUEPROP + "\":2, \"hello\": \"world\"}";
+        s = "{\"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":Int64\",\"" + GraphSONTokens.VALUEPROP + "\":2, \"hello\": \"world\"}";
         try {
             mapper.readValue(s, Object.class);
             fail("Should have failed deserializing because there's more than properties in the type.");
@@ -131,7 +131,7 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest extends AbstractGraphSONT
             mapper.readValue(inputStream, Instant.class);
             fail("Should have failed decoding the value");
         } catch (Exception e) {
-            assertThat(e.getMessage(), containsString("Could not deserialize the JSON value as required. Nested exception: java.lang.InstantiationException: Cannot deserialize the value with the detected type contained in the JSON ('"+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":zoneoffset') to the type specified in parameter to the object mapper (class java.time.Instant). Those types are incompatible."));
+            assertThat(e.getMessage(), containsString("Could not deserialize the JSON value as required. Nested exception: java.lang.InstantiationException: Cannot deserialize the value with the detected type contained in the JSON ('" + GraphSONTokens.GREMLIN_TYPE_NAMESPACE + ":ZoneOffset') to the type specified in parameter to the object mapper (class java.time.Instant). Those types are incompatible."));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/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 6fb32b6..c3199c6 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
@@ -122,12 +122,12 @@ class BytecodeSerializer(GraphSONSerializer):
             dict["source"] = sources
         if len(steps) > 0:
             dict["step"] = steps
-        return _SymbolHelper.objectify("bytecode", dict)
+        return _SymbolHelper.objectify("Bytecode", dict)
 
 
 class TraverserSerializer(GraphSONSerializer):
     def _dictify(self, traverser):
-        return _SymbolHelper.objectify("traverser", {"value": GraphSONWriter._dictify(traverser.object),
+        return _SymbolHelper.objectify("Traverser", {"value": GraphSONWriter._dictify(traverser.object),
                                                      "bulk": GraphSONWriter._dictify(traverser.bulk)})
 
 
@@ -153,7 +153,7 @@ class BindingSerializer(GraphSONSerializer):
         dict = {}
         dict["key"] = binding.key
         dict["value"] = GraphSONWriter._dictify(binding.value)
-        return _SymbolHelper.objectify("binding", dict)
+        return _SymbolHelper.objectify("Binding", dict)
 
 
 class LambdaSerializer(GraphSONSerializer):
@@ -171,7 +171,7 @@ class LambdaSerializer(GraphSONSerializer):
             dict["arguments"] = eval(dict["script"]).func_code.co_argcount
         else:
             dict["arguments"] = -1
-        return _SymbolHelper.objectify("lambda", dict)
+        return _SymbolHelper.objectify("Lambda", dict)
 
 
 class NumberSerializer(GraphSONSerializer):
@@ -179,11 +179,11 @@ class NumberSerializer(GraphSONSerializer):
         if isinstance(number, bool):  # python thinks that 0/1 integers are booleans
             return number
         elif isinstance(number, long):
-            return _SymbolHelper.objectify("int64", number)
+            return _SymbolHelper.objectify("Int64", number)
         elif isinstance(number, int):
-            return _SymbolHelper.objectify("int32", number)
+            return _SymbolHelper.objectify("Int32", number)
         elif isinstance(number, float):
-            return _SymbolHelper.objectify("float", number)
+            return _SymbolHelper.objectify("Float", number)
         else:
             return number
 
@@ -209,9 +209,9 @@ class NumberDeserializer(GraphSONDeserializer):
     def _objectify(self, dict):
         type = dict[_SymbolHelper._TYPE]
         value = dict[_SymbolHelper._VALUE]
-        if type == "gremlin:int32":
+        if type == "g:Int32":
             return int(value)
-        elif type == "gremlin:int64":
+        elif type == "g:Int64":
             return long(value)
         else:
             return float(value)
@@ -257,7 +257,7 @@ class _SymbolHelper(object):
         return _SymbolHelper.symbolMap[symbol] if symbol in _SymbolHelper.symbolMap else symbol
 
     @staticmethod
-    def objectify(type, value, prefix="gremlin"):
+    def objectify(type, value, prefix="g"):
         return {_SymbolHelper._TYPE: prefix + ":" + type, _SymbolHelper._VALUE: value}
 
 
@@ -275,13 +275,13 @@ serializers = {
 }
 
 deserializers = {
-    "gremlin:traverser": TraverserDeserializer(),
-    "gremlin:int32": NumberDeserializer(),
-    "gremlin:int64": NumberDeserializer(),
-    "gremlin:float": NumberDeserializer(),
-    "gremlin:double": NumberDeserializer(),
-    "gremlin:vertex": VertexDeserializer(),
-    "gremlin:edge": EdgeDeserializer(),
-    "gremlin:vertexproperty": VertexPropertyDeserializer(),
-    "gremlin:property": PropertyDeserializer()
+    "g:Traverser": TraverserDeserializer(),
+    "g:Int32": NumberDeserializer(),
+    "g:Int64": NumberDeserializer(),
+    "g:Float": NumberDeserializer(),
+    "g:Double": NumberDeserializer(),
+    "g:Vertex": VertexDeserializer(),
+    "g:Edge": EdgeDeserializer(),
+    "g:VertexProperty": VertexPropertyDeserializer(),
+    "g:Property": PropertyDeserializer()
 }


[20/50] [abbrv] tinkerpop git commit: Better handle scenario when a side-effect is not found for keys.

Posted by sp...@apache.org.
Better handle scenario when a side-effect is not found for keys.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ba8bb609
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ba8bb609
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ba8bb609

Branch: refs/heads/master
Commit: ba8bb609711da1a4f81de878b013b37340bbed58
Parents: e71ebed
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 25 09:08:35 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Aug 25 09:08:35 2016 -0400

----------------------------------------------------------------------
 .../driver/remote/DriverRemoteTraversalSideEffects.java      | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ba8bb609/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
index 01c5c16..d8adcc6 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.driver.remote;
 
+import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.driver.Client;
 import org.apache.tinkerpop.gremlin.driver.Host;
 import org.apache.tinkerpop.gremlin.driver.Result;
@@ -25,6 +26,7 @@ import org.apache.tinkerpop.gremlin.driver.Tokens;
 import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.AbstractRemoteTraversalSideEffects;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -82,7 +84,11 @@ public class DriverRemoteTraversalSideEffects extends AbstractRemoteTraversalSid
             try {
                 keys = client.submitAsync(msg).get().all().get().stream().map(r -> r.getString()).collect(Collectors.toSet());
             } catch (Exception ex) {
-                throw new RuntimeException("Could not get keys", ex);
+                final Throwable root = ExceptionUtils.getRootCause(ex);
+                if (root.getMessage().equals("Could not find side-effects for " + serverSideEffect + "."))
+                    keys = Collections.emptySet();
+                else
+                    throw new RuntimeException("Could not get keys", root);
             }
         }
 


[29/50] [abbrv] tinkerpop git commit: Add testing framework for native python based tests.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/18e3d64c/gremlin-python/src/main/jython/runtest.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/runtest.py b/gremlin-python/src/main/jython/runtest.py
new file mode 100644
index 0000000..09d9cdb
--- /dev/null
+++ b/gremlin-python/src/main/jython/runtest.py
@@ -0,0 +1,2892 @@
+#! /usr/bin/env python
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+sources = """
+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

<TRUNCATED>

[09/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/860f90ba
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/860f90ba
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/860f90ba

Branch: refs/heads/master
Commit: 860f90ba5fb83095c01848c519d980f23e69f48f
Parents: 6a2532f 72a5ae0
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 24 16:49:30 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 24 16:49:30 2016 -0400

----------------------------------------------------------------------
 .../driver/driver_remote_connection.py          | 69 +++++++++-----------
 1 file changed, 30 insertions(+), 39 deletions(-)
----------------------------------------------------------------------



[17/50] [abbrv] tinkerpop git commit: Increase max frame size so that tests can succeed under GraphSON 2.0

Posted by sp...@apache.org.
Increase max frame size so that tests can succeed under GraphSON 2.0

Apparently, graphson needs a larger setting for some tests than gryo.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/db884243
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/db884243
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/db884243

Branch: refs/heads/master
Commit: db8842436f7ca4c6980ebad27f2fca3cbf7c2fd5
Parents: d5ff0ad
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 25 08:51:48 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Aug 25 08:51:48 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java      | 2 +-
 .../org/apache/tinkerpop/gremlin/server/ServerTestHelper.java     | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db884243/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
index a4dff94..8b68c35 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
@@ -49,7 +49,7 @@ public class RemoteGraphProvider extends AbstractGraphProvider {
     private static GremlinServer server;
     private final Map<String, RemoteGraph> remoteCache = new HashMap<>();
     private final Cluster cluster = Cluster.open();
-    //private final Cluster cluster = Cluster.build().serializer(Serializers.GRAPHSON_V2D0).create();
+    //private final Cluster cluster = Cluster.build().maxContentLength(1024000).serializer(Serializers.GRAPHSON_V2D0).create();
     private final Client client = cluster.connect();
 
     static {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/db884243/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
index e846673..3a82537 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
@@ -45,5 +45,8 @@ public class ServerTestHelper {
                     kv.setValue(homeDir + File.separator + kv.getValue());
                     return kv;
                 }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+        overridenSettings.maxContentLength = 1024000;
+        overridenSettings.maxChunkSize =1024000;
     }
 }


[44/50] [abbrv] tinkerpop git commit: added aggregateTo=bulkset. Added test cases to ensure side_effects are retrieved correctly. Added __hash__ where needed. tests are nearly done.

Posted by sp...@apache.org.
added aggregateTo=bulkset. Added test cases to ensure side_effects are retrieved correctly. Added __hash__ where needed. tests are nearly done.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a0bd4130
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a0bd4130
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a0bd4130

Branch: refs/heads/master
Commit: a0bd413063af64f5bee0ce24b910fe62b756f2ce
Parents: 8569800
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 14:23:08 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 14:23:20 2016 -0600

----------------------------------------------------------------------
 .../python/GraphTraversalSourceGenerator.groovy |  3 +-
 .../driver/driver_remote_connection.py          | 19 ++++---
 .../gremlin_python/process/graph_traversal.py   |  3 +-
 .../jython/gremlin_python/structure/graph.py    |  6 +++
 .../driver/test_driver_remote_connection.py     | 54 ++++++++++++++++++++
 .../main/jython/tests/structure/test_graph.py   |  1 +
 6 files changed, 77 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index 74c6d89..aaaa5b6 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -55,6 +55,7 @@ specific language governing permissions and limitations
 under the License.
 '''
 """)
+        pythonClass.append("import sys\n")
         pythonClass.append("from .traversal import Traversal\n")
         pythonClass.append("from .traversal import TraversalStrategies\n")
         pythonClass.append("from .traversal import Bytecode\n")
@@ -127,7 +128,7 @@ under the License.
     if isinstance(index, int):
         return self.range(index, index + 1)
     elif isinstance(index, slice):
-        return self.range(index.start, index.stop)
+        return self.range(0 if index.start is None else index.start, sys.maxint if index.stop is None else index.stop)
     else:
         raise TypeError("Index must be int or slice")
   def __getattr__(self, key):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 3273ad4..fa61fb5 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -131,16 +131,16 @@ class DriverRemoteConnection(RemoteConnection):
             recv_message = yield response.receive()
             if recv_message is None:
                 break
-
+            aggregateTo = recv_message[0]
             # on first message, get the right result data structure
             if None == results:
-                if "list" == recv_message[0]:
+                if "list" == aggregateTo:
                     results = []
-                elif "set" == recv_message[0]:
+                elif "set" == aggregateTo:
                     results = set()
-                elif "map" == recv_message[0]:
+                elif aggregateTo in ["map", "bulkset"]:
                     results = {}
-                elif "none" == recv_message[0]:
+                elif "none" == aggregateTo:
                     results = None
                 else:
                     results = []
@@ -150,8 +150,12 @@ class DriverRemoteConnection(RemoteConnection):
                 results = recv_message[1][0]
             # updating a map is different than a list or a set
             elif isinstance(results, dict):
-                for item in recv_message[1]:
-                    results.update(item)
+                if "map" == aggregateTo:
+                    for item in recv_message[1]:
+                        results.update(item)
+                else:
+                    for item in recv_message[1]:
+                        results[item.object] = item.bulk
             # flat add list to result list
             else:
                 results += recv_message[1]
@@ -160,6 +164,7 @@ class DriverRemoteConnection(RemoteConnection):
     def close(self):
         self._websocket.close()
 
+
 class Response:
     def __init__(self, websocket, username, password):
         self._websocket = websocket

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index b7d6691..a9a1e8f 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -16,6 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 '''
+import sys
 from .traversal import Traversal
 from .traversal import TraversalStrategies
 from .traversal import Bytecode
@@ -90,7 +91,7 @@ class GraphTraversal(Traversal):
     if isinstance(index, int):
         return self.range(index, index + 1)
     elif isinstance(index, slice):
-        return self.range(index.start, index.stop)
+        return self.range(0 if index.start is None else index.start, sys.maxint if index.stop is None else index.stop)
     else:
         raise TypeError("Index must be int or slice")
   def __getattr__(self, key):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
index b047893..22403b6 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
@@ -43,6 +43,9 @@ class Element(object):
     def __eq__(self, other):
         return isinstance(other, self.__class__) and self.id == other.id
 
+    def __hash__(self):
+        return hash(self.id)
+
 
 class Vertex(Element):
     def __init__(self, id, label="vertex"):
@@ -82,3 +85,6 @@ class Property(object):
 
     def __eq__(self, other):
         return isinstance(other, self.__class__) and self.key == other.key and self.value == other.value
+
+    def __hash__(self):
+        return hash(self.key) + hash(self.value)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index b47eff9..90a4ef6 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -37,6 +37,8 @@ class TestDriverRemoteConnection(TestCase):
         #
         g = Graph().traversal().withRemote(connection)
         #
+        assert 6L == g.V().count().toList()[0]
+        #
         assert Vertex(1) == g.V(1).next()
         assert 1 == g.V(1).id().next()
         assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
@@ -48,8 +50,60 @@ class TestDriverRemoteConnection(TestCase):
         assert "lop" in results
         assert "ripple" in results
         #
+        assert 10 == g.V().repeat(both()).times(5)[0:10].count().next()
+        assert 1 == g.V().repeat(both()).times(5)[0].count().next()
+        assert 0 == g.V().repeat(both()).times(5)[0:0].count().next()
+        assert 4 == g.V()[2:].count().next()
+        assert 2 == g.V()[:2].count().next()
+        # todo: need a traversal metrics deserializer
+        g.V().out().profile().next()
         connection.close()
 
+    def test_side_effects(self):
+        statics.load_statics(globals())
+        connection = DriverRemoteConnection('ws://localhost:8182', 'g')
+        #
+        g = Graph().traversal().withRemote(connection)
+        ###
+        t = g.V().hasLabel("project").name.iterate()
+        assert 0 == len(t.side_effects.keys())
+        try:
+            m = t.side_effects["m"]
+            raise Exception("Accessing a non-existent key should throw an error")
+        except KeyError:
+            pass
+        ###
+        t = g.V().out("created").groupCount("m").by("name")
+        results = t.toSet()
+        assert 2 == len(results)
+        assert Vertex(3) in results
+        assert Vertex(5) in results
+        assert 1 == len(t.side_effects.keys())
+        assert "m" in t.side_effects.keys()
+        m = t.side_effects["m"]
+        assert isinstance(m, dict)
+        assert 2 == len(m)
+        assert 3 == m["lop"]
+        assert 1 == m["ripple"]
+        assert isinstance(m["lop"], long)
+        assert isinstance(m["ripple"], long)
+        ###
+        t = g.V().out("created").groupCount("m").by("name").name.aggregate("n")
+        results = t.toSet()
+        assert 2 == len(results)
+        assert "lop" in results
+        assert "ripple" in results
+        assert 2 == len(t.side_effects.keys())
+        assert "m" in t.side_effects.keys()
+        assert "n" in t.side_effects.keys()
+        n = t.side_effects.get("n")
+        assert isinstance(n, dict)
+        assert 2 == len(n)
+        assert "lop" in n.keys()
+        assert "ripple" in n.keys()
+        assert 3 == n["lop"]
+        assert 1 == n["ripple"]
+
 
 if __name__ == '__main__':
     test = False

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0bd4130/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 5f62464..6025802 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -67,6 +67,7 @@ class TestGraph(TestCase):
                     assert i != j
                 else:
                     assert i == j
+                    assert i.__hash__() == hash(i)
 
 
 if __name__ == '__main__':


[25/50] [abbrv] tinkerpop git commit: added gremlin-server-modern-secure-py to the test resources of gremlin-python for testing authentification. added DriverConnectionTest which uses bash python to test Gremlin-Python (CPython). Basic tests to ensure th

Posted by sp...@apache.org.
added gremlin-server-modern-secure-py to the test resources of gremlin-python for testing authentification. added DriverConnectionTest which uses bash python to test Gremlin-Python (CPython). Basic tests to ensure that the protocol works.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/901ecb6d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/901ecb6d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/901ecb6d

Branch: refs/heads/master
Commit: 901ecb6deea0ac515beebd3d3e552200b89983f4
Parents: 2804e45
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 14:18:31 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 14:18:31 2016 -0600

----------------------------------------------------------------------
 .../driver/DriverRemoteConnectionTest.java      | 127 +++++++++----------
 .../gremlin/python/driver/credentials.kryo      | Bin 0 -> 138 bytes
 .../python/driver/generate-modern.groovy        |  33 +++++
 .../python/driver/gremlin-server-modern-py.yaml |  66 ++++++++++
 .../driver/tinkergraph-credentials.properties   |  22 ++++
 .../python/driver/tinkergraph-empty.properties  |  18 +++
 6 files changed, 202 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/901ecb6d/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
index cec9be5..f12d986 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
@@ -19,18 +19,22 @@
 
 package org.apache.tinkerpop.gremlin.python.driver;
 
-import org.apache.tinkerpop.gremlin.python.jsr223.JythonScriptEngineSetup;
+import org.apache.tinkerpop.gremlin.TestHelper;
 import org.apache.tinkerpop.gremlin.server.GremlinServer;
 import org.apache.tinkerpop.gremlin.server.Settings;
-import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import javax.script.ScriptContext;
-import javax.script.ScriptEngine;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Writer;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Set;
+import java.util.stream.Collectors;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -40,82 +44,77 @@ import static org.junit.Assert.assertTrue;
  */
 public class DriverRemoteConnectionTest {
 
-    private static final ScriptEngine jython = ScriptEngineCache.get("jython");
-
-    private final List<String> aliases = Arrays.asList("g", "j");
+    private static boolean PYTHON_EXISTS = false;
 
     @BeforeClass
     public static void setup() {
         try {
-            JythonScriptEngineSetup.setup();
-            jython.getContext().getBindings(ScriptContext.ENGINE_SCOPE)
-                    .put("g", jython.eval("Graph().traversal().withRemote(DriverRemoteConnection('ws://localhost:8182','g'))"));
-            jython.getContext().getBindings(ScriptContext.ENGINE_SCOPE)
-                    .put("j", jython.eval("Graph().traversal().withRemote(DriverRemoteConnection('ws://localhost:8182','g'))"));
-            new GremlinServer(Settings.read(DriverRemoteConnectionTest.class.getResourceAsStream("gremlin-server-rest-modern.yaml"))).start().join();
+            PYTHON_EXISTS = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("python --version").getErrorStream())).lines().filter(line -> line.trim().startsWith("Python ")).findAny().isPresent();
+            System.out.println("Python exists: " + PYTHON_EXISTS);
+            if (PYTHON_EXISTS)
+                new GremlinServer(Settings.read(DriverRemoteConnectionTest.class.getResourceAsStream("gremlin-server-modern-py.yaml"))).start().join();
         } catch (final Exception ex) {
             ex.printStackTrace();
         }
     }
 
-    @Test
-    @org.junit.Ignore
-    public void testGraphTraversalNext() throws Exception {
-        for (final String alias : this.aliases) {
-            final String result = (String) jython.eval(alias + ".V().repeat(__.out()).times(2).name.next()");
-            assertTrue(result.equals("lop") || result.equals("ripple"));
-        }
-    }
+    private static List<String> submit(final String traversal) throws IOException {
+        final StringBuilder script = new StringBuilder();
+        script.append("from gremlin_python import statics\n");
+        script.append("from gremlin_python.structure.graph import Graph\n");
+        script.append("from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection\n");
+        script.append("from gremlin_python.structure.io.graphson import GraphSONWriter\n\n");
+        script.append("statics.load_statics(globals())\n");
+        script.append("graph = Graph()\n");
+        script.append("g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182','g',username='stephen', password='password'))\n");
+        script.append("results = " + traversal + ".toList()\n");
+        script.append("print results\n\n");
 
-    @Test
-    @org.junit.Ignore
-    public void testGraphTraversalToList() throws Exception {
-        for (final String alias : this.aliases) {
-            final List<String> results = (List) jython.eval(alias + ".V().repeat(__.out()).times(2).name.toList()");
-            assertEquals(2, results.size());
-            assertTrue(results.contains("lop"));
-            assertTrue(results.contains("ripple"));
-        }
-    }
+        File file = TestHelper.generateTempFile(DriverRemoteConnectionTest.class, "temp", "py");
+        final Writer writer = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
+        writer.write(script.toString());
+        writer.flush();
+        writer.close();
+
+        final BufferedReader reader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("python " + file.getAbsolutePath()).getInputStream()));
+        final List<String> lines = reader.lines()
+                .map(line -> line.substring(1, line.length() - 1))
+                .flatMap(line -> Arrays.stream(line.split(",")))
+                .map(String::trim)
+                .collect(Collectors.toList());
+        reader.close();
+        file.delete();
+        return lines;
 
-    @Test
-    @org.junit.Ignore
-    public void testGraphTraversalToSet() throws Exception {
-        for (final String alias : this.aliases) {
-            final Set<String> results = (Set) jython.eval(alias + ".V().repeat(__.both()).times(4).hasLabel('software').name.toSet()");
-            assertEquals(2, results.size());
-            assertTrue(results.contains("lop"));
-            assertTrue(results.contains("ripple"));
-        }
     }
 
     @Test
-    @org.junit.Ignore
-    public void testGraphTraversalNextAmount() throws Exception {
-        for (final String alias : this.aliases) {
-            List<String> results = (List) jython.eval(alias + ".V().repeat(__.out()).times(2).name.next(2)");
-            assertEquals(2, results.size());
-            assertTrue(results.contains("lop"));
-            assertTrue(results.contains("ripple"));
-            //
-            results = (List) jython.eval(alias + ".V().repeat(__.out()).times(2).name.next(4)");
-            assertEquals(2, results.size());
-            assertTrue(results.contains("lop"));
-            assertTrue(results.contains("ripple"));
-        }
+    public void testTraversals() throws Exception {
+        if (!PYTHON_EXISTS) return;
+
+        List<String> result = DriverRemoteConnectionTest.submit("g.V().count()");
+        assertEquals(1, result.size());
+        assertEquals("6L", result.get(0));
+        //
+        result = DriverRemoteConnectionTest.submit("g.V(1).out('created').name");
+        assertEquals(1, result.size());
+        assertEquals("u'lop'", result.get(0));
+        //
+        result = DriverRemoteConnectionTest.submit("g.V(1).out()");
+        assertEquals(3, result.size());
+        assertTrue(result.contains("v[4]"));
+        assertTrue(result.contains("v[2]"));
+        assertTrue(result.contains("v[3]"));
     }
 
     @Test
-    @org.junit.Ignore
-    public void testRemoteConnectionBindings() throws Exception {
-        for (final String alias : this.aliases) {
-            final String traversalScript = jython.eval(alias + ".V().out(('a','knows'),'created')").toString();
-            assertEquals(traversalScript, "g.V().out(a, \"created\")"); // ensure the traversal string is binding based
-            final List<String> results = (List) jython.eval(alias + ".V().out(('a','knows')).out('created').name.next(2)");
-            assertEquals(2, results.size());
-            assertTrue(results.contains("lop"));
-            assertTrue(results.contains("ripple"));
+    public void testAnonymousTraversals() throws Exception {
+        if (!PYTHON_EXISTS) return;
 
-        }
+        List<String> result = DriverRemoteConnectionTest.submit("g.V().repeat(out()).times(2).name");
+        assertEquals(2, result.size());
+        assertTrue(result.contains("u'lop'"));
+        assertTrue(result.contains("u'ripple'"));
     }
+
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/901ecb6d/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
new file mode 100644
index 0000000..163d2ef
Binary files /dev/null and b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/901ecb6d/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy
new file mode 100644
index 0000000..23b4a61
--- /dev/null
+++ b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// an init script that returns a Map allows explicit setting of global bindings.
+def globals = [:]
+
+// Generates the modern graph into an "empty" TinkerGraph via LifeCycleHook.
+// Note that the name of the key in the "global" map is unimportant.
+globals << [hook : [
+  onStartUp: { ctx ->
+    ctx.logger.info("Loading 'modern' graph data.")
+    TinkerFactory.generateModern(graph)
+  }
+] as LifeCycleHook]
+
+// define the default TraversalSource to bind queries to - this one will be named "g".
+globals << [g : graph.traversal()]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/901ecb6d/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml
new file mode 100644
index 0000000..a1b28a9
--- /dev/null
+++ b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml
@@ -0,0 +1,66 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Note that TinkerPop does not include gremlin-python dependencies in
+# its distributions. This file cannot be used as a configuration file
+# to Gremlin Server unless those dependencies are installed on the
+# Gremlin Server path with:
+#
+# bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python x.y.z
+#
+# The primary change in this file to enable the GremlinJythonScriptEngine
+# is the addition of "gremlin-jython" to the "scriptEngines" field.
+
+host: localhost
+port: 8182
+threadPoolWorker: 1
+gremlinPool: 8
+scriptEvaluationTimeout: 30000
+graphs: {
+  graph: src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties}
+plugins:
+  - tinkerpop.tinkergraph
+scriptEngines: {
+  gremlin-groovy: {
+    imports: [java.lang.Math],
+    staticImports: [java.lang.Math.PI],
+    scripts: [src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy]},
+  gremlin-jython: {},
+  gremlin-python: {}
+}
+serializers:
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { useMapperFromGraph: graph }}            # application/vnd.gremlin-v1.0+gryo
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}        # application/vnd.gremlin-v1.0+gryo-stringd
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
+metrics: {
+  slf4jReporter: {enabled: true, interval: 180000}}
+strictTransactionManagement: false
+threadPoolBoss: 1
+maxInitialLineLength: 4096
+maxHeaderSize: 8192
+maxChunkSize: 8192
+maxContentLength: 65536
+maxAccumulationBufferComponents: 1024
+resultIterationBatchSize: 64
+authentication: {
+  className: org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator,
+  config: {
+    credentialsDb: src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties}}
+

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/901ecb6d/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties
new file mode 100644
index 0000000..909b92b
--- /dev/null
+++ b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties
@@ -0,0 +1,22 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+#
+gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph
+gremlin.tinkergraph.vertexIdManager=LONG
+gremlin.tinkergraph.graphLocation=src/test/resources/org/apache/tinkerpop/gremlin/python/driver/credentials.kryo
+gremlin.tinkergraph.graphFormat=gryo
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/901ecb6d/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties
new file mode 100644
index 0000000..e09a13d
--- /dev/null
+++ b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph
+gremlin.tinkergraph.vertexIdManager=LONG
\ No newline at end of file


[13/50] [abbrv] tinkerpop git commit: fixed authentification code in driver_remoteconnection

Posted by sp...@apache.org.
fixed authentification code in driver_remoteconnection


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/21865d81
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/21865d81
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/21865d81

Branch: refs/heads/master
Commit: 21865d81948ea39fcd20fc3fb17cf2d9190aa625
Parents: cb9d46a
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 15:44:32 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 15:44:32 2016 -0600

----------------------------------------------------------------------
 .../jython/gremlin_python/driver/driver_remote_connection.py    | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/21865d81/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 3651ec8..50a9944 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -172,7 +172,10 @@ class Response:
         auth = b"".join([b"\x00", username.encode("utf-8"),
                          b"\x00", password.encode("utf-8")])
         message = {
-            "requestId": str(uuid.uuid4()),
+            "requestId": {
+                "@type": "g:UUID",
+                "@value": str(uuid.uuid4())
+            },
             "op": "authentication",
             "processor": "traversal",
             "args": {


[15/50] [abbrv] tinkerpop git commit: Added a logging message in gremlin server to better output traversal serialization errors.

Posted by sp...@apache.org.
Added a logging message in gremlin server to better output traversal serialization errors.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d5ff0ad5
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d5ff0ad5
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d5ff0ad5

Branch: refs/heads/master
Commit: d5ff0ad572172169b68b8c6d06765fda62b63944
Parents: f73c93c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 24 22:21:57 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 24 22:21:57 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d5ff0ad5/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index 0769f87..632008c 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -345,6 +345,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
                 traversal = engines.eval(bytecode, b, lambdaLanguage.get());
             }
         } catch (Exception ex) {
+            logger.error("Could not deserialize the Traversal instance", context);
             throw new OpProcessorException("Could not deserialize the Traversal instance",
                     ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR_SERIALIZATION)
                             .statusMessage(ex.getMessage()).create());


[34/50] [abbrv] tinkerpop git commit: Added a bit of logging and error handling.

Posted by sp...@apache.org.
Added a bit of logging and error handling.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/186f26ba
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/186f26ba
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/186f26ba

Branch: refs/heads/master
Commit: 186f26ba08ca8ee2408003f98a1579bc999ccd36
Parents: 4191efc
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 10:53:13 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 10:53:13 2016 -0400

----------------------------------------------------------------------
 .../server/op/traversal/TraversalOpProcessor.java   | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/186f26ba/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index b44c51b..108d3fc 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -180,12 +180,10 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
                     final Optional<UUID> sideEffect = msg.optionalArgs(Tokens.ARGS_SIDE_EFFECT);
                     final TraversalSideEffects sideEffects = cache.getIfPresent(sideEffect.get());
 
-                    if (null == sideEffects) {
-                        final String msgDefault = String.format("Could not find side-effects for %s.", sideEffect.get());
-                        throw new OpProcessorException(msgDefault, ResponseMessage.build(message).code(ResponseStatusCode.SERVER_ERROR).statusMessage(msgDefault).create());
-                    }
+                    if (null == sideEffects)
+                        logger.warn("Request for side-effect keys on %s returned no side-effects in the cache", sideEffect.get());
 
-                    handleIterator(context, sideEffects.keys().iterator());
+                    handleIterator(context, null == sideEffects ? Collections.emptyIterator() : sideEffects.keys().iterator());
                 };
 
                 break;
@@ -284,6 +282,14 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
                             return;
                         }
 
+                        if (!sideEffects.exists(sideEffectKey.get())) {
+                            final String errorMessage = String.format("Could not find side-effect key for %s in %s.", sideEffectKey.get(), sideEffect.get());
+                            logger.warn(errorMessage);
+                            ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR).statusMessage(errorMessage).create());
+                            onError(graph, context);
+                            return;
+                        }
+
                         handleIterator(context, new SideEffectIterator(sideEffects.get(sideEffectKey.get()), sideEffectKey.get()));
                     } catch (TimeoutException ex) {
                         final String errorMessage = String.format("Response iteration exceeded the configured threshold for request [%s] - %s", msg.getRequestId(), ex.getMessage());


[32/50] [abbrv] tinkerpop git commit: Ignore this test - it fails in certain environments.

Posted by sp...@apache.org.
Ignore this test - it fails in certain environments.

It will also be replaced by native python testing.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9e449df2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9e449df2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9e449df2

Branch: refs/heads/master
Commit: 9e449df23ee9fe2aafcbc8ca32987a16bd34b36d
Parents: 87be8a7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 08:06:54 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 08:06:54 2016 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9e449df2/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
index 0434809..27952a8 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
@@ -44,6 +44,7 @@ import static org.junit.Assert.assertTrue;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
+@org.junit.Ignore
 public class DriverRemoteConnectionTest {
 
     private static boolean PYTHON_EXISTS = false;


[36/50] [abbrv] tinkerpop git commit: flushed out the gremlin-python Python test structure.

Posted by sp...@apache.org.
flushed out the gremlin-python Python test structure.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1652bd65
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1652bd65
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1652bd65

Branch: refs/heads/master
Commit: 1652bd65572273cbae164cba535729d0e2eb31bb
Parents: 5c9cbf6
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 11:39:56 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 11:39:56 2016 -0600

----------------------------------------------------------------------
 .../python/TraversalSourceGenerator.groovy      |  2 +
 .../jython/gremlin_python/process/traversal.py  |  2 +
 .../gremlin_python/structure/io/graphson.py     |  3 +
 gremlin-python/src/main/jython/setup.py         |  2 +-
 .../src/main/jython/tests/__init__.py           | 20 +++++++
 .../src/main/jython/tests/driver/__init__.py    | 20 +++++++
 .../driver/test_driver_remote_connection.py     | 20 +++++++
 .../src/main/jython/tests/structure/__init__.py | 20 +++++++
 .../main/jython/tests/structure/io/__init__.py  | 20 +++++++
 .../jython/tests/structure/io/test_graphson.py  | 61 ++++++++++++++++++++
 .../src/main/jython/tests/test_sample.py        | 25 --------
 .../src/main/jython/tests/test_statics.py       | 46 +++++++++++++++
 12 files changed, 215 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index a27fd40..db399f0 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -156,6 +156,8 @@ class Traversal(object):
       return P("and", arg, self)
    def _or(self, arg):
       return P("or", arg, self)
+   def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.operator == other.operator and self.value == other.value and self.other == other.other
    def __repr__(self):
       return self.operator + "(" + str(self.value) + ")" if self.other is None else self.operator + "(" + str(self.value) + "," + str(self.other) + ")"
 """)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index b39ec35..17efa52 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -176,6 +176,8 @@ class P(object):
       return P("and", arg, self)
    def _or(self, arg):
       return P("or", arg, self)
+   def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.operator == other.operator and self.value == other.value and self.other == other.other
    def __repr__(self):
       return self.operator + "(" + str(self.value) + ")" if self.other is None else self.operator + "(" + str(self.value) + "," + str(self.other) + ")"
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/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 b8305ac..2e3f9a5 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
@@ -17,6 +17,9 @@ specific language governing permissions and limitations
 under the License.
 '''
 
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
+
+
 import json
 from abc import abstractmethod
 from aenum import Enum

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/setup.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/setup.py b/gremlin-python/src/main/jython/setup.py
index 528e69b..3335c70 100644
--- a/gremlin-python/src/main/jython/setup.py
+++ b/gremlin-python/src/main/jython/setup.py
@@ -67,6 +67,6 @@ setup(
     install_requires=[
         'aenum',
         'requests',
-        'tornado'
+        'tornado',
     ]
 )

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/tests/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/__init__.py b/gremlin-python/src/main/jython/tests/__init__.py
new file mode 100644
index 0000000..6df1100
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/__init__.py
@@ -0,0 +1,20 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/tests/driver/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/__init__.py b/gremlin-python/src/main/jython/tests/driver/__init__.py
new file mode 100644
index 0000000..6df1100
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/driver/__init__.py
@@ -0,0 +1,20 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
new file mode 100644
index 0000000..6df1100
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -0,0 +1,20 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/tests/structure/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/__init__.py b/gremlin-python/src/main/jython/tests/structure/__init__.py
new file mode 100644
index 0000000..6df1100
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/structure/__init__.py
@@ -0,0 +1,20 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/tests/structure/io/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/io/__init__.py b/gremlin-python/src/main/jython/tests/structure/io/__init__.py
new file mode 100644
index 0000000..6df1100
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/structure/io/__init__.py
@@ -0,0 +1,20 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/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
new file mode 100644
index 0000000..6f38f82
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/structure/io/test_graphson.py
@@ -0,0 +1,61 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
+
+import unittest
+import json
+from unittest import TestCase
+
+from gremlin_python.structure.io.graphson import GraphSONReader
+
+
+class TestGraphSON(TestCase):
+    def test_numbers(self):
+        x = GraphSONReader.readObject(json.dumps({
+            "@type": "g:Int32",
+            "@value": 31
+        }))
+        assert isinstance(x, int)
+        assert 31 == x
+        ##
+        x = GraphSONReader.readObject(json.dumps({
+            "@type": "g:Int64",
+            "@value": 31
+        }))
+        assert isinstance(x, long)
+        assert 31L == x
+        ##
+        x = GraphSONReader.readObject(json.dumps({
+            "@type": "g:Float",
+            "@value": 31.3
+        }))
+        assert isinstance(x, float)
+        assert 31.3 == x
+        ##
+        x = GraphSONReader.readObject(json.dumps({
+            "@type": "g:Double",
+            "@value": 31.2
+        }))
+        assert isinstance(x, float)
+        assert 31.2 == x
+
+
+if __name__ == '__main__':
+    unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/tests/test_sample.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/test_sample.py b/gremlin-python/src/main/jython/tests/test_sample.py
deleted file mode 100644
index f362317..0000000
--- a/gremlin-python/src/main/jython/tests/test_sample.py
+++ /dev/null
@@ -1,25 +0,0 @@
-'''
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-'''
-import unittest
-
-def fun(x):
-    return x + 1
-
-def test_answer():
-    assert fun(3) == 4
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1652bd65/gremlin-python/src/main/jython/tests/test_statics.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/test_statics.py b/gremlin-python/src/main/jython/tests/test_statics.py
new file mode 100644
index 0000000..6893b6a
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/test_statics.py
@@ -0,0 +1,46 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
+
+import unittest
+from unittest import TestCase
+
+from gremlin_python import statics
+from gremlin_python.process.traversal import Cardinality
+from gremlin_python.process.traversal import P
+from gremlin_python.process.traversal import Pop
+
+
+class TestStatics(TestCase):
+    def test_enums(self):
+        assert isinstance(_list, Cardinality)
+        assert _list is Cardinality._list
+        #
+        assert isinstance(eq(2), P)
+        assert eq(2) == P.eq(2)
+        #
+        assert isinstance(first, Pop)
+        assert first == Pop.first
+
+
+if __name__ == '__main__':
+    statics.load_statics(globals())
+    unittest.main()
+    statics.unload_statics(globals())


[26/50] [abbrv] tinkerpop git commit: added gremlin-server-modern-secure-py to the test resources of gremlin-python for testing authentification. added DriverConnectionTest which uses bash python to test Gremlin-Python (CPython). Basic tests to ensure th

Posted by sp...@apache.org.
added gremlin-server-modern-secure-py to the test resources of gremlin-python for testing authentification. added DriverConnectionTest which uses bash python to test Gremlin-Python (CPython). Basic tests to ensure that the protocol works.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b4b8679e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b4b8679e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b4b8679e

Branch: refs/heads/master
Commit: b4b8679eddc657dc7cf408b025df960aa33eedda
Parents: 901ecb6
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 14:19:01 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 14:19:01 2016 -0600

----------------------------------------------------------------------
 .../driver/DriverRemoteConnectionTest.java      |  2 +-
 .../python/driver/gremlin-server-modern-py.yaml | 66 --------------------
 .../driver/gremlin-server-modern-secure-py.yaml | 66 ++++++++++++++++++++
 3 files changed, 67 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b4b8679e/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
index f12d986..518c303 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
@@ -52,7 +52,7 @@ public class DriverRemoteConnectionTest {
             PYTHON_EXISTS = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("python --version").getErrorStream())).lines().filter(line -> line.trim().startsWith("Python ")).findAny().isPresent();
             System.out.println("Python exists: " + PYTHON_EXISTS);
             if (PYTHON_EXISTS)
-                new GremlinServer(Settings.read(DriverRemoteConnectionTest.class.getResourceAsStream("gremlin-server-modern-py.yaml"))).start().join();
+                new GremlinServer(Settings.read(DriverRemoteConnectionTest.class.getResourceAsStream("gremlin-server-modern-secure-py.yaml"))).start().join();
         } catch (final Exception ex) {
             ex.printStackTrace();
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b4b8679e/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml
deleted file mode 100644
index a1b28a9..0000000
--- a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-py.yaml
+++ /dev/null
@@ -1,66 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Note that TinkerPop does not include gremlin-python dependencies in
-# its distributions. This file cannot be used as a configuration file
-# to Gremlin Server unless those dependencies are installed on the
-# Gremlin Server path with:
-#
-# bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python x.y.z
-#
-# The primary change in this file to enable the GremlinJythonScriptEngine
-# is the addition of "gremlin-jython" to the "scriptEngines" field.
-
-host: localhost
-port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
-scriptEvaluationTimeout: 30000
-graphs: {
-  graph: src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties}
-plugins:
-  - tinkerpop.tinkergraph
-scriptEngines: {
-  gremlin-groovy: {
-    imports: [java.lang.Math],
-    staticImports: [java.lang.Math.PI],
-    scripts: [src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy]},
-  gremlin-jython: {},
-  gremlin-python: {}
-}
-serializers:
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { useMapperFromGraph: graph }}            # application/vnd.gremlin-v1.0+gryo
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}        # application/vnd.gremlin-v1.0+gryo-stringd
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
-metrics: {
-  slf4jReporter: {enabled: true, interval: 180000}}
-strictTransactionManagement: false
-threadPoolBoss: 1
-maxInitialLineLength: 4096
-maxHeaderSize: 8192
-maxChunkSize: 8192
-maxContentLength: 65536
-maxAccumulationBufferComponents: 1024
-resultIterationBatchSize: 64
-authentication: {
-  className: org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator,
-  config: {
-    credentialsDb: src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties}}
-

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b4b8679e/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml
new file mode 100644
index 0000000..a1b28a9
--- /dev/null
+++ b/gremlin-python/src/test/resources/org/apache/tinkerpop/gremlin/python/driver/gremlin-server-modern-secure-py.yaml
@@ -0,0 +1,66 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Note that TinkerPop does not include gremlin-python dependencies in
+# its distributions. This file cannot be used as a configuration file
+# to Gremlin Server unless those dependencies are installed on the
+# Gremlin Server path with:
+#
+# bin/gremlin-server.sh -i org.apache.tinkerpop gremlin-python x.y.z
+#
+# The primary change in this file to enable the GremlinJythonScriptEngine
+# is the addition of "gremlin-jython" to the "scriptEngines" field.
+
+host: localhost
+port: 8182
+threadPoolWorker: 1
+gremlinPool: 8
+scriptEvaluationTimeout: 30000
+graphs: {
+  graph: src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-empty.properties}
+plugins:
+  - tinkerpop.tinkergraph
+scriptEngines: {
+  gremlin-groovy: {
+    imports: [java.lang.Math],
+    staticImports: [java.lang.Math.PI],
+    scripts: [src/test/resources/org/apache/tinkerpop/gremlin/python/driver/generate-modern.groovy]},
+  gremlin-jython: {},
+  gremlin-python: {}
+}
+serializers:
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { useMapperFromGraph: graph }}            # application/vnd.gremlin-v1.0+gryo
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}        # application/vnd.gremlin-v1.0+gryo-stringd
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
+metrics: {
+  slf4jReporter: {enabled: true, interval: 180000}}
+strictTransactionManagement: false
+threadPoolBoss: 1
+maxInitialLineLength: 4096
+maxHeaderSize: 8192
+maxChunkSize: 8192
+maxContentLength: 65536
+maxAccumulationBufferComponents: 1024
+resultIterationBatchSize: 64
+authentication: {
+  className: org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator,
+  config: {
+    credentialsDb: src/test/resources/org/apache/tinkerpop/gremlin/python/driver/tinkergraph-credentials.properties}}
+


[12/50] [abbrv] tinkerpop git commit: fixed authentification code in driver_remoteconnection

Posted by sp...@apache.org.
fixed authentification code in driver_remoteconnection


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/cb9d46a7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/cb9d46a7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/cb9d46a7

Branch: refs/heads/master
Commit: cb9d46a754b6d7ec1d6fce4e4626deabcc1c1fc0
Parents: 952c1c7
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 15:41:09 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 15:41:09 2016 -0600

----------------------------------------------------------------------
 .../driver/driver_remote_connection.py          | 41 +++++++++-----------
 1 file changed, 19 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cb9d46a7/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 58342a2..3651ec8 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -115,8 +115,7 @@ class DriverRemoteConnection(RemoteConnection):
                 "aliases": {"g": self.traversal_source}
             }
         }
-        message = self._finalize_message(message)
-        return message
+        return DriverRemoteConnection._finalize_message(message)
 
     def _get_sideEffect_keys_message(self, request_id):
         message = {
@@ -133,8 +132,7 @@ class DriverRemoteConnection(RemoteConnection):
                 }
             }
         }
-        message = self._finalize_message(message)
-        return message
+        return DriverRemoteConnection._finalize_message(message)
 
     def _get_sideEffect_value_message(self, request_id, key):
         message = {
@@ -153,24 +151,10 @@ class DriverRemoteConnection(RemoteConnection):
                 "aliases": {"g": self.traversal_source}
             }
         }
-        message = self._finalize_message(message)
-        return message
+        return DriverRemoteConnection._finalize_message(message)
 
-    def _authenticate(self, username, password, processor):
-        auth = b"".join([b"\x00", username.encode("utf-8"),
-                         b"\x00", password.encode("utf-8")])
-        message = {
-            "requestId": str(uuid.uuid4()),
-            "op": "authentication",
-            "processor": "",
-            "args": {
-                "sasl": base64.b64encode(auth).decode()
-            }
-        }
-        message = self._finalize_message(message)
-        self._ws.send_message(message, binary=True)
-
-    def _finalize_message(self, message):
+    @staticmethod
+    def _finalize_message(message):
         message = json.dumps(message)
         mime_type = b"application/vnd.gremlin-v2.0+json"
         mime_len = b"\x21"
@@ -184,6 +168,19 @@ class Response:
         self._username = username
         self._password = password
 
+    def _authenticate(self, username, password):
+        auth = b"".join([b"\x00", username.encode("utf-8"),
+                         b"\x00", password.encode("utf-8")])
+        message = {
+            "requestId": str(uuid.uuid4()),
+            "op": "authentication",
+            "processor": "traversal",
+            "args": {
+                "sasl": base64.b64encode(auth).decode()
+            }
+        }
+        self._ws.send_message(DriverRemoteConnection._finalize_message(message), binary=True)
+
     @gen.coroutine
     def receive(self):
         if self._closed:
@@ -197,7 +194,7 @@ class Response:
         aggregateTo = "list" if "aggregateTo" not in meta else meta["aggregateTo"]
 
         if status_code == 407:
-            self._authenticate(self._username, self._password, self._processor)
+            self._authenticate(self._username, self._password)
             yield self.receive()
         elif status_code == 204:
             self._closed = True


[30/50] [abbrv] tinkerpop git commit: Add testing framework for native python based tests.

Posted by sp...@apache.org.
Add testing framework for native python based tests.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/18e3d64c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/18e3d64c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/18e3d64c

Branch: refs/heads/master
Commit: 18e3d64ca08c5f74d4aba4481deee5155cadd50c
Parents: e75ca23
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 25 16:47:11 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Aug 25 16:47:11 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml                          |   70 +-
 gremlin-python/src/main/jython/runtest.py       | 2892 ++++++++++++++++++
 gremlin-python/src/main/jython/setup.cfg        |    5 +-
 gremlin-python/src/main/jython/setup.py         |   17 +-
 .../src/main/jython/tests/test_sample.py        |   25 +
 5 files changed, 3002 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/18e3d64c/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 3d45a07..9a6d75b 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -71,6 +71,11 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+    <properties>
+        <!-- provide a way to convert maven.test.skip value to skipTests for use in skipping python tests -->
+        <maven.test.skip>false</maven.test.skip>
+        <skipTests>${maven.test.skip}</skipTests>
+    </properties>
     <build>
         <directory>${basedir}/target</directory>
         <finalName>${project.artifactId}-${project.version}</finalName>
@@ -87,13 +92,33 @@
             </testResource>
         </testResources>
         <plugins>
+            <!-- need to create python-reports directory at this point or else pytest can't write the report to it -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>createThriftDir</id>
+                        <phase>process-resources</phase>
+                        <configuration>
+                            <tasks>
+                                <delete dir="${build.directory}/python-reports"/>
+                                <mkdir dir="${build.directory}/python-reports"/>
+                            </tasks>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>
                 <version>1.2.1</version>
                 <executions>
                     <execution>
-                        <id>generatePython</id>
+                        <id>generate-python</id>
                         <phase>generate-test-resources</phase>
                         <goals>
                             <goal>java</goal>
@@ -107,19 +132,56 @@
                         </configuration>
                     </execution>
                     <execution>
-                        <id>buildPython</id>
+                        <id>build-python</id>
                         <phase>generate-test-resources</phase>
                         <goals>
                             <goal>exec</goal>
                         </goals>
                         <configuration>
                             <executable>python</executable>
-                            <async>true</async>
-                            <workingDirectory>${basedir}/src/main/jython</workingDirectory>
+                            <workingDirectory>${basedir}/target/python</workingDirectory>
                             <commandlineArgs>setup.py build --build-lib ${project.build.testOutputDirectory}/Lib
                             </commandlineArgs>
                         </configuration>
                     </execution>
+                    <!-- use pytest to execute native python tests - output of xunit output is configured in setup.cfg -->
+                    <execution>
+                        <id>test-python</id>
+                        <phase>generate-test-resources</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                        <configuration>
+                            <executable>python</executable>
+                            <workingDirectory>${basedir}/target/python</workingDirectory>
+                            <skip>${skipTests}</skip>
+                            <arguments>
+                                <argument>setup.py</argument>
+                                <argument>test</argument>
+                            </arguments>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-py-files-to-target</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/python</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/src/main/jython</directory>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
             <plugin>


[16/50] [abbrv] tinkerpop git commit: more GroovyTranslatorTest to jsr223.

Posted by sp...@apache.org.
more GroovyTranslatorTest to jsr223.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/af4f9237
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/af4f9237
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/af4f9237

Branch: refs/heads/master
Commit: af4f9237fc59e7432b2a758fb56d2d3dc83b03cc
Parents: d5ff0ad
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 06:21:12 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 06:21:25 2016 -0600

----------------------------------------------------------------------
 .../gremlin/groovy/GroovyEnvironmentSuite.java  |  1 +
 .../gremlin/groovy/GroovyTranslatorTest.java    | 90 --------------------
 .../groovy/jsr223/GroovyTranslatorTest.java     | 90 ++++++++++++++++++++
 3 files changed, 91 insertions(+), 90 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/af4f9237/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
index 05699c1..be89f65 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
@@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngineOverG
 import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngineSandboxCustomTest;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngineSandboxedStandardTest;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngineTinkerPopSandboxTest;
+import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslatorTest;
 import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader;
 import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoaderTest;
 import org.apache.tinkerpop.gremlin.groovy.plugin.dsl.credential.CredentialGraphTest;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/af4f9237/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
deleted file mode 100644
index 15d7667..0000000
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.tinkerpop.gremlin.groovy;
-
-import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
-import org.apache.tinkerpop.gremlin.LoadGraphWith;
-import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslator;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class GroovyTranslatorTest extends AbstractGremlinTest {
-
-    @Test
-    @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
-    public void shouldSupportStringSupplierLambdas() throws Exception {
-        GraphTraversalSource g = graph.traversal();
-        g = g.withStrategies(new TranslationStrategy(g, GroovyTranslator.of("g")));
-        GraphTraversal.Admin<Vertex, Integer> t = g.withSideEffect("lengthSum", 0).withSack(1)
-                .V()
-                .filter(Lambda.predicate("it.get().label().equals('person')"))
-                .flatMap(Lambda.function("it.get().vertices(Direction.OUT)"))
-                .map(Lambda.<Traverser<Object>, Integer>function("it.get().value('name').length()"))
-                .sideEffect(Lambda.consumer("{ x -> x.sideEffects(\"lengthSum\", x.<Integer>sideEffects('lengthSum') + x.get()) }"))
-                .order().by(Lambda.comparator("a,b -> a <=> b"))
-                .sack(Lambda.biFunction("{ a,b -> a + b }"))
-                .asAdmin();
-        final List<Integer> sacks = new ArrayList<>();
-        final List<Integer> lengths = new ArrayList<>();
-        while (t.hasNext()) {
-            final Traverser.Admin<Integer> traverser = t.nextTraverser();
-            sacks.add(traverser.sack());
-            lengths.add(traverser.get());
-        }
-        assertFalse(t.hasNext());
-        //
-        assertEquals(6, lengths.size());
-        assertEquals(3, lengths.get(0).intValue());
-        assertEquals(3, lengths.get(1).intValue());
-        assertEquals(3, lengths.get(2).intValue());
-        assertEquals(4, lengths.get(3).intValue());
-        assertEquals(5, lengths.get(4).intValue());
-        assertEquals(6, lengths.get(5).intValue());
-        ///
-        assertEquals(6, sacks.size());
-        assertEquals(4, sacks.get(0).intValue());
-        assertEquals(4, sacks.get(1).intValue());
-        assertEquals(4, sacks.get(2).intValue());
-        assertEquals(5, sacks.get(3).intValue());
-        assertEquals(6, sacks.get(4).intValue());
-        assertEquals(7, sacks.get(5).intValue());
-        //
-        assertEquals(24, t.getSideEffects().<Number>get("lengthSum").intValue());
-    }
-
-    @Test
-    public void shouldHaveValidToString() {
-        assertEquals("translator[h:gremlin-groovy]", GroovyTranslator.of("h").toString());
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/af4f9237/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
new file mode 100644
index 0000000..8060d39
--- /dev/null
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
@@ -0,0 +1,90 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.groovy.jsr223;
+
+import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.groovy.jsr223.GroovyTranslator;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.util.function.Lambda;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class GroovyTranslatorTest extends AbstractGremlinTest {
+
+    @Test
+    @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+    public void shouldSupportStringSupplierLambdas() throws Exception {
+        GraphTraversalSource g = graph.traversal();
+        g = g.withStrategies(new TranslationStrategy(g, GroovyTranslator.of("g")));
+        GraphTraversal.Admin<Vertex, Integer> t = g.withSideEffect("lengthSum", 0).withSack(1)
+                .V()
+                .filter(Lambda.predicate("it.get().label().equals('person')"))
+                .flatMap(Lambda.function("it.get().vertices(Direction.OUT)"))
+                .map(Lambda.<Traverser<Object>, Integer>function("it.get().value('name').length()"))
+                .sideEffect(Lambda.consumer("{ x -> x.sideEffects(\"lengthSum\", x.<Integer>sideEffects('lengthSum') + x.get()) }"))
+                .order().by(Lambda.comparator("a,b -> a <=> b"))
+                .sack(Lambda.biFunction("{ a,b -> a + b }"))
+                .asAdmin();
+        final List<Integer> sacks = new ArrayList<>();
+        final List<Integer> lengths = new ArrayList<>();
+        while (t.hasNext()) {
+            final Traverser.Admin<Integer> traverser = t.nextTraverser();
+            sacks.add(traverser.sack());
+            lengths.add(traverser.get());
+        }
+        assertFalse(t.hasNext());
+        //
+        assertEquals(6, lengths.size());
+        assertEquals(3, lengths.get(0).intValue());
+        assertEquals(3, lengths.get(1).intValue());
+        assertEquals(3, lengths.get(2).intValue());
+        assertEquals(4, lengths.get(3).intValue());
+        assertEquals(5, lengths.get(4).intValue());
+        assertEquals(6, lengths.get(5).intValue());
+        ///
+        assertEquals(6, sacks.size());
+        assertEquals(4, sacks.get(0).intValue());
+        assertEquals(4, sacks.get(1).intValue());
+        assertEquals(4, sacks.get(2).intValue());
+        assertEquals(5, sacks.get(3).intValue());
+        assertEquals(6, sacks.get(4).intValue());
+        assertEquals(7, sacks.get(5).intValue());
+        //
+        assertEquals(24, t.getSideEffects().<Number>get("lengthSum").intValue());
+    }
+
+    @Test
+    public void shouldHaveValidToString() {
+        assertEquals("translator[h:gremlin-groovy]", GroovyTranslator.of("h").toString());
+    }
+}


[04/50] [abbrv] tinkerpop git commit: A few tweaks to GraphSON format.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/data/grateful-dead-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead-v2d0-typed.json b/data/grateful-dead-v2d0-typed.json
index 3b24d37..5163a63 100644
--- a/data/grateful-dead-v2d0-typed.json
+++ b/data/grateful-dead-v2d0-typed.json
@@ -1,808 +1,808 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3059},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":276},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3704},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4383},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@
 value":2}}},{"id":{"@type":"gremlin:int32","@value":2},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4},"inV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7612},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7611},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"HEY BO DIDDLEY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":2},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":5}}]}}
-{"id":{"@type":"gremlin:int32","@value":2},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":323},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6190},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6191},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7666},"inV":{"@type":"gremlin:int32","@value":525}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7665},"inV":{"@type":"gremlin:int32","@value":525}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"IM 
 A MAN"}],"songType":[{"id":{"@type":"gremlin:int64","@value":5},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":4},"value":{"@type":"gremlin:int32","@value":1}}]}}
-{"id":{"@type":"gremlin:int32","@value":3},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":1},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2051},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":1412},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6669},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":526},"outV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":910},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id"
 :{"@type":"gremlin:int32","@value":1166},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6286},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":273},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":2194},"outV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1684},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1941},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3221},"outV":{"@type":"gremlin:int32","@va
 lue":63},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2712},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6425},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5787},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5148},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6692},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6310},"outV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":6448},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2225},"outV":{"@type":"gremlin:int32","@value":226},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5042},"outV":{"@type":"gremlin:int32","@value":209},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4789},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1464},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2232},"outV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4665},"outV":{"@type":"gremlin:int32",
 "@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2235},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":163}}},{"id":{"@type":"gremlin:int32","@value":6208},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":706},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":835},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5188},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1862},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}}
 ,{"id":{"@type":"gremlin:int32","@value":1735},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6343},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4937},"outV":{"@type":"gremlin:int32","@value":277},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3276},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3149},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1358},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":4304},"outV":{"@type":"gremlin:in
 t32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1105},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":722},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4182},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1499},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2397},"outV":{"@type":"gremlin:int32","@value":179},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":351},"outV":{"@type":"gremlin:int32","@value":178},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":6623},"outV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2018},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7011},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5348},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2278},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":1255},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3048},"outV":{"@type":"gremlin:in
 t32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":5867},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":116}}},{"id":{"@type":"gremlin:int32","@value":364},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":492},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3948},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4335},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3312},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":
 1}}},{"id":{"@type":"gremlin:int32","@value":5745},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4596},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5367},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":633},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":891},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5375},"outV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6143},"outV":{"@type":"gremlin:in
 t32","@value":289},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3712},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3713},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3714},"inV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3715},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3716},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3717},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"grem
 lin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3718},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3719},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3720},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3721},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":54}}},{"id":{"@type":"gremlin:int32","@value":3722},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3723},"inV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3724},"inV":{
 "@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3725},"inV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3726},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3727},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":37}}},{"id":{"@type":"gremlin:int32","@value":3728},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3729},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3730},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:i
 nt32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3731},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3732},"inV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3733},"inV":{"@type":"gremlin:int32","@value":211},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3734},"inV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3735},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3736},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3737},"inV":{"@type":
 "gremlin:int32","@value":320},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3738},"inV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3739},"inV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3740},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3741},"inV":{"@type":"gremlin:int32","@value":128},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3742},"inV":{"@type":"gremlin:int32","@value":315},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3743},"inV":{"@type":"gremlin:int32","@value":261},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":1}}},{"id":{"@type":"gremlin:int32","@value":3744},"inV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3745},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3746},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3747},"inV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":14}}},{"id":{"@type":"gremlin:int32","@value":3748},"inV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3749},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":3750},"inV":{"@type":"gremlin
 :int32","@value":309},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3751},"inV":{"@type":"gremlin:int32","@value":131},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3752},"inV":{"@type":"gremlin:int32","@value":151},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3753},"inV":{"@type":"gremlin:int32","@value":321},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3754},"inV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3755},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3756},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":3757},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3758},"inV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3759},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3760},"inV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3761},"inV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3762},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3763},"inV":{"@type":"gremlin:int32","@v
 alue":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3764},"inV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3765},"inV":{"@type":"gremlin:int32","@value":185},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3766},"inV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3767},"inV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3768},"inV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3769},"inV":{"@type":"gremlin:int32","@value":193},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":
 {"@type":"gremlin:int32","@value":3770},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3771},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3772},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3773},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3774},"inV":{"@type":"gremlin:int32","@value":240},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3775},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3776},"inV":{"@type":"gremlin:int32","@value":9},
 "properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3777},"inV":{"@type":"gremlin:int32","@value":259},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3694},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":3695},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":30}}},{"id":{"@type":"gremlin:int32","@value":3696},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3697},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3698},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"grem
 lin:int32","@value":3699},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3700},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3701},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3702},"inV":{"@type":"gremlin:int32","@value":317},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3703},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3704},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3705},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"
 weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3706},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3707},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3708},"inV":{"@type":"gremlin:int32","@value":318},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3709},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3710},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3711},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}}],"sungBy":[{"id":{"@type":"gremli
 n:int32","@value":7808},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7807},"inV":{"@type":"gremlin:int32","@value":671}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"NOT FADE AWAY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":8},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":531}}]}}
-{"id":{"@type":"gremlin:int32","@value":4},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":128},"outV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1664},"outV":{"@type":"gremlin:int32","@value":267},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":899},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1667},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4099},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":1156},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":773},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6534},"outV":{"@type":"gremlin:int32","@value":242},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1032},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6664},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5129},"outV":{"@type":"gremlin:int32","@value":222},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5387},"outV":{"@type":"gremlin:int32",
 "@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5517},"outV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5006},"outV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6030},"outV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2063},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":915},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6940},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id
 ":{"@type":"gremlin:int32","@value":2464},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5795},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3620},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4772},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":25}}},{"id":{"@type":"gremlin:int32","@value":2982},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3367},"outV":{"@type":"gremlin:int32","@value":184},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":2345},"outV":{"@type":"gremlin:int32","@
 value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2861},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1840},"outV":{"@type":"gremlin:int32","@value":275},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5425},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":180},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":46}}},{"id":{"@type":"gremlin:int32","@value":2613},"outV":{"@type":"gremlin:int32","@value":158},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5434},"outV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":5562},"outV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1469},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":446},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":2494},"outV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3266},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":326},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":583},"outV":{"@type":"gremlin:int32","@
 value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6855},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":73},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4425},"outV":{"@type":"gremlin:int32","@value":212},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1613},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4941},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6350},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":3535},"outV":{"@type":"gremlin:int32","@value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":980},"outV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1494},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5206},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5847},"outV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6490},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2781},"outV":{"@type":"gremlin:int32","@v
 alue":15},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5600},"outV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":353},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5474},"outV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1891},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":3811},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5989},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id"
 :{"@type":"gremlin:int32","@value":4327},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2538},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3050},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4970},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2283},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":236},"outV":{"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6126},"outV":{"@type":"gremlin:int32","@
 value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5232},"outV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4594},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1652},"outV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4084},"outV":{"@type":"gremlin:int32","@value":109},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":629},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3701},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id
 ":{"@type":"gremlin:int32","@value":5621},"outV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7029},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5238},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2684},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":3325},"outV":{"@type":"gremlin:int32","@value":268},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5120},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5121},"inV":{"@type
 ":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5122},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5123},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5071},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5072},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":5073},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5074},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@va
 lue":9}}},{"id":{"@type":"gremlin:int32","@value":5075},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":63}}},{"id":{"@type":"gremlin:int32","@value":5076},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":5077},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5078},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5079},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":5080},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5081},"inV":{"@type":"gremlin:in
 t32","@value":16},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5082},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5083},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5084},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5085},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5086},"inV":{"@type":"gremlin:int32","@value":112},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5087},"inV":{"@type":"gremlin:int32","@value":121},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"i
 d":{"@type":"gremlin:int32","@value":5088},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":5089},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5090},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":77}}},{"id":{"@type":"gremlin:int32","@value":5091},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5092},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5093},"inV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5094},"inV":{"@type":"gremlin:int32","@value"
 :76},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5095},"inV":{"@type":"gremlin:int32","@value":181},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5096},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5097},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5098},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5099},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5100},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":
 "gremlin:int32","@value":5101},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5102},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5103},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5104},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5105},"inV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5106},"inV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5107},"inV":{"@type":"gremlin:int32","@value":114},"proper
 ties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5108},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5109},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5110},"inV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5111},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5112},"inV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5113},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32
 ","@value":5114},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5115},"inV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5116},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5117},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5118},"inV":{"@type":"gremlin:int32","@value":169},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5119},"inV":{"@type":"gremlin:int32","@value":118},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7064},"inV":{"@type":"gremlin:int32","@value":340}}],"writte
 nBy":[{"id":{"@type":"gremlin:int32","@value":7063},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":9},"value":"BERTHA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":11},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":10},"value":{"@type":"gremlin:int32","@value":394}}]}}
-{"id":{"@type":"gremlin:int32","@value":5},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":194},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":962},"outV":{"@type":"gremlin:int32","@value":67},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5446},"outV":{"@type":"gremlin:int32","@value":231},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6344},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1738},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":6666},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1867},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4300},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":847},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2832},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6032},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1170},"outV":{"@type":"gremlin:int32","@
 value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5330},"outV":{"@type":"gremlin:int32","@value":238},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1491},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1429},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3033},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6298},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1373},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"
 id":{"@type":"gremlin:int32","@value":4447},"outV":{"@type":"gremlin:int32","@value":113},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5151},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5343},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6431},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1953},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":1634},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2274},"outV":{"@type":"gremlin:int
 32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":100},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":933},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2021},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6694},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4009},"outV":{"@type":"gremlin:int32","@value":225},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":682},"outV":{"@type":"gremlin:int32","@value":219},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}
 ,{"id":{"@type":"gremlin:int32","@value":3694},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":4718},"outV":{"@type":"gremlin:int32","@value":186},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":3055},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":2480},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2736},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5426},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6899},"outV":{"@type":"gremlin:int3
 2","@value":147},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5879},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":22}}},{"id":{"@type":"gremlin:int32","@value":6201},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5370},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":700},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2236},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4604},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":2}
 }},{"id":{"@type":"gremlin:int32","@value":5759},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":273},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":274},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":275},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":276},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":277},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":278},"inV":{"@type":
 "gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":279},"inV":{"@type":"gremlin:int32","@value":133},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":280},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":281},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":282},"inV":{"@type":"gremlin:int32","@value":159},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":283},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":284},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1
 9}}},{"id":{"@type":"gremlin:int32","@value":285},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":286},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":287},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":288},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":289},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":290},"inV":{"@type":"gremlin:int32","@value":116},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":291},"inV":{"@type":"gremlin:int32","@val
 ue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":292},"inV":{"@type":"gremlin:int32","@value":65},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":293},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":294},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":295},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":296},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":297},"inV":{"@type":"gremlin:int32","@value":161},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":
 "gremlin:int32","@value":298},"inV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":299},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":300},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":301},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":302},"inV":{"@type":"gremlin:int32","@value":163},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":303},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":304},"inV":{"@type":"gremlin:int32","@value":85},"properties":
 {"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":305},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":306},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":307},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":308},"inV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":309},"inV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":310},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value
 ":311},"inV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7582},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7581},"inV":{"@type":"gremlin:int32","@value":446}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":12},"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":{"@type":"gremlin:int64","@value":14},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":13},"value":{"@type":"gremlin:int32","@value":293}}]}}
-{"id":{"@type":"gremlin:int32","@value":6},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2023},"outV":{"@type":"gremlin:int32","@value":282},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2406},"inV":{"@type":"gremlin:int32","@value":293},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2407},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7782},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7781},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":15},"value":"
 MONA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":17},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":16},"value":{"@type":"gremlin:int32","@value":1}}]}}
-{"id":{"@type":"gremlin:int32","@value":7},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2607},"outV":{"@type":"gremlin:int32","@value":295},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5},"inV":{"@type":"gremlin:int32","@value":8},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":18},"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":20},"value":""}],"performances":[{"id":{"@type":"gremlin:int64","@value":19},"value":{"@type":"gremlin:int32","@value":0}}]}}
-{"id":{"@type":"gremlin:int32","@value":8},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4705},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5901},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2976},"inV":{"@type":"gremlin:int32","@value":302},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2977},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2978},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:in
 t32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7814},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7813},"inV":{"@type":"gremlin:int32","@value":674}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":21},"value":"OH BOY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":23},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":22},"value":{"@type":"gremlin:int32","@value":2}}]}}
-{"id":{"@type":"gremlin:int32","@value":9},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3776},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":65},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1923},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5956},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3077},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5832},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":1161},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":2699},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6539},"outV":{"@type":"gremlin:int32","@value":55},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6667},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2578},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":787},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3542},"outV":{"@type":"gremlin:int32","@
 value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2775},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":2840},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4953},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1572},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":229},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"outV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":4969},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3498},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5226},"outV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5548},"outV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2990},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3950},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2488},"outV":{"@type":"gremlin:int32","@
 value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6776},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3641},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1532},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1853},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":638},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6335},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"out
 E":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value"
 :16},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":20},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32"
 ,"@value":19},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":28},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremli
 n:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":27},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":28},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":29},"inV":{"@type":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":30},"inV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":31},"inV":{"@type":"gremlin:int32","@value":35},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":32},"inV":{"@type":"gremlin:int32"
 ,"@value":36},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":33},"inV":{"@type":"gremlin:int32","@value":37},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":34},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":35},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":36},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":37},"inV":{"@type":"gremlin:int32","@value":41},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":38},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"greml
 in:int32","@value":39},"inV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7190},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7189},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":24},"value":"HERE COMES SUNSHINE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":26},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":25},"value":{"@type":"gremlin:int32","@value":65}}]}}
-{"id":{"@type":"gremlin:int32","@value":10},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3841},"outV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1027},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3335},"outV":{"@type":"gremlin:int32","@value":155},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4103},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6279},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":4233},"outV":{"@type":"gremlin:int32","@value":52},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4878},"outV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":5264},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2196},"outV":{"@type":"gremlin:int32","@value":75},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":151},"outV":{"@type":"gremlin:int32","@value":108},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1571},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3619},"outV":{"@type":"gremlin:int32","
 @value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3237},"outV":{"@type":"gremlin:int32","@value":63},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4647},"outV":{"@type":"gremlin:int32","@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4521},"outV":{"@type":"gremlin:int32","@value":105},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1195},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6444},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6956},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":687},"outV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4784},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6064},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1714},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3890},"outV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":55},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5175},"outV":{"@type":"gremlin:int32","@v
 alue":71},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1337},"outV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1083},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4155},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6077},"outV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5441},"outV":{"@type":"gremlin:int32","@value":239},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1987},"outV":{"@type":"gremlin:int32","@value":152},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id
 ":{"@type":"gremlin:int32","@value":1860},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2116},"outV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3269},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":454},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3142},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2505},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":6603},"outV":{"@type":"gremlin:int32","@v
 alue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6859},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":717},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":1360},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3026},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5972},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5077},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{
 "@type":"gremlin:int32","@value":2392},"outV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1250},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4706},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6755},"outV":{"@type":"gremlin:int32","@value":53},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":485},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2917},"outV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3559},"outV":{"@type":"gremlin:int32","@valu
 e":56},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":3436},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3820},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4463},"outV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":880},"outV":{"@type":"gremlin:int32","@value":189},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6256},"outV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3698},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{
 "@type":"gremlin:int32","@value":2035},"outV":{"@type":"gremlin:int32","@value":180},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2291},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3317},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2806},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2427},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6782},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4351},"outV":{"@type":"gremlin:int32","@valu
 e":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4235},"inV":{"@type":"gremlin:int32","@value":56},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4236},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":4237},"inV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":4238},"inV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":4239},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4240},"inV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":21}}},{"id":{"@type":"gremlin:int32","@value":4241},"inV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4242},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4243},"inV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":4244},"inV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4245},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4246},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4247},"inV":{"@type":"gremlin:i
 nt32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4248},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4249},"inV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4250},"inV":{"@type":"gremlin:int32","@value":218},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4251},"inV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4252},"inV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4253},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}}
 ,{"id":{"@type":"gremlin:int32","@value":4254},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4255},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4256},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4257},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4258},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4259},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4260},"inV":{"@type":"gremlin:int32","@va
 lue":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4261},"inV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4262},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4263},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"inV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4265},"inV":{"@type":"gremlin:int32","@value":5

<TRUNCATED>

[21/50] [abbrv] tinkerpop git commit: driver_remote_connection has been simplified again and authentification fixed and working. ta-to-the-da.

Posted by sp...@apache.org.
driver_remote_connection has been simplified again and authentification fixed and working. ta-to-the-da.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d299cbcd
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d299cbcd
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d299cbcd

Branch: refs/heads/master
Commit: d299cbcd73db12fae9bafaf9714c47fff51876b2
Parents: ba8bb60
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 08:47:27 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 08:47:44 2016 -0600

----------------------------------------------------------------------
 .../driver/driver_remote_connection.py          | 199 +++++++++----------
 1 file changed, 95 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d299cbcd/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 50a9944..165eed6 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -16,6 +16,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 """
+import base64
 import json
 import uuid
 from tornado import gen
@@ -34,75 +35,26 @@ class GremlinServerError(Exception):
 
 
 class DriverRemoteConnection(RemoteConnection):
-    def __init__(self, url, traversal_source, loop=None, username="", password=""):
+    def __init__(self, url, traversal_source, username="", password="", loop=None):
         super(DriverRemoteConnection, self).__init__(url, traversal_source)
-        if loop is None:
-            self._loop = ioloop.IOLoop.current()
-        self._ws = self._loop.run_sync(lambda: websocket.websocket_connect(self.url))
         self._username = username
         self._password = password
-
-    def submit(self,
-               bytecode,
-               op="bytecode",
-               processor="traversal"):
+        if loop is None: self._loop = ioloop.IOLoop.current()
+        self._websocket = self._loop.run_sync(lambda: websocket.websocket_connect(self.url))
+
+    def submit(self, bytecode):
+        '''
+        :param bytecode: the bytecode of a traversal to submit to the RemoteConnection
+        :return: a RemoteTraversal with RemoteTraversalSideEffects
+        '''
         request_id = str(uuid.uuid4())
-        traversers = self._loop.run_sync(lambda: self.submit_traversal_bytecode(bytecode, request_id))
-        keys_lambda = lambda: self._loop.run_sync(lambda: self.submit_sideEffect_keys(request_id))
-        value_lambda = lambda key: self._loop.run_sync(lambda: self.submit_sideEffect_value(request_id, key))
-        return RemoteTraversal(iter(traversers), RemoteTraversalSideEffects(keys_lambda, value_lambda))
-
-    @gen.coroutine
-    def submit_traversal_bytecode(self, bytecode, request_id):
-        message = self._get_traversal_bytecode_message(bytecode, request_id)
-        traversers = yield self._execute_message(message)
-        raise gen.Return(traversers)
-
-    @gen.coroutine
-    def submit_sideEffect_keys(self, request_id):
-        message = self._get_sideEffect_keys_message(request_id)
-        keys = yield self._execute_message(message)
-        raise gen.Return(set(keys))
+        traversers = self._loop.run_sync(lambda: self.submit_traversal_bytecode(request_id, bytecode))
+        side_effect_keys = lambda: self._loop.run_sync(lambda: self.submit_sideEffect_keys(request_id))
+        side_effect_value = lambda key: self._loop.run_sync(lambda: self.submit_sideEffect_value(request_id, key))
+        return RemoteTraversal(iter(traversers), RemoteTraversalSideEffects(side_effect_keys, side_effect_value))
 
     @gen.coroutine
-    def submit_sideEffect_value(self, request_id, key):
-        message = self._get_sideEffect_value_message(request_id, key)
-        side_effects = yield self._execute_message(message)
-        raise gen.Return(side_effects)
-
-    @gen.coroutine
-    def _execute_message(self, message):
-        if self._ws.protocol is None:
-            self._ws = yield websocket.websocket_connect(self.url)
-        self._ws.write_message(message, binary=True)
-        resp = Response(self._ws, self._username, self._password)
-        results = None
-        while True:
-            msg = yield resp.receive()
-            if msg is None:
-                break
-            # on first message, get the right result data structure
-            if None == results:
-                if "list" == msg[0]:
-                    results = []
-                elif "set" == msg[0]:
-                    results = set()
-                elif "map" == msg[0]:
-                    results = {}
-                else:
-                    results = []
-            # updating a map is different than a list or a set
-            if isinstance(results, dict):
-                for item in msg[1]:
-                    results.update(item)
-            else:
-                results += msg[1]
-        raise gen.Return([] if None == results else results)
-
-    def close(self):
-        self._ws.close()
-
-    def _get_traversal_bytecode_message(self, bytecode, request_id):
+    def submit_traversal_bytecode(self, request_id, bytecode):
         message = {
             "requestId": {
                 "@type": "g:UUID",
@@ -115,9 +67,11 @@ class DriverRemoteConnection(RemoteConnection):
                 "aliases": {"g": self.traversal_source}
             }
         }
-        return DriverRemoteConnection._finalize_message(message)
+        traversers = yield self._execute_message(message)
+        raise gen.Return(traversers)
 
-    def _get_sideEffect_keys_message(self, request_id):
+    @gen.coroutine
+    def submit_sideEffect_keys(self, request_id):
         message = {
             "requestId": {
                 "@type": "g:UUID",
@@ -132,9 +86,11 @@ class DriverRemoteConnection(RemoteConnection):
                 }
             }
         }
-        return DriverRemoteConnection._finalize_message(message)
+        keys = yield self._execute_message(message)
+        raise gen.Return(set(keys))
 
-    def _get_sideEffect_value_message(self, request_id, key):
+    @gen.coroutine
+    def submit_sideEffect_value(self, request_id, key):
         message = {
             "requestId": {
                 "@type": "g:UUID",
@@ -151,60 +107,95 @@ class DriverRemoteConnection(RemoteConnection):
                 "aliases": {"g": self.traversal_source}
             }
         }
-        return DriverRemoteConnection._finalize_message(message)
+        value = yield self._execute_message(message)
+        raise gen.Return(value)
+
+    @gen.coroutine
+    def _execute_message(self, send_message):
+        send_message = b"".join([b"\x21",
+                                 b"application/vnd.gremlin-v2.0+json",
+                                 json.dumps(send_message).encode("utf-8")])
+        if self._websocket.protocol is None:
+            self._websocket = yield websocket.websocket_connect(self.url)
+        self._websocket.write_message(send_message, binary=True)
+        response = Response(self._websocket, self._username, self._password)
+        results = None
+        while True:
+            recv_message = yield response.receive()
+            if recv_message is None:
+                break
+
+            # on first message, get the right result data structure
+            if None == results:
+                if "list" == recv_message[0]:
+                    results = []
+                elif "set" == recv_message[0]:
+                    results = set()
+                elif "map" == recv_message[0]:
+                    results = {}
+                elif "none" == recv_message[0]:
+                    results = None
+                else:
+                    results = []
+
+            # if there is no update to a structure, then the item is the result
+            if results is None:
+                results = recv_message[1][0]
+            # updating a map is different than a list or a set
+            elif isinstance(results, dict):
+                for item in recv_message[1]:
+                    results.update(item)
+            # flat add list to result list
+            else:
+                results += recv_message[1]
+        raise gen.Return([] if None == results else results)
 
-    @staticmethod
-    def _finalize_message(message):
-        message = json.dumps(message)
-        mime_type = b"application/vnd.gremlin-v2.0+json"
-        mime_len = b"\x21"
-        return b"".join([mime_len, mime_type, message.encode("utf-8")])
+    def close(self):
+        self._websocket.close()
 
 
 class Response:
-    def __init__(self, ws, username, password):
-        self._ws = ws
-        self._closed = False
+    def __init__(self, websocket, username, password):
+        self._websocket = websocket
         self._username = username
         self._password = password
-
-    def _authenticate(self, username, password):
-        auth = b"".join([b"\x00", username.encode("utf-8"),
-                         b"\x00", password.encode("utf-8")])
-        message = {
-            "requestId": {
-                "@type": "g:UUID",
-                "@value": str(uuid.uuid4())
-            },
-            "op": "authentication",
-            "processor": "traversal",
-            "args": {
-                "sasl": base64.b64encode(auth).decode()
-            }
-        }
-        self._ws.send_message(DriverRemoteConnection._finalize_message(message), binary=True)
+        self._closed = False
 
     @gen.coroutine
     def receive(self):
         if self._closed:
             return
-        data = yield self._ws.read_message()
-        message = json.loads(data)
-        status_code = message["status"]["code"]
-        data = message["result"]["data"]
-        msg = message["status"]["message"]
-        meta = message["result"]["meta"]
-        aggregateTo = "list" if "aggregateTo" not in meta else meta["aggregateTo"]
+        recv_message = yield self._websocket.read_message()
+        recv_message = json.loads(recv_message)
+        status_code = recv_message["status"]["code"]
+        aggregateTo = recv_message["result"]["meta"].get("aggregateTo", "list")
 
+        # authentification required then
         if status_code == 407:
-            self._authenticate(self._username, self._password)
-            yield self.receive()
+            self._websocket.write_message(
+                b"".join([b"\x21",
+                          b"application/vnd.gremlin-v2.0+json",
+                          json.dumps({
+                              "requestId": {
+                                  "@type": "g:UUID",
+                                  "@value": str(uuid.uuid4())
+                              },
+                              "op": "authentication",
+                              "processor": "traversal",
+                              "args": {
+                                  "sasl": base64.b64encode(
+                                      b"".join([b"\x00", self._username.encode("utf-8"),
+                                                b"\x00", self._password.encode("utf-8")])).decode()
+                              }
+                          }).encode("utf-8")]), binary=True)
+            results = yield self.receive()
+            raise gen.Return(results)
         elif status_code == 204:
             self._closed = True
             return
         elif status_code in [200, 206]:
             results = []
-            for item in data:
+            for item in recv_message["result"]["data"]:
                 results.append(GraphSONReader._objectify(item))
             if status_code == 200:
                 self._closed = True
@@ -212,4 +203,4 @@ class Response:
         else:
             self._closed = True
             raise GremlinServerError(
-                "{0}: {1}".format(status_code, msg))
+                "{0}: {1}".format(status_code, recv_message["status"]["message"]))


[02/50] [abbrv] tinkerpop git commit: A few tweaks to GraphSON format.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/531dcb59/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
index 3b24d37..5163a63 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
@@ -1,808 +1,808 @@
-{"id":{"@type":"gremlin:int32","@value":1},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3059},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":276},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3704},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4383},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@
 value":2}}},{"id":{"@type":"gremlin:int32","@value":2},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4},"inV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7612},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7611},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"HEY BO DIDDLEY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":2},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":5}}]}}
-{"id":{"@type":"gremlin:int32","@value":2},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":323},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6190},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6191},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7666},"inV":{"@type":"gremlin:int32","@value":525}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7665},"inV":{"@type":"gremlin:int32","@value":525}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"IM 
 A MAN"}],"songType":[{"id":{"@type":"gremlin:int64","@value":5},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":4},"value":{"@type":"gremlin:int32","@value":1}}]}}
-{"id":{"@type":"gremlin:int32","@value":3},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":1},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2051},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":1412},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6669},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":526},"outV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":910},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id"
 :{"@type":"gremlin:int32","@value":1166},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6286},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":273},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":2194},"outV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1684},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1941},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3221},"outV":{"@type":"gremlin:int32","@va
 lue":63},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2712},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6425},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5787},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5148},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6692},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6310},"outV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":6448},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2225},"outV":{"@type":"gremlin:int32","@value":226},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5042},"outV":{"@type":"gremlin:int32","@value":209},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4789},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1464},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2232},"outV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4665},"outV":{"@type":"gremlin:int32",
 "@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2235},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":163}}},{"id":{"@type":"gremlin:int32","@value":6208},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":706},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":835},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5188},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1862},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}}
 ,{"id":{"@type":"gremlin:int32","@value":1735},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6343},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4937},"outV":{"@type":"gremlin:int32","@value":277},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3276},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3149},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1358},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":4304},"outV":{"@type":"gremlin:in
 t32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1105},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":722},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4182},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1499},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2397},"outV":{"@type":"gremlin:int32","@value":179},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":351},"outV":{"@type":"gremlin:int32","@value":178},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":6623},"outV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2018},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7011},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5348},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2278},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":1255},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3048},"outV":{"@type":"gremlin:in
 t32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":5867},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":116}}},{"id":{"@type":"gremlin:int32","@value":364},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":492},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3948},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4335},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3312},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":
 1}}},{"id":{"@type":"gremlin:int32","@value":5745},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4596},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5367},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":633},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":891},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5375},"outV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6143},"outV":{"@type":"gremlin:in
 t32","@value":289},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3712},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3713},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3714},"inV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3715},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3716},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3717},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"grem
 lin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3718},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3719},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3720},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3721},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":54}}},{"id":{"@type":"gremlin:int32","@value":3722},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3723},"inV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3724},"inV":{
 "@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3725},"inV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3726},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3727},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":37}}},{"id":{"@type":"gremlin:int32","@value":3728},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3729},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3730},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:i
 nt32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3731},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3732},"inV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3733},"inV":{"@type":"gremlin:int32","@value":211},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3734},"inV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3735},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3736},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3737},"inV":{"@type":
 "gremlin:int32","@value":320},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3738},"inV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3739},"inV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3740},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3741},"inV":{"@type":"gremlin:int32","@value":128},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3742},"inV":{"@type":"gremlin:int32","@value":315},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3743},"inV":{"@type":"gremlin:int32","@value":261},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":1}}},{"id":{"@type":"gremlin:int32","@value":3744},"inV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3745},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3746},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3747},"inV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":14}}},{"id":{"@type":"gremlin:int32","@value":3748},"inV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3749},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":3750},"inV":{"@type":"gremlin
 :int32","@value":309},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3751},"inV":{"@type":"gremlin:int32","@value":131},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3752},"inV":{"@type":"gremlin:int32","@value":151},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3753},"inV":{"@type":"gremlin:int32","@value":321},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3754},"inV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3755},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3756},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":3757},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3758},"inV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3759},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3760},"inV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3761},"inV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3762},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3763},"inV":{"@type":"gremlin:int32","@v
 alue":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3764},"inV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3765},"inV":{"@type":"gremlin:int32","@value":185},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3766},"inV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3767},"inV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3768},"inV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3769},"inV":{"@type":"gremlin:int32","@value":193},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":
 {"@type":"gremlin:int32","@value":3770},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3771},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3772},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3773},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3774},"inV":{"@type":"gremlin:int32","@value":240},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3775},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3776},"inV":{"@type":"gremlin:int32","@value":9},
 "properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3777},"inV":{"@type":"gremlin:int32","@value":259},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3694},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":3695},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":30}}},{"id":{"@type":"gremlin:int32","@value":3696},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3697},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3698},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"grem
 lin:int32","@value":3699},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3700},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3701},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3702},"inV":{"@type":"gremlin:int32","@value":317},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3703},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3704},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3705},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"
 weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3706},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3707},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3708},"inV":{"@type":"gremlin:int32","@value":318},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3709},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3710},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3711},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}}],"sungBy":[{"id":{"@type":"gremli
 n:int32","@value":7808},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7807},"inV":{"@type":"gremlin:int32","@value":671}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"NOT FADE AWAY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":8},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":531}}]}}
-{"id":{"@type":"gremlin:int32","@value":4},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":128},"outV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1664},"outV":{"@type":"gremlin:int32","@value":267},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":899},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1667},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4099},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":1156},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":773},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6534},"outV":{"@type":"gremlin:int32","@value":242},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1032},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6664},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5129},"outV":{"@type":"gremlin:int32","@value":222},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5387},"outV":{"@type":"gremlin:int32",
 "@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5517},"outV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5006},"outV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6030},"outV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2063},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":915},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6940},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id
 ":{"@type":"gremlin:int32","@value":2464},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5795},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3620},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4772},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":25}}},{"id":{"@type":"gremlin:int32","@value":2982},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3367},"outV":{"@type":"gremlin:int32","@value":184},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":2345},"outV":{"@type":"gremlin:int32","@
 value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2861},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1840},"outV":{"@type":"gremlin:int32","@value":275},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5425},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":180},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":46}}},{"id":{"@type":"gremlin:int32","@value":2613},"outV":{"@type":"gremlin:int32","@value":158},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5434},"outV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":5562},"outV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1469},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":446},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":2494},"outV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3266},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":326},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":583},"outV":{"@type":"gremlin:int32","@
 value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6855},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":73},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4425},"outV":{"@type":"gremlin:int32","@value":212},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1613},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4941},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6350},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":3535},"outV":{"@type":"gremlin:int32","@value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":980},"outV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1494},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5206},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5847},"outV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6490},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2781},"outV":{"@type":"gremlin:int32","@v
 alue":15},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5600},"outV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":353},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5474},"outV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1891},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":3811},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5989},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id"
 :{"@type":"gremlin:int32","@value":4327},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2538},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3050},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4970},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2283},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":236},"outV":{"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6126},"outV":{"@type":"gremlin:int32","@
 value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5232},"outV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4594},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1652},"outV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4084},"outV":{"@type":"gremlin:int32","@value":109},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":629},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3701},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id
 ":{"@type":"gremlin:int32","@value":5621},"outV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7029},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5238},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2684},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":3325},"outV":{"@type":"gremlin:int32","@value":268},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5120},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5121},"inV":{"@type
 ":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5122},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5123},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5071},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5072},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":5073},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5074},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@va
 lue":9}}},{"id":{"@type":"gremlin:int32","@value":5075},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":63}}},{"id":{"@type":"gremlin:int32","@value":5076},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":5077},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5078},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5079},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":5080},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5081},"inV":{"@type":"gremlin:in
 t32","@value":16},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5082},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5083},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5084},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5085},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5086},"inV":{"@type":"gremlin:int32","@value":112},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5087},"inV":{"@type":"gremlin:int32","@value":121},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"i
 d":{"@type":"gremlin:int32","@value":5088},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":5089},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5090},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":77}}},{"id":{"@type":"gremlin:int32","@value":5091},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5092},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5093},"inV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5094},"inV":{"@type":"gremlin:int32","@value"
 :76},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5095},"inV":{"@type":"gremlin:int32","@value":181},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5096},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5097},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5098},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5099},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5100},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":
 "gremlin:int32","@value":5101},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5102},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5103},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5104},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5105},"inV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5106},"inV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5107},"inV":{"@type":"gremlin:int32","@value":114},"proper
 ties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5108},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5109},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5110},"inV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5111},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5112},"inV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5113},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32
 ","@value":5114},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5115},"inV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5116},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5117},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5118},"inV":{"@type":"gremlin:int32","@value":169},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5119},"inV":{"@type":"gremlin:int32","@value":118},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7064},"inV":{"@type":"gremlin:int32","@value":340}}],"writte
 nBy":[{"id":{"@type":"gremlin:int32","@value":7063},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":9},"value":"BERTHA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":11},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":10},"value":{"@type":"gremlin:int32","@value":394}}]}}
-{"id":{"@type":"gremlin:int32","@value":5},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":194},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":962},"outV":{"@type":"gremlin:int32","@value":67},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5446},"outV":{"@type":"gremlin:int32","@value":231},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6344},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1738},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":6666},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1867},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4300},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":847},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2832},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6032},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1170},"outV":{"@type":"gremlin:int32","@
 value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5330},"outV":{"@type":"gremlin:int32","@value":238},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1491},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1429},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3033},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6298},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1373},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"
 id":{"@type":"gremlin:int32","@value":4447},"outV":{"@type":"gremlin:int32","@value":113},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5151},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5343},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6431},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1953},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":1634},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2274},"outV":{"@type":"gremlin:int
 32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":100},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":933},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2021},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6694},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4009},"outV":{"@type":"gremlin:int32","@value":225},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":682},"outV":{"@type":"gremlin:int32","@value":219},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}
 ,{"id":{"@type":"gremlin:int32","@value":3694},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":4718},"outV":{"@type":"gremlin:int32","@value":186},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":3055},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":2480},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2736},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5426},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6899},"outV":{"@type":"gremlin:int3
 2","@value":147},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5879},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":22}}},{"id":{"@type":"gremlin:int32","@value":6201},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5370},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":700},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2236},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4604},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":2}
 }},{"id":{"@type":"gremlin:int32","@value":5759},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":273},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":274},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":275},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":276},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":277},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":278},"inV":{"@type":
 "gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":279},"inV":{"@type":"gremlin:int32","@value":133},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":280},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":281},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":282},"inV":{"@type":"gremlin:int32","@value":159},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":283},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":284},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1
 9}}},{"id":{"@type":"gremlin:int32","@value":285},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":286},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":287},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":288},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":289},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":290},"inV":{"@type":"gremlin:int32","@value":116},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":291},"inV":{"@type":"gremlin:int32","@val
 ue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":292},"inV":{"@type":"gremlin:int32","@value":65},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":293},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":294},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":295},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":296},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":297},"inV":{"@type":"gremlin:int32","@value":161},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":
 "gremlin:int32","@value":298},"inV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":299},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":300},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":301},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":302},"inV":{"@type":"gremlin:int32","@value":163},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":303},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":304},"inV":{"@type":"gremlin:int32","@value":85},"properties":
 {"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":305},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":306},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":307},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":308},"inV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":309},"inV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":310},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value
 ":311},"inV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7582},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7581},"inV":{"@type":"gremlin:int32","@value":446}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":12},"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":{"@type":"gremlin:int64","@value":14},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":13},"value":{"@type":"gremlin:int32","@value":293}}]}}
-{"id":{"@type":"gremlin:int32","@value":6},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2023},"outV":{"@type":"gremlin:int32","@value":282},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2406},"inV":{"@type":"gremlin:int32","@value":293},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2407},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7782},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7781},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":15},"value":"
 MONA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":17},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":16},"value":{"@type":"gremlin:int32","@value":1}}]}}
-{"id":{"@type":"gremlin:int32","@value":7},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2607},"outV":{"@type":"gremlin:int32","@value":295},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5},"inV":{"@type":"gremlin:int32","@value":8},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":18},"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":20},"value":""}],"performances":[{"id":{"@type":"gremlin:int64","@value":19},"value":{"@type":"gremlin:int32","@value":0}}]}}
-{"id":{"@type":"gremlin:int32","@value":8},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4705},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5901},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2976},"inV":{"@type":"gremlin:int32","@value":302},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2977},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2978},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:in
 t32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7814},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7813},"inV":{"@type":"gremlin:int32","@value":674}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":21},"value":"OH BOY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":23},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":22},"value":{"@type":"gremlin:int32","@value":2}}]}}
-{"id":{"@type":"gremlin:int32","@value":9},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3776},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":65},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1923},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5956},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3077},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5832},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":1161},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":2699},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6539},"outV":{"@type":"gremlin:int32","@value":55},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6667},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2578},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":787},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3542},"outV":{"@type":"gremlin:int32","@
 value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2775},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":2840},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4953},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1572},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":229},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"outV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":4969},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3498},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5226},"outV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5548},"outV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2990},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3950},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2488},"outV":{"@type":"gremlin:int32","@
 value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6776},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3641},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1532},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1853},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":638},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6335},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"out
 E":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value"
 :16},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":20},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32"
 ,"@value":19},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":28},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremli
 n:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":27},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":28},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":29},"inV":{"@type":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":30},"inV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":31},"inV":{"@type":"gremlin:int32","@value":35},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":32},"inV":{"@type":"gremlin:int32"
 ,"@value":36},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":33},"inV":{"@type":"gremlin:int32","@value":37},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":34},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":35},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":36},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":37},"inV":{"@type":"gremlin:int32","@value":41},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":38},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"greml
 in:int32","@value":39},"inV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7190},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7189},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":24},"value":"HERE COMES SUNSHINE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":26},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":25},"value":{"@type":"gremlin:int32","@value":65}}]}}
-{"id":{"@type":"gremlin:int32","@value":10},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3841},"outV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1027},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3335},"outV":{"@type":"gremlin:int32","@value":155},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4103},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6279},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":4233},"outV":{"@type":"gremlin:int32","@value":52},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4878},"outV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":5264},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2196},"outV":{"@type":"gremlin:int32","@value":75},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":151},"outV":{"@type":"gremlin:int32","@value":108},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1571},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3619},"outV":{"@type":"gremlin:int32","
 @value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3237},"outV":{"@type":"gremlin:int32","@value":63},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4647},"outV":{"@type":"gremlin:int32","@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4521},"outV":{"@type":"gremlin:int32","@value":105},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1195},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6444},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6956},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":687},"outV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4784},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6064},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1714},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3890},"outV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":55},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5175},"outV":{"@type":"gremlin:int32","@v
 alue":71},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1337},"outV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1083},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4155},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6077},"outV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5441},"outV":{"@type":"gremlin:int32","@value":239},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1987},"outV":{"@type":"gremlin:int32","@value":152},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id
 ":{"@type":"gremlin:int32","@value":1860},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2116},"outV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3269},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":454},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3142},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2505},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":6603},"outV":{"@type":"gremlin:int32","@v
 alue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6859},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":717},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":1360},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3026},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5972},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5077},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{
 "@type":"gremlin:int32","@value":2392},"outV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1250},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4706},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6755},"outV":{"@type":"gremlin:int32","@value":53},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":485},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2917},"outV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3559},"outV":{"@type":"gremlin:int32","@valu
 e":56},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":3436},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3820},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4463},"outV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":880},"outV":{"@type":"gremlin:int32","@value":189},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6256},"outV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3698},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{
 "@type":"gremlin:int32","@value":2035},"outV":{"@type":"gremlin:int32","@value":180},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2291},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3317},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2806},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2427},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6782},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4351},"outV":{"@type":"gremlin:int32","@valu
 e":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4235},"inV":{"@type":"gremlin:int32","@value":56},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4236},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":4237},"inV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":4238},"inV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":4239},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4240},"inV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":21}}},{"id":{"@type":"gremlin:int32","@value":4241},"inV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4242},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4243},"inV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":4244},"inV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4245},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4246},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4247},"inV":{"@type":"gremlin:i
 nt32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4248},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4249},"inV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4250},"inV":{"@type":"gremlin:int32","@value":218},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4251},"inV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4252},"inV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4253},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}}
 ,{"id":{"@type":"gremlin:int32","@value":4254},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4255},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4256},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4257},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4258},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4259},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4260},"inV":{"@type":"gremlin:int32","@va
 lue":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4261},"inV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4262},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},

<TRUNCATED>

[22/50] [abbrv] tinkerpop git commit: Added "set" as an option to aggregateTo

Posted by sp...@apache.org.
Added "set" as an option to aggregateTo

This allowed more tests to pass when using GraphSON 2.0 with the java driver


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/711d2401
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/711d2401
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/711d2401

Branch: refs/heads/master
Commit: 711d24017773106f6d6c415897009ba289f2cce3
Parents: d299cbc
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 25 11:45:19 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Aug 25 11:45:19 2016 -0400

----------------------------------------------------------------------
 docs/src/dev/provider/index.asciidoc            |  2 +-
 .../tinkerpop/gremlin/driver/ResultQueue.java   |  7 ++++++
 .../apache/tinkerpop/gremlin/driver/Tokens.java |  1 +
 .../DriverRemoteTraversalSideEffects.java       |  6 ++++-
 .../gremlin/driver/ResultQueueTest.java         | 25 ++++++++++++++++++++
 .../gremlin/server/util/SideEffectIterator.java |  3 +++
 .../driver/remote/RemoteGraphProvider.java      |  4 ++++
 .../gremlin/server/ServerTestHelper.java        |  3 ---
 8 files changed, 46 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/docs/src/dev/provider/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/dev/provider/index.asciidoc b/docs/src/dev/provider/index.asciidoc
index aaa039f..09dd9fb 100644
--- a/docs/src/dev/provider/index.asciidoc
+++ b/docs/src/dev/provider/index.asciidoc
@@ -1013,7 +1013,7 @@ When using "gather" it is important to note the metadata that is returned on the
 "sideEffectKey" that was requested as well as a value keyed as "aggregateTo". The "aggregateTo" field describes how the
 streamed side-effect data should be treated on the client. It provides a hint as to whether or not the data should be
 rolled back up into a single object or simply left as-is. There are four values for "aggregateTo": `bulkset`, `list`,
-`map` and `none`.
+`map`, `set` and `none`.
 
 '`keys` operation arguments'
 [width="100%",cols="2,2,9",options="header"]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultQueue.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultQueue.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultQueue.java
index dcde3fe..d47810c 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultQueue.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ResultQueue.java
@@ -27,9 +27,11 @@ import org.javatuples.Pair;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -95,6 +97,11 @@ final class ResultQueue {
                 final List<Object> list = validate(aggregateTo, List.class);
                 list.add(sideEffectValue);
                 break;
+            case Tokens.VAL_AGGREGATE_TO_SET:
+                if (null == aggregatedResult) aggregatedResult = new HashSet();
+                final Set<Object> set = validate(aggregateTo, Set.class);
+                set.add(sideEffectValue);
+                break;
             case Tokens.VAL_AGGREGATE_TO_MAP:
                 if (!(sideEffectValue instanceof Map.Entry) && !(sideEffectValue instanceof Map))
                     throw new IllegalStateException(String.format("Side-effect value %s is a %s which does not aggregate to %s",

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
index 2d0f192..25c79af 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Tokens.java
@@ -151,6 +151,7 @@ public final class Tokens {
     public static final String VAL_AGGREGATE_TO_LIST = "list";
     public static final String VAL_AGGREGATE_TO_MAP = "map";
     public static final String VAL_AGGREGATE_TO_NONE = "none";
+    public static final String VAL_AGGREGATE_TO_SET = "set";
 
     public static final String VAL_TRAVERSAL_SOURCE_ALIAS = "g";
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
index d8adcc6..bd51e67 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteTraversalSideEffects.java
@@ -65,7 +65,11 @@ public class DriverRemoteTraversalSideEffects extends AbstractRemoteTraversalSid
                 final Result result = client.submitAsync(msg).get().one();
                 sideEffects.put(key, null == result ? null : result.getObject());
             } catch (Exception ex) {
-                throw new RuntimeException("Could not get cache value", ex);
+                final Throwable root = ExceptionUtils.getRootCause(ex);
+                if (root.getMessage().equals("Could not find side-effects for " + serverSideEffect + "."))
+                    sideEffects.put(key, null);
+                else
+                    throw new RuntimeException("Could not get keys", root);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultQueueTest.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultQueueTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultQueueTest.java
index c96d832..67bbc48 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultQueueTest.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ResultQueueTest.java
@@ -25,8 +25,10 @@ import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -339,6 +341,29 @@ public class ResultQueueTest extends AbstractResultQueueTest {
     }
 
     @Test
+    public void shouldHandleSetSideEffects() throws Exception {
+        final CompletableFuture<List<Result>> o = resultQueue.await(1);
+        assertThat(o.isDone(), is(false));
+
+        resultQueue.addSideEffect(Tokens.VAL_AGGREGATE_TO_SET, "stephen");
+        assertThat(o.isDone(), is(false));
+
+        resultQueue.addSideEffect(Tokens.VAL_AGGREGATE_TO_SET, "daniel");
+        assertThat(o.isDone(), is(false));
+
+        resultQueue.addSideEffect(Tokens.VAL_AGGREGATE_TO_SET, "dave");
+        assertThat(o.isDone(), is(false));
+
+        resultQueue.markComplete();
+
+        assertThat(o.isDone(), is(true));
+        final Set<String> set = o.get().get(0).get(HashSet.class);
+        assertThat(set.contains("stephen"), is(true));
+        assertThat(set.contains("daniel"), is(true));
+        assertThat(set.contains("dave"), is(true));
+    }
+
+    @Test
     public void shouldHandleMapSideEffects() throws Exception {
         final CompletableFuture<List<Result>> o = resultQueue.await(1);
         assertThat(o.isDone(), is(false));

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/SideEffectIterator.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/SideEffectIterator.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/SideEffectIterator.java
index 5649c19..2544634 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/SideEffectIterator.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/SideEffectIterator.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
@@ -64,6 +65,8 @@ public class SideEffectIterator implements Iterator<Object> {
     private String getAggregatorType(final Object o) {
         if (o instanceof BulkSet)
             return Tokens.VAL_AGGREGATE_TO_BULKSET;
+        else if (o instanceof Set)
+            return Tokens.VAL_AGGREGATE_TO_SET;
         else if (o instanceof Iterable || o instanceof Iterator)
             return Tokens.VAL_AGGREGATE_TO_LIST;
         else if (o instanceof Map)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
index 8b68c35..eae229a 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
@@ -114,6 +114,10 @@ public class RemoteGraphProvider extends AbstractGraphProvider {
         final InputStream stream = RemoteGraphProvider.class.getResourceAsStream("gremlin-server-integration.yaml");
         final Settings settings = Settings.read(stream);
         ServerTestHelper.rewritePathsInGremlinServerSettings(settings);
+
+        settings.maxContentLength = 1024000;
+        settings.maxChunkSize =1024000;
+
         server = new GremlinServer(settings);
 
         server.start().join();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/711d2401/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
index 3a82537..e846673 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
@@ -45,8 +45,5 @@ public class ServerTestHelper {
                     kv.setValue(homeDir + File.separator + kv.getValue());
                     return kv;
                 }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
-
-        overridenSettings.maxContentLength = 1024000;
-        overridenSettings.maxChunkSize =1024000;
     }
 }


[24/50] [abbrv] tinkerpop git commit: created a TraversalSideEffects class in traversal.py that RemoteTraversalSideEffects inherits from.

Posted by sp...@apache.org.
created a TraversalSideEffects class in traversal.py that RemoteTraversalSideEffects inherits from.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2804e455
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2804e455
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2804e455

Branch: refs/heads/master
Commit: 2804e455ee13374b85a84f327abe252320448072
Parents: 5d446f3
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 13:19:13 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 13:19:13 2016 -0600

----------------------------------------------------------------------
 .../src/main/jython/gremlin_python/driver/remote_connection.py     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2804e455/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
index a659ebc..dbb0e83 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
@@ -43,7 +43,7 @@ class RemoteConnection(object):
     @abc.abstractmethod
     def submit(self, bytecode):
         print "sending " + bytecode + " to GremlinServer..."
-        return RemoteTraversal(iter([]), {})
+        return RemoteTraversal(iter([]), TraversalSideEffects())
 
 
 class RemoteTraversal(Traversal):


[28/50] [abbrv] tinkerpop git commit: Add testing framework for native python based tests.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/18e3d64c/gremlin-python/src/main/jython/setup.cfg
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/setup.cfg b/gremlin-python/src/main/jython/setup.cfg
index de959fe..f8bab76 100644
--- a/gremlin-python/src/main/jython/setup.cfg
+++ b/gremlin-python/src/main/jython/setup.cfg
@@ -15,4 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 [bdist_wheel]
-universal=1
\ No newline at end of file
+universal=1
+
+[pytest]
+addopts = --junitxml=../python-reports/TEST-native-python.xml
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/18e3d64c/gremlin-python/src/main/jython/setup.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/setup.py b/gremlin-python/src/main/jython/setup.py
index 01521ed..528e69b 100644
--- a/gremlin-python/src/main/jython/setup.py
+++ b/gremlin-python/src/main/jython/setup.py
@@ -19,7 +19,7 @@ under the License.
 import codecs
 import os
 import time
-from setuptools import setup
+from setuptools import setup, Command
 
 # Folder containing the setup.py
 root = os.path.dirname(os.path.abspath(__file__))
@@ -43,14 +43,27 @@ import __version__
 
 version = __version__.version
 
+class PyTest(Command):
+    user_options = []
+    def initialize_options(self):
+        pass
+    def finalize_options(self):
+        pass
+    def run(self):
+        import sys,subprocess
+        errno = subprocess.call([sys.executable, 'runtest.py'])
+        raise SystemExit(errno)
+
 setup(
     name='gremlinpython',
     version=version,
-    packages=['gremlin_python', 'gremlin_python.driver', 'gremlin_python.process', 'gremlin_python.structure', 'gremlin_python.structure.io'],
+    packages=['gremlin_python', 'gremlin_python.driver', 'gremlin_python.process', 'gremlin_python.structure', 'gremlin_python.structure.io', 'tests'],
     license='Apache 2',
     url='http://tinkerpop.apache.org',
     description='Gremlin-Python for Apache TinkerPop',
     long_description=open("README").read(),
+    test_suite="tests",
+    cmdclass = {'test': PyTest},
     install_requires=[
         'aenum',
         'requests',

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/18e3d64c/gremlin-python/src/main/jython/tests/test_sample.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/test_sample.py b/gremlin-python/src/main/jython/tests/test_sample.py
new file mode 100644
index 0000000..f362317
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/test_sample.py
@@ -0,0 +1,25 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+import unittest
+
+def fun(x):
+    return x + 1
+
+def test_answer():
+    assert fun(3) == 4
\ No newline at end of file


[40/50] [abbrv] tinkerpop git commit: Require -DglvPython to build/test the native python portions of gremlin-python

Posted by sp...@apache.org.
Require -DglvPython to build/test the native python portions of gremlin-python


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4b09cdfc
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4b09cdfc
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4b09cdfc

Branch: refs/heads/master
Commit: 4b09cdfc5c2b28106f38f91d827620698c0dfa13
Parents: 3c8f498
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 15:21:52 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 15:26:27 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml | 297 ++++++++++++++++++++++++++------------------
 1 file changed, 174 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b09cdfc/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index d7006f9..a03cdbb 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -92,46 +92,6 @@
             </testResource>
         </testResources>
         <plugins>
-            <!-- need to create python-reports directory at this point or else pytest can't write the report to it -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-antrun-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>create-python-reports-directory</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <tasks>
-                                <delete dir="${build.directory}/python-reports"/>
-                                <mkdir dir="${build.directory}/python-reports"/>
-                            </tasks>
-                        </configuration>
-                    </execution>
-                    <!--
-                    use pytest to execute native python tests - output of xunit output is configured in setup.cfg.
-                    had to use the ant plugin - maven-exec-plugin
-                    -->
-                    <execution>
-                        <phase>integration-test</phase>
-                        <goals>
-                            <goal>run</goal>
-                        </goals>
-                        <configuration>
-                            <skip>${skipTests}</skip>
-                            <target>
-                                <exec executable="python"
-                                      dir="${basedir}/target/python">
-                                    <arg value="setup.py"/>
-                                    <arg value="test"/>
-                                </exec>
-                            </target>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
             <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>
@@ -151,40 +111,6 @@
                             </arguments>
                         </configuration>
                     </execution>
-                    <execution>
-                        <id>build-python</id>
-                        <phase>generate-test-resources</phase>
-                        <goals>
-                            <goal>exec</goal>
-                        </goals>
-                        <configuration>
-                            <executable>python</executable>
-                            <workingDirectory>${basedir}/target/python</workingDirectory>
-                            <commandlineArgs>setup.py build --build-lib ${project.build.testOutputDirectory}/Lib
-                            </commandlineArgs>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-py-files-to-target</id>
-                        <phase>process-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${basedir}/target/python</outputDirectory>
-                            <resources>
-                                <resource>
-                                    <directory>${basedir}/src/main/jython</directory>
-                                    <filtering>true</filtering>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
                 </executions>
             </plugin>
             <plugin>
@@ -210,43 +136,6 @@
                 </configuration>
             </plugin>
             <plugin>
-                <groupId>net.sf.mavenjython</groupId>
-                <artifactId>jython-compile-maven-plugin</artifactId>
-                <version>1.4</version>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>jython</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                        <id>pythonDependencies</id>
-                        <phase>generate-test-resources</phase>
-                        <goals>
-                            <goal>jython</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
-                            <libraries>
-                                <param>aenum</param>
-                                <param>requests</param>
-                                <param>tornado</param>
-                            </libraries>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <systemPropertyVariables>
-                        <python.home>${project.build.testOutputDirectory}</python.home>
-                    </systemPropertyVariables>
-                </configuration>
-            </plugin>
-            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-clean-plugin</artifactId>
                 <version>3.0.0</version>
@@ -321,6 +210,169 @@
     </build>
 
     <profiles>
+        <!-- This default profile works around the issue where the glvPython profile which is expected to run all tests
+             can't override the exclusions defined below. -->
+        <profile>
+            <id>glv-python-standard</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <!-- excludes python related tests that require python itself installed on the system - run with the
+                         python profile if python is present -->
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <python.home>${project.build.testOutputDirectory}</python.home>
+                            </systemPropertyVariables>
+                            <excludes>
+                                <exclude>**/jsr223/Python*Test.java</exclude>
+                                <exclude>**/graphson/GraphSON*Test.java</exclude>
+                            </excludes>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <!-- activates the building of python components and requires that python be installed on the system -->
+        <profile>
+            <id>glv-python</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+                <property>
+                    <name>glvPython</name>
+                </property>
+            </activation>
+            <build>
+                <!-- don't exclude any tests as python is assumed to be installed on this system -->
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <systemPropertyVariables>
+                                <python.home>${project.build.testOutputDirectory}</python.home>
+                            </systemPropertyVariables>
+                        </configuration>
+                    </plugin>
+                    <!-- get a clean copy of the python files for native processing -->
+                    <plugin>
+                        <artifactId>maven-resources-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>copy-py-files-to-target</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>${basedir}/target/python</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${basedir}/src/main/jython</directory>
+                                            <filtering>true</filtering>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>exec-maven-plugin</artifactId>
+                        <version>1.2.1</version>
+                        <executions>
+                            <execution>
+                                <id>build-python</id>
+                                <phase>generate-test-resources</phase>
+                                <goals>
+                                    <goal>exec</goal>
+                                </goals>
+                                <configuration>
+                                    <executable>python</executable>
+                                    <workingDirectory>${basedir}/target/python</workingDirectory>
+                                    <commandlineArgs>setup.py build --build-lib ${project.build.testOutputDirectory}/Lib
+                                    </commandlineArgs>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <!-- required for the jython tests -->
+                    <plugin>
+                        <groupId>net.sf.mavenjython</groupId>
+                        <artifactId>jython-compile-maven-plugin</artifactId>
+                        <version>1.4</version>
+                        <executions>
+                            <execution>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>jython</goal>
+                                </goals>
+                            </execution>
+                            <execution>
+                                <id>pythonDependencies</id>
+                                <phase>generate-test-resources</phase>
+                                <goals>
+                                    <goal>jython</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>${project.build.testOutputDirectory}</outputDirectory>
+                                    <libraries>
+                                        <param>aenum</param>
+                                        <param>requests</param>
+                                        <param>tornado</param>
+                                    </libraries>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <!-- need to create python-reports directory at this point or else pytest can't write the report to it -->
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>create-python-reports-directory</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <tasks>
+                                        <delete dir="${build.directory}/python-reports"/>
+                                        <mkdir dir="${build.directory}/python-reports"/>
+                                    </tasks>
+                                </configuration>
+                            </execution>
+                            <!--
+                            use pytest to execute native python tests - output of xunit output is configured in setup.cfg.
+                            had to use the ant plugin - maven-exec-plugin
+                            -->
+                            <execution>
+                                <phase>integration-test</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <skip>${skipTests}</skip>
+                                    <target>
+                                        <exec executable="python"
+                                              dir="${basedir}/target/python"
+                                              failonerror="true">
+                                            <arg value="setup.py"/>
+                                            <arg value="test"/>
+                                        </exec>
+                                    </target>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
         <!--
         Provides a way to deploy the gremlinpython GLV to pypi. Requires installation of pip/virtualenv. See the
         developer docs for more information on how to configure these settings to get this profile to work. The profile
@@ -328,11 +380,11 @@
         which is copied to target/py.
         -->
         <profile>
-            <id>glv-python</id>
+            <id>glv-python-deploy</id>
             <activation>
                 <activeByDefault>false</activeByDefault>
                 <property>
-                    <name>glvPython</name>
+                    <name>glvPythonDeploy</name>
                 </property>
             </activation>
             <build>
@@ -345,6 +397,9 @@
                             <execution>
                                 <id>setup-py-env</id>
                                 <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
                                 <configuration>
                                     <tasks>
                                         <mkdir dir="${project.build.directory}/py/env"/>
@@ -357,9 +412,6 @@
                                         </exec>
                                     </tasks>
                                 </configuration>
-                                <goals>
-                                    <goal>run</goal>
-                                </goals>
                             </execution>
                             <!--
                             build/package python source distribution and wheel archive. the version is bound to an
@@ -369,6 +421,9 @@
                             <execution>
                                 <id>package-py</id>
                                 <phase>package</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
                                 <configuration>
                                     <tasks>
                                         <exec dir="${project.build.directory}/py" executable="env/bin/python"
@@ -383,15 +438,14 @@
                                         </exec>
                                     </tasks>
                                 </configuration>
-                                <goals>
-                                    <goal>run</goal>
-                                </goals>
                             </execution>
                             <!-- deploy to pypi. assumes that ~/.pypirc is configured appropriately -->
-
                             <execution>
                                 <id>deploy-py</id>
                                 <phase>deploy</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
                                 <configuration>
                                     <tasks>
                                         <exec dir="${project.build.directory}/py" executable="env/bin/pip"
@@ -404,9 +458,6 @@
                                         </exec>
                                     </tasks>
                                 </configuration>
-                                <goals>
-                                    <goal>run</goal>
-                                </goals>
                             </execution>
                         </executions>
                     </plugin>


[41/50] [abbrv] tinkerpop git commit: fixed some import errors in test files that didn't show up cause of pyc caching. Added test_driver_remote_connection.py and its smart about not executing the test if Gremlin Server is NOT running.

Posted by sp...@apache.org.
fixed some import errors in test files that didn't show up cause of pyc caching. Added test_driver_remote_connection.py and its smart about not executing the test if Gremlin Server is NOT running.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/581505f1
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/581505f1
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/581505f1

Branch: refs/heads/master
Commit: 581505f1ad3da6612645b54059f1cb694ce181b9
Parents: 3c8f498
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 13:47:16 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 13:47:16 2016 -0600

----------------------------------------------------------------------
 .../python/TraversalSourceGenerator.groovy      |  4 +-
 .../src/main/jython/gremlin_python/__init__.py  |  1 -
 .../jython/gremlin_python/driver/__init__.py    |  4 --
 .../driver/driver_remote_connection.py          |  2 +-
 .../gremlin_python/driver/remote_connection.py  |  3 ++
 .../jython/gremlin_python/process/__init__.py   | 17 --------
 .../jython/gremlin_python/process/traversal.py  |  4 +-
 .../jython/gremlin_python/structure/__init__.py |  5 ---
 .../gremlin_python/structure/io/__init__.py     |  5 ---
 .../driver/test_driver_remote_connection.py     | 46 +++++++++++++++++++-
 .../main/jython/tests/process/test_traversal.py |  2 +-
 .../main/jython/tests/structure/test_graph.py   |  8 ++--
 12 files changed, 60 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index db399f0..79a1a4e 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -182,11 +182,13 @@ TRAVERSER
 '''
 
 class Traverser(object):
-    def __init__(self, object, bulk):
+    def __init__(self, object, bulk=1L):
         self.object = object
         self.bulk = bulk
     def __repr__(self):
         return str(self.object)
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.object == other.object
 
 '''
 TRAVERSAL SIDE-EFFECTS

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/__init__.py b/gremlin-python/src/main/jython/gremlin_python/__init__.py
index 518d8e0..7626550 100644
--- a/gremlin-python/src/main/jython/gremlin_python/__init__.py
+++ b/gremlin-python/src/main/jython/gremlin_python/__init__.py
@@ -16,6 +16,5 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 '''
-from . import statics
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py b/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
index 1371364..7626550 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/__init__.py
@@ -16,9 +16,5 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 '''
-from .remote_connection import RemoteConnection
-from .remote_connection import RemoteStrategy
-from .remote_connection import RemoteTraversal
-from .remote_connection import RemoteTraversalSideEffects
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index c67af67..3273ad4 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -37,6 +37,7 @@ class GremlinServerError(Exception):
 class DriverRemoteConnection(RemoteConnection):
     def __init__(self, url, traversal_source, username="", password="", loop=None):
         super(DriverRemoteConnection, self).__init__(url, traversal_source)
+        self._url = url
         self._username = username
         self._password = password
         if loop is None: self._loop = ioloop.IOLoop.current()
@@ -159,7 +160,6 @@ class DriverRemoteConnection(RemoteConnection):
     def close(self):
         self._websocket.close()
 
-
 class Response:
     def __init__(self, websocket, username, password):
         self._websocket = websocket

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
index dbb0e83..491fffd 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
@@ -45,6 +45,9 @@ class RemoteConnection(object):
         print "sending " + bytecode + " to GremlinServer..."
         return RemoteTraversal(iter([]), TraversalSideEffects())
 
+    def __repr__(self):
+        return "remoteconnection[" + self._url + "," + self._traversal_source + "]"
+
 
 class RemoteTraversal(Traversal):
     def __init__(self, traversers, side_effects):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/process/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/__init__.py b/gremlin-python/src/main/jython/gremlin_python/process/__init__.py
index 31af92d..7626550 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/__init__.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/__init__.py
@@ -17,21 +17,4 @@ specific language governing permissions and limitations
 under the License.
 '''
 
-from .graph_traversal import GraphTraversal
-from .graph_traversal import GraphTraversalSource
-from .graph_traversal import __
-from .traversal import Barrier
-from .traversal import Bindings
-from .traversal import Bytecode
-from .traversal import Cardinality
-from .traversal import Column
-from .traversal import Direction
-from .traversal import Operator
-from .traversal import Order
-from .traversal import P
-from .traversal import Pop
-from .traversal import Scope
-from .traversal import T
-from .traversal import Traversal
-
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 17efa52..2dc929a 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -240,11 +240,13 @@ TRAVERSER
 '''
 
 class Traverser(object):
-    def __init__(self, object, bulk):
+    def __init__(self, object, bulk=1L):
         self.object = object
         self.bulk = bulk
     def __repr__(self):
         return str(self.object)
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.object == other.object
 
 '''
 TRAVERSAL SIDE-EFFECTS

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/structure/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/__init__.py b/gremlin-python/src/main/jython/gremlin_python/structure/__init__.py
index 99273c7..7626550 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/__init__.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/__init__.py
@@ -16,10 +16,5 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 '''
-from .graph import Graph
-from .graph import Vertex
-from .graph import Edge
-from .graph import VertexProperty
-from .graph import Property
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/gremlin_python/structure/io/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/io/__init__.py b/gremlin-python/src/main/jython/gremlin_python/structure/io/__init__.py
index e9e5f01..7626550 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/io/__init__.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/io/__init__.py
@@ -17,9 +17,4 @@ specific language governing permissions and limitations
 under the License.
 '''
 
-from .graphson import GraphSONReader
-from .graphson import GraphSONWriter
-from .graphson import deserializers
-from .graphson import serializers
-
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 6df1100..b47eff9 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -17,4 +17,48 @@ specific language governing permissions and limitations
 under the License.
 '''
 
-__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
\ No newline at end of file
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
+
+import unittest
+from unittest import TestCase
+
+from gremlin_python import statics
+from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
+from gremlin_python.process.traversal import Traverser
+from gremlin_python.structure.graph import Graph
+from gremlin_python.structure.graph import Vertex
+
+
+class TestDriverRemoteConnection(TestCase):
+    def test_traversals(self):
+        statics.load_statics(globals())
+        connection = DriverRemoteConnection('ws://localhost:8182', 'g')
+        assert "remoteconnection[ws://localhost:8182,g]" == str(connection)
+        #
+        g = Graph().traversal().withRemote(connection)
+        #
+        assert Vertex(1) == g.V(1).next()
+        assert 1 == g.V(1).id().next()
+        assert Traverser(Vertex(1)) == g.V(1).nextTraverser()
+        assert 1 == len(g.V(1).toList())
+        assert isinstance(g.V(1).toList(), list)
+        #
+        results = g.V().repeat(out()).times(2).name.toList()
+        assert 2 == len(results)
+        assert "lop" in results
+        assert "ripple" in results
+        #
+        connection.close()
+
+
+if __name__ == '__main__':
+    test = False
+    try:
+        connection = DriverRemoteConnection('ws://localhost:8182', 'g')
+        test = True
+        connection.close()
+    except:
+        print "GremlinServer is not running and this test case will not execute: " + __file__
+
+    if test:
+        unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/tests/process/test_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/process/test_traversal.py b/gremlin-python/src/main/jython/tests/process/test_traversal.py
index 1dfd78b..fe72ac1 100644
--- a/gremlin-python/src/main/jython/tests/process/test_traversal.py
+++ b/gremlin-python/src/main/jython/tests/process/test_traversal.py
@@ -22,7 +22,7 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 import unittest
 from unittest import TestCase
 
-from gremlin_python.structure import Graph
+from gremlin_python.structure.graph import Graph
 
 
 class TestTraversal(TestCase):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/581505f1/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 888f587..5f62464 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -22,10 +22,10 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 import unittest
 from unittest import TestCase
 
-from gremlin_python.structure import Edge
-from gremlin_python.structure import Property
-from gremlin_python.structure import Vertex
-from gremlin_python.structure import VertexProperty
+from gremlin_python.structure.graph import Edge
+from gremlin_python.structure.graph import Property
+from gremlin_python.structure.graph import Vertex
+from gremlin_python.structure.graph import VertexProperty
 
 
 class TestGraph(TestCase):


[48/50] [abbrv] tinkerpop git commit: Fix an issue with Tree deserialization and the type system.

Posted by sp...@apache.org.
Fix an issue with Tree deserialization and the type system.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6463cffa
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6463cffa
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6463cffa

Branch: refs/heads/master
Commit: 6463cffa2647b28c0155a19468bac978224bce78
Parents: 99cba4f
Author: Kevin Gallardo <ke...@datastax.com>
Authored: Thu Aug 25 14:08:44 2016 +0100
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 17:09:33 2016 -0400

----------------------------------------------------------------------
 .../io/graphson/GraphSONTypeIdResolver.java      | 14 ++++++++++++--
 .../TinkerGraphGraphSONSerializerV2d0Test.java   | 19 ++++++-------------
 2 files changed, 18 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6463cffa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
index 5ad7265..183e11a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
@@ -18,7 +18,10 @@
  */
 package org.apache.tinkerpop.gremlin.structure.io.graphson;
 
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.shaded.jackson.annotation.JsonTypeInfo;
+import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference;
 import org.apache.tinkerpop.shaded.jackson.databind.DatabindContext;
 import org.apache.tinkerpop.shaded.jackson.databind.JavaType;
 import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
@@ -49,8 +52,15 @@ public class GraphSONTypeIdResolver implements TypeIdResolver {
 
     // Override manually a type definition.
     public GraphSONTypeIdResolver addCustomType(final String name, final Class clasz) {
-        // May override types already registered, that's wanted.
-        getIdToType().put(name, TypeFactory.defaultInstance().constructType(clasz));
+        if (Tree.class.isAssignableFrom(clasz)) {
+            // there is a special case for Tree which extends a Map, but has only 1 parametrized type,
+            // and for which creating a default type is failing because it may fall into a
+            // a self-referencing never-ending loop. Temporarily we force Tree<Element>
+            // which should cover all the usage TinkerPop would do of the Trees anyway.
+            getIdToType().put(name, TypeFactory.defaultInstance().constructType(new TypeReference<Tree<? extends Element>>() {}));
+        } else {
+            getIdToType().put(name, TypeFactory.defaultInstance().constructType(clasz));
+        }
         getTypeToId().put(clasz, name);
         return this;
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6463cffa/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
index d668d9a..d6eda48 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
@@ -472,30 +472,23 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
     }
 
     @Test
-    public void deserializersTree() {
+    public void deserializersTestsTree() {
         final TinkerGraph tg = TinkerFactory.createModern();
 
-        final GraphWriter writer = getWriter(noTypesMapperV2d0);
-        final GraphReader reader = getReader(noTypesMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
         final Tree t = tg.traversal().V().out().out().tree().next();
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
-            final Vertex v = tg.traversal().V(1).next();
-                     v.property("myUUIDprop", UUID.randomUUID());
-            writer.writeObject(out, v);
-
-
-//            writer.writeObject(out, t);
+            writer.writeObject(out, t);
             final String json = out.toString();
 
-            //System.out.println("json = " + json);
-
-//            Tree treeRead = (Tree)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            Tree treeRead = (Tree)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             //Map's equals should check each component of the tree recursively
             //on each it will call "equals()" which for Vertices will compare ids, which
             //is ok. Complete vertex deser is checked elsewhere.
-//            assertEquals(t, treeRead);
+            assertEquals(t, treeRead);
 
         } catch (IOException e) {
             e.printStackTrace();


[35/50] [abbrv] tinkerpop git commit: Added GraphSONX as an extension module to the core types.

Posted by sp...@apache.org.
Added GraphSONX as an extension module to the core types.

Some types might be good for better parity with gryo but were too tied to Java to be easy for GLV devs to support. Adding an extension module makes things a little easier on the GLVs providing a simpler level to support.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5c9cbf65
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5c9cbf65
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5c9cbf65

Branch: refs/heads/master
Commit: 5c9cbf65785b92427e5bb540e1df185b9e10dc2c
Parents: 186f26b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 12:33:53 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 12:33:53 2016 -0400

----------------------------------------------------------------------
 docs/src/reference/the-graph.asciidoc           |   9 ++
 .../structure/io/graphson/GraphSONMapper.java   |  20 +--
 .../structure/io/graphson/GraphSONModule.java   |  73 ----------
 .../structure/io/graphson/GraphSONTokens.java   |   1 +
 .../io/graphson/GraphSONXModuleV2d0.java        | 140 +++++++++++++++++++
 .../GraphSONMapperEmbeddedTypeTest.java         |   4 +-
 .../io/graphson/GraphSONMapperTest.java         |   2 +-
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java |   3 +-
 .../TinkerGraphGraphSONSerializerV2d0Test.java  |   3 +
 .../io/graphson/GraphSONTranslator.java         |   7 +-
 .../TinkerGraphGraphSONTranslatorProvider.java  |   1 +
 11 files changed, 167 insertions(+), 96 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index b7fbc74..ef70454 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -695,6 +695,15 @@ TinkerPop includes types for graph elements:
 * Metrics -> "g:Metrics"
 * TraversalMetrics -> `g:TraversalMetrics"
 
+GraphSON 2.0 can also be configured with "extended" types that build on top of the core types in the "g" namespace.
+The extended types are in the "gx" namespace as exposed by `GraphSONXModuleV2d0` and includes additional types like
+mappings to Java's `java.time.*` classes, `BigInteger`, `BigDecimal` and others. This module can be added when building
+a `GraphSONMapper` by calling the `addCustomModule()` method on the `Builder`.
+
+IMPORTANT: When using the extended type system in Gremlin Server, support for these types when used in the context of
+Gremlin Language Variants is dependent on the programming language, the driver and its serializers. These
+implementations are only required to support the core types and not the extended ones.
+
 Here's the same previous example of GraphSON 1.0, but with GraphSON 2.0:
 
 [gremlin-groovy]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index 1378f6e..7e46c98 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -29,13 +29,8 @@ import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeResolverBuilder
 import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
 import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.util.TokenBuffer;
 import org.javatuples.Pair;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -45,8 +40,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.TimeZone;
 import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * An extension to the standard Jackson {@code ObjectMapper} which automatically registers the standard
@@ -171,23 +164,14 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
     }
 
 
-    private void registerJavaBaseTypes(GraphSONTypeIdResolver graphSONTypeIdResolver) {
+    private void registerJavaBaseTypes(final GraphSONTypeIdResolver graphSONTypeIdResolver) {
         Arrays.asList(
-                BigInteger.class,
-                BigDecimal.class,
-                Byte.class,
-                Character.class,
                 UUID.class,
-                InetAddress.class,
-                InetSocketAddress.class,
                 Class.class,
                 Calendar.class,
                 Date.class,
                 TimeZone.class,
-                Timestamp.class,
-                AtomicBoolean.class,
-                AtomicReference.class,
-                TokenBuffer.class
+                Timestamp.class
         ).forEach(e -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", GraphSONTokens.GREMLIN_TYPE_NAMESPACE, e.getSimpleName()), e));
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/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 cf80428..787867f 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
@@ -46,7 +46,6 @@ import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSeriali
 import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
 
-import java.nio.ByteBuffer;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -90,28 +89,11 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                 new LinkedHashMap<Class, String>() {{
                     // Those don't have deserializers because handled by Jackson,
                     // but we still want to rename them in GraphSON
-                    put(ByteBuffer.class, "ByteBuffer");
-                    put(Short.class, "Int16");
                     put(Integer.class, "Int32");
                     put(Long.class, "Int64");
                     put(Double.class, "Double");
                     put(Float.class, "Float");
 
-                    // Time serializers/deserializers
-                    put(Duration.class, "Duration");
-                    put(Instant.class, "Instant");
-                    put(LocalDate.class, "LocalDate");
-                    put(LocalDateTime.class, "LocalDateTime");
-                    put(LocalTime.class, "LocalTime");
-                    put(MonthDay.class, "MonthDay");
-                    put(OffsetDateTime.class, "OffsetDateTime");
-                    put(OffsetTime.class, "OffsetTime");
-                    put(Period.class, "Period");
-                    put(Year.class, "Year");
-                    put(YearMonth.class, "YearMonth");
-                    put(ZonedDateTime.class, "ZonedDateTime");
-                    put(ZoneOffset.class, "ZoneOffset");
-
                     // Tinkerpop Graph objects
                     put(Lambda.class, "Lambda");
                     put(Vertex.class, "Vertex");
@@ -167,21 +149,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             addSerializer(Integer.class, new GraphSONSerializersV2d0.IntegerGraphSONSerializer());
             addSerializer(Double.class, new GraphSONSerializersV2d0.DoubleGraphSONSerializer());
 
-            // java.time
-            addSerializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonSerializer());
-            addSerializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonSerializer());
-            addSerializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonSerializer());
-            addSerializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonSerializer());
-            addSerializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonSerializer());
-            addSerializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonSerializer());
-            addSerializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonSerializer());
-            addSerializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonSerializer());
-            addSerializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonSerializer());
-            addSerializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonSerializer());
-            addSerializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonSerializer());
-            addSerializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonSerializer());
-            addSerializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonSerializer());
-
             // traversal
             addSerializer(Traversal.class, new GraphSONTraversalSerializersV2d0.TraversalJacksonSerializer());
             addSerializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonSerializer());
@@ -211,21 +178,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             addDeserializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonDeserializer());
             addDeserializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonDeserializer());
 
-            // java.time
-            addDeserializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonDeserializer());
-            addDeserializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonDeserializer());
-            addDeserializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonDeserializer());
-            addDeserializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonDeserializer());
-            addDeserializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonDeserializer());
-            addDeserializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonDeserializer());
-            addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonDeserializer());
-            addDeserializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonDeserializer());
-            addDeserializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonDeserializer());
-            addDeserializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonDeserializer());
-            addDeserializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonDeserializer());
-            addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonDeserializer());
-            addDeserializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonDeserializer());
-
             // traversal
             addDeserializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonDeserializer());
             addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());
@@ -322,31 +274,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             addDeserializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonDeserializer());
             addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonDeserializer());
             addDeserializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonDeserializer());
-
-            // traversal
-            // TODO: review (added for integration with new GraphSON model for GLV bytecode)
-            /*addSerializer(Traversal.class, new GraphSONTraversalSerializersV2d0.TraversalJacksonSerializer());
-            addSerializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonSerializer());
-            addSerializer(VertexProperty.Cardinality.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Column.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Direction.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(SackFunctions.Barrier.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Operator.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Order.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Pop.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(Scope.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(T.class, new GraphSONTraversalSerializersV2d0.EnumJacksonSerializer());
-            addSerializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonSerializer());
-            addSerializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonSerializer());
-            addSerializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonSerializer());
-            addSerializer(Traverser.class, new GraphSONTraversalSerializersV2d0.TraverserJacksonSerializer());*/
-            // -- deserializers for traversal
-            //addDeserializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonDeserializer());
-            //addDeserializer(Enum.class, new GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer());
-            //addDeserializer(P.class, new GraphSONTraversalSerializersV2d0.PJacksonDeserializer());
-            //addDeserializer(Lambda.class, new GraphSONTraversalSerializersV2d0.LambdaJacksonDeserializer());
-            //addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());
-
         }
 
         public static Builder build() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
index ff8cfd6..9f0648a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
@@ -48,6 +48,7 @@ public final class GraphSONTokens {
     public static final String IN_LABEL = "inVLabel";
     public static final String OUT_LABEL = "outVLabel";
     public static final String GREMLIN_TYPE_NAMESPACE = "g";
+    public static final String GREMLINX_TYPE_NAMESPACE = "gx";
 
     // TraversalExplanation Tokens
     public static final String ORIGINAL = "original";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONXModuleV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONXModuleV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONXModuleV2d0.java
new file mode 100644
index 0000000..5e7a9aa
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONXModuleV2d0.java
@@ -0,0 +1,140 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Version 2.0 of GraphSON extensions.
+ */
+public final class GraphSONXModuleV2d0 extends GraphSONModule {
+
+    private static final Map<Class, String> TYPE_DEFINITIONS = Collections.unmodifiableMap(
+            new LinkedHashMap<Class, String>() {{
+                put(ByteBuffer.class, "ByteBuffer");
+                put(Short.class, "Int16");
+                put(BigInteger.class, "BigInteger");
+                put(BigDecimal.class, "BigDecimal");
+                put(Byte.class, "Byte");
+                put(Character.class, "Char");
+
+                // Time serializers/deserializers
+                put(Duration.class, "Duration");
+                put(Instant.class, "Instant");
+                put(LocalDate.class, "LocalDate");
+                put(LocalDateTime.class, "LocalDateTime");
+                put(LocalTime.class, "LocalTime");
+                put(MonthDay.class, "MonthDay");
+                put(OffsetDateTime.class, "OffsetDateTime");
+                put(OffsetTime.class, "OffsetTime");
+                put(Period.class, "Period");
+                put(Year.class, "Year");
+                put(YearMonth.class, "YearMonth");
+                put(ZonedDateTime.class, "ZonedDateTime");
+                put(ZoneOffset.class, "ZoneOffset");
+            }});
+
+    /**
+     * Constructs a new object.
+     */
+    protected GraphSONXModuleV2d0(final boolean normalize) {
+        super("graphsonx-2.0");
+
+        /////////////////////// SERIALIZERS ////////////////////////////
+
+        // java.time
+        addSerializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonSerializer());
+        addSerializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonSerializer());
+        addSerializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonSerializer());
+        addSerializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonSerializer());
+        addSerializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonSerializer());
+        addSerializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonSerializer());
+        addSerializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonSerializer());
+        addSerializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonSerializer());
+        addSerializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonSerializer());
+        addSerializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonSerializer());
+        addSerializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonSerializer());
+        addSerializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonSerializer());
+        addSerializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonSerializer());
+
+        /////////////////////// DESERIALIZERS ////////////////////////////
+
+        // java.time
+        addDeserializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonDeserializer());
+        addDeserializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonDeserializer());
+        addDeserializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonDeserializer());
+        addDeserializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonDeserializer());
+        addDeserializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonDeserializer());
+        addDeserializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonDeserializer());
+        addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonDeserializer());
+        addDeserializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonDeserializer());
+        addDeserializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonDeserializer());
+        addDeserializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonDeserializer());
+        addDeserializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonDeserializer());
+        addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonDeserializer());
+        addDeserializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonDeserializer());
+    }
+
+    public static Builder build() {
+        return new Builder();
+    }
+
+    @Override
+    public Map<Class, String> getTypeDefinitions() {
+        return TYPE_DEFINITIONS;
+    }
+
+    @Override
+    public String getTypeNamespace() {
+        return GraphSONTokens.GREMLINX_TYPE_NAMESPACE;
+    }
+
+    public static final class Builder implements GraphSONModuleBuilder {
+
+        private Builder() {
+        }
+
+        @Override
+        public GraphSONModule create(final boolean normalize) {
+            return new GraphSONXModuleV2d0(normalize);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
index 716a803..94ccb70 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
@@ -50,7 +50,9 @@ public class GraphSONMapperEmbeddedTypeTest extends AbstractGraphSONTest {
     public static Iterable<Object[]> data() {
         return Arrays.asList(new Object[][]{
                 {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(true).create().createMapper()},
-                {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.PARTIAL_TYPES).create().createMapper()},
+                {GraphSONMapper.build().version(GraphSONVersion.V2_0)
+                        .addCustomModule(GraphSONXModuleV2d0.build().create(false))
+                        .typeInfo(TypeInfo.PARTIAL_TYPES).create().createMapper()},
         });
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
index fa31239..217cc6f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
@@ -52,7 +52,7 @@ public class GraphSONMapperTest {
     public static Iterable<Object[]> data() {
         return Arrays.asList(new Object[][]{
                 {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(false).create().createMapper()},
-                {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create().createMapper()},
+                {GraphSONMapper.build().version(GraphSONVersion.V2_0).addCustomModule(GraphSONXModuleV2d0.build().create(false)).typeInfo(TypeInfo.NO_TYPES).create().createMapper()},
         });
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
index 0136199..7144ef4 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
@@ -50,6 +50,7 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest extends AbstractGraphSONT
 
     private final ObjectMapper mapper = GraphSONMapper.build()
             .version(GraphSONVersion.V2_0)
+            .addCustomModule(GraphSONXModuleV2d0.build().create(false))
             .typeInfo(TypeInfo.PARTIAL_TYPES)
             .create()
             .createMapper();
@@ -131,7 +132,7 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest extends AbstractGraphSONT
             mapper.readValue(inputStream, Instant.class);
             fail("Should have failed decoding the value");
         } catch (Exception e) {
-            assertThat(e.getMessage(), containsString("Could not deserialize the JSON value as required. Nested exception: java.lang.InstantiationException: Cannot deserialize the value with the detected type contained in the JSON ('" + GraphSONTokens.GREMLIN_TYPE_NAMESPACE + ":ZoneOffset') to the type specified in parameter to the object mapper (class java.time.Instant). Those types are incompatible."));
+            assertThat(e.getMessage(), containsString("Could not deserialize the JSON value as required. Nested exception: java.lang.InstantiationException: Cannot deserialize the value with the detected type contained in the JSON ('" + GraphSONTokens.GREMLINX_TYPE_NAMESPACE + ":ZoneOffset') to the type specified in parameter to the object mapper (class java.time.Instant). Those types are incompatible."));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
index 9005233..d668d9a 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
@@ -37,6 +37,7 @@ import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
 import org.junit.Test;
 
@@ -62,11 +63,13 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
     // As of TinkerPop 3.2.1 default for GraphSON 2.0 means types enabled.
     private final Mapper defaultMapperV2d0 = GraphSONMapper.build()
             .version(GraphSONVersion.V2_0)
+            .addCustomModule(GraphSONXModuleV2d0.build().create(false))
             .addRegistry(TinkerIoRegistryV2d0.getInstance())
             .create();
 
     private final Mapper noTypesMapperV2d0 = GraphSONMapper.build()
             .version(GraphSONVersion.V2_0)
+            .addCustomModule(GraphSONXModuleV2d0.build().create(false))
             .typeInfo(TypeInfo.NO_TYPES)
             .addRegistry(TinkerIoRegistryV2d0.getInstance())
             .create();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
index d113475..57d2560 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/GraphSONTranslator.java
@@ -29,6 +29,7 @@ import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONXModuleV2d0;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -39,8 +40,10 @@ import java.io.ByteArrayOutputStream;
 final class GraphSONTranslator<S extends TraversalSource, T extends Traversal.Admin<?, ?>> implements Translator.StepTranslator<S, T> {
 
     private final JavaTranslator<S, T> wrappedTranslator;
-    private final GraphSONWriter writer = GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create();
-    private final GraphSONReader reader = GraphSONReader.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create();
+    private final GraphSONMapper mapper = GraphSONMapper.build()
+            .addCustomModule(GraphSONXModuleV2d0.build().create(false)).version(GraphSONVersion.V2_0).create();
+    private final GraphSONWriter writer = GraphSONWriter.build().mapper(mapper).create();
+    private final GraphSONReader reader = GraphSONReader.build().mapper(mapper).create();
 
     public GraphSONTranslator(final JavaTranslator<S, T> wrappedTranslator) {
         this.wrappedTranslator = wrappedTranslator;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5c9cbf65/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
index 3967d96..f5a229d 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/TinkerGraphGraphSONTranslatorProvider.java
@@ -54,6 +54,7 @@ public class TinkerGraphGraphSONTranslatorProvider extends TinkerGraphProvider {
             "g_V_hasLabelXpersonX_asXpX_VXsoftwareX_addInEXuses_pX",
             "g_VXv1X_hasXage_gt_30X",
             //
+
             PageRankTest.Traversals.class.getCanonicalName(),
             ProgramTest.Traversals.class.getCanonicalName(),
             TraversalInterruptionTest.class.getCanonicalName(),


[42/50] [abbrv] tinkerpop git commit: Minor update to setup to include pytest

Posted by sp...@apache.org.
Minor update to setup to include pytest


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/242d271f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/242d271f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/242d271f

Branch: refs/heads/master
Commit: 242d271f6840251af00840e7c6ae8a86583f4369
Parents: 4b09cdf
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 16:19:23 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 16:19:23 2016 -0400

----------------------------------------------------------------------
 gremlin-python/src/main/jython/setup.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/242d271f/gremlin-python/src/main/jython/setup.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/setup.py b/gremlin-python/src/main/jython/setup.py
index 3335c70..52e6fe4 100644
--- a/gremlin-python/src/main/jython/setup.py
+++ b/gremlin-python/src/main/jython/setup.py
@@ -64,9 +64,12 @@ setup(
     long_description=open("README").read(),
     test_suite="tests",
     cmdclass = {'test': PyTest},
+    tests_require=[
+        'pytest'
+    ],
     install_requires=[
         'aenum',
         'requests',
-        'tornado',
+        'tornado'
     ]
 )


[06/50] [abbrv] tinkerpop git commit: python getSideEffects() now aggreagates correctly. cleaned up driver_connection alot.

Posted by sp...@apache.org.
python getSideEffects() now aggreagates correctly. cleaned up driver_connection alot.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/fbbcd467
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/fbbcd467
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/fbbcd467

Branch: refs/heads/master
Commit: fbbcd467831d303fcdf8ea04668212424b094d20
Parents: 58704a7
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 14:42:40 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 14:42:40 2016 -0600

----------------------------------------------------------------------
 .../driver/driver_remote_connection.py          | 69 +++++++++-----------
 1 file changed, 30 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fbbcd467/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index f7e50ad..77354e8 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -22,8 +22,8 @@ from tornado import gen
 from tornado import ioloop
 from tornado import websocket
 
+from gremlin_python.structure.io.graphson import GraphSONReader
 from gremlin_python.structure.io.graphson import GraphSONWriter
-from gremlin_python.structure.io.graphson import TraverserDeserializer
 from .remote_connection import RemoteConnection
 from .remote_connection import RemoteTraversal
 from .remote_connection import RemoteTraversalSideEffects
@@ -33,21 +33,7 @@ class GremlinServerError(Exception):
     pass
 
 
-# when the object is known to be a traverser, just use a direct call to the deserializer
-__traverserDeserializer = TraverserDeserializer()
-
-
-def parse_traverser(traverser_dict):
-    return __traverserDeserializer._objectify(traverser_dict)
-
-
-def parse_side_effect(result):
-    return result
-
-
 class DriverRemoteConnection(RemoteConnection):
-    """Remote connection to the Gremlin Server"""
-
     def __init__(self, url, traversal_source, loop=None, username="", password=""):
         super(DriverRemoteConnection, self).__init__(url, traversal_source)
         if loop is None:
@@ -68,33 +54,21 @@ class DriverRemoteConnection(RemoteConnection):
 
     @gen.coroutine
     def submit_traversal_bytecode(self, bytecode, request_id):
-        """
-        Submit bytecode to Gremlin Server
-
-        :param str gremlin: Gremlin script to submit to server.
-        :param str lang: Language of scripts submitted to the server.
-            "gremlin-groovy" by default
-        :param str op: Gremlin Server op argument. "eval" by default.
-        :param str processor: Gremlin Server processor argument. "" by default.
-
-        :returns: :py:class:`Response` object
-        """
         message = self._get_traversal_bytecode_message(bytecode, request_id)
-        traversers = yield self._execute_message(message, parse_traverser)
+        traversers = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
         raise gen.Return(traversers)
 
     @gen.coroutine
     def submit_sideEffect_keys(self, request_id):
         message = self._get_sideEffect_keys_message(request_id)
-        resp_parser = lambda result: result
-        keys = yield self._execute_message(message, resp_parser)
-        raise gen.Return(keys)
+        keys = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
+        raise gen.Return(set(keys))
 
     @gen.coroutine
     def submit_sideEffect_value(self, request_id, key):
         message = self._get_sideEffect_value_message(request_id, key)
-        side_effects = yield self._execute_message(message, parse_side_effect)
-        raise gen.Return(side_effects)
+        side_effects = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
+        raise gen.Return(side_effects[0])  # don't get it wrapped in a list
 
     @gen.coroutine
     def _execute_message(self, message, resp_parser):
@@ -107,11 +81,10 @@ class DriverRemoteConnection(RemoteConnection):
             msg = yield resp.receive()
             if msg is None:
                 break
-            results += msg
+            results.append(msg)
         raise gen.Return(results)
 
     def close(self):
-        """Close underlying connection and mark as closed."""
         self._ws.close()
 
     def _get_traversal_bytecode_message(self, bytecode, request_id):
@@ -210,20 +183,38 @@ class Response:
         status_code = message["status"]["code"]
         data = message["result"]["data"]
         msg = message["status"]["message"]
+        meta = message["result"]["meta"]
+        aggregateTo = None if "aggregateTo" not in meta else meta["aggregateTo"]
+
         if status_code == 407:
             self._authenticate(self._username, self._password, self._processor)
-            traversers = yield self.receive()
+            yield self.receive()
         elif status_code == 204:
             self._closed = True
             return
         elif status_code in [200, 206]:
-            results = []
-            for result in data:
-                results.append(self._resp_parser(result))
+            # todo: bulk
+            if "list" == aggregateTo:
+                results = []
+                for item in data:
+                    results.append(self._resp_parser(item))
+            elif "set" == aggregateTo:
+                results = set()
+                for item in data:
+                    results.add(self._resp_parser(item))
+            elif "map" == aggregateTo:
+                results = {}
+                for item in data:
+                    m = self._resp_parser(item)
+                    results[m.keys()[0]] = m[m.keys()[0]]
+            else:
+                results = []
+                for item in data:
+                    results.append(self._resp_parser(item))
             if status_code == 200:
                 self._closed = True
+            raise gen.Return(results)
         else:
             self._closed = True
             raise GremlinServerError(
                 "{0}: {1}".format(status_code, msg))
-        raise gen.Return(results)


[11/50] [abbrv] tinkerpop git commit: found a bug I introduced where if the result set is empty a type cast issue happens. fixed.

Posted by sp...@apache.org.
found a bug I introduced where if the result set is empty a type cast issue happens. fixed.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/952c1c74
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/952c1c74
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/952c1c74

Branch: refs/heads/master
Commit: 952c1c7419ee13460c296cfe2527142de31ea71e
Parents: 5fcc922
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 15:28:11 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 15:28:11 2016 -0600

----------------------------------------------------------------------
 .../gremlin_python/driver/driver_remote_connection.py  | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/952c1c74/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 271d245..58342a2 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -81,22 +81,23 @@ class DriverRemoteConnection(RemoteConnection):
             msg = yield resp.receive()
             if msg is None:
                 break
+            # on first message, get the right result data structure
             if None == results:
-                aggregateTo = msg[0]
-                if "list" == aggregateTo:
+                if "list" == msg[0]:
                     results = []
-                elif "set" == aggregateTo:
+                elif "set" == msg[0]:
                     results = set()
-                elif "map" == aggregateTo:
+                elif "map" == msg[0]:
                     results = {}
                 else:
                     results = []
+            # updating a map is different than a list or a set
             if isinstance(results, dict):
                 for item in msg[1]:
                     results.update(item)
             else:
                 results += msg[1]
-        raise gen.Return(results)
+        raise gen.Return([] if None == results else results)
 
     def close(self):
         self._ws.close()
@@ -193,7 +194,7 @@ class Response:
         data = message["result"]["data"]
         msg = message["status"]["message"]
         meta = message["result"]["meta"]
-        aggregateTo = None if "aggregateTo" not in meta else meta["aggregateTo"]
+        aggregateTo = "list" if "aggregateTo" not in meta else meta["aggregateTo"]
 
         if status_code == 407:
             self._authenticate(self._username, self._password, self._processor)


[45/50] [abbrv] tinkerpop git commit: removed exception handling around side_effect.keys() when there are no side_effects.

Posted by sp...@apache.org.
removed exception handling around side_effect.keys() when there are no side_effects.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5da8a30f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5da8a30f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5da8a30f

Branch: refs/heads/master
Commit: 5da8a30f7ae872db5ff029b9195f298bf71d91db
Parents: a0bd413
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 14:28:48 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 14:28:48 2016 -0600

----------------------------------------------------------------------
 .../jython/gremlin_python/driver/driver_remote_connection.py    | 5 +----
 .../main/jython/tests/driver/test_driver_remote_connection.py   | 5 +++++
 2 files changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5da8a30f/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index fa61fb5..7aca638 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -87,10 +87,7 @@ class DriverRemoteConnection(RemoteConnection):
                 }
             }
         }
-        try:
-            keys = yield self._execute_message(message)
-        except:
-            keys = []
+        keys = yield self._execute_message(message)
         raise gen.Return(set(keys))
 
     @gen.coroutine

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5da8a30f/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 90a4ef6..72247c4 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -103,6 +103,11 @@ class TestDriverRemoteConnection(TestCase):
         assert "ripple" in n.keys()
         assert 3 == n["lop"]
         assert 1 == n["ripple"]
+        try:
+            x = t.side_effects["x"]
+            raise Exception("Accessing a non-existent key should throw an error")
+        except KeyError:
+            pass
 
 
 if __name__ == '__main__':


[39/50] [abbrv] tinkerpop git commit: Graph.py repr is now graph[empty]. added more test cases. found a bug in Property.py. Test cases rule.

Posted by sp...@apache.org.
Graph.py repr is now graph[empty]. added more test cases. found a bug in Property.py. Test cases rule.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/3c8f4983
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/3c8f4983
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/3c8f4983

Branch: refs/heads/master
Commit: 3c8f49839f357e0a7ddc3f0b2af4d9827ee421ec
Parents: b8ea023
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 13:15:53 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 13:15:53 2016 -0600

----------------------------------------------------------------------
 .../structure/util/empty/EmptyGraph.java        |  2 +-
 .../driver/driver_remote_connection.py          |  4 +--
 .../jython/gremlin_python/structure/graph.py    |  4 +--
 .../gremlin_python/structure/io/graphson.py     |  3 +-
 .../jython/tests/structure/io/test_graphson.py  | 20 +++++++++++-
 .../main/jython/tests/structure/test_graph.py   | 33 +++++++++++++++-----
 6 files changed, 50 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3c8f4983/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
index 40cf31f..59464c5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/empty/EmptyGraph.java
@@ -102,7 +102,7 @@ public final class EmptyGraph implements Graph {
 
     @Override
     public String toString() {
-        return StringFactory.graphString(this, "vertices: 0 edges: 0");
+        return StringFactory.graphString(this, "empty");
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3c8f4983/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index f1aaeee..c67af67 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -120,7 +120,7 @@ class DriverRemoteConnection(RemoteConnection):
     def _execute_message(self, send_message):
         send_message = b"".join([b"\x21",
                                  b"application/vnd.gremlin-v2.0+json",
-                                 json.dumps(send_message).encode("utf-8")])
+                                 json.dumps(send_message, separators=(',', ':')).encode("utf-8")])
         if self._websocket.protocol is None:
             self._websocket = yield websocket.websocket_connect(self.url)
         self._websocket.write_message(send_message, binary=True)
@@ -193,7 +193,7 @@ class Response:
                                       b"".join([b"\x00", self._username.encode("utf-8"),
                                                 b"\x00", self._password.encode("utf-8")])).decode()
                               }
-                          }).encode("utf-8")]), binary=True)
+                          }, separators=(',', ':')).encode("utf-8")]), binary=True)
             results = yield self.receive()
             raise gen.Return(results)
         elif status_code == 204:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3c8f4983/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
index e07aaf2..b047893 100644
--- a/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
+++ b/gremlin-python/src/main/jython/gremlin_python/structure/graph.py
@@ -80,5 +80,5 @@ class Property(object):
     def __repr__(self):
         return "p[" + str(self.key) + "->" + str(self.value)[0:20] + "]"
 
-        def __eq__(self, other):
-            return isinstance(other, self.__class__) and self.key == other.key and self.value == other.value
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.key == other.key and self.value == other.value

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3c8f4983/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 2e3f9a5..a844191 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
@@ -19,7 +19,6 @@ under the License.
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
-
 import json
 from abc import abstractmethod
 from aenum import Enum
@@ -62,7 +61,7 @@ class GraphSONWriter(object):
 
     @staticmethod
     def writeObject(objectData):
-        return json.dumps(GraphSONWriter._dictify(objectData))
+        return json.dumps(GraphSONWriter._dictify(objectData), separators=(',', ':'))
 
 
 class GraphSONReader(object):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3c8f4983/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 f8a64f8..3153fd6 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
@@ -23,10 +23,12 @@ import json
 import unittest
 from unittest import TestCase
 
+from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.io.graphson import GraphSONReader
+from gremlin_python.structure.io.graphson import GraphSONWriter
 
 
-class TestGraphSON(TestCase):
+class TestGraphSONReader(TestCase):
     def test_numbers(self):
         x = GraphSONReader.readObject(json.dumps({
             "@type": "g:Int32",
@@ -56,6 +58,22 @@ class TestGraphSON(TestCase):
         assert isinstance(x, float)
         assert 31.2 == x
 
+    def test_graph(self):
+        vertex = GraphSONReader.readObject(
+            """{"@type":"g:Vertex", "@value":{"id":{"@type":"g:Int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"g:Int32","@value":9},"inV":{"@type":"g:Int32","@value":3},"properties":{"weight":{"@type":"g:Double","@value":0.4}}}],"knows":[{"id":{"@type":"g:Int32","@value":7},"inV":{"@type":"g:Int32","@value":2},"properties":{"weight":{"@type":"g:Double","@value":0.5}}},{"id":{"@type":"g:Int32","@value":8},"inV":{"@type":"g:Int32","@value":4},"properties":{"weight":{"@type":"g:Double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"g:Int64","@value":1},"value":{"@type":"g:Int32","@value":29}}]}}}""")
+        assert isinstance(vertex, Vertex)
+        assert "person" == vertex.label
+        assert 1 == vertex.id
+        assert isinstance(vertex.id, int)
+        assert vertex == Vertex(1)
+
+class TestGraphSONWriter(TestCase):
+    def test_numbers(self):
+        assert """{"@type":"g:Int32","@value":1}""" == GraphSONWriter.writeObject(1)
+        assert """{"@type":"g:Int64","@value":2}""" == GraphSONWriter.writeObject(2L)
+        assert """{"@type":"g:Float","@value":3.2}""" == GraphSONWriter.writeObject(3.2)
+        assert """true""" == GraphSONWriter.writeObject(True)
+
 
 if __name__ == '__main__':
     unittest.main()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/3c8f4983/gremlin-python/src/main/jython/tests/structure/test_graph.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/structure/test_graph.py b/gremlin-python/src/main/jython/tests/structure/test_graph.py
index 9ba32c9..888f587 100644
--- a/gremlin-python/src/main/jython/tests/structure/test_graph.py
+++ b/gremlin-python/src/main/jython/tests/structure/test_graph.py
@@ -23,6 +23,7 @@ import unittest
 from unittest import TestCase
 
 from gremlin_python.structure import Edge
+from gremlin_python.structure import Property
 from gremlin_python.structure import Vertex
 from gremlin_python.structure import VertexProperty
 
@@ -41,15 +42,31 @@ class TestGraph(TestCase):
         assert Vertex("hello") == edge.inV
         assert "said" == edge.label
         assert "phrase" == edge.inV.label
+        assert edge.inV != edge.outV
         #
-        vp = VertexProperty(24L, "name", "marko")
-        assert "vp[name->marko]" == str(vp)
-        assert "name" == vp.label
-        assert "name" == vp.key
-        assert "marko" == vp.value
-        assert 24L == vp.id
-        assert isinstance(vp.id, long)
-        assert vp == VertexProperty(24L, "name", "marko")
+        vertex_property = VertexProperty(24L, "name", "marko")
+        assert "vp[name->marko]" == str(vertex_property)
+        assert "name" == vertex_property.label
+        assert "name" == vertex_property.key
+        assert "marko" == vertex_property.value
+        assert 24L == vertex_property.id
+        assert isinstance(vertex_property.id, long)
+        assert vertex_property == VertexProperty(24L, "name", "marko")
+        #
+        property = Property("age", 29)
+        assert "p[age->29]" == str(property)
+        assert "age" == property.key
+        assert 29 == property.value
+        assert isinstance(property.value, int)
+        assert property == Property("age", 29)
+        assert property != Property("age", 29L)
+        #
+        for i in [vertex, edge, vertex_property, property]:
+            for j in [vertex, edge, vertex_property, property]:
+                if type(i) != type(j):
+                    assert i != j
+                else:
+                    assert i == j
 
 
 if __name__ == '__main__':


[05/50] [abbrv] tinkerpop git commit: A few tweaks to GraphSON format.

Posted by sp...@apache.org.
A few tweaks to GraphSON format.

Made the prefix "g" instead of "gremlin". Went to upper camel casing for types.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/531dcb59
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/531dcb59
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/531dcb59

Branch: refs/heads/master
Commit: 531dcb59a6a239492fcf29fa039e10c73443e588
Parents: 58704a7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 24 16:27:14 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 24 16:27:14 2016 -0400

----------------------------------------------------------------------
 data/grateful-dead-v2d0-typed.json              | 1616 +++++++++---------
 data/tinkerpop-classic-v2d0-typed.json          |   12 +-
 data/tinkerpop-crew-v2d0-typed.json             |   12 +-
 data/tinkerpop-modern-v2d0-typed.json           |   12 +-
 .../structure/io/graphson/GraphSONMapper.java   |    2 +-
 .../structure/io/graphson/GraphSONModule.java   |   68 +-
 .../structure/io/graphson/GraphSONTokens.java   |    2 +-
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java |   14 +-
 .../gremlin_python/structure/io/graphson.py     |   38 +-
 .../io/graphson/grateful-dead-v2d0-typed.json   | 1616 +++++++++---------
 .../graphson/tinkerpop-classic-v2d0-typed.json  |   12 +-
 .../io/graphson/tinkerpop-crew-v2d0-typed.json  |   12 +-
 .../graphson/tinkerpop-modern-v2d0-typed.json   |   12 +-
 13 files changed, 1714 insertions(+), 1714 deletions(-)
----------------------------------------------------------------------



[23/50] [abbrv] tinkerpop git commit: created a TraversalSideEffects class in traversal.py that RemoteTraversalSideEffects inherits from.

Posted by sp...@apache.org.
created a TraversalSideEffects class in traversal.py that RemoteTraversalSideEffects inherits from.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5d446f3c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5d446f3c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5d446f3c

Branch: refs/heads/master
Commit: 5d446f3cdd110ec78a9c5de169df9fae9617ef15
Parents: 711d240
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 13:18:03 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 13:18:03 2016 -0600

----------------------------------------------------------------------
 .../gremlin/python/TraversalSourceGenerator.groovy  | 16 +++++++++++++++-
 .../gremlin_python/driver/remote_connection.py      |  9 ++-------
 .../main/jython/gremlin_python/process/traversal.py | 16 +++++++++++++++-
 3 files changed, 32 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5d446f3c/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index ba2edf7..a27fd40 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -64,7 +64,7 @@ class Traversal(object):
         self.graph = graph
         self.traversal_strategies = traversal_strategies
         self.bytecode = bytecode
-        self.side_effects = {}
+        self.side_effects = TraversalSideEffects()
         self.traversers = None
         self.last_traverser = None
     def __repr__(self):
@@ -187,6 +187,20 @@ class Traverser(object):
         return str(self.object)
 
 '''
+TRAVERSAL SIDE-EFFECTS
+'''
+
+class TraversalSideEffects(object):
+    def keys(self):
+        return set()
+    def get(self, key):
+        raise KeyError(key)
+    def __getitem__(self, key):
+        return self.get(key)
+    def __repr__(self):
+        return "sideEffects[size:" + str(len(self.keys())) + "]"
+
+'''
 TRAVERSAL STRATEGIES
 '''
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5d446f3c/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
index a2c973c..a659ebc 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/remote_connection.py
@@ -21,6 +21,7 @@ import six
 
 from ..process.traversal import Traversal
 from ..process.traversal import TraversalStrategy
+from ..process.traversal import TraversalSideEffects
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
@@ -52,7 +53,7 @@ class RemoteTraversal(Traversal):
         self.side_effects = side_effects
 
 
-class RemoteTraversalSideEffects(object):
+class RemoteTraversalSideEffects(TraversalSideEffects):
     def __init__(self, keys_lambda, value_lambda):
         self.keys_lambda = keys_lambda
         self.value_lambda = value_lambda
@@ -63,12 +64,6 @@ class RemoteTraversalSideEffects(object):
     def get(self, key):
         return self.value_lambda(key)
 
-    def __getitem__(self, key):
-        return self.get(key)
-
-    def __repr__(self):
-        return "sideEffects[size:" + str(len(self.keys())) + "]"
-
 
 class RemoteStrategy(TraversalStrategy):
     def __init__(self, remote_connection):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5d446f3c/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index c9fa482..7b9d4d5 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -26,7 +26,7 @@ class Traversal(object):
         self.graph = graph
         self.traversal_strategies = traversal_strategies
         self.bytecode = bytecode
-        self.side_effects = {}
+        self.side_effects = TraversalSideEffects()
         self.traversers = None
         self.last_traverser = None
     def __repr__(self):
@@ -245,6 +245,20 @@ class Traverser(object):
         return str(self.object)
 
 '''
+TRAVERSAL SIDE-EFFECTS
+'''
+
+class TraversalSideEffects(object):
+    def keys(self):
+        return set()
+    def get(self, key):
+        raise KeyError(key)
+    def __getitem__(self, key):
+        return self.get(key)
+    def __repr__(self):
+        return "sideEffects[size:" + str(len(self.keys())) + "]"
+
+'''
 TRAVERSAL STRATEGIES
 '''
 


[43/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1278' into TINKERPOP-1278


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/8569800b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/8569800b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/8569800b

Branch: refs/heads/master
Commit: 8569800b78aa4aa87049fd725c36b2db8d505651
Parents: 242d271 581505f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 16:19:44 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 16:19:44 2016 -0400

----------------------------------------------------------------------
 .../python/TraversalSourceGenerator.groovy      |  4 +-
 .../src/main/jython/gremlin_python/__init__.py  |  1 -
 .../jython/gremlin_python/driver/__init__.py    |  4 --
 .../driver/driver_remote_connection.py          |  2 +-
 .../gremlin_python/driver/remote_connection.py  |  3 ++
 .../jython/gremlin_python/process/__init__.py   | 17 --------
 .../jython/gremlin_python/process/traversal.py  |  4 +-
 .../jython/gremlin_python/structure/__init__.py |  5 ---
 .../gremlin_python/structure/io/__init__.py     |  5 ---
 .../driver/test_driver_remote_connection.py     | 46 +++++++++++++++++++-
 .../main/jython/tests/process/test_traversal.py |  2 +-
 .../main/jython/tests/structure/test_graph.py   |  8 ++--
 12 files changed, 60 insertions(+), 41 deletions(-)
----------------------------------------------------------------------



[33/50] [abbrv] tinkerpop git commit: Minor change to ant-run plugin so as to allow binding to test.

Posted by sp...@apache.org.
Minor change to ant-run plugin so as to allow binding to test.

Without this change binding exec-plugin to test imposes a block in maven that requires user input.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4191efc5
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4191efc5
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4191efc5

Branch: refs/heads/master
Commit: 4191efc59c0a8323468d9cc2b5f6735869c3301d
Parents: 9e449df
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 09:25:51 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 09:25:51 2016 -0400

----------------------------------------------------------------------
 gremlin-python/pom.xml | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4191efc5/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 9a6d75b..d7006f9 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -98,17 +98,37 @@
                 <artifactId>maven-antrun-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>createThriftDir</id>
+                        <id>create-python-reports-directory</id>
                         <phase>process-resources</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
                         <configuration>
                             <tasks>
                                 <delete dir="${build.directory}/python-reports"/>
                                 <mkdir dir="${build.directory}/python-reports"/>
                             </tasks>
                         </configuration>
+                    </execution>
+                    <!--
+                    use pytest to execute native python tests - output of xunit output is configured in setup.cfg.
+                    had to use the ant plugin - maven-exec-plugin
+                    -->
+                    <execution>
+                        <phase>integration-test</phase>
                         <goals>
                             <goal>run</goal>
                         </goals>
+                        <configuration>
+                            <skip>${skipTests}</skip>
+                            <target>
+                                <exec executable="python"
+                                      dir="${basedir}/target/python">
+                                    <arg value="setup.py"/>
+                                    <arg value="test"/>
+                                </exec>
+                            </target>
+                        </configuration>
                     </execution>
                 </executions>
             </plugin>
@@ -144,23 +164,6 @@
                             </commandlineArgs>
                         </configuration>
                     </execution>
-                    <!-- use pytest to execute native python tests - output of xunit output is configured in setup.cfg -->
-                    <execution>
-                        <id>test-python</id>
-                        <phase>generate-test-resources</phase>
-                        <goals>
-                            <goal>exec</goal>
-                        </goals>
-                        <configuration>
-                            <executable>python</executable>
-                            <workingDirectory>${basedir}/target/python</workingDirectory>
-                            <skip>${skipTests}</skip>
-                            <arguments>
-                                <argument>setup.py</argument>
-                                <argument>test</argument>
-                            </arguments>
-                        </configuration>
-                    </execution>
                 </executions>
             </plugin>
             <plugin>


[46/50] [abbrv] tinkerpop git commit: forgot to close the connection.

Posted by sp...@apache.org.
forgot to close the connection.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e2f12c3c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e2f12c3c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e2f12c3c

Branch: refs/heads/master
Commit: e2f12c3cf2e51cba84a6b2389c012833050add04
Parents: 5da8a30
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 14:30:34 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 14:30:34 2016 -0600

----------------------------------------------------------------------
 .../src/main/jython/tests/driver/test_driver_remote_connection.py   | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e2f12c3c/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 72247c4..2651521 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -108,6 +108,7 @@ class TestDriverRemoteConnection(TestCase):
             raise Exception("Accessing a non-existent key should throw an error")
         except KeyError:
             pass
+        connection.close()
 
 
 if __name__ == '__main__':


[38/50] [abbrv] tinkerpop git commit: added test_traversal.py with a method to test bytecode construction.

Posted by sp...@apache.org.
added test_traversal.py with a method to test bytecode construction.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b8ea0237
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b8ea0237
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b8ea0237

Branch: refs/heads/master
Commit: b8ea0237a4d72ffd15e80ab85dbe06b62c14b762
Parents: 078f760
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 26 12:08:19 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 26 12:08:19 2016 -0600

----------------------------------------------------------------------
 .../src/main/jython/tests/process/__init__.py   | 20 +++++++
 .../main/jython/tests/process/test_traversal.py | 57 ++++++++++++++++++++
 2 files changed, 77 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b8ea0237/gremlin-python/src/main/jython/tests/process/__init__.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/process/__init__.py b/gremlin-python/src/main/jython/tests/process/__init__.py
new file mode 100644
index 0000000..6df1100
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/process/__init__.py
@@ -0,0 +1,20 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b8ea0237/gremlin-python/src/main/jython/tests/process/test_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/process/test_traversal.py b/gremlin-python/src/main/jython/tests/process/test_traversal.py
new file mode 100644
index 0000000..1dfd78b
--- /dev/null
+++ b/gremlin-python/src/main/jython/tests/process/test_traversal.py
@@ -0,0 +1,57 @@
+'''
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+'''
+
+__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
+
+import unittest
+from unittest import TestCase
+
+from gremlin_python.structure import Graph
+
+
+class TestTraversal(TestCase):
+    def test_bytecode(self):
+        g = Graph().traversal()
+        bytecode = g.V().out("created").bytecode
+        assert 0 == len(bytecode.bindings.keys())
+        assert 0 == len(bytecode.source_instructions)
+        assert 2 == len(bytecode.step_instructions)
+        assert "V" == bytecode.step_instructions[0][0]
+        assert "out" == bytecode.step_instructions[1][0]
+        assert "created" == bytecode.step_instructions[1][1]
+        assert 1 == len(bytecode.step_instructions[0])
+        assert 2 == len(bytecode.step_instructions[1])
+        ##
+        bytecode = g.withSack(1).E().groupCount().by("weight").bytecode
+        assert 0 == len(bytecode.bindings.keys())
+        assert 1 == len(bytecode.source_instructions)
+        assert "withSack" == bytecode.source_instructions[0][0]
+        assert 1 == bytecode.source_instructions[0][1]
+        assert 3 == len(bytecode.step_instructions)
+        assert "E" == bytecode.step_instructions[0][0]
+        assert "groupCount" == bytecode.step_instructions[1][0]
+        assert "by" == bytecode.step_instructions[2][0]
+        assert "weight" == bytecode.step_instructions[2][1]
+        assert 1 == len(bytecode.step_instructions[0])
+        assert 1 == len(bytecode.step_instructions[1])
+        assert 2 == len(bytecode.step_instructions[2])
+
+
+if __name__ == '__main__':
+    unittest.main()


[14/50] [abbrv] tinkerpop git commit: found a bug in JavaTranslator around identifying the correct method during reflection.

Posted by sp...@apache.org.
found a bug in JavaTranslator around identifying the correct method during reflection.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f73c93c7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f73c93c7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f73c93c7

Branch: refs/heads/master
Commit: f73c93c78eaf2a18b913cc1d207f36294a67194f
Parents: 21865d8
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 18:49:07 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 18:49:07 2016 -0600

----------------------------------------------------------------------
 .../org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f73c93c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
index 43175f9..c39896c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/JavaTranslator.java
@@ -132,7 +132,12 @@ public final class JavaTranslator<S extends TraversalSource, T extends Traversal
                         boolean found = true;
                         for (int i = 0; i < parameters.length; i++) {
                             if (parameters[i].isVarArgs()) {
-                                Object[] varArgs = (Object[]) Array.newInstance(parameters[i].getType().getComponentType(), arguments.length - i);
+                                final Class<?> parameterClass = parameters[i].getType().getComponentType();
+                                if (arguments.length > i && !parameterClass.isAssignableFrom(arguments[i].getClass())) {
+                                    found = false;
+                                    break;
+                                }
+                                Object[] varArgs = (Object[]) Array.newInstance(parameterClass, arguments.length - i);
                                 int counter = 0;
                                 for (int j = i; j < arguments.length; j++) {
                                     varArgs[counter++] = arguments[j];


[07/50] [abbrv] tinkerpop git commit: Merge branch 'TINKERPOP-1278' of https://git-wip-us.apache.org/repos/asf/tinkerpop into TINKERPOP-1278

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1278' of https://git-wip-us.apache.org/repos/asf/tinkerpop into TINKERPOP-1278


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/72a5ae0c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/72a5ae0c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/72a5ae0c

Branch: refs/heads/master
Commit: 72a5ae0c43f49562624b6154c9dfdd1e4ff400f1
Parents: fbbcd46 531dcb5
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 14:42:47 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 14:42:47 2016 -0600

----------------------------------------------------------------------
 data/grateful-dead-v2d0-typed.json              | 1616 +++++++++---------
 data/tinkerpop-classic-v2d0-typed.json          |   12 +-
 data/tinkerpop-crew-v2d0-typed.json             |   12 +-
 data/tinkerpop-modern-v2d0-typed.json           |   12 +-
 .../structure/io/graphson/GraphSONMapper.java   |    2 +-
 .../structure/io/graphson/GraphSONModule.java   |   68 +-
 .../structure/io/graphson/GraphSONTokens.java   |    2 +-
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java |   14 +-
 .../gremlin_python/structure/io/graphson.py     |   38 +-
 .../io/graphson/grateful-dead-v2d0-typed.json   | 1616 +++++++++---------
 .../graphson/tinkerpop-classic-v2d0-typed.json  |   12 +-
 .../io/graphson/tinkerpop-crew-v2d0-typed.json  |   12 +-
 .../graphson/tinkerpop-modern-v2d0-typed.json   |   12 +-
 13 files changed, 1714 insertions(+), 1714 deletions(-)
----------------------------------------------------------------------



[19/50] [abbrv] tinkerpop git commit: Fixed error code when keys are not found for traversalopprocessor

Posted by sp...@apache.org.
Fixed error code when keys are not found for traversalopprocessor


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e71ebed6
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e71ebed6
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e71ebed6

Branch: refs/heads/master
Commit: e71ebed62b5ecd2a0023a79017012d5ea639a101
Parents: 192da0a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 25 09:08:05 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Aug 25 09:08:05 2016 -0400

----------------------------------------------------------------------
 .../gremlin/server/op/traversal/TraversalOpProcessor.java       | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e71ebed6/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index 632008c..b44c51b 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -279,7 +279,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
                         if (null == sideEffects) {
                             final String errorMessage = String.format("Could not find side-effects for %s.", sideEffect.get());
                             logger.warn(errorMessage);
-                            ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR_TIMEOUT).statusMessage(errorMessage).create());
+                            ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR).statusMessage(errorMessage).create());
                             onError(graph, context);
                             return;
                         }
@@ -319,8 +319,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
         final RequestMessage msg = context.getRequestMessage();
         logger.debug("Traversal request {} for in thread {}", msg.getRequestId(), Thread.currentThread().getName());
 
-        // TODO: Look to polish this up in GraphSON 2.0 when we don't have type lossiness anymore
-        // right now the TraversalOpPorcessor can take a direct GraphSON representation of Bytecode or directly take
+        // right now the TraversalOpProcessor can take a direct GraphSON representation of Bytecode or directly take
         // deserialized Bytecode object.
         final Object bytecodeObj = msg.getArgs().get(Tokens.ARGS_GREMLIN);
         final Bytecode bytecode = bytecodeObj instanceof Bytecode ? (Bytecode) bytecodeObj :


[50/50] [abbrv] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1278'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1278'

Conflicts:
	CHANGELOG.asciidoc


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/39648a53
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/39648a53
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/39648a53

Branch: refs/heads/master
Commit: 39648a5363d3dce8ba69d638b4a4310ea7b986d4
Parents: 3f722e6 dd202e2
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 26 20:53:40 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 26 20:53:40 2016 -0400

----------------------------------------------------------------------
 .gitignore                                      |    4 +
 CHANGELOG.asciidoc                              |   16 +
 data/grateful-dead-v2d0-typed.json              | 1616 ++---
 data/tinkerpop-classic-v2d0-typed.json          |   12 +-
 data/tinkerpop-crew-v2d0-typed.json             |   12 +-
 data/tinkerpop-modern-v2d0-typed.json           |   12 +-
 docker/build/Dockerfile.template                |    1 +
 docs/preprocessor/awk/init-code-blocks.awk      |   56 +-
 docs/preprocessor/awk/language-variants.awk     |   50 +
 docs/preprocessor/awk/prepare.awk               |    4 +-
 docs/preprocessor/awk/progressbar.awk           |    4 +-
 docs/preprocessor/install-plugins.sh            |    4 +
 docs/preprocessor/preprocess-file.sh            |   20 +-
 .../developer/development-environment.asciidoc  |    6 +-
 docs/src/dev/provider/index.asciidoc            |  125 +-
 .../src/reference/gremlin-applications.asciidoc |  129 +-
 docs/src/reference/gremlin-variants.asciidoc    |  257 +
 docs/src/reference/index.asciidoc               |    2 +
 docs/src/reference/the-graph.asciidoc           |  161 +-
 .../gremlin-language-variants/index.asciidoc    |  664 +-
 .../upgrade/release-3.2.x-incubating.asciidoc   |   15 +-
 docs/static/images/gremlin-python-drawing.png   |  Bin 0 -> 107595 bytes
 .../images/gremlin-variant-architecture.png     |  Bin 0 -> 233060 bytes
 docs/static/images/tinkerpop3.graffle           | 6676 +++++++++++++++++-
 docs/static/resources/gremlin-jython.py         |  721 --
 docs/static/resources/gremlin-python.py         |  764 --
 gremlin-console/conf/remote-graph.properties    |   12 +-
 .../plugin/gremlin-server-integration.yaml      |    5 +-
 .../CachedGremlinScriptEngineManager.java       |   99 +
 .../gremlin/jsr223/ConcurrentBindings.java      |   42 +
 .../gremlin/jsr223/CoreGremlinModule.java       |   45 +
 .../tinkerpop/gremlin/jsr223/Customizer.java    |   28 +
 .../DefaultGremlinScriptEngineManager.java      |  424 ++
 .../tinkerpop/gremlin/jsr223/GremlinModule.java |   61 +
 .../gremlin/jsr223/GremlinScriptEngine.java     |   52 +
 .../jsr223/GremlinScriptEngineFactory.java      |   44 +
 .../jsr223/GremlinScriptEngineManager.java      |  159 +
 .../gremlin/jsr223/ImportCustomizer.java        |  109 +
 .../gremlin/jsr223/JavaTranslator.java          |  173 +
 .../SingleGremlinScriptEngineManager.java       |   42 +
 .../traversal/step/map/VertexProgramStep.java   |    2 +-
 .../decoration/VertexProgramStrategy.java       |    2 +-
 .../process/remote/RemoteConnection.java        |   17 +-
 .../gremlin/process/remote/RemoteGraph.java     |   64 +-
 .../traversal/AbstractRemoteTraversal.java      |  117 +
 .../AbstractRemoteTraversalSideEffects.java     |  114 +
 .../traversal/AbstractRemoteTraverser.java      |   43 +
 .../traversal/DefaultRemoteTraverser.java       |   28 +
 .../remote/traversal/RemoteTraversal.java       |   29 +
 .../traversal/RemoteTraversalSideEffects.java   |   27 +
 .../remote/traversal/RemoteTraverser.java       |   35 +
 .../remote/traversal/step/map/RemoteStep.java   |   29 +-
 .../strategy/decoration/RemoteStrategy.java     |   53 +-
 .../gremlin/process/traversal/Bindings.java     |   58 +
 .../gremlin/process/traversal/Bytecode.java     |  263 +
 .../gremlin/process/traversal/Translator.java   |   65 +
 .../gremlin/process/traversal/Traversal.java    |   21 +
 .../process/traversal/TraversalSideEffects.java |    7 +
 .../process/traversal/TraversalSource.java      |  192 +-
 .../process/traversal/TraversalStrategies.java  |   12 +
 .../process/traversal/TraversalStrategy.java    |    2 +-
 .../dsl/graph/DefaultGraphTraversal.java        |    5 +-
 .../dsl/graph/EmptyGraphTraversal.java          |   59 -
 .../traversal/dsl/graph/GraphTraversal.java     |  436 +-
 .../dsl/graph/GraphTraversalSource.java         |  121 +-
 .../gremlin/process/traversal/dsl/graph/__.java |    4 +-
 .../lambda/AbstractLambdaTraversal.java         |    5 +
 .../traversal/step/branch/LocalStep.java        |    2 +-
 .../process/traversal/step/map/GroupStep.java   |    1 +
 .../process/traversal/step/map/MatchStep.java   |    2 +-
 .../traversal/step/map/OrderGlobalStep.java     |    6 +-
 .../process/traversal/step/util/BulkSet.java    |    5 +
 .../gremlin/process/traversal/util/AndP.java    |    4 +-
 .../process/traversal/util/BytecodeHelper.java  |   64 +
 .../traversal/util/DefaultTraversal.java        |   73 +-
 .../util/DefaultTraversalStrategies.java        |   12 +-
 .../process/traversal/util/EmptyTraversal.java  |    7 +-
 .../util/EmptyTraversalStrategies.java          |    1 +
 .../gremlin/process/traversal/util/OrP.java     |    3 +-
 .../process/traversal/util/ScriptTraversal.java |   14 +-
 .../process/traversal/util/TraversalHelper.java |    8 +
 .../traversal/util/TraversalScriptFunction.java |    4 +-
 .../io/graphson/AbstractObjectDeserializer.java |   51 +
 .../structure/io/graphson/GraphSONIo.java       |   24 +-
 .../structure/io/graphson/GraphSONMapper.java   |   22 +-
 .../structure/io/graphson/GraphSONModule.java   |  159 +-
 .../structure/io/graphson/GraphSONReader.java   |   50 +-
 .../io/graphson/GraphSONSerializersV1d0.java    |    1 +
 .../io/graphson/GraphSONSerializersV2d0.java    |   49 +-
 .../structure/io/graphson/GraphSONTokens.java   |   17 +-
 .../GraphSONTraversalSerializersV2d0.java       |  349 +
 .../io/graphson/GraphSONTypeDeserializer.java   |   74 +-
 .../io/graphson/GraphSONTypeIdResolver.java     |   14 +-
 .../io/graphson/GraphSONTypeSerializer.java     |    3 +
 .../io/graphson/GraphSONXModuleV2d0.java        |  140 +
 .../gremlin/structure/io/gryo/GryoMapper.java   |    7 +-
 .../structure/io/gryo/GryoSerializers.java      |   39 +
 .../gremlin/structure/util/StringFactory.java   |   12 +-
 .../structure/util/empty/EmptyGraph.java        |   20 +
 .../tinkerpop/gremlin/util/CoreImports.java     |  224 +
 .../gremlin/util/ScriptEngineCache.java         |    8 +
 .../tinkerpop/gremlin/util/function/Lambda.java |  199 +
 .../util/function/ScriptEngineLambda.java       |    4 +-
 .../io/graphson/AbstractGraphSONTest.java       |   51 +
 .../GraphSONMapperEmbeddedTypeTest.java         |   85 +-
 .../io/graphson/GraphSONMapperTest.java         |    5 +-
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java |  192 +-
 .../structure/io/gryo/GryoMapperTest.java       |   16 +
 .../structure/util/GraphFactoryTest.java        |    9 +
 .../util/function/ScriptEngineLambdaTest.java   |    1 +
 .../tinkerpop/gremlin/driver/Channelizer.java   |    2 +-
 .../apache/tinkerpop/gremlin/driver/Client.java |   86 +-
 .../tinkerpop/gremlin/driver/Connection.java    |    3 +-
 .../tinkerpop/gremlin/driver/Handler.java       |   53 +-
 .../tinkerpop/gremlin/driver/ResultQueue.java   |   88 +-
 .../tinkerpop/gremlin/driver/ResultSet.java     |   17 +-
 .../apache/tinkerpop/gremlin/driver/Tokens.java |  103 +-
 .../gremlin/driver/message/RequestMessage.java  |    8 +
 .../driver/remote/DriverRemoteConnection.java   |  119 +-
 .../driver/remote/DriverRemoteTraversal.java    |  138 +
 .../DriverRemoteTraversalSideEffects.java       |  101 +
 .../gremlin/driver/ser/Serializers.java         |    3 +
 .../gremlin/driver/ResultQueueTest.java         |  122 +
 .../tinkerpop/gremlin/driver/ResultSetTest.java |    4 +-
 ...raphSONMessageSerializerGremlinTestV1d0.java |  334 -
 ...raphSONMessageSerializerGremlinTestV2d0.java |  341 -
 ...raphSONMessageSerializerGremlinV1d0Test.java |  334 +
 ...raphSONMessageSerializerGremlinV2d0Test.java |  341 +
 .../step/branch/GroovyRepeatTest.groovy         |    2 +-
 .../traversal/step/filter/GroovyHasTest.groovy  |    5 +
 .../step/filter/GroovyWhereTest.groovy          |    6 +-
 .../step/sideEffect/GroovySackTest.groovy       |    2 +-
 .../step/sideEffect/GroovyStoreTest.groovy      |    2 +-
 .../gremlin/groovy/GroovyEnvironmentSuite.java  |    2 +
 .../groovy/jsr223/GroovyTranslatorTest.java     |   90 +
 .../AbstractImportCustomizerProvider.java       |    4 +
 .../groovy/engine/ConcurrentBindings.java       |    2 +
 .../gremlin/groovy/engine/GremlinExecutor.java  |    7 +-
 .../gremlin/groovy/engine/ScriptEngines.java    |   44 +-
 .../jsr223/GremlinGroovyScriptEngine.java       |  109 +-
 .../GremlinGroovyScriptEngineFactory.java       |   28 +-
 .../gremlin/groovy/jsr223/GroovyTranslator.java |  153 +
 ...op.gremlin.jsr223.GremlinScriptEngineFactory |    1 +
 .../groovy/engine/GremlinExecutorTest.java      |   14 +-
 .../jsr223/GroovyGremlinScriptEngineTest.java   |   29 +
 .../util/function/ScriptEngineLambdaTest.java   |  163 -
 gremlin-python/pom.xml                          |  468 ++
 .../python/GraphTraversalSourceGenerator.groovy |  189 +
 .../python/TraversalSourceGenerator.groovy      |  287 +
 .../gremlin/python/GenerateGremlinPython.java   |   32 +
 .../jsr223/GremlinJythonScriptEngine.java       |  212 +
 .../GremlinJythonScriptEngineFactory.java       |  105 +
 .../gremlin/python/jsr223/JythonTranslator.java |   57 +
 .../gremlin/python/jsr223/PythonTranslator.java |  191 +
 .../gremlin/python/jsr223/SymbolHelper.java     |   61 +
 gremlin-python/src/main/jython/LICENSE          |  202 +
 gremlin-python/src/main/jython/MANIFEST.in      |   18 +
 gremlin-python/src/main/jython/NOTICE           |    5 +
 gremlin-python/src/main/jython/README           |   18 +
 .../src/main/jython/gremlin_python/__init__.py  |   20 +
 .../jython/gremlin_python/driver/__init__.py    |   20 +
 .../driver/driver_remote_connection.py          |  214 +
 .../gremlin_python/driver/remote_connection.py  |   79 +
 .../jython/gremlin_python/process/__init__.py   |   20 +
 .../gremlin_python/process/graph_traversal.py   | 1138 +++
 .../jython/gremlin_python/process/traversal.py  |  336 +
 .../src/main/jython/gremlin_python/statics.py   |   46 +
 .../jython/gremlin_python/structure/__init__.py |   20 +
 .../jython/gremlin_python/structure/graph.py    |   90 +
 .../gremlin_python/structure/io/__init__.py     |   20 +
 .../gremlin_python/structure/io/graphson.py     |  290 +
 gremlin-python/src/main/jython/runtest.py       | 2892 ++++++++
 gremlin-python/src/main/jython/setup.cfg        |   21 +
 gremlin-python/src/main/jython/setup.py         |   75 +
 .../src/main/jython/tests/__init__.py           |   20 +
 .../src/main/jython/tests/driver/__init__.py    |   20 +
 .../driver/test_driver_remote_connection.py     |  124 +
 .../src/main/jython/tests/process/__init__.py   |   20 +
 .../main/jython/tests/process/test_traversal.py |   57 +
 .../src/main/jython/tests/structure/__init__.py |   20 +
 .../main/jython/tests/structure/io/__init__.py  |   20 +
 .../jython/tests/structure/io/test_graphson.py  |   79 +
 .../main/jython/tests/structure/test_graph.py   |   74 +
 .../src/main/jython/tests/test_statics.py       |   46 +
 .../services/javax.script.ScriptEngineFactory   |   20 +
 ...op.gremlin.jsr223.GremlinScriptEngineFactory |    1 +
 .../driver/DriverRemoteConnectionTest.java      |  153 +
 .../jsr223/GremlinJythonScriptEngineTest.java   |  101 +
 .../python/jsr223/JythonScriptEngineSetup.java  |   59 +
 .../python/jsr223/JythonTranslatorTest.java     |   87 +
 .../python/jsr223/PythonComputerProvider.java   |   36 +
 .../jsr223/PythonGraphSONJavaTranslator.java    |   77 +
 .../jsr223/PythonGremlinScriptEngineTest.java   |   31 +
 .../jsr223/PythonProcessComputerTest.java       |   33 +
 .../jsr223/PythonProcessStandardTest.java       |   33 +
 .../gremlin/python/jsr223/PythonProvider.java   |  161 +
 .../io/graphson/GraphSONReaderTest.java         |  133 +
 .../io/graphson/GraphSONWriterTest.java         |  130 +
 .../src/test/resources/log4j-silent.properties  |   23 +
 .../src/test/resources/log4j-test.properties    |   23 +
 .../gremlin/python/driver/credentials.kryo      |  Bin 0 -> 138 bytes
 .../python/driver/generate-modern.groovy        |   33 +
 .../driver/gremlin-server-modern-secure-py.yaml |   66 +
 .../driver/tinkergraph-credentials.properties   |   22 +
 .../python/driver/tinkergraph-empty.properties  |   18 +
 gremlin-server/conf/gremlin-server-classic.yaml |    9 +-
 .../conf/gremlin-server-modern-py.yaml          |   61 +
 .../conf/gremlin-server-modern-readonly.yaml    |    9 +-
 gremlin-server/conf/gremlin-server-modern.yaml  |    9 +-
 gremlin-server/conf/gremlin-server-neo4j.yaml   |    6 +-
 .../conf/gremlin-server-rest-secure.yaml        |    1 +
 gremlin-server/conf/gremlin-server-secure.yaml  |    1 +
 gremlin-server/conf/gremlin-server-spark.yaml   |    6 +-
 gremlin-server/conf/gremlin-server.yaml         |    6 +-
 gremlin-server/pom.xml                          |    5 +
 gremlin-server/scripts/generate-all.groovy      |    9 +-
 .../tinkerpop/gremlin/server/GremlinServer.java |    6 +-
 .../tinkerpop/gremlin/server/OpProcessor.java   |    8 +
 .../server/op/AbstractEvalOpProcessor.java      |    1 -
 .../gremlin/server/op/AbstractOpProcessor.java  |   57 +-
 .../tinkerpop/gremlin/server/op/OpLoader.java   |   14 +
 .../server/op/control/ControlOpProcessor.java   |    2 +
 .../gremlin/server/op/control/ControlOps.java   |    2 +
 .../op/traversal/TraversalOpProcessor.java      |  342 +-
 .../gremlin/server/util/SideEffectIterator.java |   97 +
 .../gremlin/server/util/TraversalIterator.java  |   54 +
 .../remote/RemoteGraphComputerProvider.java     |    6 +-
 .../driver/remote/RemoteGraphProvider.java      |   29 +-
 ...teGraphGroovyTranslatorComputerProvider.java |   54 +
 ...raphGroovyTranslatorProcessComputerTest.java |   33 +
 ...raphGroovyTranslatorProcessStandardTest.java |   33 +
 .../RemoteGraphGroovyTranslatorProvider.java    |   37 +
 .../remote/RemoteGraphProcessComputerTest.java  |   34 +
 .../remote/RemoteGraphProcessStandardTest.java  |   33 +
 .../process/RemoteGraphProcessComputerTest.java |   34 -
 .../process/RemoteGraphProcessStandardTest.java |   33 -
 .../server/GremlinResultSetIntegrateTest.java   |   23 +-
 .../remote/gremlin-server-integration.yaml      |    5 +-
 .../server/gremlin-server-integration.yaml      |    5 +-
 .../server/gremlin-server-performance.yaml      |    5 +-
 .../CachedGremlinScriptEngineManagerTest.java   |   49 +
 .../jsr223/GremlinEnabledScriptEngineTest.java  |   57 +
 .../jsr223/GremlinScriptEngineSuite.java        |   47 +
 .../gremlin/jsr223/ScriptEngineLambdaTest.java  |  158 +
 .../gremlin/jsr223/ScriptEngineToTest.java      |   35 +
 .../gremlin/process/ProcessComputerSuite.java   |    4 +
 .../gremlin/process/ProcessStandardSuite.java   |    6 +-
 .../process/traversal/CoreTraversalTest.java    |    2 +
 .../traversal/step/branch/RepeatTest.java       |    8 +-
 .../process/traversal/step/filter/HasTest.java  |   15 +
 .../process/traversal/step/filter/IsTest.java   |    4 +-
 .../process/traversal/step/map/AddEdgeTest.java |    4 +-
 .../process/traversal/step/map/SelectTest.java  |    2 +-
 .../traversal/step/sideEffect/SackTest.java     |    8 +-
 .../traversal/step/sideEffect/StoreTest.java    |    8 +-
 .../ElementIdStrategyProcessTest.java           |   13 +-
 .../decoration/TranslationStrategy.java         |  135 +
 .../TranslationStrategyProcessTest.java         |   67 +
 .../gremlin/structure/io/IoCustomTest.java      |   19 +-
 .../gremlin/structure/io/IoEdgeTest.java        |   13 +-
 .../gremlin/structure/io/IoGraphTest.java       |   10 +-
 .../gremlin/structure/io/IoPropertyTest.java    |   13 +-
 .../tinkerpop/gremlin/structure/io/IoTest.java  |    2 +-
 .../gremlin/structure/io/IoVertexTest.java      |   13 +-
 .../gremlin/structure/io/util/CustomId.java     |   75 +-
 .../io/graphson/grateful-dead-v2d0-typed.json   | 1616 ++---
 .../graphson/tinkerpop-classic-v2d0-typed.json  |   12 +-
 .../io/graphson/tinkerpop-crew-v2d0-typed.json  |   12 +-
 .../graphson/tinkerpop-modern-v2d0-typed.json   |   12 +-
 pom.xml                                         |   32 +-
 .../tinkergraph/TinkerGraphProvider.java        |   30 +-
 ...erGraphGroovyTranslatorComputerProvider.java |   37 +
 ...raphGroovyTranslatorProcessComputerTest.java |   33 +
 ...raphGroovyTranslatorProcessStandardTest.java |   33 +
 .../TinkerGraphGroovyTranslatorProvider.java    |   75 +
 ...nkerGraphJavaTranslatorComputerProvider.java |   37 +
 ...rGraphJavaTranslatorProcessComputerTest.java |   33 +
 ...rGraphJavaTranslatorProcessStandardTest.java |   33 +
 .../TinkerGraphJavaTranslatorProvider.java      |   73 +
 .../TinkerGraphGraphSONSerializerV2d0Test.java  |   22 +-
 .../structure/TinkerGraphPlayTest.java          |   41 +-
 .../io/graphson/GraphSONTranslator.java         |   74 +
 ...GraphGraphSONTranslatorComputerProvider.java |   37 +
 ...phGraphSONTranslatorProcessComputerTest.java |   33 +
 ...phGraphSONTranslatorProcessStandardTest.java |   33 +
 .../TinkerGraphGraphSONTranslatorProvider.java  |   87 +
 286 files changed, 26706 insertions(+), 5698 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/39648a53/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 24cb406,91d6fed..ad805c2
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,10 -26,24 +26,26 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
 +* Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined.
+ * Added `gremlin-python` package as a Gremlin language variant in Python.
+ * Added `Bytecode` which specifies the instructions and arguments used to construct a traversal.
+ * Created an experimental GraphSON representation of `Bytecode` that will be considered unstable until 3.3.0.
+ * Added `Translator` which allows from the translation of `Bytecode` into some other form (e.g. script, `Traversal`, etc.).
+ * Added `JavaTranslator`, `GroovyTranslator`, `PythonTranslator`, and `JythonTranslator` for translating `Bytecode` accordingly.
+ * Added `TranslationStrategy` to `gremlin-test` so translators can be tested against the the process test suite.
+ * Added `Traversal.Admin.nextTraverser()` to get the next result in bulk-form (w/ default implementation).
+ * Added `TraversalSource.getAnonymousTraversalClass()` (w/ default implementation).
+ * Added `GremlinScriptEngine` interface which specifies a `eval(Bytecode, Bindings)` method.
+ * Deprecated `RemoteGraph` in favor of `TraversalSource.withRemote()` as it is more technically correct to tie a remote traversal to the `TraversalSource` than a `Graph` instance.
+ * `GremlinGroovyScriptEngine` implements `GremlinScriptEngine`.
+ * Added `GremlinJythonScriptEngine` which implements `GremlinScriptEngine`.
+ * Removed support for submitting a Java serialized `Traversal` to Gremlin Server.
+ * Removed a largely internal feature that supported automatic unrolling of traversers in the Gremlin Driver.
+ * Made it possible to directly initialize `OpProcessor` implementations with server `Settings`.
+ * Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined
  * Introduced GraphSON 2.0.
  * Deprecated `embedTypes` on the builder for `GraphSONMapper`.
 +* Bumped to Netty 4.0.40.final.
  * Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
  * Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
  * Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/39648a53/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/39648a53/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------


[08/50] [abbrv] tinkerpop git commit: Minor cleanup to documentation around GraphSON 2.0

Posted by sp...@apache.org.
Minor cleanup to documentation around GraphSON 2.0


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6a2532f7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6a2532f7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6a2532f7

Branch: refs/heads/master
Commit: 6a2532f7708379a8b14e067d20b3fee900610bf6
Parents: 531dcb5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 24 16:48:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 24 16:48:55 2016 -0400

----------------------------------------------------------------------
 docs/src/reference/the-graph.asciidoc           | 152 +++++++++----------
 .../upgrade/release-3.2.x-incubating.asciidoc   |   2 +-
 2 files changed, 74 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6a2532f7/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index 151de3a..b7fbc74 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -559,9 +559,9 @@ Types embedding
 
 With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided.
 
-[[graphson-1.0-types]]
-Types with GraphSON 1.0.
-++++++++++++++++++++++++
+[[graphson-1-0-types]]
+Types with GraphSON 1.0
++++++++++++++++++++++++
 
 GraphSON 1.0 is the version enabled by default when creating a GraphSON Mapper. Here is how to enable types with GraphSON
 1.0:
@@ -663,9 +663,9 @@ from JSON typing.  While the output is more verbose, it comes with the security
 non-JVM languages won't be able to consume this information automatically, at least there is a hint as to how the
 values should be coerced back into the correct types in the target language.
 
-[[graphson-2.0-types]]
-GraphSON 2.0.
-+++++++++++++
+[[graphson-2-0-types]]
+GraphSON 2.0
+++++++++++++
 
 GraphSON 2.0 has been introduced to improve the format of the typed values from GraphSON 1.0. It provides non-Java
 centric types information in a consistent format.
@@ -682,19 +682,18 @@ A namespace gives the possibility for TinkerPop implementors to categorize custo
 and avoid collision with existing TinkerPop types. By default, TinkerPop types will have the
 namespace `g`.
 
-GraphSON 2.0 will provide type information for any value that is not String, Boolean, Map or Collection.
-This includes types for Graph objects as well. The current Graph object types provided by
-TinkerPop, and their respective typeIDs are :
+GraphSON 2.0 will provide type information for any value that is not `String`, `Boolean`, `Map` or `Collection`.
+TinkerPop includes types for graph elements:
 
-* Vertex -> "gremlin:vertex"
-* Edge -> "gremlin:edge"
-* VertexPropery -> "gremlin:vertexproperty"
-* Property -> "gremlin:property"
-* Path -> "gremlin:path"
-* Tree -> "gremlin:tree"
-* Graph -> "gremlin:graph"
-* Metrics -> "gremlin:metrics"
-* TraversalMetrics -> `gremlin:traversalmetrics"
+* Vertex -> "g:Vertex"
+* Edge -> "g:Edge"
+* VertexPropery -> "g:VertexProperty"
+* Property -> "g:Property"
+* Path -> "g:Path"
+* Tree -> "g:Tree"
+* Graph -> "g:Graph"
+* Metrics -> "g:Metrics"
+* TraversalMetrics -> `g:TraversalMetrics"
 
 Here's the same previous example of GraphSON 1.0, but with GraphSON 2.0:
 
@@ -716,74 +715,69 @@ Here's a sample output:
 [source,json]
 ----
 {
-    "@type":"gremlin:vertex",
-    "@value":{
-        "id":{
-            "@type":"gremlin:int32",
-            "@value":1
-        },
-        "label":"person",
-        "properties":{
-            "name":[
-                {
-                    "@type":"gremlin:vertexproperty",
-                    "@value":{
-                        "id":{
-                            "@type":"gremlin:int64",
-                            "@value":0
-                        },
-                        "value":"marko",
-                        "label":"name"
-                    }
-                }
-            ],
-            "myUUIDprop":[
-                {
-                    "@type":"gremlin:vertexproperty",
-                    "@value":{
-                        "id":{
-                            "@type":"gremlin:int64",
-                            "@value":12
-                        },
-                        "value":{
-                            "@type":"gremlin:uuid",
-                            "@value":"02c1041b-c7ef-46ce-812e-3d7963ad50b3"
-                        },
-                        "label":"myUUIDprop"
-                    }
-                }
-            ],
-            "age":[
-                {
-                    "@type":"gremlin:vertexproperty",
-                    "@value":{
-                        "id":{
-                            "@type":"gremlin:int64",
-                            "@value":1
-                        },
-                        "value":{
-                            "@type":"gremlin:int32",
-                            "@value":29
-                        },
-                        "label":"age"
-                    }
-                }
-            ]
-        }
-    }
+	"@type": "g:Vertex",
+	"@value": {
+		"id": {
+			"@type": "g:Int32",
+			"@value": 1
+		},
+		"label": "person",
+		"properties": {
+			"name": [{
+				"@type": "g:VertexProperty",
+				"@value": {
+					"id": {
+						"@type": "g:Int64",
+						"@value": 0
+					},
+					"value": "marko",
+					"label": "name"
+				}
+			}],
+			"uuid": [{
+				"@type": "g:VertexProperty",
+				"@value": {
+					"id": {
+						"@type": "g:Int64",
+						"@value": 12
+					},
+					"value": {
+						"@type": "g:UUID",
+						"@value": "829c7ddb-3831-4687-a872-e25201230cd3"
+					},
+					"label": "uuid"
+				}
+			}],
+			"age": [{
+				"@type": "g:VertexProperty",
+				"@value": {
+					"id": {
+						"@type": "g:Int64",
+						"@value": 1
+					},
+					"value": {
+						"@type": "g:Int32",
+						"@value": 29
+					},
+					"label": "age"
+				}
+			}]
+		}
+	}
 }
 ----
 
-Here's how to disable types when creating a GraphSON 2.0 `Mapper`:
+Types can be disabled when creating a GraphSON 2.0 `Mapper` with:
 
-[gremlin-groovy]
+[source,groovy]
 ----
-mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).typeInfo(GraphSONMapper.TypeInfo.NO_TYPES).create()
+graph.io(graphson()).mapper().
+      version(GraphSONVersion.V2_0).
+      typeInfo(GraphSONMapper.TypeInfo.NO_TYPES).create()
 ----
 
-By disabling types, the JSON payload produced will be the same than GraphSON 2.0, without the
-extra information that is written for types. Please note, disabling types can be unsafe with
-regards to the written data.
+By disabling types, the JSON payload produced will lack the extra information that is written for types. Please note,
+disabling types can be unsafe with regards to the written data in that types can be lost.
 
 [[gryo-reader-writer]]
 Gryo Reader/Writer

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6a2532f7/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index fb2ec21..a73dabf 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -38,7 +38,7 @@ GraphSON 2.0
 GraphSON 2.0 has been introduced to improve and normalize the format of types embedded in GraphSON.
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274],
-link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2-0-types[Reference Documentation -
 GraphSON 2.0].
 
 Log4j Dependencies


[31/50] [abbrv] tinkerpop git commit: Have CPython testing of side_effects working -- ghetto. Made _list, _set, _all in python as these are Python built in functions and our static enums shouldn't override these symbols.

Posted by sp...@apache.org.
Have CPython testing of side_effects working -- ghetto. Made _list,_set,_all in python as these are Python built in functions and our static enums shouldn't override these symbols.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/87be8a7d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/87be8a7d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/87be8a7d

Branch: refs/heads/master
Commit: 87be8a7d1b7f3f000a6f2aa1fb7e7aa877c5a1cf
Parents: 18e3d64
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 16:06:24 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 16:06:24 2016 -0600

----------------------------------------------------------------------
 .../gremlin/python/jsr223/PythonTranslator.java |  4 +-
 .../gremlin/python/jsr223/SymbolHelper.java     |  3 +
 .../driver/driver_remote_connection.py          | 10 ++-
 .../jython/gremlin_python/process/traversal.py  | 10 +--
 .../gremlin_python/structure/io/graphson.py     |  5 +-
 .../driver/DriverRemoteConnectionTest.java      | 73 ++++++++++++++------
 .../io/graphson/GraphSONWriterTest.java         |  6 +-
 7 files changed, 74 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/87be8a7d/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 0721c34..08295e0 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
@@ -146,9 +146,9 @@ public class PythonTranslator implements Translator.ScriptTranslator {
         else if (object instanceof Class)
             return ((Class) object).getCanonicalName();
         else if (object instanceof VertexProperty.Cardinality)
-            return "Cardinality." + object.toString();
+            return "Cardinality." + SymbolHelper.toPython(object.toString());
         else if (object instanceof SackFunctions.Barrier)
-            return "Barrier." + object.toString();
+            return "Barrier." + SymbolHelper.toPython(object.toString());
         else if (object instanceof Enum)
             return convertStatic(((Enum) object).getDeclaringClass().getSimpleName() + ".") + SymbolHelper.toPython(object.toString());
         else if (object instanceof P)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/87be8a7d/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/SymbolHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/SymbolHelper.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/SymbolHelper.java
index 2b4c112..5264ce7 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/SymbolHelper.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/SymbolHelper.java
@@ -39,6 +39,9 @@ public final class SymbolHelper {
         TO_PYTHON_MAP.put("is", "_is");
         TO_PYTHON_MAP.put("not", "_not");
         TO_PYTHON_MAP.put("from", "_from");
+        TO_PYTHON_MAP.put("list", "_list");
+        TO_PYTHON_MAP.put("set", "_set");
+        TO_PYTHON_MAP.put("all", "_all");
         //
         TO_PYTHON_MAP.forEach((k, v) -> FROM_PYTHON_MAP.put(v, k));
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/87be8a7d/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 165eed6..f1aaeee 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -86,7 +86,10 @@ class DriverRemoteConnection(RemoteConnection):
                 }
             }
         }
-        keys = yield self._execute_message(message)
+        try:
+            keys = yield self._execute_message(message)
+        except:
+            keys = []
         raise gen.Return(set(keys))
 
     @gen.coroutine
@@ -107,7 +110,10 @@ class DriverRemoteConnection(RemoteConnection):
                 "aliases": {"g": self.traversal_source}
             }
         }
-        value = yield self._execute_message(message)
+        try:
+            value = yield self._execute_message(message)
+        except:
+            raise KeyError(key)
         raise gen.Return(value)
 
     @gen.coroutine

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/87be8a7d/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 7b9d4d5..b39ec35 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -77,10 +77,10 @@ class Traversal(object):
 Barrier = Enum('Barrier', 'normSack')
 statics.add_static('normSack', Barrier.normSack)
 
-Cardinality = Enum('Cardinality', 'list set single')
+Cardinality = Enum('Cardinality', '_list _set single')
 statics.add_static('single', Cardinality.single)
-statics.add_static('list', Cardinality.list)
-statics.add_static('set', Cardinality.set)
+statics.add_static('_list', Cardinality._list)
+statics.add_static('_set', Cardinality._set)
 
 Column = Enum('Column', 'keys values')
 statics.add_static('keys', Column.keys)
@@ -113,10 +113,10 @@ statics.add_static('keyDecr', Order.keyDecr)
 statics.add_static('valueDecr', Order.valueDecr)
 statics.add_static('shuffle', Order.shuffle)
 
-Pop = Enum('Pop', 'all first last')
+Pop = Enum('Pop', '_all first last')
 statics.add_static('first', Pop.first)
 statics.add_static('last', Pop.last)
-statics.add_static('all', Pop.all)
+statics.add_static('_all', Pop._all)
 
 Scope = Enum('Scope', '_global local')
 statics.add_static('_global', Scope._global)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/87be8a7d/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 c3199c6..b8305ac 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
@@ -70,7 +70,7 @@ class GraphSONReader(object):
                 type = object[_SymbolHelper._TYPE]
                 if type in deserializers:
                     return deserializers[type]._objectify(object)
-        # list and map are treated as normal json objects (could be isolated deserializers)
+                    # list and map are treated as normal json objects (could be isolated deserializers)
             newDict = {}
             for key in object:
                 newDict[GraphSONReader._objectify(key)] = GraphSONReader._objectify(object[key])
@@ -247,7 +247,8 @@ class PropertyDeserializer(GraphSONDeserializer):
 
 class _SymbolHelper(object):
     symbolMap = {"_global": "global", "_as": "as", "_in": "in", "_and": "and",
-                 "_or": "or", "_is": "is", "_not": "not", "_from": "from"}
+                 "_or": "or", "_is": "is", "_not": "not", "_from": "from",
+                 "_set": "set", "_list": "list", "_all": "all"}
 
     _TYPE = "@type"
     _VALUE = "@value"

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/87be8a7d/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
index ba0f5d0..0434809 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.python.driver;
 
 import org.apache.tinkerpop.gremlin.TestHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalSideEffects;
 import org.apache.tinkerpop.gremlin.server.GremlinServer;
 import org.apache.tinkerpop.gremlin.server.Settings;
 import org.junit.BeforeClass;
@@ -63,30 +64,36 @@ public class DriverRemoteConnectionTest {
         }
     }
 
-    private static List<String> submit(final String traversal) throws IOException {
-        final StringBuilder script = new StringBuilder();
-        script.append("from gremlin_python import statics\n");
-        script.append("from gremlin_python.structure.graph import Graph\n");
-        script.append("from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection\n");
-        script.append("from gremlin_python.structure.io.graphson import GraphSONWriter\n\n");
-        script.append("statics.load_statics(globals())\n");
-        script.append("graph = Graph()\n");
-        script.append("g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182','g',username='stephen', password='password'))\n");
-        script.append("results = " + traversal + ".toList()\n");
-        script.append("print results\n\n");
+    private static List<String> submit(final String... scriptLines) throws IOException {
+        final StringBuilder builder = new StringBuilder();
+        builder.append("from gremlin_python import statics\n");
+        builder.append("from gremlin_python.structure.graph import Graph\n");
+        builder.append("from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection\n");
+        builder.append("from gremlin_python.structure.io.graphson import GraphSONWriter\n\n");
+        builder.append("statics.load_statics(globals())\n");
+        builder.append("graph = Graph()\n");
+        builder.append("g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182','g',username='stephen', password='password'))\n");
+        for (int i = 0; i < scriptLines.length - 1; i++) {
+            builder.append(scriptLines[i] + "\n");
+        }
+        builder.append("final = " + scriptLines[scriptLines.length - 1] + "\n");
+        builder.append("if isinstance(final,dict):\n");
+        builder.append("  for key in final.keys():\n");
+        builder.append("    print (str(key),str(final[key]))\n");
+        builder.append("elif isinstance(final,str):\n");
+        builder.append("  print final\n");
+        builder.append("else:\n");
+        builder.append("  for result in final:\n");
+        builder.append("    print result\n\n");
 
         File file = TestHelper.generateTempFile(DriverRemoteConnectionTest.class, "temp", "py");
         final Writer writer = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
-        writer.write(script.toString());
+        writer.write(builder.toString());
         writer.flush();
         writer.close();
 
         final BufferedReader reader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("python " + file.getAbsolutePath()).getInputStream()));
-        final List<String> lines = reader.lines()
-                .map(line -> line.substring(1, line.length() - 1))
-                .flatMap(line -> Arrays.stream(line.split(",")))
-                .map(String::trim)
-                .collect(Collectors.toList());
+        final List<String> lines = reader.lines().map(String::trim).collect(Collectors.toList());
         reader.close();
         file.delete();
         return lines;
@@ -99,27 +106,47 @@ public class DriverRemoteConnectionTest {
 
         List<String> result = DriverRemoteConnectionTest.submit("g.V().count()");
         assertEquals(1, result.size());
-        assertEquals("6L", result.get(0));
+        assertEquals("6", result.get(0));
         //
         result = DriverRemoteConnectionTest.submit("g.V(1).out('created').name");
         assertEquals(1, result.size());
-        assertEquals("u'lop'", result.get(0));
+        assertEquals("lop", result.get(0));
         //
         result = DriverRemoteConnectionTest.submit("g.V(1).out()");
         assertEquals(3, result.size());
         assertTrue(result.contains("v[4]"));
         assertTrue(result.contains("v[2]"));
         assertTrue(result.contains("v[3]"));
+        //
+        result = DriverRemoteConnectionTest.submit("g.V().repeat(out()).times(2).name");
+        assertEquals(2, result.size());
+        assertTrue(result.contains("lop"));
+        assertTrue(result.contains("ripple"));
     }
 
     @Test
-    public void testAnonymousTraversals() throws Exception {
+    public void testSideEffects() throws Exception {
         if (!PYTHON_EXISTS) return;
 
-        List<String> result = DriverRemoteConnectionTest.submit("g.V().repeat(out()).times(2).name");
+        List<String> result = DriverRemoteConnectionTest.submit(
+                "t = g.V().out().iterate()",
+                "str(t.side_effects)");
+        assertEquals(1, result.size());
+        assertEquals(new DefaultTraversalSideEffects().toString(), result.get(0));
+        //
+        result = DriverRemoteConnectionTest.submit(
+                "t = g.V().out('created').groupCount('m').by('name').iterate()",
+                "t.side_effects['m']");
+        assertEquals(2, result.size());
+        assertTrue(result.contains("('ripple', '1')"));
+        assertTrue(result.contains("('lop', '3')"));
+        //
+        result = DriverRemoteConnectionTest.submit(
+                "t = g.V().out('created').groupCount('m').by('name').aggregate('n').iterate()",
+                "t.side_effects.keys()");
         assertEquals(2, result.size());
-        assertTrue(result.contains("u'lop'"));
-        assertTrue(result.contains("u'ripple'"));
+        assertTrue(result.contains("m"));
+        assertTrue(result.contains("n"));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/87be8a7d/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
index 1b438b6..5e71bda 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
@@ -101,9 +101,9 @@ public class GraphSONWriterTest {
         for (final T t : T.values()) {
             assertEquals(t, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(T." + t.name() + ")").toString(), Object.class));
         }
-        for (final Pop t : Pop.values()) {
-            assertEquals(t, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Pop." + t.name() + ")").toString(), Object.class));
-        }
+        assertEquals(Pop.first, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Pop.first)").toString(), Object.class));
+        assertEquals(Pop.last, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Pop.last)").toString(), Object.class));
+        assertEquals(Pop.all, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Pop._all)").toString(), Object.class));
         assertEquals(Scope.global, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Scope._global)").toString(), Object.class));
         assertEquals(Scope.local, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Scope.local)").toString(), Object.class));
     }


[27/50] [abbrv] tinkerpop git commit: a nicer message about CPython existence.

Posted by sp...@apache.org.
a nicer message about CPython existence.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e75ca231
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e75ca231
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e75ca231

Branch: refs/heads/master
Commit: e75ca231bd743d8a54006f76ad835be1b27bacc1
Parents: b4b8679
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Aug 25 14:26:46 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Aug 25 14:26:46 2016 -0600

----------------------------------------------------------------------
 .../gremlin/python/driver/DriverRemoteConnectionTest.java   | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e75ca231/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
index 518c303..ba0f5d0 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/DriverRemoteConnectionTest.java
@@ -34,6 +34,7 @@ import java.io.InputStreamReader;
 import java.io.Writer;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 import static org.junit.Assert.assertEquals;
@@ -49,8 +50,12 @@ public class DriverRemoteConnectionTest {
     @BeforeClass
     public static void setup() {
         try {
-            PYTHON_EXISTS = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("python --version").getErrorStream())).lines().filter(line -> line.trim().startsWith("Python ")).findAny().isPresent();
-            System.out.println("Python exists: " + PYTHON_EXISTS);
+            final Optional<String> pythonVersion = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("python --version").getErrorStream()))
+                    .lines()
+                    .filter(line -> line.trim().startsWith("Python "))
+                    .findAny();
+            PYTHON_EXISTS = pythonVersion.isPresent();
+            System.out.println("Python virtual machine: " + pythonVersion.orElse("None"));
             if (PYTHON_EXISTS)
                 new GremlinServer(Settings.read(DriverRemoteConnectionTest.class.getResourceAsStream("gremlin-server-modern-secure-py.yaml"))).start().join();
         } catch (final Exception ex) {


[10/50] [abbrv] tinkerpop git commit: driver_remote_connection is much simpler where the aggregateTo is now part of the message stream process. Removed lots of dead methods that can be easily embedded in the parent method.

Posted by sp...@apache.org.
driver_remote_connection is much simpler where the aggregateTo is now part of the message stream process. Removed lots of dead methods that can be easily embedded in the parent method.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5fcc9224
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5fcc9224
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5fcc9224

Branch: refs/heads/master
Commit: 5fcc9224f31cbd1c54c085cc9ff277151400cfa6
Parents: 860f90b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 15:11:40 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 15:11:56 2016 -0600

----------------------------------------------------------------------
 .../driver/driver_remote_connection.py          | 70 +++++++++-----------
 1 file changed, 32 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5fcc9224/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index 77354e8..271d245 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -55,33 +55,47 @@ class DriverRemoteConnection(RemoteConnection):
     @gen.coroutine
     def submit_traversal_bytecode(self, bytecode, request_id):
         message = self._get_traversal_bytecode_message(bytecode, request_id)
-        traversers = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
+        traversers = yield self._execute_message(message)
         raise gen.Return(traversers)
 
     @gen.coroutine
     def submit_sideEffect_keys(self, request_id):
         message = self._get_sideEffect_keys_message(request_id)
-        keys = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
+        keys = yield self._execute_message(message)
         raise gen.Return(set(keys))
 
     @gen.coroutine
     def submit_sideEffect_value(self, request_id, key):
         message = self._get_sideEffect_value_message(request_id, key)
-        side_effects = yield self._execute_message(message, lambda result: GraphSONReader._objectify(result))
-        raise gen.Return(side_effects[0])  # don't get it wrapped in a list
+        side_effects = yield self._execute_message(message)
+        raise gen.Return(side_effects)
 
     @gen.coroutine
-    def _execute_message(self, message, resp_parser):
+    def _execute_message(self, message):
         if self._ws.protocol is None:
             self._ws = yield websocket.websocket_connect(self.url)
         self._ws.write_message(message, binary=True)
-        resp = Response(self._ws, self._username, self._password, resp_parser)
-        results = []
+        resp = Response(self._ws, self._username, self._password)
+        results = None
         while True:
             msg = yield resp.receive()
             if msg is None:
                 break
-            results.append(msg)
+            if None == results:
+                aggregateTo = msg[0]
+                if "list" == aggregateTo:
+                    results = []
+                elif "set" == aggregateTo:
+                    results = set()
+                elif "map" == aggregateTo:
+                    results = {}
+                else:
+                    results = []
+            if isinstance(results, dict):
+                for item in msg[1]:
+                    results.update(item)
+            else:
+                results += msg[1]
         raise gen.Return(results)
 
     def close(self):
@@ -90,7 +104,7 @@ class DriverRemoteConnection(RemoteConnection):
     def _get_traversal_bytecode_message(self, bytecode, request_id):
         message = {
             "requestId": {
-                "@type": "gremlin:uuid",
+                "@type": "g:UUID",
                 "@value": request_id
             },
             "op": "bytecode",
@@ -106,14 +120,14 @@ class DriverRemoteConnection(RemoteConnection):
     def _get_sideEffect_keys_message(self, request_id):
         message = {
             "requestId": {
-                "@type": "gremlin:uuid",
+                "@type": "g:UUID",
                 "@value": str(uuid.uuid4())
             },
             "op": "keys",
             "processor": "traversal",
             "args": {
                 "sideEffect": {
-                    "@type": "gremlin:uuid",
+                    "@type": "g:UUID",
                     "@value": request_id
                 }
             }
@@ -124,14 +138,14 @@ class DriverRemoteConnection(RemoteConnection):
     def _get_sideEffect_value_message(self, request_id, key):
         message = {
             "requestId": {
-                "@type": "gremlin:uuid",
+                "@type": "g:UUID",
                 "@value": str(uuid.uuid4())
             },
             "op": "gather",
             "processor": "traversal",
             "args": {
                 "sideEffect": {
-                    "@type": "gremlin:uuid",
+                    "@type": "g:UUID",
                     "@value": request_id
                 },
                 "sideEffectKey": key,
@@ -157,22 +171,17 @@ class DriverRemoteConnection(RemoteConnection):
 
     def _finalize_message(self, message):
         message = json.dumps(message)
-        return self._set_message_header(message)
-
-    @staticmethod
-    def _set_message_header(message):
         mime_type = b"application/vnd.gremlin-v2.0+json"
         mime_len = b"\x21"
         return b"".join([mime_len, mime_type, message.encode("utf-8")])
 
 
 class Response:
-    def __init__(self, ws, username, password, resp_parser):
+    def __init__(self, ws, username, password):
         self._ws = ws
         self._closed = False
         self._username = username
         self._password = password
-        self._resp_parser = resp_parser
 
     @gen.coroutine
     def receive(self):
@@ -193,27 +202,12 @@ class Response:
             self._closed = True
             return
         elif status_code in [200, 206]:
-            # todo: bulk
-            if "list" == aggregateTo:
-                results = []
-                for item in data:
-                    results.append(self._resp_parser(item))
-            elif "set" == aggregateTo:
-                results = set()
-                for item in data:
-                    results.add(self._resp_parser(item))
-            elif "map" == aggregateTo:
-                results = {}
-                for item in data:
-                    m = self._resp_parser(item)
-                    results[m.keys()[0]] = m[m.keys()[0]]
-            else:
-                results = []
-                for item in data:
-                    results.append(self._resp_parser(item))
+            results = []
+            for item in data:
+                results.append(GraphSONReader._objectify(item))
             if status_code == 200:
                 self._closed = True
-            raise gen.Return(results)
+            raise gen.Return((aggregateTo, results))
         else:
             self._closed = True
             raise GremlinServerError(