Skip to content

Commit d0d818e

Browse files
committed
Preserve schema properties when sorting
Build the sorted schema from to_kwargs() so the description and other properties are kept. The sorted schema now inherits assume_valid.
1 parent d00d83e commit d0d818e

2 files changed

Lines changed: 39 additions & 14 deletions

File tree

src/graphql/utilities/lexicographic_sort_schema.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -169,20 +169,24 @@ def sort_named_type(type_: GraphQLNamedType) -> GraphQLNamedType:
169169
}
170170

171171
return GraphQLSchema(
172-
types=type_map.values(),
173-
directives=[
174-
sort_directive(directive)
175-
for directive in sorted(schema.directives, key=sort_by_name_key)
176-
],
177-
query=cast(Optional[GraphQLObjectType], replace_maybe_type(schema.query_type)),
178-
mutation=cast(
179-
Optional[GraphQLObjectType], replace_maybe_type(schema.mutation_type)
180-
),
181-
subscription=cast(
182-
Optional[GraphQLObjectType], replace_maybe_type(schema.subscription_type)
183-
),
184-
extensions=schema.extensions,
185-
ast_node=schema.ast_node,
172+
**merge_kwargs(
173+
schema.to_kwargs(),
174+
types=type_map.values(),
175+
directives=[
176+
sort_directive(directive)
177+
for directive in sorted(schema.directives, key=sort_by_name_key)
178+
],
179+
query=cast(
180+
Optional[GraphQLObjectType], replace_maybe_type(schema.query_type)
181+
),
182+
mutation=cast(
183+
Optional[GraphQLObjectType], replace_maybe_type(schema.mutation_type)
184+
),
185+
subscription=cast(
186+
Optional[GraphQLObjectType],
187+
replace_maybe_type(schema.subscription_type),
188+
),
189+
)
186190
)
187191

188192

tests/utilities/test_lexicographic_sort_schema.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,3 +452,24 @@ def preserves_input_field_out_name():
452452

453453
assert sorted_input_type.fields["aField"].out_name == "a_field"
454454
assert sorted_input_type.fields["zField"].out_name == "z_field"
455+
456+
def describe_schema_properties():
457+
def preserves_schema_description():
458+
query_type = GraphQLObjectType(
459+
"Query", {"dummy": GraphQLField(GraphQLString)}
460+
)
461+
schema = GraphQLSchema(
462+
query=query_type, description="This is the schema description."
463+
)
464+
sorted_schema = lexicographic_sort_schema(schema)
465+
466+
assert sorted_schema.description == "This is the schema description."
467+
468+
def preserves_schema_extensions():
469+
query_type = GraphQLObjectType(
470+
"Query", {"dummy": GraphQLField(GraphQLString)}
471+
)
472+
schema = GraphQLSchema(query=query_type, extensions={"custom": "value"})
473+
sorted_schema = lexicographic_sort_schema(schema)
474+
475+
assert sorted_schema.extensions == {"custom": "value"}

0 commit comments

Comments
 (0)