Можно ли сгенерировать запросы gremlin из байт-кода в Python? - PullRequest
1 голос
/ 20 марта 2019

Можно ли сгенерировать скрипт 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()

«Путь байт-кода» кажется мне гораздо более эффективным (проверка синтаксиса, intellisens IDE и т. Д.), Более того, я заинтересован в создании 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 Ответ

1 голос
/ 20 марта 2019

Определенно возможно генерировать строковое представление обхода из байт-кода. TinkerPop уже делает это для скриптов Groovy и Python (по разным причинам, в первую очередь для тестирования, но у него есть и другие применения, такие как поддержка лямбда-выражений в байт-коде и для других утилитарных целей). Мы осуществляем это с помощью ScriptTranslator реализаций, и есть один для Groovy и два для Python (где один фактически для Jython ). Проблема, конечно, в том, что все эти ScriptTranslator экземпляры предназначены для технической поддержки JVM, и, похоже, вам нужно что-то для нативного Python.

Возможно, вы могли бы изучить код PythonTranslator и реализовать его на нативном Python? В основном это просто набор if-then и конкатенация строк.

...