@@ -147,12 +147,25 @@ def convert_column_to_float(type, column, registry=None):
147
147
@convert_sqlalchemy_type .register (types .Enum )
148
148
def convert_enum_to_enum (type , column , registry = None ):
149
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
153
- items = zip (type .enums , type .enums )
154
- graphene_type = Enum (type .name , items )
155
- return graphene_type (
150
+ if enum_class :
151
+ enum_name = type .enum_class .__name__
152
+ else :
153
+ enum_name = type .name
154
+
155
+ enum_type = None
156
+ if registry is not None :
157
+ enum_type = registry .get_type_for_enum (enum_name )
158
+ if enum_type is None :
159
+ enum_class = getattr (type , 'enum_class' , None )
160
+ if enum_class : # Check if an enum.Enum type is used
161
+ enum_type = Enum .from_enum (enum_class )
162
+ else : # Nope, just a list of string options
163
+ items = zip (type .enums , type .enums )
164
+ enum_type = Enum (enum_name , items )
165
+ if registry is not None :
166
+ registry .register_type_for_enum (enum_name , enum_type )
167
+
168
+ return enum_type (
156
169
description = get_column_doc (column ),
157
170
required = not (is_column_nullable (column )),
158
171
)
@@ -162,11 +175,23 @@ def convert_enum_to_enum(type, column, registry=None):
162
175
def convert_column_to_enum (type_ , column , registry = None ):
163
176
is_enum = isinstance (type_ .choices , type )
164
177
if is_enum :
165
- graphene_type = Enum . from_enum ( type_ .choices )
178
+ enum_name = type_ .choices . __name__
166
179
else :
167
- name = "{}_{}" .format (column .table .name , column .name ).upper ()
168
- graphene_type = Enum (name , type_ .choices )
169
- return graphene_type (
180
+ enum_name = "{}_{}" .format (column .table .name , column .name ).upper ()
181
+
182
+ enum_type = None
183
+ if registry is not None :
184
+ enum_type = registry .get_type_for_enum (enum_name )
185
+
186
+ if enum_type is None :
187
+ if is_enum :
188
+ enum_type = Enum .from_enum (type_ .choices )
189
+ else :
190
+ enum_type = Enum (enum_name , type_ .choices )
191
+ if registry is not None :
192
+ registry .register_type_for_enum (enum_name , enum_type )
193
+
194
+ return enum_type (
170
195
description = get_column_doc (column ),
171
196
required = not (is_column_nullable (column )),
172
197
)
0 commit comments