Amazon Neptune при отправке запроса: AttributeError: объект «str» не имеет атрибута «source_instructions»

У меня есть следующий код, работающий на AWS lambda, но получающий следующую ошибку.

Ошибка

      [ERROR] AttributeError: 'str' object has no attribute 'source_instructions'
Traceback (most recent call last):

    File "/var/task/gremlin_python/driver/driver_remote_connection.py", line 56, in submit
        result_set = self._client.submit(bytecode, request_options=self._extract_request_options(bytecode))
      File "/var/task/gremlin_python/driver/driver_remote_connection.py", line 81, in _extract_request_options
        options_strategy = next((x for x in bytecode.source_instructionsEND RequestId: 4ee8073c-e941-43b3-8014-8717893b3188

Исходный код

      from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection


def test_neptune(host):
    remoteConn = DriverRemoteConnection('wss://{}:8182/gremlin','g'.format(host))

    query = "g.V().groupCount().by(label).unfold().project('label','count').by(keys).by(values)"
    response = remoteConn.submit(query)
    print("response-> {}" .format(response))

    # iterate repsonse
    # go thru label
    for set_item in response:
        for item in set_item:
            print("item-> item: {}".format(item))

    remoteConn.close()

test_neptune()

2 ответа

Ваш DriverRemoteConnectionзвонок неверный. У вас есть:

          remoteConn = DriverRemoteConnection('wss://{}:8182/gremlin','g'.format(host))

Итак, вы отправляете {}в качестве имени хоста и передать «g» в качестве второго параметра, что, вероятно, и является причиной ошибки. Я не знаю, для чего вы предназначали «g», но вы, вероятно, хотите:

          remoteConn = DriverRemoteConnection('wss://{}:8182/gremlin'.format(host))

Если вы отправляете запрос в виде текстовой строки, вам необходимо создать Clientобъект по-другому или напишите запрос как встроенный Python. Есть два примера в (1) и (2), которые показывают каждый вариант. Ошибка, которую вы видите, связана с тем, что сервер пытается найти байт-код Gremlin в отправленном пакете, но нашел только строку (которая не имеет source_instructionsметод).

Используя DriverRemoteConnectionвы можете использовать строку кода Python, например:

      result = (g.V().groupCount().
                  by(label).
            unfold().
            project('label','count').
              by(keys).
              by(values).
            next())

Если вы действительно хотите/нужно отправить запрос в виде строки вместо байт-кода, см. мой ответ на этот вопрос

  1. https://github.com/krlawrence/graph/blob/master/sample-code/basic-client.py
  2. https://github.com/krlawrence/graph/blob/master/sample-code/glv-client.py
Другие вопросы по тегам