Можно ли сгенерировать запросы gremlin из байт-кода в Python?
Можно ли сгенерировать скрипт gremlin из байт-кода?
Я работаю над POC, в котором мне нужно запросить базу данных графа Azure CosmosDB через Gremlin API.
В настоящее время Azure CosmosDB не поддерживает байт-код. Команда разработчиков Azure начала работать над этим, но сроки выпуска пока не опубликованы.
Я хотел бы подготовить рабочий код, который потребует минимального рефакторинга в будущем, когда поддержка байт-кода станет общедоступной.
Основываясь на документации Apache TinkerPop, существует два способа отправки запросов 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
1 ответ
Определенно возможно генерировать строковое представление обхода из байт-кода. TinkerPop уже делает это для скриптов Groovy и Python (по разным причинам, в первую очередь для тестирования, но у него есть и другие применения, такие как поддержка лямбда-выражений в байт-коде и для других утилитарных целей). Мы осуществляем это через ScriptTranslator
реализации и есть одна для Groovy и две для Python (где одна на самом деле для Jython). Проблема, конечно, в том, что все эти ScriptTranslator
Технически это примеры для JVM, и похоже, что вам нужно что-то для нативного Python.
Возможно, вы могли бы изучить PythonTranslator
код и реализовать это на родном Python? Это в основном просто куча if-then
и конкатенация строк.