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
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.
Result: