是否可以从python中的字节码生成gremlin查询

问题描述 投票:1回答:1

是否可以从字节码生成gremlin脚本?

我正在开发一个POC,我需要通过Gremlin API查询图形Azure CosmosDB数据库。

目前,Azure CosmosDB不支持字节码。 Azure开发团队有started working on this但到目前为止还没有发布发布时间表。

我想准备一些工作代码,在将来可以获得字节码支持时,需要进行最少的重构。

基于Apache TinkerPop docs,有两种方式提交Gremlin查询:字节码和脚本

# script
client = Client('ws://localhost:8182/gremlin', 'g')
list = client.submit("g.V().has('person','name',name).out('knows')",{'name': 'marko'}).all()

# bytecode
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
list = g.V().has("person","name","marko").out("knows").toList()

“字节码方式”对我来说似乎更有效(语法检查,IDE intellisens等)而且我对创建DSL(领域特定语言)感兴趣。

是否可以使用流畅的api并将其序列化为字符串,方式类似于:

client = Client('ws://localhost:8182/gremlin', 'g')
g = traversal()
q = g.V().has("person","name","marko").out("knows").toString()
list = client.submit(q).all()

我使用的是python 3.5和gremlinpython 3.4.0

python bytecode gremlin azure-cosmosdb-gremlinapi
1个回答
1
投票

绝对可以从字节码生成遍历的String表示。 TinkerPop已经为Groovy和Python脚本做了这些(出于各种原因,主要用于测试,但它有其它用途,如支持字节码中的lambda和其他实用目的)。我们通过ScriptTranslator实现实现了这一点,Groovy有一个,Python有两个(其中一个实际上是Jython)。问题当然是所有这些ScriptTranslator实例都是技术上用于JVM,听起来你需要一些原生Python。

也许您可以检查PythonTranslator代码并在本机Python中实现它?它基本上只是一堆if-then和字符串连接。

© www.soinside.com 2019 - 2024. All rights reserved.