@@ -196,6 +196,7 @@ def get_file_type(*args, **kwargs):
196
196
197
197
import inspect
198
198
import dataclasses
199
+ import typing
199
200
200
201
from pickle import GLOBAL
201
202
@@ -761,6 +762,13 @@ def _create_ftype(ftypeobj, func, args, kwds):
761
762
args = ()
762
763
return ftypeobj (func , * args , ** kwds )
763
764
765
+ def _create_typing_tuple (argz , * args ): #NOTE: workaround python bug
766
+ if not argz :
767
+ return typing .Tuple [()].copy_with (())
768
+ if argz == ((),):
769
+ return typing .Tuple [()]
770
+ return typing .Tuple [argz ]
771
+
764
772
def _create_lock (locked , * args ): #XXX: ignores 'blocking'
765
773
from threading import Lock
766
774
lock = Lock ()
@@ -1276,6 +1284,23 @@ def save_classobj(pickler, obj): #FIXME: enable pickler._byref
1276
1284
logger .trace (pickler , "# C2" )
1277
1285
return
1278
1286
1287
+ @register (typing ._GenericAlias )
1288
+ def save_generic_alias (pickler , obj ):
1289
+ args = obj .__args__
1290
+ if type (obj .__reduce__ ()) is str :
1291
+ logger .trace (pickler , "Ga0: %s" , obj )
10000
1292
+ StockPickler .save_global (pickler , obj , name = obj .__reduce__ ())
1293
+ logger .trace (pickler , "# Ga0" )
1294
+ elif obj .__origin__ is tuple and (not args or args == ((),)):
1295
+ logger .trace (pickler , "Ga1: %s" , obj )
1296
+ pickler .save_reduce (_create_typing_tuple , (args ,), obj = obj )
1297
+ logger .trace (pickler , "# Ga1" )
1298
+ else :
1299
+ logger .trace (pickler , "Ga2: %s" , obj )
1300
+ StockPickler .save_reduce (pickler , * obj .__reduce__ (), obj = obj )
1301
+ logger .trace (pickler , "# Ga2" )
1302
+ return
1303
+
1279
1304
@register (LockType )
1280
1305
def save_lock (pickler , obj ):
1281
1306
logger .trace (pickler , "Lo: %s" , obj )
0 commit comments