Repository: tinkerpop Updated Branches: refs/heads/master 793ed6d6d -> fcabd01c4
Added better support for Gremlin language tokens in python CTR Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c0a35e25 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c0a35e25 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c0a35e25 Branch: refs/heads/master Commit: c0a35e25b7cb87cac9786a2c30d94cf560311338 Parents: 793ed6d Author: Stephen Mallette <[email protected]> Authored: Fri Aug 31 13:33:14 2018 -0400 Committer: Stephen Mallette <[email protected]> Committed: Fri Aug 31 13:34:01 2018 -0400 ---------------------------------------------------------------------- gremlin-python/glv/TraversalSource.template | 12 ++--- gremlin-python/glv/generate.groovy | 16 ++++-- .../jython/gremlin_python/process/traversal.py | 54 +++++++++++++++++++- 3 files changed, 72 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0a35e25/gremlin-python/glv/TraversalSource.template ---------------------------------------------------------------------- diff --git a/gremlin-python/glv/TraversalSource.template b/gremlin-python/glv/TraversalSource.template index 3ca2786..4e312ea 100644 --- a/gremlin-python/glv/TraversalSource.template +++ b/gremlin-python/glv/TraversalSource.template @@ -134,15 +134,15 @@ def <%= method %>(*args): statics.add_static('<%= method %>',<%= method %>) <% } %> +<% tokens.each { k,v -> %> ''' -IO +<%= k %> ''' - -class IO(object): -<% io.each {k,v -> %> - <%= k %> = "<%= v %>" -<% } %> +class <%= k %>(object): +<% v.each {a,b -> %> + <%= a %> = "<%= b %>" +<% }} %> ''' http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0a35e25/gremlin-python/glv/generate.groovy ---------------------------------------------------------------------- diff --git a/gremlin-python/glv/generate.groovy b/gremlin-python/glv/generate.groovy index f810e10..c7ad241 100644 --- a/gremlin-python/glv/generate.groovy +++ b/gremlin-python/glv/generate.groovy @@ -18,6 +18,10 @@ */ import org.apache.tinkerpop.gremlin.jsr223.CoreImports +import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponent +import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank +import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressure +import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPath import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource @@ -25,6 +29,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.P import org.apache.tinkerpop.gremlin.process.traversal.IO import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__ import java.lang.reflect.Modifier + // this is a bit of a copy of what's in SymbolHelper - no way around it because this code generation task occurs // before the SymbolHelper is available to the plugin. def toPythonMap = ["global": "global_", @@ -39,6 +44,13 @@ def toPythonMap = ["global": "global_", "list": "list_", "set": "set_", "all": "all_"] + +def gatherTokensFrom = { tokenClasses -> + def m = [:] + tokenClasses.each { tc -> m << [(tc.simpleName) : tc.getFields().sort{ a, b -> a.name <=> b.name }.collectEntries{ f -> [(f.name) : f.get(null)]}]} + return m +} + def toJavaMap = toPythonMap.collectEntries{k,v -> [(v):k]} def toPython = { symbol -> toPythonMap.getOrDefault(symbol, symbol) } def toJava = { symbol -> toJavaMap.getOrDefault(symbol, symbol) } @@ -79,9 +91,7 @@ def binding = ["enums": CoreImports.getClassImports() collect { toPython(it.name) }. unique(). sort { a, b -> a <=> b }, - "io": IO.class.getFields(). - sort{ a, b -> a.name <=> b.name }. - collectEntries{ f -> [(f.name) : f.get(null)]}, + "tokens": gatherTokensFrom([IO, ConnectedComponent, ShortestPath, PageRank, PeerPressure]), "toPython": toPython, "toJava": toJava] http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c0a35e25/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 49bb7b1..4bb4c9c 100644 --- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py +++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py @@ -304,11 +304,11 @@ def without(*args): statics.add_static('without',without) + ''' IO ''' - class IO(object): graphml = "graphml" @@ -323,6 +323,58 @@ class IO(object): writer = "~tinkerpop.io.writer" +''' +ConnectedComponent +''' + +class ConnectedComponent(object): + + component = "gremlin.connectedComponentVertexProgram.component" + + edges = "~tinkerpop.connectedComponent.edges" + + propertyName = "~tinkerpop.connectedComponent.propertyName" + +''' +ShortestPath +''' + +class ShortestPath(object): + + distance = "~tinkerpop.shortestPath.distance" + + edges = "~tinkerpop.shortestPath.edges" + + includeEdges = "~tinkerpop.shortestPath.includeEdges" + + maxDistance = "~tinkerpop.shortestPath.maxDistance" + + target = "~tinkerpop.shortestPath.target" + +''' +PageRank +''' + +class PageRank(object): + + edges = "~tinkerpop.pageRank.edges" + + propertyName = "~tinkerpop.pageRank.propertyName" + + times = "~tinkerpop.pageRank.times" + +''' +PeerPressure +''' + +class PeerPressure(object): + + edges = "~tinkerpop.peerPressure.edges" + + propertyName = "~tinkerpop.peerPressure.propertyName" + + times = "~tinkerpop.peerPressure.times" + '''
