Новая функция GAE NDB Datastore: доступ к сущностям хранилища данных из другого приложения GAE
Чтение новой документации хранилища данных GAE NDB: https://cloud.google.com/appengine/docs/python/ndb/modelclass
get_by_id(id, parent=None, app=None, namespace=None, **ctx_options)
Возвращает объект по идентификатору. Это действительно просто сокращение для
Key(cls, id).get()
,аргументы
id
Идентификатор строки или целочисленного ключа. родительский родительский ключ модели для получения.
app
(ключевое слово arg) ID приложения. Если не указан, получает данные для текущего приложения.
namespace
(ключевое слово arg) Пространство имен. Если не указан, получает данные для пространства имен по умолчанию.
**ctx_options
Параметры контекста Возвращает экземпляр модели или None, если не найден.
Я обнаружил это новое app
параметр. Это то, что мне было нужно давным-давно!!!!! Я просто попытался получить доступ к хранилищу данных приложения "xxxxxdev" из приложения "xxxxxglobal", но я получаю эту ошибку:
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1373, in check_rpc_success
raise _ToDatastoreError(err)
BadRequestError: app s~xxxxxglobal cannot access app xxxxxxdev's data
Я добавил учетные записи служб xxxxxdev@appspot.gserviceaccount.com и xxxxxglobal@appspot.gserviceaccount.com в качестве администраторов друг друга по этой ссылке: https://console.cloud.google.com/iam-admin/iam/
Но я все еще получаю проблему.
Может кто-нибудь мне помочь? Мне нужно знать, где в панели управления я могу предоставить доступ к хранилищу данных другому приложению в App Engine.
1 ответ
В настоящее время ndb не использует API-интерфейс Cloud Datastore и в обычном режиме работы не может подключиться к хранилищу данных другого приложения - он изначально подключается к хранилищу данных приложения, в котором выполняется код.
Однако вы можете использовать удаленный API для подключения ndb к хранилищам данных различных приложений из среды разработки.
В настоящее время имеется [открытый запрос функций в общедоступном трекере для App Engine для возможности доступа к нескольким хранилищам данных из одного приложения. Не стесняйтесь публиковать запрос на добавление функций специально для ndb, хотя из следующих комментариев в источнике видно, что это уже то, над чем мы работаем:
current_app_id = os.environ.get('APPLICATION_ID', None)
if current_app_id and current_app_id != app_id:
# TODO(pcostello): We should support this so users can connect to different
# applications.
raise ValueError('Cannot create a Cloud Datastore context that connects '
'to an application (%s) that differs from the application '
'already connected to (%s).' % (app_id, current_app_id))
os.environ['APPLICATION_ID'] = app_id