Installing asgi_app middleware as documented results in type errors
まだ誰も着手していません。
- #473 @hansu650 による — マージされずにクローズ
評価
調査の方向性
Issue にリンクされている middleware ガイドと Quart.asgi_app リファレンスを読み、その後 Python 3.12.8、Quart 0.20.0、OpenTelemetryMiddleware、mypy 1.15.0 を使って例を再現してください。app.asgi_app の宣言された型と middleware callable を追跡してください。ドキュメントに記載されたインストールパスが正確であり、報告された mypy エラーが修正されるか、明確にドキュメント化されていれば完了です。
索引モデルが issue の本文から書いたものです。
説明
The documentation in
https://quart.palletsprojects.com/en/latest/how_to_guides/middleware/
and
https://quart.palletsprojects.com/en/latest/reference/source/quart.app/#quart.app.Quart.asgi_app
says to install middleware using a pattern like:
app.asgi_app = middleware(app.asgi_app)
However, following that pattern in practice produces type errors with mypy 1.15.0.
After adding
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
and
app.asgi_app = OpenTelemetryMiddleware(app.asgi_app)
I see:
app.py:388: error: Cannot assign to a method [method-assign]
app.py:388: error: Incompatible types in assignment (expression has type "OpenTelemetryMiddleware", variable has type "Callable[[HTTPScope | WebsocketScope | LifespanScope, Callable[[], Awaitable[HTTPRequestEvent | HTTPDisconnectEvent | WebsocketConnectEvent | WebsocketReceiveEvent | WebsocketDisconnectEvent | LifespanStartupEvent | LifespanShutdownEvent]], Callable[[HTTPResponseStartEvent | HTTPResponseBodyEvent | HTTPResponseTrailersEvent | HTTPServerPushEvent | HTTPEarlyHintEvent | <10 more items>], Awaitable[None]]], Coroutine[Any, Any, None]]") [assignment]
app.py:388: note: "OpenTelemetryMiddleware.__call__" has type "Callable[[Arg(dict[str, Any], 'scope'), Arg(Callable[[], Awaitable[dict[str, Any]]], 'receive'), Arg(Callable[[dict[str, Any]], Awaitable[None]], 'send')], Coroutine[Any, Any, None]]"
Environment:
- Python version: 3.12.8
- Quart version: 0.20.0
- 主要言語
- Python
- スター
- 3.7k
- フォーク
- 209
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
pallets/quart のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
-
`abort` typing doesn't accept Response as a valid parameter対応中かも @touilleMan が 1448 日前に担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 68/100
-
process_response marks the session accessed, so every response gets Vary: Cookie再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 78/100
-
Allow max content length to be modified on a per-request basis再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
-
mypy: Blueprint type mismatch with `flask.sansio.blueprints.Blueprint`対応中かも @hrimov が 611 日前に担当しました。 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
似ている issue
-
難易度 1/5 1〜3時間 初心者へのやさしさ 87/100
adri0/scadustats#128 ·
メンテナーはふだん 1 日以内に返信
-
`TIMESTAMP`, `TIMESTAMP_NTZ`, `TINYINT` and the other `TypeDecorator`s don't declare `python_type`オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
RPBCオープンawaiting policy acceptance precheck-passed
難易度 1/5 1時間未満 初心者へのやさしさ 78/100
Bioconductor/BiocContributions#240 · コメント 1 件 ·
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
documentation good first issue launch
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
FlologixAI/etchwork#4 ·