昨夜思い付いてたんだけど、そのまま寝ちゃったので、今日になって実装した。0.1.0は単にGremlinクエリをCypherクエリに変換するだけだったんだが、ソースコードファイルからGremlinクエリを検出して、Cypherクエリに変換するようにした。で、ローカルのファイルだけだと不便なので、URLでもOK。
下記が0.1.0と同じで、-gでGremlinクエリを渡すとCypherクエリに変換する。
g2c -g 'g.V().has(“name”, “Alice”).as(“a”).V().has(“name”, “Bob”).as(“b”).select(“a”, “b”).by(“name”)'
Converted Cypher queries:
line 1, g.V().has("name", "Alice").as("a").V().has("name", "Bob").as("b").select("a", "b").by("name") ->
MATCH (a {name: "Alice"}), (b {name: "Bob"}) RETURN a.name AS a, b.name AS b
で、URLで指定すると、ファイルを取得してGremlinクエリを検出する。
g2c --url https://raw.githubusercontent.com/nedlowe/gremlin-python-example/refs/heads/master/app.py
Converted Cypher queries:
line 42, g.V(person_id).toList() ->
MATCH (p) WHERE id(p) = person_id RETURN p
line 42, g.V(person_id) ->
MATCH (n) WHERE id(n) = person_id RETURN n
line 55, g.V(vertex).valueMap().toList() ->
MATCH (n) WHERE id(n) = $vertex RETURN n
line 55, g.V(vertex).valueMap() ->
MATCH (n) WHERE id(n) = $vertex RETURN n
line 55, g.V(vertex) ->
MATCH (n) WHERE id(n) = vertex RETURN n
line 77, g.addV('person').property(T.id, person_id).next() ->
CREATE (n:person {id: person_id})
......
ローカルファイルも同様。
g2c --file ~/Desktop/g.py
Converted Cypher queries:
line 1, "g.V()" ->
MATCH (n) RETURN n
line 3, "g.E()" ->
MATCH ()-[r]->() RETURN r
line 4, "g.V('vertexId')" ->
MATCH (n) WHERE id(n) = 'vertexId' RETURN n
......
あと、0.1.0でも変換結果はキャッシュすることでOpenAIのAPIの呼び出し回数を減らすようにしていたんだけど、こちらでテストで叩いた結果がキャッシュに溜まるので、それをパッケージに含めて、もしユーザーホームディレクトリにキャッシュファイルが無い場合は、配置するようにした。実行時に以下のメッセージが出る。
g2c -f ~/Desktop/g.py
.g2c_cache was deployed to /Users/rifujita/.g2c_cache.