BasicTypeMetaDataMixin.deserialize calls _init_meta on None.
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 78/100
Direção de pesquisa
Leia metadata.py e examine BasicTypeMetaDataMixin.deserialize, especialmente como ele trata obj antes de chamar _init_meta. Comece reproduzindo a falha com o exemplo fornecido DateWithMeta.deserialize(None, ...). O trabalho estará concluído quando None for passado ao manipulador e o campo opcional puder permanecer ausente sem gerar AttributeError; adicione ou execute um teste de regressão para esse caso.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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(),
)
- Linguagem predominante
- Python
- Estrelas
- 0
- Forks
- 4
- Merge médio
- 1d 11h
- PRs com merge (30d)
- 3
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de finos/rune-python-runtime
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
finos/rune-python-runtime#52 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
finos/rune-python-runtime#50 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
finos/rune-python-runtime#48 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 84/100
finos/rune-python-runtime#47 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
finos/rune-python-runtime#43 ·
Todas as issues de finos/rune-python-runtime
Issues semelhantes
-
[Resource]: LoreAbertaresource-submission validation-passed
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
hesreallyhim/awesome-claude-code#3234 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
openminion/openminion#376 ·
Mantenedores costumam responder em até 1 dia
-
Type: ☹︎ Bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
posit-dev/great-tables#1028 ·
Mantenedores costumam responder em até 1 dia
-
integration: apple_tv
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
home-assistant/core#188282 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
A "since" range is worded as a career: "the past two seasons" says "regular season career (2025 on)"AbertaP4: low
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
jeffknupp/association#538 ·