Skip to content

ConversionError for constrained pydantic scalars (PositiveFloat, PositiveInt, conint, …) inside Optional or generic containers #116

@vishwa2710

Description

@vishwa2710

find_graphene_type raises ConversionError whenever a constrained pydantic scalar appears inside Optional[...], list[...], or any other container. This
affects every Annotated[T, ...]-based pydantic type — PositiveFloat, PositiveInt, NonNegativeInt, conint(...), confloat(...), etc. — as well as user-defined
Annotated aliases.

from typing import Optional
from pydantic import BaseModel, PositiveFloat                                                                                                               
from graphene_pydantic import PydanticObjectType
                                                                                                                                                            
class M(BaseModel):                                              
    x: Optional[PositiveFloat] = None                                                                                                                       
                                                                
class GM(PydanticObjectType):                                                                                                                               
    class Meta:
        model = M                                                                                                                                           

Result:

graphene_pydantic.converters.ConversionError: Don't know how to handle
typing.Annotated[float, Gt(gt=0)] (generic: <class 'float'>)                                                                                     ```        
                                                 

Pydantic v2 only strips Annotated at the top level of FieldInfo.annotation. Inside a Union arm or a generic container the wrapper is preserved, so the inner
arm of Optional[PositiveFloat] reaches find_graphene_type as Annotated[float, Gt(gt=0)]. That has an __origin__ (the inner float), so it falls into
convert_generic_python_type, which doesn't recognize the shape and raises.

Affected versions                                                

- graphene-pydantic==0.6.1
- python3.13

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions