Skip to content

Commit 54a3052

Browse files
committed
Ensure consistent handling of graphene Enums, enum values and plain strings.
1 parent 6521aa6 commit 54a3052

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

Diff for: graphene_sqlalchemy/fields.py

+19-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import enum
12
import warnings
23
from functools import partial
34

@@ -6,11 +7,13 @@
67

78
from graphene import NonNull
89
from graphene.relay import Connection, ConnectionField
9-
from graphene.relay.connection import PageInfo, connection_adapter, page_info_adapter
10-
from graphql_relay.connection.arrayconnection import connection_from_array_slice
10+
from graphene.relay.connection import (PageInfo, connection_adapter,
11+
page_info_adapter)
12+
from graphql_relay.connection.arrayconnection import \
13+
connection_from_array_slice
1114

1215
from .batching import get_batch_resolver
13-
from .utils import get_query
16+
from .utils import EnumValue, get_query
1417

1518

1619
class UnsortedSQLAlchemyConnectionField(ConnectionField):
@@ -112,10 +115,19 @@ def __init__(self, type_, *args, **kwargs):
112115
def get_query(cls, model, info, sort=None, **args):
113116
query = get_query(model, info.context)
114117
if sort is not None:
115-
if isinstance(sort, str):
116-
query = query.order_by(sort.value)
117-
else:
118-
query = query.order_by(*(col.value for col in sort))
118+
if not isinstance(sort, list):
119+
sort = [sort]
120+
sort_args = []
121+
# ensure consistent handling of graphene Enums, enum values and
122+
# plain strings
123+
for item in sort:
124+
if isinstance(item, enum.Enum):
125+
sort_args.append(item.value.value)
126+
elif isinstance(item, EnumValue):
127+
sort_args.append(item.value)
128+
else:
129+
sort_args.append(item)
130+
query = query.order_by(*sort_args)
119131
return query
120132

121133

Diff for: graphene_sqlalchemy/tests/test_benchmark.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pytest
2+
23
import graphene
34
from graphene import relay
45

Diff for: graphene_sqlalchemy/tests/test_sort_enums.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ def makeNodes(nodeList):
354354
"""
355355
result = schema.execute(queryError, context_value={"session": session})
356356
assert result.errors is not None
357-
assert '"sort" has invalid value' in result.errors[0].message
357+
assert 'cannot represent non-enum value' in result.errors[0].message
358358

359359
queryNoSort = """
360360
query sortTest {

0 commit comments

Comments
 (0)