graphql-python / graphql-python/graphene-pydantic

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

Open
#116 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
249
Forks
47
PR merge metrics
No merged PRs in 30d

Description

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: ) ```

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

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.