背景
所以,假设我正在为GAE制作应用程序,我想使用API Hooks.
大编辑:在这个问题的原始版本中,我描述了我的用例,但有些人正确地指出它不适合API Hooks.诚然!考虑我的帮助.但现在我的问题是学术性的:我仍然不知道如何在实践中使用钩子,我想.我重写了我的问题,使其更加通用.
码
所以我制作了这样的模型:
class Model(db.Model):
user = db.UserProperty(required=True)
def pre_put(self):
# Sets a value, raises an exception, whatever. Use your imagination
Run Code Online (Sandbox Code Playgroud)
然后我创建一个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')
Run Code Online (Sandbox Code Playgroud)
作为TDD-addled,我使用GAEUnit制作所有这些,所以在gaeunit.py中,在main方法的上方,我添加:
import db_hooks
db_hooks.patch_appengine()
Run Code Online (Sandbox Code Playgroud)
然后我编写了一个实例化并放置模型的测试.
题
虽然patch_appengine()肯定被称为,但钩子永远不会.我错过了什么?如何实际调用pre_put函数?