async function support in url_defaults and url_value_preprocessor

未关闭
#315 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
停滞
技术栈
python
领域
backend

调研方向

首先阅读 quart/app.py 第 1450 行附近的代码,并跟踪 url_defaults 和 url_value_preprocessor 回调是如何被调用的。检查协程结果是如何处理的,以及是否涉及相关的 routing 入口点。完成的标准是:异步回调可以 await get_preferred_language 且不会出现 RuntimeWarning,同时同步回调继续正常工作。

由索引模型根据 Issue 内容生成。

描述

currently if you try to use an async function in url_defaults or url_value_preprocessor it raises

.venv/lib/python3.10/site-packages/quart/app.py:1450: RuntimeWarning: coroutine 'pull_lang_code' was never awaited

error.

The following code uses get_preferred_language from Quart-Babel extension but it could also be an async db call in an url_value_preprocessor function.

@app.url_defaults
async def add_language_code(endpoint, values):
    if app.url_map.is_endpoint_expecting(endpoint, "lang_code"):
        prefered_lang = await get_preferred_language()
        values.setdefault("lang_code", prefered_lang)

do you have any workaround/suggestions to this situation?

主要语言
Python
星标
3.7k
派生
209
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

pallets/quart 的其他 Issue

查看 pallets/quart 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。