102
102
)
103
103
104
104
# The Extended factory also takes a converter.
105
- ExtendedUnstructureHookFactory = TypeVar (
106
- "ExtendedUnstructureHookFactory" ,
107
- bound = Callable [[TargetType , "BaseConverter" ], UnstructureHook ],
105
+ ExtendedUnstructureHookFactory : TypeAlias = Callable [[TargetType , T ], UnstructureHook ]
106
+
107
+ # This typevar for the BaseConverter.
108
+ AnyUnstructureHookFactoryBase = TypeVar (
109
+ "AnyUnstructureHookFactoryBase" ,
110
+ bound = "HookFactory[UnstructureHook] | ExtendedUnstructureHookFactory[BaseConverter]" ,
111
+ )
112
+
113
+ # This typevar for the Converter.
114
+ AnyUnstructureHookFactory = TypeVar (
115
+ "AnyUnstructureHookFactory" ,
116
+ bound = "HookFactory[UnstructureHook] | ExtendedUnstructureHookFactory[Converter]" ,
108
117
)
109
118
110
119
StructureHookFactory = TypeVar ("StructureHookFactory" , bound = HookFactory [StructureHook ])
111
120
112
121
# The Extended factory also takes a converter.
113
- ExtendedStructureHookFactory = TypeVar (
114
- "ExtendedStructureHookFactory" ,
115
- bound = Callable [[TargetType , "BaseConverter" ], StructureHook ],
122
+ ExtendedStructureHookFactory : TypeAlias = Callable [[TargetType , T ], StructureHook ]
123
+
124
+ # This typevar for the BaseConverter.
125
+ AnyStructureHookFactoryBase = TypeVar (
126
+ "AnyStructureHookFactoryBase" ,
127
+ bound = "HookFactory[StructureHook] | ExtendedStructureHookFactory[BaseConverter]" ,
128
+ )
129
+
130
+ # This typevar for the Converter.
131
+ AnyStructureHookFactory = TypeVar (
132
+ "AnyStructureHookFactory" ,
133
+ bound = "HookFactory[StructureHook] | ExtendedStructureHookFactory[Converter]" ,
116
134
)
117
135
118
136
@@ -341,12 +359,7 @@ def register_unstructure_hook_func(
341
359
@overload
342
360
def register_unstructure_hook_factory (
343
361
self , predicate : Predicate
344
- ) -> Callable [[UnstructureHookFactory ], UnstructureHookFactory ]: ...
345
-
346
- @overload
347
- def register_unstructure_hook_factory (
348
- self , predicate : Predicate
349
- ) -> Callable [[ExtendedUnstructureHookFactory ], ExtendedUnstructureHookFactory ]: ...
362
+ ) -> Callable [[AnyUnstructureHookFactoryBase ], AnyUnstructureHookFactoryBase ]: ...
350
363
351
364
@overload
352
365
def register_unstructure_hook_factory (
@@ -355,8 +368,10 @@ def register_unstructure_hook_factory(
355
368
356
369
@overload
357
370
def register_unstructure_hook_factory (
358
- self , predicate : Predicate , factory : ExtendedUnstructureHookFactory
359
- ) -> ExtendedUnstructureHookFactory : ...
371
+ self ,
372
+ predicate : Predicate ,
373
+ factory : ExtendedUnstructureHookFactory [BaseConverter ],
374
+ ) -> ExtendedUnstructureHookFactory [BaseConverter ]: ...
360
375
361
376
def register_unstructure_hook_factory (self , predicate , factory = None ):
362
377
"""
@@ -478,12 +493,7 @@ def register_structure_hook_func(
478
493
@overload
479
494
def register_structure_hook_factory (
480
495
self , predicate : Predicate
481
- ) -> Callable [[StructureHookFactory , StructureHookFactory ]]: ...
482
-
483
- @overload
484
- def register_structure_hook_factory (
485
- self , predicate : Predicate
486
- ) -> Callable [[ExtendedStructureHookFactory , ExtendedStructureHookFactory ]]: ...
496
+ ) -> Callable [[AnyStructureHookFactoryBase ], AnyStructureHookFactoryBase ]: ...
487
497
488
498
@overload
489
499
def register_structure_hook_factory (
@@ -492,8 +502,8 @@ def register_structure_hook_factory(
492
502
493
503
@overload
494
504
def register_structure_hook_factory (
495
- self , predicate : Predicate , factory : ExtendedStructureHookFactory
496
- ) -> ExtendedStructureHookFactory : ...
505
+ self , predicate : Predicate , factory : ExtendedStructureHookFactory [ BaseConverter ]
506
+ ) -> ExtendedStructureHookFactory [ BaseConverter ] : ...
497
507
498
508
def register_structure_hook_factory (self , predicate , factory = None ):
499
509
"""
@@ -1159,6 +1169,44 @@ def __init__(
1159
1169
self ._struct_copy_skip = self ._structure_func .get_num_fns ()
1160
1170
self ._unstruct_copy_skip = self ._unstructure_func .get_num_fns ()
1161
1171
1172
+ @overload
1173
+ def register_unstructure_hook_factory (
1174
+ self , predicate : Predicate
1175
+ ) -> Callable [[AnyUnstructureHookFactory ], AnyUnstructureHookFactory ]: ...
1176
+
1177
+ @overload
1178
+ def register_unstructure_hook_factory (
1179
+ self , predicate : Predicate , factory : UnstructureHookFactory
1180
+ ) -> UnstructureHookFactory : ...
1181
+
1182
+ @overload
1183
+ def register_unstructure_hook_factory (
1184
+ self , predicate : Predicate , factory : ExtendedUnstructureHookFactory [Converter ]
1185
+ ) -> ExtendedUnstructureHookFactory [Converter ]: ...
1186
+
1187
+ def register_unstructure_hook_factory (self , predicate , factory = None ):
1188
+ # This dummy wrapper is required due to how `@overload` works.
1189
+ return super ().register_unstructure_hook_factory (predicate , factory )
1190
+
1191
+ @overload
1192
+ def register_structure_hook_factory (
1193
+ self , predicate : Predicate
1194
+ ) -> Callable [[AnyStructureHookFactory ], AnyStructureHookFactory ]: ...
1195
+
1196
+ @overload
1197
+ def register_structure_hook_factory (
1198
+ self , predicate : Predicate , factory : StructureHookFactory
1199
+ ) -> StructureHookFactory : ...
1200
+
1201
+ @overload
1202
+ def register_structure_hook_factory (
1203
+ self , predicate : Predicate , factory : ExtendedStructureHookFactory [Converter ]
1204
+ ) -> ExtendedStructureHookFactory [Converter ]: ...
1205
+
1206
+ def register_structure_hook_factory (self , predicate , factory = None ):
1207
+ # This dummy wrapper is required due to how `@overload` works.
1208
+ return super ().register_structure_hook_factory (predicate , factory )
1209
+
1162
1210
def get_structure_newtype (self , type : type [T ]) -> Callable [[Any , Any ], T ]:
1163
1211
base = get_newtype_base (type )
1164
1212
handler = self .get_structure_hook (base )
0 commit comments