BadRequestError: app "testbed-test" cannot access app "_"'s data
BadRequestError: app "testbed-test" cannot access app "_"'s data
这是我的pythonclass
from app.commons.abstract.dal import ndbService
from google.appengine.ext import ndb
from app.conference.models.conference import ConferenceNDB, ConferenceMessageNDB
conference_key = ndb.Key('Conference', 'CFC Australia')
class ConferenceService(ndbService):
def convert_to_object(self, value):
conf = ConferenceNDB(parent=conference_key)
conf.name = value['name']
conf.year = value['year']
conf.description = value['description']
return conf
def write(self, value):
conference = self.convert_to_object(value)
return conference.put()
def read(self, value):
key = ndb.Key(urlsafe=value)
conference = key.get()
return conference
def remove(self, value):
pass
这是单元测试
def test_conference_write(self):
conf = {'name': 'xxxx',
'year': 2017,
'description': 'xxxx'}
svc_conf = ConferenceService()
key = svc_conf.write(conf)
print(key)
self.assertIsNotNone(key)
我的单元测试失败并出现以下错误。
Error
Traceback (most recent call last):
File "C:\Python27\lib\unittest\case.py", line 329, in run
testMethod()
File "C:\Code\App-Engine\cfc-melbourne-website\tests\test_conference.py", line 40, in test_conference_write
key = svc_conf.write(conf)
File "C:\Code\App-Engine\cfc-melbourne-website\app\admin\services\conferenceservice.py", line 19, in write
return conference.put()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 3458, in _put
return self._put_async(**ctx_options).get_result()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 383, in get_result
self.check_success()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 427, in _help_tasklet_along
value = gen.throw(exc.__class__, exc, tb)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\context.py", line 824, in put
key = yield self._put_batcher.add(entity, options)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 427, in _help_tasklet_along
value = gen.throw(exc.__class__, exc, tb)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\context.py", line 358, in _put_tasklet
keys = yield self._conn.async_put(options, datastore_entities)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 513, in _on_rpc_completion
result = rpc.get_result()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 613, in get_result
return self.__get_result_hook(self)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\datastore\datastore_rpc.py", line 1879, in __put_hook
self.check_rpc_success(rpc)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\datastore\datastore_rpc.py", line 1371, in check_rpc_success
raise _ToDatastoreError(err)
BadRequestError: app "testbed-test" cannot access app "_"'s data
------------更新------2017 年 8 月 21 日
在我的测试库中使用以下代码修复了它
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.setup_env(
app_id='_',
overwrite=True
)
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()
ndb.get_context().clear_cache()
密钥包括 app_id。可以通过key.app().
查看
默认 app_id 是“_”。您的 conference_key 是在导入源文件期间使用默认 app_id ('_') 创建的。
之后,您在应用中的某处将 app_id 设置为 'testbed-test'。然后所有键都包含 app_id ('testbed-test') 并且您的键不匹配。
因此,在设置 app_id 后创建密钥。
这是我的pythonclass
from app.commons.abstract.dal import ndbService
from google.appengine.ext import ndb
from app.conference.models.conference import ConferenceNDB, ConferenceMessageNDB
conference_key = ndb.Key('Conference', 'CFC Australia')
class ConferenceService(ndbService):
def convert_to_object(self, value):
conf = ConferenceNDB(parent=conference_key)
conf.name = value['name']
conf.year = value['year']
conf.description = value['description']
return conf
def write(self, value):
conference = self.convert_to_object(value)
return conference.put()
def read(self, value):
key = ndb.Key(urlsafe=value)
conference = key.get()
return conference
def remove(self, value):
pass
这是单元测试
def test_conference_write(self):
conf = {'name': 'xxxx',
'year': 2017,
'description': 'xxxx'}
svc_conf = ConferenceService()
key = svc_conf.write(conf)
print(key)
self.assertIsNotNone(key)
我的单元测试失败并出现以下错误。
Error
Traceback (most recent call last):
File "C:\Python27\lib\unittest\case.py", line 329, in run
testMethod()
File "C:\Code\App-Engine\cfc-melbourne-website\tests\test_conference.py", line 40, in test_conference_write
key = svc_conf.write(conf)
File "C:\Code\App-Engine\cfc-melbourne-website\app\admin\services\conferenceservice.py", line 19, in write
return conference.put()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 3458, in _put
return self._put_async(**ctx_options).get_result()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 383, in get_result
self.check_success()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 427, in _help_tasklet_along
value = gen.throw(exc.__class__, exc, tb)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\context.py", line 824, in put
key = yield self._put_batcher.add(entity, options)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 427, in _help_tasklet_along
value = gen.throw(exc.__class__, exc, tb)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\context.py", line 358, in _put_tasklet
keys = yield self._conn.async_put(options, datastore_entities)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 513, in _on_rpc_completion
result = rpc.get_result()
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\api\apiproxy_stub_map.py", line 613, in get_result
return self.__get_result_hook(self)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\datastore\datastore_rpc.py", line 1879, in __put_hook
self.check_rpc_success(rpc)
File "C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\datastore\datastore_rpc.py", line 1371, in check_rpc_success
raise _ToDatastoreError(err)
BadRequestError: app "testbed-test" cannot access app "_"'s data
------------更新------2017 年 8 月 21 日
在我的测试库中使用以下代码修复了它
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.setup_env(
app_id='_',
overwrite=True
)
self.testbed.activate()
self.testbed.init_datastore_v3_stub()
self.testbed.init_memcache_stub()
ndb.get_context().clear_cache()
密钥包括 app_id。可以通过key.app().
查看默认 app_id 是“_”。您的 conference_key 是在导入源文件期间使用默认 app_id ('_') 创建的。
之后,您在应用中的某处将 app_id 设置为 'testbed-test'。然后所有键都包含 app_id ('testbed-test') 并且您的键不匹配。
因此,在设置 app_id 后创建密钥。