@@ -265,13 +265,12 @@ def resolve_type(self, value):
265265 """
266266 def __init__ (self , name , types = None , resolve_type = None , description = None ):
267267 assert name , 'Type must be named.'
268+ assert types , 'Must provide types for Union {}.' .format (name )
269+
268270 self .name = name
269271 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 )]
275274 if non_obj_types :
276275 raise Error (
277276 'Union {} may only contain object types, it cannot '
@@ -280,6 +279,8 @@ def __init__(self, name, types=None, resolve_type=None, description=None):
280279 ', ' .join (str (t ) for t in non_obj_types )
281280 )
282281 )
282+
283+ self ._possible_type_names = None
283284 self ._types = types
284285 self ._resolve_type = resolve_type
285286
@@ -291,6 +292,7 @@ def is_possible_type(self, type):
291292 self ._possible_type_names = set (
292293 t .name for t in self .get_possible_types ()
293294 )
295+
294296 return type .name in self ._possible_type_names
295297
296298 def resolve_type (self , value , info ):
@@ -326,53 +328,66 @@ def __init__(self, name, values, description=None):
326328 def get_values (self ):
327329 if self ._value_map is None :
328330 self ._value_map = self ._define_value_map ()
331+
329332 return self ._value_map
330333
331334 def serialize (self , value ):
332335 if isinstance (value , collections .Hashable ):
333336 enum_value = self ._get_value_lookup ().get (value )
337+
334338 if enum_value :
335339 return enum_value .name
340+
336341 return None
337342
338343 def parse_value (self , value ):
339344 if isinstance (value , collections .Hashable ):
340345 enum_value = self ._get_value_lookup ().get (value )
346+
341347 if enum_value :
342348 return enum_value .name
349+
343350 return None
344351
345352 def parse_literal (self , value_ast ):
346353 if isinstance (value_ast , ast .EnumValue ):
347354 enum_value = self ._get_name_lookup ().get (value_ast .value )
355+
348356 if enum_value :
349357 return enum_value .value
350358
351359 def _define_value_map (self ):
352- value_map = {}
360+ value_map = collections . OrderedDict ()
353361 for value_name , value in self ._values .items ():
354362 if not isinstance (value , GraphQLEnumValue ):
355363 value = GraphQLEnumValue (value )
364+
356365 value .name = value_name
357366 if value .value is None :
358367 value .value = value_name
368+
359369 value_map [value_name ] = value
370+
360371 return value_map
361372
362373 def _get_value_lookup (self ):
363374 if self ._value_lookup is None :
364375 lookup = {}
365376 for value_name , value in self .get_values ().items ():
366377 lookup [value .value ] = value
378+
367379 self ._value_lookup = lookup
380+
368381 return self ._value_lookup
369382
370383 def _get_name_lookup (self ):
371384 if self ._name_lookup is None :
372385 lookup = {}
373386 for value_name , value in self .get_values ().items ():
374387 lookup [value .name ] = value
388+
375389 self ._name_lookup = lookup
390+
376391 return self ._name_lookup
377392
378393
@@ -409,6 +424,10 @@ def __init__(self, name, fields, description=None):
409424 assert name , 'Type must be named.'
410425 self .name = name
411426 self .description = description
427+
428+ for field in fields .values ():
429+ assert isinstance (field , GraphQLInputObjectField )
430+
412431 self ._fields = fields
413432 self ._field_map = None
414433
0 commit comments