从响应中删除 CherryPy before_finalize 钩子
Remove CherryPy before_finalize hook from response
我有一个现有的应用程序,我想从挂钩中删除一个 @cherrypy.tools.expires()
以成为 before_finalize
上的 运行。
我有:
- 控制器的
GET
装饰有 @cherrypy.tools.expires()
- 围绕所有 controllers/handlers 的一些包装器,用于检查用户是否已通过身份验证。如果未通过身份验证,则会引发 401 未授权错误,而不是调用
GET
- CherryPy 错误处理程序或类似的东西,假定控制
在第 3 步中,我需要删除 before_finalize
挂钩,因为即使包装器从未执行过 GET
,它仍会添加到全局 request
对象。
我知道我可以在 cherrypy.serving.request.hooks
中找到这些工具,但是没有简单的方法来确定哪个钩子是正确的,因为它们没有命名。
除了遍历钩子并根据函数名称进行一些猜测之外,还有什么好的方法可以确定我要删除哪个钩子吗?
此代码确实有效,但这似乎...错误:
# Remove any hooks that happen to contain "expires" in the callback's name
hooks = cherrypy.serving.request.hooks['before_finalize']
hooks = filter(lambda hook: 'expires' not in str(hook.callback), hooks)
cherrypy.serving.request.hooks['before_finalize'] = hooks
我有一个现有的应用程序,我想从挂钩中删除一个 @cherrypy.tools.expires()
以成为 before_finalize
上的 运行。
我有:
- 控制器的
GET
装饰有@cherrypy.tools.expires()
- 围绕所有 controllers/handlers 的一些包装器,用于检查用户是否已通过身份验证。如果未通过身份验证,则会引发 401 未授权错误,而不是调用
GET
- CherryPy 错误处理程序或类似的东西,假定控制
在第 3 步中,我需要删除 before_finalize
挂钩,因为即使包装器从未执行过 GET
,它仍会添加到全局 request
对象。
我知道我可以在 cherrypy.serving.request.hooks
中找到这些工具,但是没有简单的方法来确定哪个钩子是正确的,因为它们没有命名。
除了遍历钩子并根据函数名称进行一些猜测之外,还有什么好的方法可以确定我要删除哪个钩子吗?
此代码确实有效,但这似乎...错误:
# Remove any hooks that happen to contain "expires" in the callback's name
hooks = cherrypy.serving.request.hooks['before_finalize']
hooks = filter(lambda hook: 'expires' not in str(hook.callback), hooks)
cherrypy.serving.request.hooks['before_finalize'] = hooks