COW proxies are not recognised in ComplexTypeMetaDataMixin.deserialize.
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 76/100
Direzione di ricerca
La issue indica metadata.py e ComplexTypeMetaDataMixin.deserialize come punto di ingresso. Leggi questo metodo e l’helper esistente _unwrap_cow_proxy, quindi esegui il test di regressione fornito per Security.deserialize con un proxy rune_cow. Il lavoro è completato quando il proxy viene rimosso prima del dispatch e il validatore accetta il valore sottostante.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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())
- Lingua principale
- Python
- Stelle
- 0
- Fork
- 4
- Merge medio
- 1g 11h
- PR unite (30g)
- 3
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di finos/rune-python-runtime
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
finos/rune-python-runtime#52 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
finos/rune-python-runtime#51 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
finos/rune-python-runtime#50 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
finos/rune-python-runtime#47 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
finos/rune-python-runtime#43 ·
Tutte le issue di finos/rune-python-runtime
Issue simili
-
follow-up
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Download helper still uses huggingface_hub arguments removed in 1.0: USE_SYMLINKS is silently ignored and every download ends with a WinError 3 lineForse già presa @li-lizhe l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
IPv6 node addresses produce an invalid request URLForse già presa @RaphaelFakhri l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
typesense/typesense-python#154 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
elastic/elasticsearch-py#3592 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
developmentseed/titiler-cmr#250 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno