Skip to content

Commit ac0da9e

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 297d2ad commit ac0da9e

2 files changed

Lines changed: 38 additions & 14 deletions

File tree

src/graphql/utilities/lexicographic_sort_schema.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -173,20 +173,23 @@ def sort_named_type(type_: GraphQLNamedType) -> GraphQLNamedType:
173173
}
174174

175175
return GraphQLSchema(
176-
types=type_map.values(),
177-
directives=[
178-
sort_directive(directive)
179-
for directive in sorted(schema.directives, key=sort_by_name_key)
180-
],
181-
query=cast("GraphQLObjectType | None", replace_maybe_type(schema.query_type)),
182-
mutation=cast(
183-
"GraphQLObjectType | None", replace_maybe_type(schema.mutation_type)
184-
),
185-
subscription=cast(
186-
"GraphQLObjectType | None", replace_maybe_type(schema.subscription_type)
187-
),
188-
extensions=schema.extensions,
189-
ast_node=schema.ast_node,
176+
**merge_kwargs(
177+
schema.to_kwargs(),
178+
types=type_map.values(),
179+
directives=[
180+
sort_directive(directive)
181+
for directive in sorted(schema.directives, key=sort_by_name_key)
182+
],
183+
query=cast(
184+
"GraphQLObjectType | None", replace_maybe_type(schema.query_type)
185+
),
186+
mutation=cast(
187+
"GraphQLObjectType | None", replace_maybe_type(schema.mutation_type)
188+
),
189+
subscription=cast(
190+
"GraphQLObjectType | None", replace_maybe_type(schema.subscription_type)
191+
),
192+
)
190193
)
191194

192195

tests/utilities/test_lexicographic_sort_schema.py

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

493493
assert sorted_input_type.fields["aField"].out_name == "a_field"
494494
assert sorted_input_type.fields["zField"].out_name == "z_field"
495+
496+
def describe_schema_properties():
497+
def preserves_schema_description():
498+
query_type = GraphQLObjectType(
499+
"Query", {"dummy": GraphQLField(GraphQLString)}
500+
)
501+
schema = GraphQLSchema(
502+
query=query_type, description="This is the schema description."
503+
)
504+
sorted_schema = lexicographic_sort_schema(schema)
505+
506+
assert sorted_schema.description == "This is the schema description."
507+
508+
def preserves_schema_extensions():
509+
query_type = GraphQLObjectType(
510+
"Query", {"dummy": GraphQLField(GraphQLString)}
511+
)
512+
schema = GraphQLSchema(query=query_type, extensions={"custom": "value"})
513+
sorted_schema = lexicographic_sort_schema(schema)
514+
515+
assert sorted_schema.extensions == {"custom": "value"}

0 commit comments

Comments
 (0)