gpt4 book ai didi

python - 从钩子(Hook)回调访问 "app"(Eve 对象)

转载 作者:太空宇宙 更新时间:2023-11-04 03:41:15 25 4
gpt4 key购买 nike

每当有新项目添加到我的收藏中时,我在我的 Eve 应用程序中使用 Hook 来更新“摘要”对象。为了保持整洁,我已将我的回调移动到一个单独的目录/文件,我从 run.py 导入它,我在其中设置了 Hook 。

我的问题是我需要从我的回调函数(名为 on_inserted_expense)内部访问 Eve() 对象(我称之为“app”)。我找不到“前夕”的方法来做到这一点,所以我最终使用了类似装饰器的技巧,它有效:

from eve import Eve
from eventhooks import posthooks
from functools import wraps

app = Eve()

def passing_app(f):
@wraps(f)
def wrapper(*args, **kwargs):
kwargs['app'] = app
return f(*args, **kwargs)

return wrapper

app.on_inserted_expenses += passing_app(posthooks.on_inserted_expense)

从 eventhooks/posthooks.py 我可以这样做:

def on_inserted_expense(items, **kwargs):
app = kwargs['app']
for item in items:
summaries = app.data.driver.db['summaries']
summary = summaries.find_one({'title': 'default'})
if not item_in_summary(item, summary):
with app.test_request_context():
update = update_summary(summary, item)
patch_internal(summary, payload=update, concurrency_check=True)

因此,我的问题是:有没有一种方法可以从应用程序中的任何地方以更清晰的方式从 Eve 检索当前的“app”对象?如果没有,那是否值得添加,也许以单例的方式?谢谢!

最佳答案

我一直在这样做:

from flask import current_app

并使用 current_app 作为应用。

引用:http://flask.pocoo.org/docs/0.10/api/#flask.current_app

我应该注意这样做的陷阱吗?它似乎在添加钩子(Hook)时起作用。

关于python - 从钩子(Hook)回调访问 "app"(Eve 对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26347713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com