graphql-python / graphql-python/graphene

Enum.from_enum() fails with Django IntegerChoices

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

Description

## Current Behavior
I am working in a Django Python codebase that has a GraphQL schema. A lot of TextChoices are used in our GraphQL schema and, to properly represent these we use the provided `graphene.Enum.from_enum()` function.

This same approach doesn't seem to work with Django's IntegerChoices. It seems when graphene generates a `GrapheneEnumType`, the values are created with the IntegerChoices member names. This makes it so the IntegerChoices value cannot be represented with the generated `GrapheneEnumType`.

This results in an error like the following:
`"Enum 'Status' cannot represent value: 2"`

## Expected Behavior
A value from a Django IntegerChoices object is usable to get the appropriate GrapheneEnumType value name.

### motivation
To allow for `graphene.Enum.from_enum()` to be usable by Django's IntegerChoices class.

## Environment
- Graphene Version: 3.3
- Graphene Django Version: 3.2.0
- Graphene Version: 3.3
- Django Version: 4.1.12
- Python Version: 3.10

## Code Example
```python
class Status(models.IntegerChoices):
COMPLETED = 1, "Completed"
IN_PROGRESS = 2, "In progress"
ERRORED = 9, "Errored"

StatusChoices = graphene.Enum.from_enum(Status)

class Process(graphene.ObjectType):
reference = graphene.String(description="The process reference.")
status = graphene.Field(
StatusChoices,
description="Current process status.",
)
```

This results in an error like the following:
`"Enum 'Status' cannot represent value: 2"`

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.