Skip to content

Frozenlist type only 15 #115

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/graphql/error/graphql_error.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from sys import exc_info
from typing import Any, Collection, Dict, List, Optional, Union, TYPE_CHECKING

from ..pyutils.is_collection import is_collection

if TYPE_CHECKING:
from ..language.ast import Node # noqa: F401
from ..language.location import SourceLocation # noqa: F401
Expand Down Expand Up @@ -92,7 +94,7 @@ def __init__(
) -> None:
super().__init__(message)
self.message = message
if nodes and not isinstance(nodes, list):
if nodes and not is_collection(nodes):
nodes = [nodes] # type: ignore
self.nodes = nodes or None # type: ignore
self.source = source
Expand Down
4 changes: 2 additions & 2 deletions src/graphql/execution/execute.py
Original file line number Diff line number Diff line change
Expand Up @@ -968,9 +968,9 @@ async def collect_and_execute_subfields_async() -> Dict[str, Any]:
raise invalid_return_type_error(
return_type, result, field_nodes
)
return self.collect_and_execute_subfields(
return self.collect_and_execute_subfields( # type: ignore
return_type, field_nodes, path, result
) # type: ignore
)

return collect_and_execute_subfields_async()

Expand Down
8 changes: 4 additions & 4 deletions src/graphql/execution/values.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Any, Callable, Dict, List, Optional, Union, cast
from typing import Any, Callable, Dict, List, Optional, Union, cast, Sequence

from ..error import GraphQLError
from ..language import (
Expand All @@ -16,7 +16,7 @@
VariableNode,
print_ast,
)
from ..pyutils import inspect, print_path_list, FrozenList, Undefined
from ..pyutils import inspect, print_path_list, Undefined
from ..type import (
GraphQLDirective,
GraphQLField,
Expand All @@ -37,7 +37,7 @@

def get_variable_values(
schema: GraphQLSchema,
var_def_nodes: FrozenList[VariableDefinitionNode],
var_def_nodes: Sequence[VariableDefinitionNode],
inputs: Dict[str, Any],
max_errors: Optional[int] = None,
) -> CoercedVariableValues:
Expand Down Expand Up @@ -71,7 +71,7 @@ def on_error(error: GraphQLError) -> None:

def coerce_variable_values(
schema: GraphQLSchema,
var_def_nodes: FrozenList[VariableDefinitionNode],
var_def_nodes: Sequence[VariableDefinitionNode],
inputs: Dict[str, Any],
on_error: Callable[[GraphQLError], None],
) -> Dict[str, Any]:
Expand Down
72 changes: 36 additions & 36 deletions src/graphql/language/ast.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from copy import copy, deepcopy
from enum import Enum
from typing import Any, Dict, List, Optional, Union
from typing import Any, Dict, List, Optional, Union, Sequence

from .source import Source
from .token_kind import TokenKind
Expand Down Expand Up @@ -292,7 +292,7 @@ class NameNode(Node):
class DocumentNode(Node):
__slots__ = ("definitions",)

definitions: FrozenList["DefinitionNode"]
definitions: Sequence["DefinitionNode"]


class DefinitionNode(Node):
Expand All @@ -303,8 +303,8 @@ class ExecutableDefinitionNode(DefinitionNode):
__slots__ = "name", "directives", "variable_definitions", "selection_set"

name: Optional[NameNode]
directives: FrozenList["DirectiveNode"]
variable_definitions: FrozenList["VariableDefinitionNode"]
directives: Sequence["DirectiveNode"]
variable_definitions: Sequence["VariableDefinitionNode"]
selection_set: "SelectionSetNode"


Expand All @@ -320,27 +320,27 @@ class VariableDefinitionNode(Node):
variable: "VariableNode"
type: "TypeNode"
default_value: Optional["ValueNode"]
directives: FrozenList["DirectiveNode"]
directives: Sequence["DirectiveNode"]


class SelectionSetNode(Node):
__slots__ = ("selections",)

selections: FrozenList["SelectionNode"]
selections: Sequence["SelectionNode"]


class SelectionNode(Node):
__slots__ = ("directives",)

directives: FrozenList["DirectiveNode"]
directives: Sequence["DirectiveNode"]


class FieldNode(SelectionNode):
__slots__ = "alias", "name", "arguments", "selection_set"

alias: Optional[NameNode]
name: NameNode
arguments: FrozenList["ArgumentNode"]
arguments: Sequence["ArgumentNode"]
selection_set: Optional[SelectionSetNode]


Expand Down Expand Up @@ -425,13 +425,13 @@ class EnumValueNode(ValueNode):
class ListValueNode(ValueNode):
__slots__ = ("values",)

values: FrozenList[ValueNode]
values: Sequence[ValueNode]


class ObjectValueNode(ValueNode):
__slots__ = ("fields",)

fields: FrozenList["ObjectFieldNode"]
fields: Sequence["ObjectFieldNode"]


class ObjectFieldNode(Node):
Expand All @@ -448,7 +448,7 @@ class DirectiveNode(Node):
__slots__ = "name", "arguments"

name: NameNode
arguments: FrozenList[ArgumentNode]
arguments: Sequence[ArgumentNode]


# Type Reference
Expand Down Expand Up @@ -487,8 +487,8 @@ class SchemaDefinitionNode(TypeSystemDefinitionNode):
__slots__ = "description", "directives", "operation_types"

description: Optional[StringValueNode]
directives: FrozenList[DirectiveNode]
operation_types: FrozenList["OperationTypeDefinitionNode"]
directives: Sequence[DirectiveNode]
operation_types: Sequence["OperationTypeDefinitionNode"]


class OperationTypeDefinitionNode(Node):
Expand All @@ -506,7 +506,7 @@ class TypeDefinitionNode(TypeSystemDefinitionNode):

description: Optional[StringValueNode]
name: NameNode
directives: FrozenList[DirectiveNode]
directives: Sequence[DirectiveNode]


class ScalarTypeDefinitionNode(TypeDefinitionNode):
Expand All @@ -516,17 +516,17 @@ class ScalarTypeDefinitionNode(TypeDefinitionNode):
class ObjectTypeDefinitionNode(TypeDefinitionNode):
__slots__ = "interfaces", "fields"

interfaces: FrozenList[NamedTypeNode]
fields: FrozenList["FieldDefinitionNode"]
interfaces: Sequence[NamedTypeNode]
fields: Sequence["FieldDefinitionNode"]


class FieldDefinitionNode(DefinitionNode):
__slots__ = "description", "name", "directives", "arguments", "type"

description: Optional[StringValueNode]
name: NameNode
directives: FrozenList[DirectiveNode]
arguments: FrozenList["InputValueDefinitionNode"]
directives: Sequence[DirectiveNode]
arguments: Sequence["InputValueDefinitionNode"]
type: TypeNode


Expand All @@ -535,28 +535,28 @@ class InputValueDefinitionNode(DefinitionNode):

description: Optional[StringValueNode]
name: NameNode
directives: FrozenList[DirectiveNode]
directives: Sequence[DirectiveNode]
type: TypeNode
default_value: Optional[ValueNode]


class InterfaceTypeDefinitionNode(TypeDefinitionNode):
__slots__ = "fields", "interfaces"

fields: FrozenList["FieldDefinitionNode"]
interfaces: FrozenList[NamedTypeNode]
fields: Sequence["FieldDefinitionNode"]
interfaces: Sequence[NamedTypeNode]


class UnionTypeDefinitionNode(TypeDefinitionNode):
__slots__ = ("types",)

types: FrozenList[NamedTypeNode]
types: Sequence[NamedTypeNode]


class EnumTypeDefinitionNode(TypeDefinitionNode):
__slots__ = ("values",)

values: FrozenList["EnumValueDefinitionNode"]
values: Sequence["EnumValueDefinitionNode"]


class EnumValueDefinitionNode(TypeDefinitionNode):
Expand All @@ -566,7 +566,7 @@ class EnumValueDefinitionNode(TypeDefinitionNode):
class InputObjectTypeDefinitionNode(TypeDefinitionNode):
__slots__ = ("fields",)

fields: FrozenList[InputValueDefinitionNode]
fields: Sequence[InputValueDefinitionNode]


# Directive Definitions
Expand All @@ -577,9 +577,9 @@ class DirectiveDefinitionNode(TypeSystemDefinitionNode):

description: Optional[StringValueNode]
name: NameNode
arguments: FrozenList[InputValueDefinitionNode]
arguments: Sequence[InputValueDefinitionNode]
repeatable: bool
locations: FrozenList[NameNode]
locations: Sequence[NameNode]


# Type System Extensions
Expand All @@ -588,8 +588,8 @@ class DirectiveDefinitionNode(TypeSystemDefinitionNode):
class SchemaExtensionNode(Node):
__slots__ = "directives", "operation_types"

directives: FrozenList[DirectiveNode]
operation_types: FrozenList[OperationTypeDefinitionNode]
directives: Sequence[DirectiveNode]
operation_types: Sequence[OperationTypeDefinitionNode]


# Type Extensions
Expand All @@ -599,7 +599,7 @@ class TypeExtensionNode(TypeSystemDefinitionNode):
__slots__ = "name", "directives"

name: NameNode
directives: FrozenList[DirectiveNode]
directives: Sequence[DirectiveNode]


TypeSystemExtensionNode = Union[SchemaExtensionNode, TypeExtensionNode]
Expand All @@ -612,30 +612,30 @@ class ScalarTypeExtensionNode(TypeExtensionNode):
class ObjectTypeExtensionNode(TypeExtensionNode):
__slots__ = "interfaces", "fields"

interfaces: FrozenList[NamedTypeNode]
fields: FrozenList[FieldDefinitionNode]
interfaces: Sequence[NamedTypeNode]
fields: Sequence[FieldDefinitionNode]


class InterfaceTypeExtensionNode(TypeExtensionNode):
__slots__ = "interfaces", "fields"

interfaces: FrozenList[NamedTypeNode]
fields: FrozenList[FieldDefinitionNode]
interfaces: Sequence[NamedTypeNode]
fields: Sequence[FieldDefinitionNode]


class UnionTypeExtensionNode(TypeExtensionNode):
__slots__ = ("types",)

types: FrozenList[NamedTypeNode]
types: Sequence[NamedTypeNode]


class EnumTypeExtensionNode(TypeExtensionNode):
__slots__ = ("values",)

values: FrozenList[EnumValueDefinitionNode]
values: Sequence[EnumValueDefinitionNode]


class InputObjectTypeExtensionNode(TypeExtensionNode):
__slots__ = ("fields",)

fields: FrozenList[InputValueDefinitionNode]
fields: Sequence[InputValueDefinitionNode]
13 changes: 7 additions & 6 deletions src/graphql/language/visitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
Union,
)

from ..pyutils import inspect, snake_to_camel
from ..pyutils import inspect, snake_to_camel, is_collection
from . import ast

from .ast import Node
Expand Down Expand Up @@ -244,7 +244,7 @@ def visit(
if visitor_keys is None:
visitor_keys = QUERY_DOCUMENT_KEYS
stack: Any = None
in_array = isinstance(root, list)
in_array = is_collection(root)
keys: Tuple[Node, ...] = (root,)
idx = -1
edits: List[Any] = []
Expand All @@ -267,7 +267,7 @@ def visit(
parent = ancestors_pop() if ancestors else None
if is_edited:
if in_array:
node = node[:]
node = list(node) # Mutable copy
else:
node = copy(node)
edit_offset = 0
Expand All @@ -282,7 +282,8 @@ def visit(
node[edit_key] = edit_value
else:
setattr(node, edit_key, edit_value)

if is_edited and in_array:
node = tuple(node) # Immutable copy
idx = stack.idx
keys = stack.keys
edits = stack.edits
Expand All @@ -304,7 +305,7 @@ def visit(
if parent:
path_append(key)

if isinstance(node, list):
if is_collection(node):
result = None
else:
if not isinstance(node, Node):
Expand Down Expand Up @@ -340,7 +341,7 @@ def visit(
path_pop()
else:
stack = Stack(in_array, idx, keys, edits, stack)
in_array = isinstance(node, list)
in_array = is_collection(node)
keys = node if in_array else visitor_keys.get(node.kind, ())
idx = -1
edits = []
Expand Down
Loading