[ 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)