Как создать ObjectID из его строкового представления [pyarrow] - PullRequest
0 голосов
/ 15 февраля 2020

Я сохраняю объект Python в хранилище Plasma в одном клиенте и хочу загрузить его в другом. Моя идея состояла в том, чтобы передать ObjectID как часть HTTP-запроса. Поэтому у меня есть что-то вроде:

import pyarrow.plasma as plasma

client = plasma.connect("/tmp/plasma")
payload = {"a": 1}
object_id = client.put(payload)
object_str = str(object_id)
print(object_str)  # outputs: "ObjectID(8d8e54e5cb547962a6d16ff2869c2c3282ff6550)"

В моем клиенте-получателе я ожидал, что смогу сделать что-то вроде:

import pyarrow.plasma as plasma
client = plasma.connect("/tmp/plasma")

data = client.get("8d8e54e5cb547962a6d16ff2869c2c3282ff6550")

Но это не работает, так как client.get ожидает объект plasma.ObjectID, а не строковый идентификатор. Но тогда я не могу найти способ создать объект plasma.ObjectID, используя этот идентификатор. Там написано, что мне нужно передать 20 байтов, но я не уверен, как получить правильные 20 байтов из этого идентификатора. Я пробовал такие вещи, как plasma.ObjectID(b'8d8e54e5cb547962a6d16ff2869c2c3282ff6550'), но безрезультатно.

Единственное, что я нашел, что работает, это хакерское решение перечисления всех объектов в магазине, как "client.list ()", а затем Соответствие строки строковому представлению ключей ObjectID в возвращенном словаре.

Если я не следую предполагаемому дизайну, как мне:

  1. сохранить объект python в Plasma на сервере 1
  2. передать ссылку по HTTP с одного сервера на другой
  3. получить доступ к этому объекту на сервере 2?

1 Ответ

0 голосов
/ 16 февраля 2020

Нашел решение. Напечатанный ObjectID является шестнадцатеричным кодом. Вы можете преобразовать это в байты как это:

# source
import pyarrow.plasma as plasma
client = plasma.connect("/tmp/plasma")

payload = {"a": 1}
object_id = client.put(payload)
object_str = str(object_id)
print(object_str)  # outputs: "ObjectID(8d8e54e5cb547962a6d16ff2869c2c3282ff6550)"

# client
id_str = "8d8e54e5cb547962a6d16ff2869c2c3282ff6550"
object = plasma.ObjectID(bytes.fromhex(id_str))
data = client.get(object)
...