[
https://issues.apache.org/jira/browse/TINKERPOP-1896?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16392294#comment-16392294
]
ASF GitHub Bot commented on TINKERPOP-1896:
-------------------------------------------
GitHub user spmallette opened a pull request:
https://github.com/apache/tinkerpop/pull/814
TINKERPOP-1896 Fixed bug in lambda processing for python
https://issues.apache.org/jira/browse/TINKERPOP-1896
When a lambda is in a traversal, the bytecode gets pushed to a scriptengine
for evaluation. For python that means, using the JythonTranslator. Prior to
this change the JythonTranslator largely relied on the PythonTranslator to
convert bytecode to Jython-syntaxed Gremlin. The problem there is that in the
JythonScriptEngine, the Traversal bindings are Java objects and so if
translated to pure Python syntax, traversal steps like as() become as_() and
thus not part of the Java API that is expected - and then errors. Not sure why
this didn't come up sooner, but it really only ends up being an issue if you
are using bytecode, use gremlin server, use jython in gremlin server and then
submit a traversal with a lambda - so perhaps that hasn't been a common
combination.
All tests pass with `docker/build.sh -t -i`
VOTE +1
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/apache/tinkerpop TINKERPOP-1896
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/tinkerpop/pull/814.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #814
----
commit 5c5df83e71ab0071c1d073a2ca68c5822ea9336d
Author: Stephen Mallette <spmva@...>
Date: 2018-03-08T22:15:34Z
TINKERPOP-1896 Fixed bug in lambda processing for python
When a lambda is in a traversal, the bytecode gets pushed to a scriptengine
for evaluation. For python that means, using the JythonTranslator. Prior to
this change the JythonTranslator largely relied on the PythonTranslator to
convert bytecode to Jython-syntaxed Gremlin. The problem there is that in the
JythonScriptEngine, the Traversal bindings are Java objects and so if
translated to pure Python syntax, traversal steps like as() become as_() and
thus not part of the Java API that is expected - and then errors. Not sure why
this didn't come up sooner, but it really only ends up being an issue if you
are using bytecode, use gremlin server, use jython in gremlin server and then
submit a traversal with a lambda - so perhaps that hasn't been a common
combination.
----
> gremlin-python lambdas error
> ----------------------------
>
> Key: TINKERPOP-1896
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1896
> Project: TinkerPop
> Issue Type: Bug
> Components: python
> Affects Versions: 3.3.1
> Reporter: Branden Moore
> Assignee: stephen mallette
> Priority: Major
> Fix For: 3.2.8, 3.3.2
>
>
> Gremlin-python lambdas throw an error on the server when the preceding step
> produces maps.
> {code}
> Traceback (most recent call last):
> File "foo.py", line 15, in <module>
> print g.V().has('name').match(__.as_('x').label().as_('lbl'),
> __.as_('x').id().as_('id')).select('lbl', 'id').map(lambda: "lambda x:
> type(x)").toList()
> File
> "/user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py",
> line 52, in toList
> return list(iter(self))
> File
> "/user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py",
> line 70, in next
> return self.__next__()
> File
> "/user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py",
> line 43, in __next__
> self.traversal_strategies.apply_strategies(self)
> File
> "/user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py",
> line 352, in apply_strategies
> traversal_strategy.apply(traversal)
> File
> "/user/.local/lib/python2.7/site-packages/gremlin_python/driver/remote_connection.py",
> line 143, in apply
> remote_traversal = self.remote_connection.submit(traversal.bytecode)
> File
> "/user/.local/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py",
> line 54, in submit
> results = result_set.all().result()
> File
> "/user/.local/lib/python2.7/site-packages/concurrent/futures/_base.py", line
> 462, in result
> return self.__get_result()
> File
> "/user/.local/lib/python2.7/site-packages/concurrent/futures/_base.py", line
> 414, in __get_result
> raise exception_type, self._exception, self._traceback
> gremlin_python.driver.protocol.GremlinServerError: 599: AttributeError: type
> object 'org.apache.tinkerpop.gremlin.process.traversal.dsl' has no attribute
> 'as_' in <script> at line number 1
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)