Tree traversal error in Python language variant gremlin_python

41 views
Skip to first unread message

Tanner Sorensen

unread,
Mar 2, 2023, 8:21:32 AM3/2/23
to Gremlin-users
I am trying to traverse a tree. My query works in Gremlin Console.

🞂 ./bin/gremlin.sh
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/home/tannersorensen/Downloads/apache-tinkerpop-gremlin-console-3.6.2/lib/groovy-2.5.15-indy.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = traversal().withEmbedded(graph)
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has("name", "marko").emit().repeat(out()).tree().next()
==>v[1]={v[2]={}, v[3]={}, v[4]={v[3]={}, v[5]={}}}

However, I get an error in the Python language variant `gremlin_python`.

(env) 🞂 python
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gremlin_python.process.anonymous_traversal import traversal
>>> from gremlin_python.process.graph_traversal import __
>>> from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
>>> g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'),)
>>> v0 = g.addV().property("label", "v0").next()
>>> v1 = g.addV().property("label", "v1").next()
>>> v2 = g.addV().property("label", "v2").next()
>>> v3 = g.addV().property("label", "v3").next()
>>> v4 = g.addV().property("label", "v4").next()
>>> g.addE("link").from_(v0).to(v1).next()
e[150][140-link->142]
>>> g.addE("link").from_(v0).to(v2).next()
e[151][140-link->144]
>>> g.addE("link").from_(v2).to(v3).next()
e[152][144-link->146]
>>> g.addE("link").from_(v2).to(v4).next()
e[153][144-link->148]
>>> g.V().has("label", "v0").emit().repeat(__.out()).tree().next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/process/traversal.py", line 117, in next
    return self.__next__()
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/process/traversal.py", line 48, in __next__
    self.traversal_strategies.apply_strategies(self)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/process/traversal.py", line 684, in apply_strategies
    traversal_strategy.apply(traversal)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/driver/remote_connection.py", line 78, in apply
    remote_traversal = self.remote_connection.submit(traversal.bytecode)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/driver/driver_remote_connection.py", line 105, in submit
    results = result_set.all().result()
  File "/usr/lib/python3.8/concurrent/futures/_base.py", line 444, in result
    return self.__get_result()
  File "/usr/lib/python3.8/concurrent/futures/_base.py", line 389, in __get_result
    raise self._exception
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/driver/resultset.py", line 90, in cb
    f.result()
  File "/usr/lib/python3.8/concurrent/futures/_base.py", line 437, in result
    return self.__get_result()
  File "/usr/lib/python3.8/concurrent/futures/_base.py", line 389, in __get_result
    raise self._exception
  File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/driver/connection.py", line 90, in _receive
    status_code = self._protocol.data_received(data, self._results)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/driver/protocol.py", line 96, in data_received
    message = self._message_serializer.deserialize_message(message)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/driver/serializer.py", line 280, in deserialize_message
    result = self._graphbinary_reader.to_object(b)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 203, in to_object
    return self.deserializers[DataType(bt)].objectify(buff, self, nullable)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 502, in objectify
    return cls.is_null(buff, reader, cls._read_list, nullable)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 231, in is_null
    return None if nullable and buff.read(1)[0] == 0x01 else else_opt(buff, reader)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 509, in _read_list
    the_list.append(r.read_object(b))
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 194, in read_object
    return self.to_object(b)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 203, in to_object
    return self.deserializers[DataType(bt)].objectify(buff, self, nullable)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 949, in objectify
    return cls.is_null(buff, reader, cls._read_traverser, nullable)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 231, in is_null
    return None if nullable and buff.read(1)[0] == 0x01 else else_opt(buff, reader)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 954, in _read_traverser
    obj = r.read_object(b)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 194, in read_object
    return self.to_object(b)
  File "/home/tannersorensen/env/lib/python3.8/site-packages/gremlin_python/structure/io/graphbinaryV1.py", line 203, in to_object
    return self.deserializers[DataType(bt)].objectify(buff, self, nullable)
KeyError: <DataType.tree: 43>

Does anyone have an idea what went wrong? Do I need to configure the serialization protocol in some particular way when setting up the Gremlin Server?

Stephen Mallette

unread,
Mar 3, 2023, 6:43:57 AM3/3/23
to gremli...@googlegroups.com
This is a long running issue with all non-JVM languages. tree() and subgraph() aren't supported: 


I don't know of any workarounds offhand short of constructing the tree yourself along the lines of this workaround for subgraph():






--
You received this message because you are subscribed to the Google Groups "Gremlin-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to gremlin-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/gremlin-users/a2305d97-a92e-4c6a-ae57-2524bcd4f198n%40googlegroups.com.

Tanner Sorensen

unread,
Mar 4, 2023, 9:51:37 AM3/4/23
to Gremlin-users
Got it. Thank you for the clarification.
Reply all
Reply to author
Forward
0 new messages