Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

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

Open
#1,519 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
45/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python
Domain
api

Research direction

Start with graphene/types/enum.py and the from_enum entry point shown in the traceback, then reproduce the failure using the linked graphene-bug example. Confirm that converting an enum whose name is "type" succeeds without the shown TypeError, and add a regression test for that case.

Written by the indexing model from the issue text.

Description

🐛 bug

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, 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.


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
  • Platform: Windows

See the full list of dependencies in the example repo I linked.


Other information

The example repo 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

Dominant language
Python
Stars
8.2k
Forks
818
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from graphql-python/graphene

All issues in graphql-python/graphene

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.