COW proxies are not recognised in ComplexTypeMetaDataMixin.deserialize.
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 76/100
Direção de pesquisa
A issue identifica metadata.py e ComplexTypeMetaDataMixin.deserialize como ponto de entrada. Leia esse método e o helper existente _unwrap_cow_proxy e, em seguida, execute o teste de regressão fornecido para Security.deserialize com um proxy rune_cow. O trabalho estará concluído quando o proxy for desembrulhado antes do dispatch e o validador aceitar o valor subjacente.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Bug Report
Steps to Reproduce:
- Write a Rune function that takes a complex-type parameter and uses it in a
constructor expression (e.g.set result -> field: param). - Call the generated Python function — rune_cow wraps every parameter in a
_COWObject before the function body runs. - pydantic calls the field's PlainValidator with the _COWObject proxy.
- Observe the exception.
Expected Result:
The COW proxy is transparently unwrapped and the underlying value is accepted
by the validator.
Actual Result:
PydanticCustomError is raised:
"Expected either or dict but got <class '_COWObject'>."
Environment:
rune-python-runtime 2.2.2, pydantic 2.14.1, Python 3.11
Additional Context:
The model-level _unwrap_cow_inputs validator unwraps the outer data dict but
does not unwrap individual field values before field validators run.
metadata.py ComplexTypeMetaDataMixin.deserialize tests isinstance(obj, cls)
and isinstance(obj, Reference), neither of which matches a _COWObject.
Fix: call _unwrap_cow_proxy(obj) at the top of deserialize before the dispatch
chain.
import pytest
from pydantic_core import PydanticCustomError
import finos._bundle
from finos.cdm.base.staticdata.asset.common.Security import Security
from rune.runtime.cow import rune_cow
def test_r2_cow_proxy_not_recognised_in_deserialize():
'''A COW-proxied Security instance passed to Security.deserialize raises
PydanticCustomError because isinstance(proxy, Security) is False.'''
security = Security.model_construct()
cow_security = rune_cow(security)
# The proxy is not an instance of Security, Reference or dict —
# deserialize falls through to the error branch.
with pytest.raises(PydanticCustomError):
Security.deserialize(cow_security, 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 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
-
[Bug]: Revit selector reads process ids 2000-2099 as years (flaky AgentClientTests.AYearOrAProcessIdSelectsTheHost)Talvez já em andamento @Wurschdhaud assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 83/100
pyrevitlabs/pyRevit#3817 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
521xueweihan/HelloGitHub#4074 ·
-
follow-up
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
Mantenedores costumam responder em até 1 dia
-
Helm chart: allow setting ingressClassName on the IngressTalvez já em andamento @commarla assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
pgadmin-org/pgadmin4#10658 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100