|
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