相关疑难解决方法(0)

App Engine(Python)数据存储区Precall API挂钩

背景

所以,假设我正在为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函数?

python google-app-engine google-cloud-datastore

5
推荐指数
1
解决办法
1612
查看次数