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

Reply via email to