graphql-python / graphql-python/graphene-pydantic

Pydantic -> Graphene type conversion breaks when using freezegun

Open
#56 2 comments 1 reaction 0 assignees View on GitHub
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

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.