Как получить сущность хранилища данных urlsafe из потока данных - PullRequest
0 голосов
/ 15 октября 2018

Есть ли способ получить устаревший urlsafe объекта хранилища данных в потоке данных?

Я пробовал какой-то метод, но все не удалось ...

  1. Прямое кодирование

    base64.urlsafe_b64encode(key.SerializeToString()).strip(b'=')
    

    => не то же самое по сравнению с appengine

  2. import google.cloud.datastore.key

    => кажется конфликт с потоком данных dataastoreio?

  3. Скопируйте _app_engine_key_pb2.py из google.cloud.datastore и используйте его так же, как to_legacy_urlsafe () исходный код

    elements = []
    for part in key.path:
        element_kwargs = {'type': part.kind}
        if part.id:
            element_kwargs['id'] = part.id
        elif part.name:
            element_kwargs['name'] = part.name
        element = _app_engine_key_pb2.Path.Element(**element_kwargs)
        elements.append(element)
    legacy_path = _app_engine_key_pb2.Path(element=elements)
    reference = _app_engine_key_pb2.Reference(
        app=key.partition_id.project_id,
        path=legacy_path,
        name_space=key.partition_id.namespace_id
    )
    raw_bytes = reference.SerializeToString()
    urlsafe = base64.urlsafe_b64encode(raw_bytes).strip(b'=')
    

    =>, но по-прежнему не то же самое по сравнению с appengine ...

1 Ответ

0 голосов
/ 17 октября 2018

Код ndb имеет:

urlsafe = base64.b64encode(self.reference().Encode())
return urlsafe.rstrip('=').replace('+', '-').replace('/', '_')

Таким образом, вы должны получить те же результаты с:

urlsafe = base64.b64encode(key.SerializeToString())
return urlsafe.rstrip('=').replace('+', '-').replace('/', '_')

Используете ли вы ndb или библиотеку db?Кажется, что найденная вами функция to_legacy_urlsafe () соответствует библиотеке db.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...