COW proxies are not recognised in ComplexTypeMetaDataMixin.deserialize.
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 76/100
Piste de recherche
L’issue désigne metadata.py et ComplexTypeMetaDataMixin.deserialize comme point d’entrée. Lisez cette méthode et le helper existant _unwrap_cow_proxy, puis exécutez le test de régression fourni pour Security.deserialize avec un proxy rune_cow. Le travail est terminé lorsque le proxy est déballé avant le dispatch et que le validateur accepte la valeur sous-jacente.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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())
- Langage dominant
- Python
- Étoiles
- 0
- Forks
- 4
- Merge moyen
- 1 j 11 h
- PR mergées (30 j)
- 3
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de finos/rune-python-runtime
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
finos/rune-python-runtime#52 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
finos/rune-python-runtime#51 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
finos/rune-python-runtime#50 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 84/100
finos/rune-python-runtime#47 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
finos/rune-python-runtime#43 ·
Toutes les issues de finos/rune-python-runtime
Issues similaires
-
comp/tools P2 type/bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
NousResearch/hermes-agent#142908 · 1 commentaire ·
-
[oblt-aw][autodoc] Fix malformed headings in new Buildkite docs pagesPeut-être pris @github-actions l’a pris aujourd’hui. Ouvertedocumentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 83/100
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: fileUploadMatrix.test.ts URL case does a real DNS lookup and fails offlinePeut-être pris @r2jaff l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
ComposioHQ/composio#5054 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
pytorch/tensordict#3286 ·
Les mainteneurs répondent en général sous 1 jour