@@ -265,13 +265,12 @@ def resolve_type(self, value):
265
265
"""
266
266
def __init__ (self , name , types = None , resolve_type = None , description = None ):
267
267
assert name , 'Type must be named.'
268
+ assert types , 'Must provide types for Union {}.' .format (name )
269
+
268
270
self .name = name
269
271
self .description = description
270
- assert types , \
271
- 'Must provide types for Union {}.' .format (name )
272
- self ._possible_type_names = None
273
- non_obj_types = [t for t in types
274
- if not isinstance (t , GraphQLObjectType )]
272
+
273
+ non_obj_types = [t for t in types if not isinstance (t , GraphQLObjectType )]
275
274
if non_obj_types :
276
275
raise Error (
277
276
'Union {} may only contain object types, it cannot '
@@ -280,6 +279,8 @@ def __init__(self, name, types=None, resolve_type=None, description=None):
280
279
', ' .join (str (t ) for t in non_obj_types )
281
280
)
282
281
)
282
+
283
+ self ._possible_type_names = None
283
284
self ._types = types
284
285
self ._resolve_type = resolve_type
285
286
@@ -291,6 +292,7 @@ def is_possible_type(self, type):
291
292
self ._possible_type_names = set (
292
293
t .name for t in self .get_possible_types ()
293
294
)
295
+
294
296
return type .name in self ._possible_type_names
295
297
296
298
def resolve_type (self , value , info ):
@@ -326,53 +328,66 @@ def __init__(self, name, values, description=None):
326
328
def get_values (self ):
327
329
if self ._value_map is None :
328
330
self ._value_map = self ._define_value_map ()
331
+
329
332
return self ._value_map
330
333
331
334
def serialize (self , value ):
332
335
if isinstance (value , collections .Hashable ):
333
336
enum_value = self ._get_value_lookup ().get (value )
337
+
334
338
if enum_value :
335
339
return enum_value .name
340
+
336
341
return None
337
342
338
343
def parse_value (self , value ):
339
344
if isinstance (value , collections .Hashable ):
340
345
enum_value = self ._get_value_lookup ().get (value )
346
+
341
347
if enum_value :
342
348
return enum_value .name
349
+
343
350
return None
344
351
345
352
def parse_literal (self , value_ast ):
346
353
if isinstance (value_ast , ast .EnumValue ):
347
354
enum_value = self ._get_name_lookup ().get (value_ast .value )
355
+
348
356
if enum_value :
349
357
return enum_value .value
350
358
351
359
def _define_value_map (self ):
352
- value_map = {}
360
+ value_map = collections . OrderedDict ()
353
361
for value_name , value in self ._values .items ():
354
362
if not isinstance (value , GraphQLEnumValue ):
355
363
value = GraphQLEnumValue (value )
364
+
356
365
value .name = value_name
357
366
if value .value is None :
358
367
value .value = value_name
368
+
359
369
value_map [value_name ] = value
370
+
360
371
return value_map
361
372
362
373
def _get_value_lookup (self ):
363
374
if self ._value_lookup is None :
364
375
lookup = {}
365
376
for value_name , value in self .get_values ().items ():
366
377
lookup [value .value ] = value
378
+
367
379
self ._value_lookup = lookup
380
+
368
381
return self ._value_lookup
369
382
370
383
def _get_name_lookup (self ):
371
384
if self ._name_lookup is None :
372
385
lookup = {}
373
386
for value_name , value in self .get_values ().items ():
374
387
lookup [value .name ] = value
388
+
375
389
self ._name_lookup = lookup
390
+
376
391
return self ._name_lookup
377
392
378
393
@@ -409,6 +424,10 @@ def __init__(self, name, fields, description=None):
409
424
assert name , 'Type must be named.'
410
425
self .name = name
411
426
self .description = description
427
+
428
+ for field in fields .values ():
429
+ assert isinstance (field , GraphQLInputObjectField )
430
+
412
431
self ._fields = fields
413
432
self ._field_map = None
414
433
0 commit comments