Skip to content

Commit 4ed27df

Browse files
wichertkigen
authored andcommitted
Fix creation of graphene.Enum from enum.Enum
This fixes graphql-python#152
1 parent 227d5a7 commit 4ed27df

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

graphene_sqlalchemy/converter.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,14 @@ def convert_column_to_float(type, column, registry=None):
146146

147147
@convert_sqlalchemy_type.register(types.Enum)
148148
def convert_enum_to_enum(type, column, registry=None):
149-
try:
150-
items = type.enum_class.__members__.items()
151-
except AttributeError:
149+
enum_class = getattr(type, 'enum_class', None)
150+
if enum_class: # Check if an enum.Enum type is used
151+
graphene_type = Enum.from_enum(enum_class)
152+
else: # Nope, just a list of string options
152153
items = zip(type.enums, type.enums)
154+
graphene_type = Enum(type.name, items)
153155
return Field(
154-
Enum(type.name, items),
156+
graphene_type,
155157
description=get_column_doc(column),
156158
required=not (is_column_nullable(column)),
157159
)

graphene_sqlalchemy/tests/models.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
from sqlalchemy.ext.declarative import declarative_base
77
from sqlalchemy.orm import mapper, relationship
88

9+
10+
class Hairkind(enum.Enum):
11+
LONG = 'long'
12+
SHORT = 'short'
13+
14+
915
Base = declarative_base()
1016

1117
association_table = Table(
@@ -27,6 +33,7 @@ class Pet(Base):
2733
id = Column(Integer(), primary_key=True)
2834
name = Column(String(30))
2935
pet_kind = Column(Enum("cat", "dog", name="pet_kind"), nullable=False)
36+
hair_kind = Column(Enum(Hairkind, name="hair_kind"), nullable=False)
3037
reporter_id = Column(Integer(), ForeignKey("reporters.id"))
3138

3239

graphene_sqlalchemy/tests/test_query.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from ..fields import SQLAlchemyConnectionField
1010
from ..types import SQLAlchemyObjectType
1111
from ..utils import sort_argument_for_model, sort_enum_for_model
12-
from .models import Article, Base, Editor, Pet, Reporter
12+
from .models import Article, Base, Editor, Pet, Reporter, Hairkind
1313

1414
db = create_engine("sqlite:///test_sqlalchemy.sqlite3")
1515

@@ -34,7 +34,7 @@ def session():
3434

3535

3636
def setup_fixtures(session):
37-
pet = Pet(name="Lassie", pet_kind="dog")
37+
pet = Pet(name="Lassie", pet_kind="dog", hair_kind=Hairkind.LONG)
3838
session.add(pet)
3939
reporter = Reporter(first_name="ABA", last_name="X")
4040
session.add(reporter)
@@ -105,10 +105,11 @@ def resolve_pet(self, *args, **kwargs):
105105
pet {
106106
name,
107107
petKind
108+
hairKind
108109
}
109110
}
110111
"""
111-
expected = {"pet": {"name": "Lassie", "petKind": "dog"}}
112+
expected = {"pet": {"name": "Lassie", "petKind": "dog", "hairKind": "LONG"}}
112113
schema = graphene.Schema(query=Query)
113114
result = schema.execute(query)
114115
assert not result.errors
@@ -326,9 +327,9 @@ class Mutation(graphene.ObjectType):
326327

327328
def sort_setup(session):
328329
pets = [
329-
Pet(id=2, name="Lassie", pet_kind="dog"),
330-
Pet(id=22, name="Alf", pet_kind="cat"),
331-
Pet(id=3, name="Barf", pet_kind="dog"),
330+
Pet(id=2, name="Lassie", pet_kind="dog", hair_kind=Hairkind.LONG),
331+
Pet(id=22, name="Alf", pet_kind="cat", hair_kind=Hairkind.LONG),
332+
Pet(id=3, name="Barf", pet_kind="dog", hair_kind=Hairkind.LONG),
332333
]
333334
session.add_all(pets)
334335
session.commit()

0 commit comments

Comments
 (0)