ComplexTypeMetaDataMixin.deserialize has no None guard.
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 1/5
- Tempo estimado
- Menos de uma hora
- Facilidade para iniciantes
- 84/100
Direção de pesquisa
Leia metadata.py e localize ComplexTypeMetaDataMixin.deserialize, onde a issue aponta a falta da verificação de None. Comece executando ou adaptando o exemplo de pytest fornecido para BaseDataClass.deserialize(None, set()). A tarefa estará concluída quando a desserialização retornar None para essa entrada e o teste de regressão passar.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Steps to Reproduce:
- Define a Rune type with an optional complex-type field (cardinality 0..1).
- Construct an instance from a dict that omits the field, or pass None for it
explicitly — pydantic calls the field's PlainValidator with obj=None. - Observe the exception.
Expected Result:
None is returned, allowing the optional field to remain absent.
Actual Result:
PydanticCustomError is raised:
"Expected either or dict but got <class 'NoneType'>."
Environment:
rune-python-runtime 2.2.2, pydantic 2.14.1, Python 3.11
Additional Context:
metadata.py ComplexTypeMetaDataMixin.deserialize performs no None check before
the isinstance dispatch chain. None is not a list, not an instance of cls,
not a Reference, and not a dict, so it falls through to the error branch.
Fix: add if obj is None: return None as the first check in deserialize.
import pytest
from pydantic_core import PydanticCustomError
from rune.runtime.base_data_class import BaseDataClass
def test_r1_complex_type_deserialize_none_raises():
'''Passing None to ComplexTypeMetaDataMixin.deserialize raises PydanticCustomError instead of returning None.'''
with pytest.raises(PydanticCustomError):
BaseDataClass.deserialize(None, 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 78/100
finos/rune-python-runtime#51 ·
-
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 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
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
gramaziokohler/compas_timber#870 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
autowarefoundation/autoware_carla_scenario#500 ·
Mantenedores costumam responder em até 1 dia
-
good first issue priority: low size: XS testing
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 86/100
cubrid-lab/cubrid-mcp-server#385 ·
Mantenedores costumam responder em até 1 dia
-
good first issue priority: low size: S testing
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
cubrid-lab/cubrid-cookbook-python#447 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100