Google app engine 属性错误:';实体';对象没有属性'_到u pb';尝试在google app engine上完成blobstore文件时

Google app engine 属性错误:';实体';对象没有属性'_到u pb';尝试在google app engine上完成blobstore文件时,google-app-engine,blobstore,Google App Engine,Blobstore,[更新] 我应该注意,这是在一个事务中发生的,这个错误是在dev_appserver上生成的。我没有在生产环境中进行测试。这在生产中似乎没有发生 [/update] 我不确定我在这里做错了什么;我的代码与文档示例几乎相同 我的代码: filename = files.blobstore.create(mime_type='application/octet-stream') with files.open(filename, 'a') as f: f.write(json.dumps(o

[更新]

我应该注意,这是在一个事务中发生的,这个错误是在dev_appserver上生成的。我没有在生产环境中进行测试。这在生产中似乎没有发生

[/update]

我不确定我在这里做错了什么;我的代码与文档示例几乎相同

我的代码:

filename = files.blobstore.create(mime_type='application/octet-stream')
with files.open(filename, 'a') as f:
    f.write(json.dumps(oldblocks, separators=(',', ':')))
files.finalize(filename)
堆栈跟踪:

WARNING  2013-01-16 12:37:49,648 tasklets.py:409] suspended generator transaction(context.py:932) raised AttributeError('Entity' object has no attribute '_to_pb')
ERROR    2013-01-16 12:37:49,648 webapp2.py:1552] 'Entity' object has no attribute '_to_pb'
Traceback (most recent call last):
  File "/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py", line 1535, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py", line 1529, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/home/rye/Dropbox/projects/web/voxwright/voxwright.py", line 202, in put
    result = saveProject(data['id'], data['blocks'])
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/model.py", line 3583, in inner_transactional_wrapper
    return transaction(f, **ctx_options)
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/utils.py", line 136, in positional_wrapper
    return wrapped(*args, **kwds)
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/model.py", line 3526, in transaction
    return fut.get_result()
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/tasklets.py", line 325, in get_result
    self.check_success()
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/tasklets.py", line 371, in _help_tasklet_along
    value = gen.send(val)
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/context.py", line 923, in transaction
    result = callback()
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/model.py", line 3582, in <lambda>
    f = lambda: func(*args, **kwds)
  File "/home/rye/Dropbox/projects/web/voxwright/voxwright.py", line 102, in saveProject
    files.finalize(filename)
  File "/home/rye/local/share/google_appengine/google/appengine/api/files/file.py", line 568, in finalize
    f.close(finalize=True)
  File "/home/rye/local/share/google_appengine/google/appengine/api/files/file.py", line 291, in close
    self._make_rpc_call_with_retry('Close', request, response)
  File "/home/rye/local/share/google_appengine/google/appengine/api/files/file.py", line 427, in _make_rpc_call_with_retry
    _make_call(method, request, response)
  File "/home/rye/local/share/google_appengine/google/appengine/api/files/file.py", line 250, in _make_call
    rpc.check_success()
  File "/home/rye/local/share/google_appengine/google/appengine/api/apiproxy_stub_map.py", line 570, in check_success
    self.__rpc.CheckSuccess()
  File "/home/rye/local/share/google_appengine/google/appengine/api/apiproxy_rpc.py", line 156, in _WaitImpl
    self.request, self.response)
  File "/home/rye/local/share/google_appengine/google/appengine/api/apiproxy_stub.py", line 125, in MakeSyncCall
    method(request, response)
  File "/home/rye/local/share/google_appengine/google/appengine/api/files/file_service_stub.py", line 652, in _Dynamic_Close
    self.open_files[filename].finalize()
  File "/home/rye/local/share/google_appengine/google/appengine/api/files/file_service_stub.py", line 596, in finalize
    datastore.Put(blob_info)
  File "/home/rye/local/share/google_appengine/google/appengine/api/datastore.py", line 579, in Put
    return PutAsync(entities, **kwargs).get_result()
  File "/home/rye/local/share/google_appengine/google/appengine/api/datastore.py", line 556, in PutAsync
    return _GetConnection().async_put(config, entities, local_extra_hook)
  File "/home/rye/local/share/google_appengine/google/appengine/datastore/datastore_rpc.py", line 1542, in async_put
    pbs = [self.__adapter.entity_to_pb(entity) for entity in entities]
  File "/home/rye/local/share/google_appengine/google/appengine/ext/ndb/model.py", line 562, in entity_to_pb
    pb = ent._to_pb()
AttributeError: 'Entity' object has no attribute '_to_pb'
WARNING 2013-01-16 12:37:49648 tasklets.py:409]挂起的生成器事务(context.py:932)引发了AttributeError(“实体”对象没有属性“\u to\u pb”)
错误2013-01-16 12:37:49648 webapp2.py:1552]“实体”对象没有属性“\u to\u pb”
回溯(最近一次呼叫最后一次):
文件“/home/rye/local/share/google\u appengine/lib/webapp2/webapp2.py”,第1535行,在调用中__
rv=自身处理异常(请求、响应、e)
文件“/home/rye/local/share/google\u appengine/lib/webapp2/webapp2.py”,第1529行,在调用中__
rv=自我路由器调度(请求、响应)
默认情况下,文件“/home/rye/local/share/google\u appengine/lib/webapp2/webapp2.py”第1278行
返回路由处理程序适配器(请求、响应)
文件“/home/rye/local/share/google\u appengine/lib/webapp2/webapp2.py”,第1102行,在调用中__
返回处理程序.dispatch()
文件“/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py”,第572行,在调度中
返回self.handle_异常(e,self.app.debug)
文件“/home/rye/local/share/google_appengine/lib/webapp2/webapp2.py”,第570行,在分派中
返回方法(*args,**kwargs)
文件“/home/rye/Dropbox/projects/web/voxwright/voxwright.py”,第202行,输入
结果=保存项目(数据['id'],数据['blocks'])
文件“/home/rye/local/share/google\u appengine/google/appengine/ext/ndb/model.py”,第3583行,在内部事务包装中
退货交易(f,**ctx\U选项)
文件“/home/rye/local/share/google\u appengine/google/appengine/ext/ndb/utils.py”,第136行,在位置包装器中
已包装退货(*args,**kwds)
文件“/home/rye/local/share/google_appengine/google/appengine/ext/ndb/model.py”,第3526行,在事务中
返回未来获取结果()
文件“/home/rye/local/share/google\u appengine/google/appengine/ext/ndb/tasklets.py”,第325行,在get\u result中
self.check_success()
文件“/home/rye/local/share/google\u appengine/google/appengine/ext/ndb/tasklets.py”,第371行,在“帮助”tasklet中
值=gen.send(val)
文件“/home/rye/local/share/google\u appengine/google/appengine/ext/ndb/context.py”,第923行,在事务中
结果=回调()
文件“/home/rye/local/share/google_appengine/google/appengine/ext/ndb/model.py”,第3582行,在
f=lambda:func(*args,**kwds)
文件“/home/rye/Dropbox/projects/web/voxwright/voxwright.py”,第102行,在saveProject中
files.finalize(文件名)
文件“/home/rye/local/share/google_appengine/google/appengine/api/files/File.py”,第568行,最后定稿
f、 关闭(finalize=True)
文件“/home/rye/local/share/google_appengine/google/appengine/api/files/File.py”,第291行,关闭
self.\u进行\u rpc\u调用\u并重试('Close',request,response)
文件“/home/rye/local/share/google\u appengine/google/appengine/api/files/File.py”,第427行,在“make\u rpc\u call\u with\u retry”中
_调用(方法、请求、响应)
文件“/home/rye/local/share/google\u appengine/google/appengine/api/files/File.py”,第250行,在“make\u call”中
rpc.check_success()
文件“/home/rye/local/share/google\u appengine/google/appengine/api/apiproxy\u stub\u map.py”,第570行,检查是否成功
self.\uurpc.CheckSuccess()
文件“/home/rye/local/share/google\u appengine/google/appengine/api/apiproxy\u rpc.py”,第156行,在
self.request,self.response)
文件“/home/rye/local/share/google\u appengine/google/appengine/api/apiproxy\u stub.py”,第125行,在MakeSyncCall中
方法(请求、响应)
文件“/home/rye/local/share/google\u appengine/google/appengine/api/files/File\u service\u stub.py”,第652行,在动态关闭中
self.open_文件[filename].finalize()
文件“/home/rye/local/share/google\u appengine/google/appengine/api/files/File\u service\u stub.py”,第596行,最后定稿
datastore.Put(blob_信息)
文件“/home/rye/local/share/google_appengine/google/appengine/api/datastore.py”,第579行,输入
返回PutAsync(实体,**kwargs)
文件“/home/rye/local/share/google_appengine/google/appengine/api/datastore.py”,第556行,PutAsync格式
return\u GetConnection().async\u put(配置、实体、本地\u额外\u钩子)
文件“/home/rye/local/share/google\u appengine/google/appengine/datastore/datastore\u rpc.py”,第1542行,异步输入
pbs=[self.\uuuu适配器.entity\u到\uPB(entity)表示实体中的实体]
文件“/home/rye/local/share/google\u appengine/google/appengine/ext/ndb/model.py”,第562行,在entity\u to\u pb中
pb=ent._至_pb()
AttributeError:“实体”对象没有属性“\u to\u pb”

这看起来像是我提出的同一个错误:
主演,或者评论说触发它的不仅仅是
get\u service\u url
,会让谷歌知道它的重要性!(目前,我的blob处理、事务包装代码中到处都是is_sdk,这很可怕。)

这看起来像是我提出的同一个bug: 主演,或者评论说触发它的不仅仅是
get\u service\u url
,会让谷歌知道它的重要性!(目前,我的blob处理、事务包装代码中到处都是ISU sdk的检查,这太可怕了。)