graphql-python / graphql-python/graphene-pydantic
Pydantic -> Graphene type conversion breaks when using freezegun
- Dominant language
- Python
- Stars
- 249
- Forks
- 47
- PR merge metrics
- No merged PRs in 30d
Description
this schema
```
class TestSchema(BaseModel):
date_field: datetime.date
```
breaks in tests that use freezegun to freeze time:
```
E graphene_pydantic.converters.ConversionError: Don't know how to convert the Pydantic field ModelField(name='date_field', type=date, required=True) ()
```
I believe the issue is because freezegun overwrites the type of `datetime.date` and `datetime.datetime`, so these lines in the `graphene_pydantic` converter (`find_graphene_type()`) don't evaluate to true:
```
elif type_ == datetime.date:
return Date
```
pydantic code: https://github.com/graphql-python/graphene-pydantic/blob/master/graphene_pydantic/converters.py#L186
freezegun code: https://github.com/spulec/freezegun/blob/master/freezegun/api.py#L637
related freezegun issue: https://github.com/spulec/freezegun/issues/170
I'm not sure if this is a weird fix or not, but changing the if condition to:
```
elif type_.__name__ == "date"
```
or
```
elif issubclass(type_, datetime.date):
```
fixes this use case.
A better suggestion (though I don't know the best way to implement) is to allow a custom type mappings so we don't have to rely on this switch statement.
Contributor guide
Assessment
This issue has not been assessed yet.