|
13 | 13 |
|
14 | 14 |
|
15 | 15 | def get_edge_class(
|
16 |
| - connection_class: Type["Connection"], _node: Type[AbstractNode], base_name: str |
| 16 | + connection_class: Type["Connection"], |
| 17 | + _node: Type[AbstractNode], |
| 18 | + base_name: str, |
| 19 | + strict_types: bool = False, |
17 | 20 | ):
|
18 | 21 | edge_class = getattr(connection_class, "Edge", None)
|
19 | 22 |
|
20 | 23 | class EdgeBase:
|
21 |
| - node = Field(_node, description="The item at the end of the edge") |
| 24 | + node = Field( |
| 25 | + NonNull(_node) if strict_types else _node, |
| 26 | + description="The item at the end of the edge", |
| 27 | + ) |
22 | 28 | cursor = String(required=True, description="A cursor for use in pagination")
|
23 | 29 |
|
24 | 30 | class EdgeMeta:
|
@@ -83,7 +89,9 @@ class Meta:
|
83 | 89 | abstract = True
|
84 | 90 |
|
85 | 91 | @classmethod
|
86 |
| - def __init_subclass_with_meta__(cls, node=None, name=None, _meta=None, **options): |
| 92 | + def __init_subclass_with_meta__( |
| 93 | + cls, node=None, name=None, strict_types=False, _meta=None, **options |
| 94 | + ): |
87 | 95 | if not _meta:
|
88 | 96 | _meta = ConnectionOptions(cls)
|
89 | 97 | assert node, f"You have to provide a node in {cls.__name__}.Meta"
|
@@ -111,10 +119,10 @@ def __init_subclass_with_meta__(cls, node=None, name=None, _meta=None, **options
|
111 | 119 | )
|
112 | 120 |
|
113 | 121 | if "edges" not in _meta.fields:
|
114 |
| - edge_class = get_edge_class(cls, node, base_name) # type: ignore |
| 122 | + edge_class = get_edge_class(cls, node, base_name, strict_types) # type: ignore |
115 | 123 | cls.Edge = edge_class
|
116 | 124 | _meta.fields["edges"] = Field(
|
117 |
| - NonNull(List(edge_class)), |
| 125 | + NonNull(List(NonNull(edge_class) if strict_types else edge_class)), |
118 | 126 | description="Contains the nodes in this connection.",
|
119 | 127 | )
|
120 | 128 |
|
|
0 commit comments