Skip to content

Commit b32819b

Browse files
committed
Merge pull request #15 from graphql-python/schema-type-printer
Implement `schema_printer`.
2 parents b67be8b + 9c3f9e6 commit b32819b

File tree

7 files changed

+1372
-629
lines changed

7 files changed

+1372
-629
lines changed

graphql/core/type/definition.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)