specified_rules.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from typing import Tuple, Type
  2. from .rules import ASTValidationRule
  3. # Spec Section: "Executable Definitions"
  4. from .rules.executable_definitions import ExecutableDefinitionsRule
  5. # Spec Section: "Operation Name Uniqueness"
  6. from .rules.unique_operation_names import UniqueOperationNamesRule
  7. # Spec Section: "Lone Anonymous Operation"
  8. from .rules.lone_anonymous_operation import LoneAnonymousOperationRule
  9. # Spec Section: "Subscriptions with Single Root Field"
  10. from .rules.single_field_subscriptions import SingleFieldSubscriptionsRule
  11. # Spec Section: "Fragment Spread Type Existence"
  12. from .rules.known_type_names import KnownTypeNamesRule
  13. # Spec Section: "Fragments on Composite Types"
  14. from .rules.fragments_on_composite_types import FragmentsOnCompositeTypesRule
  15. # Spec Section: "Variables are Input Types"
  16. from .rules.variables_are_input_types import VariablesAreInputTypesRule
  17. # Spec Section: "Leaf Field Selections"
  18. from .rules.scalar_leafs import ScalarLeafsRule
  19. # Spec Section: "Field Selections on Objects, Interfaces, and Unions Types"
  20. from .rules.fields_on_correct_type import FieldsOnCorrectTypeRule
  21. # Spec Section: "Fragment Name Uniqueness"
  22. from .rules.unique_fragment_names import UniqueFragmentNamesRule
  23. # Spec Section: "Fragment spread target defined"
  24. from .rules.known_fragment_names import KnownFragmentNamesRule
  25. # Spec Section: "Fragments must be used"
  26. from .rules.no_unused_fragments import NoUnusedFragmentsRule
  27. # Spec Section: "Fragment spread is possible"
  28. from .rules.possible_fragment_spreads import PossibleFragmentSpreadsRule
  29. # Spec Section: "Fragments must not form cycles"
  30. from .rules.no_fragment_cycles import NoFragmentCyclesRule
  31. # Spec Section: "Variable Uniqueness"
  32. from .rules.unique_variable_names import UniqueVariableNamesRule
  33. # Spec Section: "All Variable Used Defined"
  34. from .rules.no_undefined_variables import NoUndefinedVariablesRule
  35. # Spec Section: "All Variables Used"
  36. from .rules.no_unused_variables import NoUnusedVariablesRule
  37. # Spec Section: "Directives Are Defined"
  38. from .rules.known_directives import KnownDirectivesRule
  39. # Spec Section: "Directives Are Unique Per Location"
  40. from .rules.unique_directives_per_location import UniqueDirectivesPerLocationRule
  41. # Spec Section: "Argument Names"
  42. from .rules.known_argument_names import KnownArgumentNamesRule
  43. from .rules.known_argument_names import KnownArgumentNamesOnDirectivesRule
  44. # Spec Section: "Argument Uniqueness"
  45. from .rules.unique_argument_names import UniqueArgumentNamesRule
  46. # Spec Section: "Value Type Correctness"
  47. from .rules.values_of_correct_type import ValuesOfCorrectTypeRule
  48. # Spec Section: "Argument Optionality"
  49. from .rules.provided_required_arguments import ProvidedRequiredArgumentsRule
  50. from .rules.provided_required_arguments import ProvidedRequiredArgumentsOnDirectivesRule
  51. # Spec Section: "All Variable Usages Are Allowed"
  52. from .rules.variables_in_allowed_position import VariablesInAllowedPositionRule
  53. # Spec Section: "Field Selection Merging"
  54. from .rules.overlapping_fields_can_be_merged import OverlappingFieldsCanBeMergedRule
  55. # Spec Section: "Input Object Field Uniqueness"
  56. from .rules.unique_input_field_names import UniqueInputFieldNamesRule
  57. # Schema definition language:
  58. from .rules.lone_schema_definition import LoneSchemaDefinitionRule
  59. from .rules.unique_operation_types import UniqueOperationTypesRule
  60. from .rules.unique_type_names import UniqueTypeNamesRule
  61. from .rules.unique_enum_value_names import UniqueEnumValueNamesRule
  62. from .rules.unique_field_definition_names import UniqueFieldDefinitionNamesRule
  63. from .rules.unique_argument_definition_names import UniqueArgumentDefinitionNamesRule
  64. from .rules.unique_directive_names import UniqueDirectiveNamesRule
  65. from .rules.possible_type_extensions import PossibleTypeExtensionsRule
  66. __all__ = ["specified_rules", "specified_sdl_rules"]
  67. # This list includes all validation rules defined by the GraphQL spec.
  68. #
  69. # The order of the rules in this list has been adjusted to lead to the
  70. # most clear output when encountering multiple validation errors.
  71. specified_rules: Tuple[Type[ASTValidationRule], ...] = (
  72. ExecutableDefinitionsRule,
  73. UniqueOperationNamesRule,
  74. LoneAnonymousOperationRule,
  75. SingleFieldSubscriptionsRule,
  76. KnownTypeNamesRule,
  77. FragmentsOnCompositeTypesRule,
  78. VariablesAreInputTypesRule,
  79. ScalarLeafsRule,
  80. FieldsOnCorrectTypeRule,
  81. UniqueFragmentNamesRule,
  82. KnownFragmentNamesRule,
  83. NoUnusedFragmentsRule,
  84. PossibleFragmentSpreadsRule,
  85. NoFragmentCyclesRule,
  86. UniqueVariableNamesRule,
  87. NoUndefinedVariablesRule,
  88. NoUnusedVariablesRule,
  89. KnownDirectivesRule,
  90. UniqueDirectivesPerLocationRule,
  91. KnownArgumentNamesRule,
  92. UniqueArgumentNamesRule,
  93. ValuesOfCorrectTypeRule,
  94. ProvidedRequiredArgumentsRule,
  95. VariablesInAllowedPositionRule,
  96. OverlappingFieldsCanBeMergedRule,
  97. UniqueInputFieldNamesRule,
  98. )
  99. """A tuple with all validation rules defined by the GraphQL specification.
  100. The order of the rules in this tuple has been adjusted to lead to the
  101. most clear output when encountering multiple validation errors.
  102. """
  103. specified_sdl_rules: Tuple[Type[ASTValidationRule], ...] = (
  104. LoneSchemaDefinitionRule,
  105. UniqueOperationTypesRule,
  106. UniqueTypeNamesRule,
  107. UniqueEnumValueNamesRule,
  108. UniqueFieldDefinitionNamesRule,
  109. UniqueArgumentDefinitionNamesRule,
  110. UniqueDirectiveNamesRule,
  111. KnownTypeNamesRule,
  112. KnownDirectivesRule,
  113. UniqueDirectivesPerLocationRule,
  114. PossibleTypeExtensionsRule,
  115. KnownArgumentNamesOnDirectivesRule,
  116. UniqueArgumentNamesRule,
  117. UniqueInputFieldNamesRule,
  118. ProvidedRequiredArgumentsOnDirectivesRule,
  119. )
  120. """This tuple includes all rules for validating SDL.
  121. For internal use only.
  122. """