Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

COW proxies are not recognised in ComplexTypeMetaDataMixin.deserialize.

Ouverte Adaptée aux débutants
#48 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
76/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
backend

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:
  1. Write a Rune function that takes a complex-type parameter and uses it in a
    constructor expression (e.g. set result -> field: param).
  2. Call the generated Python function — rune_cow wraps every parameter in a
    _COWObject before the function body runs.
  3. pydantic calls the field's PlainValidator with the _COWObject proxy.
  4. 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

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de finos/rune-python-runtime

Toutes les issues de finos/rune-python-runtime

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.