Marko A. Rodriguez created TINKERPOP-1328:
---------------------------------------------
Summary: Provide [source,gremlin-python] as an code executor in
docs
Key: TINKERPOP-1328
URL: https://issues.apache.org/jira/browse/TINKERPOP-1328
Project: TinkerPop
Issue Type: Improvement
Components: documentation
Affects Versions: 3.2.0-incubating
Reporter: Marko A. Rodriguez
Fix For: 3.2.1
We currently support {{[gremlin-groovy]}} and {{[gremlin-groovy,modern]}}-style
code block annotations. It would be good to also support {{[gremlin-python]}}
and {{[gremlin-python,modern]}}. Likewise, ensure a generalization for the
future when {{gremlin-ruby}} and {{gremlin-php}} are added.
Gremlin-Python source can be evaluated using Groovy and the Jython
ScriptEngine. Suppose the following code block:
{code}
[gremlin-jython,modern]
g.V().out().name
{code}
*GROOVY*
First, assume the following startup code that should be evaluated once and only
once into the Gremlin-Groovy script engine.
{code}
import javax.script.ScriptEngineManager
import javax.script.SimpleBindings
loader = new URLClassLoader(new
File("/Applications/jython-2.7.0/jython.jar").toURI().toURL()) // JYTHON_PATH
is better
jython = new ScriptEngineManager(loader).getEngineByName("jython")
jython.eval("import sys");
jython.eval("sys.path.append('/Users/marko/software/tinkerpop/gremlin-variant/src/main/jython/gremlin_python')");
// PYTHON_PATH is better
jython.eval("from gremlin_python import *");
jythonBindings = new SimpleBindings();
jythonBindings.put("g", jython.eval("PythonGraphTraversalSource('g')"));
jython.getContext().setBindings(jythonBindings,
javax.script.ScriptContext.GLOBAL_SCOPE);
{code}
*The above requires that a global variable exist to where Jython is installed
as well as to where Gremlin-Python is installed. Though, for the latter, you
will simply be able to use {{pip}} to install dynamically ({{PYTHON_PATH}}) is
set to the location of Gremlin-Python.*
>From there, the code block above would be evaluated as:
{code}
g = TinkerGraphFactory.createModern().traversal()
Eval.me("g", g, jython.eval("g.V().out().name").toString())
{code}
This looks as follow:
{code}
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> Eval.me("g", g, jython.eval("g.V().out().name").toString())
==>lop
==>vadas
==>josh
==>ripple
==>lop
==>lop
{code}
And thats that...
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)