graphql-python / graphql-python/graphene

Enum conversion to Graphene Enum fails if Enum name is "type"

Open
#1,519 1 comment 0 reactions 0 assignees View on GitHub
🐛 bug
Dominant language
Python
Stars
8.2k
Forks
818
PR merge metrics
No merged PRs in 30d

Description

> **Note: For support questions, please use StackOverflow**. This repository's issues are reserved for feature requests and bug reports.

### What is the current behavior?

See title. I've reproduced the bug together with [`graphene-django`](https://github.com/graphql-python/graphene-django), but the actual bug is in graphene itself, so I'm raising the issue here. Example repo is here: [https://github.com/matti-lamppu/graphene-bug](https://github.com/matti-lamppu/graphene-bug).

---

### **What is the expected behavior?**

I can create an enum field with the name type.

---

### **What is the motivation/use case for changing the behavior?**

My Django models can have fields named `type` and I can use serializers to describe how mutations work on them (I know this is `graphene-django` related, but still).

---

### **Please tell us about your environment:**

- Version: [3.3.0](https://github.com/graphql-python/graphene/releases/tag/v3.3.0)
- Platform: Windows

See the full list of dependencies in the [example repo](https://github.com/matti-lamppu/graphene-bug/blob/main/requirements.txt) I linked.

---

### **Other information**

The [example repo](https://github.com/matti-lamppu/graphene-bug#issue) has a minimal example and explanation of what causes the bug and a possible solution. The traceback is available in the repo as well as below.

Traceback



[30/Aug/2023 09:13:35] "GET / HTTP/1.1" 404 2061

Internal Server Error: /graphql/
Traceback (most recent call last):
File "...\mysite\venv\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\django\views\generic\base.py", line 97, in view
self = cls(**initkwargs)
^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\views.py", line 105, in __init__
schema = graphene_settings.SCHEMA
^^^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\settings.py", line 123, in __getattr__
val = perform_import(val, attr)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\settings.py", line 62, in perform_import
return import_from_string(val, setting_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\settings.py", line 76, in import_from_string
module = importlib.import_module(module_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\Python311\Lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 1204, in _gcd_import
File "", line 1176, in _find_and_load
File "", line 1147, in _find_and_load_unlocked
File "", line 690, in _load_unlocked
File "", line 940, in exec_module
File "", line 241, in _call_with_frames_removed
File "...\mysite\foo\schema.py", line 16, in
class FooMutation(SerializerMutation):
File "...\mysite\venv\Lib\site-packages\graphene\types\objecttype.py", line 30, in __new__
base_cls = super().__new__(
^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene\utils\subclass_with_meta.py", line 46, in __init_subclass__
super_class.__init_subclass_with_meta__(**options)
File "...\mysite\venv\Lib\site-packages\graphene_django\rest_framework\mutation.py", line 102, in __init_subclass_with_meta__
output_fields = fields_for_serializer(
^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\rest_framework\mutation.py", line 52, in fields_for_serializer
fields[name] = convert_serializer_field(
^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\rest_framework\serializer_converter.py", line 31, in convert_serializer_field
graphql_type = get_graphene_type_from_serializer_field(field)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\Lib\functools.py", line 909, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\rest_framework\serializer_converter.py", line 163, in convert_serializer_field_to_enum
return convert_choices_to_named_enum_with_descriptions(name, field.choices)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene_django\converter.py", line 101, in convert_choices_to_named_enum_with_descriptions
return_type = Enum(
^^^^^
File "...\mysite\venv\Lib\site-packages\graphene\types\enum.py", line 53, in __call__
return cls.from_enum(
^^^^^^^^^^^^^^
File "...\mysite\venv\Lib\site-packages\graphene\types\enum.py", line 74, in from_enum
meta_class = type("Meta", (object,), meta_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: EnumType.__call__() takes from 2 to 3 positional arguments but 4 were given
[30/Aug/2023 09:13:39] "GET /graphql/ HTTP/1.1" 500 186631

---

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.