Astroport.ONE/venv/lib/python3.11/site-packages/graphql/validation/rules/lone_schema_definition.py

40 lines
1.3 KiB
Python
Raw Normal View History

2024-03-01 16:15:45 +01:00
from typing import Any
from ...error import GraphQLError
from ...language import SchemaDefinitionNode
from . import SDLValidationRule, SDLValidationContext
__all__ = ["LoneSchemaDefinitionRule"]
class LoneSchemaDefinitionRule(SDLValidationRule):
"""Lone Schema definition
A GraphQL document is only valid if it contains only one schema definition.
"""
def __init__(self, context: SDLValidationContext):
super().__init__(context)
old_schema = context.schema
self.already_defined = old_schema and (
old_schema.ast_node
or old_schema.query_type
or old_schema.mutation_type
or old_schema.subscription_type
)
self.schema_definitions_count = 0
def enter_schema_definition(self, node: SchemaDefinitionNode, *_args: Any) -> None:
if self.already_defined:
self.report_error(
GraphQLError(
"Cannot define a new schema within a schema extension.", node
)
)
else:
if self.schema_definitions_count:
self.report_error(
GraphQLError("Must provide only one schema definition.", node)
)
self.schema_definitions_count += 1