text: 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) -> None:
          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):
          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
  