87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
from .ast import (
|
|
Node,
|
|
DefinitionNode,
|
|
ExecutableDefinitionNode,
|
|
ListValueNode,
|
|
ObjectValueNode,
|
|
SchemaExtensionNode,
|
|
SelectionNode,
|
|
TypeDefinitionNode,
|
|
TypeExtensionNode,
|
|
TypeNode,
|
|
TypeSystemDefinitionNode,
|
|
ValueNode,
|
|
VariableNode,
|
|
)
|
|
|
|
__all__ = [
|
|
"is_definition_node",
|
|
"is_executable_definition_node",
|
|
"is_selection_node",
|
|
"is_value_node",
|
|
"is_const_value_node",
|
|
"is_type_node",
|
|
"is_type_system_definition_node",
|
|
"is_type_definition_node",
|
|
"is_type_system_extension_node",
|
|
"is_type_extension_node",
|
|
]
|
|
|
|
|
|
def is_definition_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a definition."""
|
|
return isinstance(node, DefinitionNode)
|
|
|
|
|
|
def is_executable_definition_node(node: Node) -> bool:
|
|
"""Check whether the given node represents an executable definition."""
|
|
return isinstance(node, ExecutableDefinitionNode)
|
|
|
|
|
|
def is_selection_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a selection."""
|
|
return isinstance(node, SelectionNode)
|
|
|
|
|
|
def is_value_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a value."""
|
|
return isinstance(node, ValueNode)
|
|
|
|
|
|
def is_const_value_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a constant value."""
|
|
return is_value_node(node) and (
|
|
any(is_const_value_node(value) for value in node.values)
|
|
if isinstance(node, ListValueNode)
|
|
else (
|
|
any(is_const_value_node(field.value) for field in node.fields)
|
|
if isinstance(node, ObjectValueNode)
|
|
else not isinstance(node, VariableNode)
|
|
)
|
|
)
|
|
|
|
|
|
def is_type_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a type."""
|
|
return isinstance(node, TypeNode)
|
|
|
|
|
|
def is_type_system_definition_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a type system definition."""
|
|
return isinstance(node, TypeSystemDefinitionNode)
|
|
|
|
|
|
def is_type_definition_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a type definition."""
|
|
return isinstance(node, TypeDefinitionNode)
|
|
|
|
|
|
def is_type_system_extension_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a type system extension."""
|
|
return isinstance(node, (SchemaExtensionNode, TypeExtensionNode))
|
|
|
|
|
|
def is_type_extension_node(node: Node) -> bool:
|
|
"""Check whether the given node represents a type extension."""
|
|
return isinstance(node, TypeExtensionNode)
|