2013-01-16 1 views
1

[업데이트]AttributeError는 '법인'객체에는 속성이 없습니다 '_to_pb'구글 앱 엔진의 Blob 저장소 파일을 마무리 할 때

나는이 트랜잭션 내부에서 발생하고 있음을 유의하고,이 것을해야한다 dev_appserver에서 오류가 생성되었습니다. 프로덕션 환경에서 테스트하지 않았습니다. 프로덕션 환경에서는 발생하지 않습니다.

[/ 업데이트] 내가 잘못 여기서 뭐하는 거지 모르겠어요

; 내 코드는 문서 예제와 거의 동일하다.

내 코드 :

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' 

답변

1

이 내가 제기 한 같은 벌레처럼 보이는 : 그냥 get_serving_url 아니라고 논평 어쩌면 주연, 그리고 http://code.google.com/p/googleappengine/issues/detail?id=8354 그 그것이 중요하다는 것을 Google에 알리게됩니다! (현재, 블롭 처리, 트랜잭션 랩핑 된 코드 주위에 is_sdk 체크가 들어 있습니다. 무시 무시합니다.)