Skip to content

Commit 1bee9d3

Browse files
committed
make optional types explicit throughout the rest of the codebase
Signed-off-by: Oleg Höfling <[email protected]>
1 parent 7ace36d commit 1bee9d3

19 files changed

+124
-115
lines changed

mypy.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[mypy]
22
python_version = 3.8
33
check_untyped_defs = True
4-
no_implicit_optional = False
4+
no_implicit_optional = True
55
strict_optional = True
66
warn_redundant_casts = True
77
warn_unused_ignores = True

src/graphql/error/graphql_error.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ class GraphQLError(Exception):
8585
def __init__(
8686
self,
8787
message: str,
88-
nodes: Union[Collection["Node"], "Node"] = None,
89-
source: "Source" = None,
90-
positions: Collection[int] = None,
91-
path: Collection[Union[str, int]] = None,
92-
original_error: Exception = None,
93-
extensions: Dict[str, Any] = None,
88+
nodes: Union[Collection["Node"], "Node", None] = None,
89+
source: Optional["Source"] = None,
90+
positions: Optional[Collection[int]] = None,
91+
path: Optional[Collection[Union[str, int]]] = None,
92+
original_error: Optional[Exception] = None,
93+
extensions: Optional[Dict[str, Any]] = None,
9494
) -> None:
9595
super().__init__(message)
9696
self.message = message

src/graphql/execution/execute.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ def execute(
117117
document: DocumentNode,
118118
root_value: Any = None,
119119
context_value: Any = None,
120-
variable_values: Dict[str, Any] = None,
121-
operation_name: str = None,
122-
field_resolver: GraphQLFieldResolver = None,
123-
type_resolver: GraphQLTypeResolver = None,
124-
middleware: Middleware = None,
125-
execution_context_class: Type["ExecutionContext"] = None,
120+
variable_values: Optional[Dict[str, Any]] = None,
121+
operation_name: Optional[str] = None,
122+
field_resolver: Optional[GraphQLFieldResolver] = None,
123+
type_resolver: Optional[GraphQLTypeResolver] = None,
124+
middleware: Optional[Middleware] = None,
125+
execution_context_class: Optional[Type["ExecutionContext"]] = None,
126126
) -> AwaitableOrValue[ExecutionResult]:
127127
"""Execute a GraphQL operation.
128128
@@ -222,11 +222,11 @@ def build(
222222
document: DocumentNode,
223223
root_value: Any = None,
224224
context_value: Any = None,
225-
raw_variable_values: Dict[str, Any] = None,
226-
operation_name: str = None,
227-
field_resolver: GraphQLFieldResolver = None,
228-
type_resolver: GraphQLTypeResolver = None,
229-
middleware: Middleware = None,
225+
raw_variable_values: Optional[Dict[str, Any]] = None,
226+
operation_name: Optional[str] = None,
227+
field_resolver: Optional[GraphQLFieldResolver] = None,
228+
type_resolver: Optional[GraphQLTypeResolver] = None,
229+
middleware: Optional[Middleware] = None,
230230
) -> Union[List[GraphQLError], "ExecutionContext"]:
231231
"""Build an execution context
232232
@@ -1030,7 +1030,7 @@ def collect_subfields(
10301030
def assert_valid_execution_arguments(
10311031
schema: GraphQLSchema,
10321032
document: DocumentNode,
1033-
raw_variable_values: Dict[str, Any] = None,
1033+
raw_variable_values: Optional[Dict[str, Any]] = None,
10341034
) -> None:
10351035
"""Check that the arguments are acceptable.
10361036

src/graphql/execution/values.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def get_variable_values(
3737
schema: GraphQLSchema,
3838
var_def_nodes: FrozenList[VariableDefinitionNode],
3939
inputs: Dict[str, Any],
40-
max_errors: int = None,
40+
max_errors: Optional[int] = None,
4141
) -> CoercedVariableValues:
4242
"""Get coerced variable values based on provided definitions.
4343
@@ -144,7 +144,7 @@ def on_input_value_error(
144144
def get_argument_values(
145145
type_def: Union[GraphQLField, GraphQLDirective],
146146
node: Union[FieldNode, DirectiveNode],
147-
variable_values: Dict[str, Any] = None,
147+
variable_values: Optional[Dict[str, Any]] = None,
148148
) -> Dict[str, Any]:
149149
"""Get coerced argument values based on provided definitions and nodes.
150150
@@ -221,7 +221,7 @@ def get_argument_values(
221221
def get_directive_values(
222222
directive_def: GraphQLDirective,
223223
node: NodeWithDirective,
224-
variable_values: Dict[str, Any] = None,
224+
variable_values: Optional[Dict[str, Any]] = None,
225225
) -> Optional[Dict[str, Any]]:
226226
"""Get coerced argument values based on provided nodes.
227227

src/graphql/language/ast.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ def __init__(
9393
end: int,
9494
line: int,
9595
column: int,
96-
prev: "Token" = None,
97-
value: str = None,
96+
prev: Optional["Token"] = None,
97+
value: Optional[str] = None,
9898
) -> None:
9999
self.kind = kind
100100
self.start, self.end = start, end

src/graphql/language/parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,7 @@ def expect_optional_keyword(self, value: str) -> bool:
10251025

10261026
return False
10271027

1028-
def unexpected(self, at_token: Token = None) -> GraphQLError:
1028+
def unexpected(self, at_token: Optional[Token] = None) -> GraphQLError:
10291029
"""Create an error when an unexpected lexed token is encountered."""
10301030
token = at_token or self._lexer.token
10311031
return GraphQLSyntaxError(

src/graphql/language/source.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Optional
2+
13
from .location import SourceLocation
24

35
__all__ = ["Source"]
@@ -9,7 +11,10 @@ class Source:
911
__slots__ = "body", "name", "location_offset"
1012

1113
def __init__(
12-
self, body: str, name: str = None, location_offset: SourceLocation = None
14+
self,
15+
body: str,
16+
name: Optional[str] = None,
17+
location_offset: Optional[SourceLocation] = None,
1318
) -> None:
1419
"""Initialize source input.
1520

src/graphql/pyutils/did_you_mean.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from typing import Sequence
1+
from typing import Optional, Sequence
22

33
__all__ = ["did_you_mean"]
44

55
MAX_LENGTH = 5
66

77

8-
def did_you_mean(suggestions: Sequence[str], sub_message: str = None) -> str:
8+
def did_you_mean(suggestions: Sequence[str], sub_message: Optional[str] = None) -> str:
99
"""Given [ A, B, C ] return ' Did you mean A, B, or C?'"""
1010
if not suggestions:
1111
return ""

src/graphql/subscription/map_async_iterator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from asyncio import Event, ensure_future, Future, wait
22
from concurrent.futures import FIRST_COMPLETED
33
from inspect import isasyncgen, isawaitable
4-
from typing import AsyncIterable, Callable, Set
4+
from typing import AsyncIterable, Callable, Optional, Set
55

66
__all__ = ["MapAsyncIterator"]
77

@@ -21,7 +21,7 @@ def __init__(
2121
self,
2222
iterable: AsyncIterable,
2323
callback: Callable,
24-
reject_callback: Callable = None,
24+
reject_callback: Optional[Callable] = None,
2525
) -> None:
2626
self.iterator = iterable.__aiter__()
2727
self.callback = callback

src/graphql/type/definition.py

Lines changed: 61 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,10 @@ class GraphQLNamedType(GraphQLType):
198198
def __init__(
199199
self,
200200
name: str,
201-
description: str = None,
202-
extensions: Dict[str, Any] = None,
203-
ast_node: TypeDefinitionNode = None,
204-
extension_ast_nodes: Collection[TypeExtensionNode] = None,
201+
description: Optional[str] = None,
202+
extensions: Optional[Dict[str, Any]] = None,
203+
ast_node: Optional[TypeDefinitionNode] = None,
204+
extension_ast_nodes: Optional[Collection[TypeExtensionNode]] = None,
205205
) -> None:
206206
if not name:
207207
raise TypeError("Must provide name.")
@@ -322,13 +322,13 @@ def serialize_odd(value):
322322
def __init__(
323323
self,
324324
name: str,
325-
serialize: GraphQLScalarSerializer = None,
326-
parse_value: GraphQLScalarValueParser = None,
327-
parse_literal: GraphQLScalarLiteralParser = None,
328-
description: str = None,
329-
extensions: Dict[str, Any] = None,
330-
ast_node: ScalarTypeDefinitionNode = None,
331-
extension_ast_nodes: Collection[ScalarTypeExtensionNode] = None,
325+
serialize: Optional[GraphQLScalarSerializer] = None,
326+
parse_value: Optional[GraphQLScalarValueParser] = None,
327+
parse_literal: Optional[GraphQLScalarLiteralParser] = None,
328+
description: Optional[str] = None,
329+
extensions: Optional[Dict[str, Any]] = None,
330+
ast_node: Optional[ScalarTypeDefinitionNode] = None,
331+
extension_ast_nodes: Optional[Collection[ScalarTypeExtensionNode]] = None,
332332
) -> None:
333333
super().__init__(
334334
name=name,
@@ -392,7 +392,9 @@ def parse_value(value: Any) -> Any:
392392
"""
393393
return value
394394

395-
def parse_literal(self, node: ValueNode, _variables: Dict[str, Any] = None) -> Any:
395+
def parse_literal(
396+
self, node: ValueNode, _variables: Optional[Dict[str, Any]] = None
397+
) -> Any:
396398
"""Parses an externally provided literal value to use as an input.
397399
398400
This default method uses the parse_value method and should be replaced
@@ -444,13 +446,13 @@ class GraphQLField:
444446
def __init__(
445447
self,
446448
type_: "GraphQLOutputType",
447-
args: GraphQLArgumentMap = None,
448-
resolve: "GraphQLFieldResolver" = None,
449-
subscribe: "GraphQLFieldResolver" = None,
450-
description: str = None,
451-
deprecation_reason: str = None,
452-
extensions: Dict[str, Any] = None,
453-
ast_node: FieldDefinitionNode = None,
449+
args: Optional[GraphQLArgumentMap] = None,
450+
resolve: Optional["GraphQLFieldResolver"] = None,
451+
subscribe: Optional["GraphQLFieldResolver"] = None,
452+
description: Optional[str] = None,
453+
deprecation_reason: Optional[str] = None,
454+
extensions: Optional[Dict[str, Any]] = None,
455+
ast_node: Optional[FieldDefinitionNode] = None,
454456
) -> None:
455457
if not is_output_type(type_):
456458
raise TypeError("Field type must be an output type.")
@@ -588,10 +590,10 @@ def __init__(
588590
self,
589591
type_: "GraphQLInputType",
590592
default_value: Any = Undefined,
591-
description: str = None,
592-
out_name: str = None,
593-
extensions: Dict[str, Any] = None,
594-
ast_node: InputValueDefinitionNode = None,
593+
description: Optional[str] = None,
594+
out_name: Optional[str] = None,
595+
extensions: Optional[Dict[str, Any]] = None,
596+
ast_node: Optional[InputValueDefinitionNode] = None,
595597
) -> None:
596598
if not is_input_type(type_):
597599
raise TypeError(f"Argument type must be a GraphQL input type.")
@@ -682,12 +684,12 @@ def __init__(
682684
self,
683685
name: str,
684686
fields: Thunk[GraphQLFieldMap],
685-
interfaces: Thunk[Collection["GraphQLInterfaceType"]] = None,
686-
is_type_of: GraphQLIsTypeOfFn = None,
687-
extensions: Dict[str, Any] = None,
688-
description: str = None,
689-
ast_node: ObjectTypeDefinitionNode = None,
690-
extension_ast_nodes: Collection[ObjectTypeExtensionNode] = None,
687+
interfaces: Optional[Thunk[Collection["GraphQLInterfaceType"]]] = None,
688+
is_type_of: Optional[GraphQLIsTypeOfFn] = None,
689+
extensions: Optional[Dict[str, Any]] = None,
690+
description: Optional[str] = None,
691+
ast_node: Optional[ObjectTypeDefinitionNode] = None,
692+
extension_ast_nodes: Optional[Collection[ObjectTypeExtensionNode]] = None,
691693
) -> None:
692694
super().__init__(
693695
name=name,
@@ -801,13 +803,13 @@ class GraphQLInterfaceType(GraphQLNamedType):
801803
def __init__(
802804
self,
803805
name: str,
804-
fields: Thunk[GraphQLFieldMap] = None,
805-
interfaces: Thunk[Collection["GraphQLInterfaceType"]] = None,
806-
resolve_type: GraphQLTypeResolver = None,
807-
description: str = None,
808-
extensions: Dict[str, Any] = None,
809-
ast_node: InterfaceTypeDefinitionNode = None,
810-
extension_ast_nodes: Collection[InterfaceTypeExtensionNode] = None,
806+
fields: Optional[Thunk[GraphQLFieldMap]] = None,
807+
interfaces: Optional[Thunk[Collection["GraphQLInterfaceType"]]] = None,
808+
resolve_type: Optional[GraphQLTypeResolver] = None,
809+
description: Optional[str] = None,
810+
extensions: Optional[Dict[str, Any]] = None,
811+
ast_node: Optional[InterfaceTypeDefinitionNode] = None,
812+
extension_ast_nodes: Optional[Collection[InterfaceTypeExtensionNode]] = None,
811813
) -> None:
812814
super().__init__(
813815
name=name,
@@ -927,11 +929,11 @@ def __init__(
927929
self,
928930
name,
929931
types: Thunk[Collection[GraphQLObjectType]],
930-
resolve_type: GraphQLTypeResolver = None,
931-
description: str = None,
932-
extensions: Dict[str, Any] = None,
933-
ast_node: UnionTypeDefinitionNode = None,
934-
extension_ast_nodes: Collection[UnionTypeExtensionNode] = None,
932+
resolve_type: Optional[GraphQLTypeResolver] = None,
933+
description: Optional[str] = None,
934+
extensions: Optional[Dict[str, Any]] = None,
935+
ast_node: Optional[UnionTypeDefinitionNode] = None,
936+
extension_ast_nodes: Optional[Collection[UnionTypeExtensionNode]] = None,
935937
) -> None:
936938
super().__init__(
937939
name=name,
@@ -1033,10 +1035,10 @@ def __init__(
10331035
self,
10341036
name: str,
10351037
values: Union[GraphQLEnumValueMap, Dict[str, Any], Type[Enum]],
1036-
description: str = None,
1037-
extensions: Dict[str, Any] = None,
1038-
ast_node: EnumTypeDefinitionNode = None,
1039-
extension_ast_nodes: Collection[EnumTypeExtensionNode] = None,
1038+
description: Optional[str] = None,
1039+
extensions: Optional[Dict[str, Any]] = None,
1040+
ast_node: Optional[EnumTypeDefinitionNode] = None,
1041+
extension_ast_nodes: Optional[Collection[EnumTypeExtensionNode]] = None,
10401042
) -> None:
10411043
super().__init__(
10421044
name=name,
@@ -1119,7 +1121,7 @@ def parse_value(self, value: str) -> Any:
11191121
return Undefined
11201122

11211123
def parse_literal(
1122-
self, value_node: ValueNode, _variables: Dict[str, Any] = None
1124+
self, value_node: ValueNode, _variables: Optional[Dict[str, Any]] = None
11231125
) -> Any:
11241126
# Note: variables will be resolved before calling this method.
11251127
if isinstance(value_node, EnumValueNode):
@@ -1155,10 +1157,10 @@ class GraphQLEnumValue:
11551157
def __init__(
11561158
self,
11571159
value: Any = None,
1158-
description: str = None,
1159-
deprecation_reason: str = None,
1160-
extensions: Dict[str, Any] = None,
1161-
ast_node: EnumValueDefinitionNode = None,
1160+
description: Optional[str] = None,
1161+
deprecation_reason: Optional[str] = None,
1162+
extensions: Optional[Dict[str, Any]] = None,
1163+
ast_node: Optional[EnumValueDefinitionNode] = None,
11621164
) -> None:
11631165
if description is not None and not is_description(description):
11641166
raise TypeError("The description of the enum value must be a string.")
@@ -1240,11 +1242,11 @@ def __init__(
12401242
self,
12411243
name: str,
12421244
fields: Thunk[GraphQLInputFieldMap],
1243-
description: str = None,
1244-
out_type: GraphQLInputFieldOutType = None,
1245-
extensions: Dict[str, Any] = None,
1246-
ast_node: InputObjectTypeDefinitionNode = None,
1247-
extension_ast_nodes: Collection[InputObjectTypeExtensionNode] = None,
1245+
description: Optional[str] = None,
1246+
out_type: Optional[GraphQLInputFieldOutType] = None,
1247+
extensions: Optional[Dict[str, Any]] = None,
1248+
ast_node: Optional[InputObjectTypeDefinitionNode] = None,
1249+
extension_ast_nodes: Optional[Collection[InputObjectTypeExtensionNode]] = None,
12481250
) -> None:
12491251
super().__init__(
12501252
name=name,
@@ -1342,10 +1344,10 @@ def __init__(
13421344
self,
13431345
type_: "GraphQLInputType",
13441346
default_value: Any = Undefined,
1345-
description: str = None,
1346-
out_name: str = None,
1347-
extensions: Dict[str, Any] = None,
1348-
ast_node: InputValueDefinitionNode = None,
1347+
description: Optional[str] = None,
1348+
out_name: Optional[str] = None,
1349+
extensions: Optional[Dict[str, Any]] = None,
1350+
ast_node: Optional[InputValueDefinitionNode] = None,
13491351
) -> None:
13501352
if not is_input_type(type_):
13511353
raise TypeError(f"Input field type must be a GraphQL input type.")

src/graphql/type/directives.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ def __init__(
3838
self,
3939
name: str,
4040
locations: Collection[DirectiveLocation],
41-
args: Dict[str, GraphQLArgument] = None,
41+
args: Optional[Dict[str, GraphQLArgument]] = None,
4242
is_repeatable: bool = False,
43-
description: str = None,
44-
extensions: Dict[str, Any] = None,
45-
ast_node: ast.DirectiveDefinitionNode = None,
43+
description: Optional[str] = None,
44+
extensions: Optional[Dict[str, Any]] = None,
45+
ast_node: Optional[ast.DirectiveDefinitionNode] = None,
4646
) -> None:
4747
if not name:
4848
raise TypeError("Directive must be named.")

0 commit comments

Comments
 (0)