Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

BasicTypeMetaDataMixin.deserialize calls _init_meta on None.

Aberta Para iniciantes
#51 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
78/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
backend

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:
  1. Define a Rune type with an optional basic-type field such as DateWithMeta
    (cardinality 0..1).
  2. Construct an instance via init without providing the optional field —
    pydantic calls the field's WrapValidator with obj=None.
  3. 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

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de finos/rune-python-runtime

Todas as issues de finos/rune-python-runtime

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.