BasicTypeMetaDataMixin.deserialize calls _init_meta on None.
まだ誰も着手していません。
評価
調査の方向性
metadata.pyを読み、BasicTypeMetaDataMixin.deserializeを調べてください。特に、_init_metaを呼び出す前にobjをどのように処理するかを確認してください。まず、提示された例DateWithMeta.deserialize(None, ...)で失敗を再現してください。Noneがハンドラーに渡され、AttributeErrorを発生させずにオプションフィールドを未設定のままにできれば完了です。このケースの回帰テストを追加するか、実行してください。
索引モデルが issue の本文から書いたものです。
説明
Bug Report
Steps to Reproduce:
- Define a Rune type with an optional basic-type field such as DateWithMeta
(cardinality 0..1). - Construct an instance via init without providing the optional field —
pydantic calls the field's WrapValidator with obj=None. - Observe the exception.
Expected Result:
None is returned via handler(None), allowing the optional field to remain
absent.
Actual Result:
AttributeError is raised:
"'NoneType' object has no attribute '_init_meta'"
Environment:
rune-python-runtime 2.2.2, pydantic 2.14.1, Python 3.11
Additional Context:
Observed when constructing NonNegativeQuantitySchedule via init; bypassed
in tests using model_construct() to skip validation.
metadata.py BasicTypeMetaDataMixin.deserialize leaves model=obj (None) when
obj is neither a base type nor a dict, then unconditionally calls
model._init_meta(allowed_meta) if meta checks are enabled.
Fix: add if obj is None: return handler(None) as the first check.
import datetime
import pytest
from rune.runtime.metadata import DateWithMeta
def test_r5_basic_type_deserialize_none_raises_attribute_error():
'''Calling DateWithMeta.deserialize(None, ...) raises AttributeError
because model is left as None before _init_meta is called.'''
with pytest.raises(AttributeError, match='_init_meta'):
DateWithMeta.deserialize(
None,
lambda x: x,
(datetime.date, str),
set(),
)
- 主要言語
- Python
- スター
- 0
- フォーク
- 4
- 平均マージ
- 1日 17時間
- マージ済み PR(30日)
- 2
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
finos/rune-python-runtime のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
finos/rune-python-runtime#43 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 58/100
finos/rune-python-runtime#49 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
finos/rune-python-runtime#42 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 62/100
finos/rune-python-runtime#27 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
finos/rune-python-runtime#16 ·
finos/rune-python-runtime の issue をすべて見る
似ている issue
-
bug
難易度 1/5 1時間未満 初心者へのやさしさ 86/100
awslabs/visual-asset-management-system#937 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
-
follow-up
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 83/100
メンテナーはふだん 3 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
メンテナーはふだん 2 日以内に返信