Skip to content

Commit 659ea56

Browse files
authored
Merge pull request #173 from arunsureshkumar/support-monogengine-field-enum
BugFix: import condition for Enum Field updated based on Python version
2 parents 3ef74bc + df0d6fe commit 659ea56

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

graphene_mongo/converter.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -429,9 +429,11 @@ def dynamic_type():
429429
return graphene.Dynamic(dynamic_type)
430430

431431

432-
if sys.version_info[0] > 3.5:
432+
if sys.version_info >= (3, 6):
433433
@convert_mongoengine_field.register(mongoengine.EnumField)
434434
def convert_field_to_enum(field, registry=None):
435-
return graphene.Field(graphene.Enum.from_enum(field._enum_cls),
436-
description=get_field_description(field, registry), required=field.required
437-
)
435+
if not registry.check_enum_already_exist(field._enum_cls):
436+
registry.register_enum(field._enum_cls)
437+
_type = registry.get_type_for_enum(field._enum_cls)
438+
return graphene.Field(_type,
439+
description=get_field_description(field, registry), required=field.required)

graphene_mongo/registry.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1+
from graphene import Enum
2+
3+
14
class Registry(object):
25
def __init__(self):
36
self._registry = {}
47
self._registry_string_map = {}
8+
self._registry_enum = {}
59

610
def register(self, cls):
711
from .types import GrapheneMongoengineObjectTypes
812

913
assert issubclass(
1014
cls,
1115
GrapheneMongoengineObjectTypes
12-
), 'Only Mongoengine object types can be registered, received "{}"'.format(
16+
), 'Only Mongoengine object types can be registered, received "{}"'.format(
1317
cls.__name__
1418
)
1519
assert cls._meta.registry == self, "Registry for a Model have to match."
@@ -20,9 +24,22 @@ def register(self, cls):
2024
for model, cls in self._registry.items():
2125
cls.rescan_fields()
2226

27+
def register_enum(self, cls):
28+
from enum import EnumMeta
29+
assert type(cls) == EnumMeta, 'Only EnumMeta can be registered, received "{}"'.format(
30+
cls.__name__
31+
)
32+
self._registry_enum[cls] = Enum.from_enum(cls)
33+
2334
def get_type_for_model(self, model):
2435
return self._registry.get(model)
2536

37+
def check_enum_already_exist(self, cls):
38+
return cls in self._registry_enum
39+
40+
def get_type_for_enum(self, cls):
41+
return self._registry_enum.get(cls)
42+
2643

2744
registry = None
2845
inputs_registry = None

0 commit comments

Comments
 (0)