strawberry-graphql / strawberry-django

Strawberry GraphQL Django extension
https://strawberry.rocks/docs/django
MIT License
406 stars 118 forks source link

`django.db.models.expressions.DatabaseDefault` raises `TypeError: fromisoformat` on mutation #502

Closed baseplate-admin closed 6 months ago

baseplate-admin commented 6 months ago

Describe the Bug

When i try to mutate this schema ( that doesn't have a datetime object )

mutation MyMutation {
  add_anime(
    data: {name:"Hello"}
  ) {
    ... on Anime {
      id
      name
    }
  }
}

it raises :

GraphQL request:2:3
1 | mutation MyMutation {
2 |   add_anime(
  |   ^
3 |     data: {name:"Hello"}
Traceback (most recent call last):
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\graphql\execution\execute.py", line 521, in execute_field
    result = resolve_fn(source, info, **args)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry\schema\schema_converter.py", line 671, in _resolver
    return _get_result_with_extensions(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry\schema\schema_converter.py", line 658, in extension_resolver
    return reduce(
           ^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry\schema\schema_converter.py", line 653, in wrapped_get_result
    return _get_result(
           ^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry\schema\schema_converter.py", line 614, in _get_result
    return field.get_result(
           ^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\mutations\fields.py", line 157, in get_result
    return _handle_exception(e)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\mutations\fields.py", line 89, in _handle_exception
    raise error
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\mutations\fields.py", line 155, in get_result
    resolved = self.resolver(source, info, args, kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\resolvers.py", line 112, in inner_wrapper
    return f(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\resolvers.py", line 79, in sync_resolver
    retval = resolver(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\mutations\fields.py", line 244, in resolver
    return self.create(
           ^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\mutations\fields.py", line 257, in create
    return resolvers.create(
           ^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\Programs\Python\Python312\Lib\contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\strawberry_django\mutations\resolvers.py", line 363, in create
    dummy_instance.full_clean(**full_clean_options)  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\django\db\models\base.py", line 1512, in full_clean
    self.clean_fields(exclude=exclude)
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\django\db\models\base.py", line 1564, in clean_fields
    setattr(self, f.attname, f.clean(raw_value, self))
                             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\django\db\models\fields\__init__.py", line 835, in clean
    value = self.to_python(value)
            ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\django\db\models\fields\__init__.py", line 1605, in to_python
    parsed = parse_datetime(value)
             ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\baseplate-admin\AppData\Local\pypoetry\Cache\virtualenvs\coreproject-CGb-jJ-B-py3.12\Lib\site-packages\django\utils\dateparse.py", line 116, in parse_datetime
    return datetime.datetime.fromisoformat(value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: fromisoformat: argument must be str

Code behind this mutation :

System Information

Additional Context

Upvote & Fund

Fund with Polar

baseplate-admin commented 6 months ago

Resolved by renaming strawberry_django.mutations.create -> strawberry_django.mutation