背景
假设我正在为GAE制作应用程序,并且我想使用API Hooks。
大修改:在原始版本的问题中,我描述了我的用例,但一些人正确指出它并不适合API Hooks。承认!请帮助我。但现在我的问题是学术性的:我仍然不知道如何在实践中使用hooks,我想知道。我已经重写了我的问题,使其更加通用。
代码
那么我创建一个像这样的模型:
class Model(db.Model):
user = db.UserProperty(required=True)
def pre_put(self):
# Sets a value, raises an exception, whatever. Use your imagination
然后我创建了一个db_hooks.py文件:
from google.appengine.api import apiproxy_stub_map
def patch_appengine():
def hook(service, call, request, response):
assert service == 'datastore_v3'
if call == 'Put':
for entity in request.entity_list():
entity.pre_put()
apiproxy_stub_map.apiproxy.GetPreCallHooks().Append('preput',
hook,
'datastore_v3')
由于我深受TDD之苦,所以我使用GAEUnit来完成所有这些工作。因此,在gaeunit.py文件中的主方法上方,我添加了以下内容:
import db_hooks
db_hooks.patch_appengine()
然后我编写了一个测试,实例化并放置了一个模型。
问题
虽然patch_appengine()
肯定被调用了,但是钩子却从来没有被调用过。我错过了什么?如何使pre_put函数真正被调用?