traitlets Dict with per_key_traits should be more specific in a TraitError
まだ誰も着手していません。
評価
調査の方向性
まず、issue に示されているネストされた Dict(per_key_traits) の例を再現し、per_key_traits に対する Dict の検証エントリーポイントを追跡します。TraitError が問題のあるキーまたはネストされたキーのパスを特定し、実際に無効な値を明確に報告するようになった時点で変更は完了です。既存のテスト構成で対応できる場合は、示されたケースのリグレッションテストカバレッジを追加してください。
索引モデルが issue の本文から書いたものです。
説明
I'm using traitlets version 5.14.3 and Python 3.12.3...
- The error raised by
Dict()withper_key_traitsshould specify the offending key name in the error. - The error raised by
Dict()withper_key_traitsdoesn't handle nested dicts well
Example:
from traitlets import HasTraits, Dict, Unicode
class Foo(HasTraits):
bar = Dict(per_key_traits={"this": Unicode(), "that": Dict(per_key_traits={"that": Unicode()})})
foo = Foo()
# key that should be a Dict()...
foo.bar = {"this": "valid", "that": False}
The error raised is:
traitlets.traitlets.TraitError: Values of the 'bar' trait of a Foo instance must be a dict, but a value of False <class 'bool'> was specified.
It would be better if it specified the offending chain of keys in the error... Example:
traitlets.traitlets.TraitError: Value of bar['that'] for a Foo instance must be a dict, but the specified value at bar['that'] was False <class 'bool'>.
- 主要言語
- Python
- スター
- 653
- フォーク
- 217
- 平均マージ
- 2日 21時間
- マージ済み PR(30日)
- 2
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ipython/traitlets のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
-
難易度 1/5 1〜3時間 初心者へのやさしさ 65/100
-
good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 85/100
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
-
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
ipython/traitlets の issue をすべて見る
似ている issue
-
bug confirmed issue
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
open-webui/open-webui#30750 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
OpenwaterHealth/openmotion-bloodflow-app#604 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
-
good first issue
難易度 1/5 1時間未満 初心者へのやさしさ 90/100