@@ -169,13 +169,13 @@ class TraitError(Exception):
169
169
# -----------------------------------------------------------------------------
170
170
171
171
172
- def isidentifier (s : t . Any ) -> bool :
172
+ def isidentifier (s : str ) -> bool :
173
173
warn (
174
174
"traitlets.traitlets.isidentifier(s) is deprecated since traitlets 5.14.4 Use `s.isidentifier()`." ,
175
175
DeprecationWarning ,
176
176
stacklevel = 2 ,
177
177
)
178
- return t . cast ( bool , s .isidentifier () )
178
+ return s .isidentifier ()
179
179
180
180
181
181
def _safe_literal_eval (s : str ) -> t .Any :
@@ -298,13 +298,21 @@ class link:
298
298
299
299
updating = False
300
300
301
- def __init__ (self , source : t .Any , target : t .Any , transform : t .Any = None ) -> None :
301
+ def __init__ (
302
+ self , source : t .Any , target : t .Any , transform : t .Iterable [FuncT ] | None = None
303
+ ) -> None :
302
304
_validate_link (source , target )
303
305
self .source , self .target = source , target
304
- self . _transform , self . _transform_inv = transform if transform else ( lambda x : x ,) * 2
305
-
306
+ if transform :
307
+ self . _transform , self . _transform_inv = transform # type:ignore[method-assign]
306
308
self .link ()
307
309
310
+ def _transform (self , x : T ) -> T :
311
+ """default transform: no-op"""
312
+ return x
313
+
314
+ _transform_inv = _transform
315
+
308
316
def link (self ) -> None :
309
317
try :
310
318
setattr (
@@ -602,12 +610,12 @@ def default(self, obj: t.Any = None) -> G | None:
602
610
in the same way that dynamic defaults defined by ``@default`` are.
603
611
"""
604
612
if self .default_value is not Undefined :
605
- return t . cast ( G , self .default_value )
613
+ return self .default_value # type:ignore[no-any-return]
606
614
elif hasattr (self , "make_dynamic_default" ):
607
- return t . cast ( G , self .make_dynamic_default ())
615
+ return self .make_dynamic_default () # type:ignore[no-any-return]
608
616
else :
609
617
# Undefined will raise in TraitType.get
610
- return t . cast ( G , self .default_value )
618
+ return self .default_value # type:ignore[no-any-return]
611
619
612
620
def get_default_value (self ) -> G | None :
613
621
"""DEPRECATED: Retrieve the static default value for this trait.
@@ -618,7 +626,7 @@ def get_default_value(self) -> G | None:
618
626
DeprecationWarning ,
619
627
stacklevel = 2 ,
620
628
)
621
- return t . cast ( G , self .default_value )
629
+ return self .default_value # type:ignore[no-any-return]
622
630
623
631
def init_default_value (self , obj : t .Any ) -> G | None :
624
632
"""DEPRECATED: Set the static default value for the trait type."""
@@ -663,12 +671,12 @@ def get(self, obj: HasTraits, cls: type[t.Any] | None = None) -> G | None:
663
671
type = "default" ,
664
672
)
665
673
)
666
- return t . cast ( G , value )
674
+ return value # type:ignore[no-any-return]
667
675
except Exception as e :
668
676
# This should never be reached.
669
677
raise TraitError ("Unexpected error in TraitType: default value not set properly" ) from e
670
678
else :
671
- return t . cast ( G , value )
679
+ return value # type:ignore[no-any-return]
672
680
673
681
@t .overload
674
682
def __get__ (self , obj : None , cls : type [t .Any ]) -> Self :
@@ -689,7 +697,7 @@ def __get__(self, obj: HasTraits | None, cls: type[t.Any]) -> Self | G:
689
697
if obj is None :
690
698
return self
691
699
else :
692
- return t . cast ( G , self .get (obj , cls )) # the G should encode the Optional
700
+ return self .get (obj , cls ) # type:ignore[return-value]
693
701
694
702
def set (self , obj : HasTraits , value : S ) -> None :
695
703
new_value = self ._validate (obj , value )
@@ -727,7 +735,7 @@ def _validate(self, obj: t.Any, value: t.Any) -> G | None:
727
735
value = self .validate (obj , value )
728
736
if obj ._cross_validation_lock is False :
729
737
value = self ._cross_validate (obj , value )
730
- return t . cast ( G , value )
738
+ return value # type:ignore[no-any-return]
731
739
732
740
def _cross_validate (self , obj : t .Any , value : t .Any ) -> G | None :
733
741
if self .name in obj ._trait_validators :
@@ -743,7 +751,7 @@ def _cross_validate(self, obj: t.Any, value: t.Any) -> G | None:
743
751
"use @validate decorator instead." ,
744
752
)
745
753
value = cross_validate (value , self )
746
- return t . cast ( G , value )
754
+ return value # type:ignore[no-any-return]
747
755
748
756
def __or__ (self , other : TraitType [t .Any , t .Any ]) -> Union :
749
757
if isinstance (other , Union ):
@@ -1147,7 +1155,7 @@ def compatible_observer(
1147
1155
)
1148
1156
return func (self , change )
1149
1157
1150
- return t . cast ( FuncT , compatible_observer )
1158
+ return compatible_observer # type:ignore[return-value]
1151
1159
1152
1160
1153
1161
def validate (* names : Sentinel | str ) -> ValidateHandler :
@@ -1899,7 +1907,7 @@ def trait_defaults(self, *names: str, **metadata: t.Any) -> dict[str, t.Any] | S
1899
1907
raise TraitError (f"'{ n } ' is not a trait of '{ type (self ).__name__ } ' instances" )
1900
1908
1901
1909
if len (names ) == 1 and len (metadata ) == 0 :
1902
- return t . cast ( Sentinel , self ._get_trait_default_generator (names [0 ])(self ))
1910
+ return self ._get_trait_default_generator (names [0 ])(self ) # type:ignore[no-any-return]
1903
1911
1904
1912
trait_names = self .trait_names (** metadata )
1905
1913
trait_names .extend (names )
@@ -2149,7 +2157,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2149
2157
) from e
2150
2158
try :
2151
2159
if issubclass (value , self .klass ): # type:ignore[arg-type]
2152
- return t . cast ( G , value )
2160
+ return value # type:ignore[no-any-return]
2153
2161
except Exception :
2154
2162
pass
2155
2163
@@ -2311,7 +2319,7 @@ def validate(self, obj: t.Any, value: t.Any) -> T | None:
2311
2319
if self .allow_none and value is None :
2312
2320
return value
2313
2321
if isinstance (value , self .klass ): # type:ignore[arg-type]
2314
- return t . cast ( T , value )
2322
+ return value # type:ignore[no-any-return]
2315
2323
else :
2316
2324
self .error (obj , value )
2317
2325
@@ -2343,7 +2351,7 @@ def default_value_repr(self) -> str:
2343
2351
return repr (self .make_dynamic_default ())
2344
2352
2345
2353
def from_string (self , s : str ) -> T | None :
2346
- return t . cast ( T , _safe_literal_eval (s ))
2354
+ return _safe_literal_eval (s ) # type:ignore[no-any-return]
2347
2355
2348
2356
2349
2357
class ForwardDeclaredMixin :
@@ -2640,12 +2648,12 @@ def __init__(
2640
2648
def validate (self , obj : t .Any , value : t .Any ) -> G :
2641
2649
if not isinstance (value , int ):
2642
2650
self .error (obj , value )
2643
- return t . cast ( G , _validate_bounds (self , obj , value ))
2651
+ return _validate_bounds (self , obj , value ) # type:ignore[no-any-return]
2644
2652
2645
2653
def from_string (self , s : str ) -> G :
2646
2654
if self .allow_none and s == "None" :
2647
- return t . cast ( G , None )
2648
- return t . cast ( G , int (s ))
2655
+ return None # type:ignore[return-value]
2656
+ return int (s ) # type:ignore[return-value]
2649
2657
2650
2658
def subclass_init (self , cls : type [t .Any ]) -> None :
2651
2659
pass # fully opt out of instance_init
@@ -2696,7 +2704,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2696
2704
value = int (value )
2697
2705
except Exception :
2698
2706
self .error (obj , value )
2699
- return t . cast ( G , _validate_bounds (self , obj , value ))
2707
+ return _validate_bounds (self , obj , value ) # type:ignore[no-any-return]
2700
2708
2701
2709
2702
2710
Long , CLong = Int , CInt
@@ -2758,12 +2766,12 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2758
2766
value = float (value )
2759
2767
if not isinstance (value , float ):
2760
2768
self .error (obj , value )
2761
- return t . cast ( G , _validate_bounds (self , obj , value ))
2769
+ return _validate_bounds (self , obj , value ) # type:ignore[no-any-return]
2762
2770
2763
2771
def from_string (self , s : str ) -> G :
2764
2772
if self .allow_none and s == "None" :
2765
- return t . cast ( G , None )
2766
- return t . cast ( G , float (s ))
2773
+ return None # type:ignore[return-value]
2774
+ return float (s ) # type:ignore[return-value]
2767
2775
2768
2776
def subclass_init (self , cls : type [t .Any ]) -> None :
2769
2777
pass # fully opt out of instance_init
@@ -2814,7 +2822,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2814
2822
value = float (value )
2815
2823
except Exception :
2816
2824
self .error (obj , value )
2817
- return t . cast ( G , _validate_bounds (self , obj , value ))
2825
+ return _validate_bounds (self , obj , value ) # type:ignore[no-any-return]
2818
2826
2819
2827
2820
2828
class Complex (TraitType [complex , t .Union [complex , float , int ]]):
@@ -2940,18 +2948,18 @@ def __init__(
2940
2948
2941
2949
def validate (self , obj : t .Any , value : t .Any ) -> G :
2942
2950
if isinstance (value , str ):
2943
- return t . cast ( G , value )
2951
+ return value # type:ignore[return- value]
2944
2952
if isinstance (value , bytes ):
2945
2953
try :
2946
- return t . cast ( G , value .decode ("ascii" , "strict" ))
2954
+ return value .decode ("ascii" , "strict" ) # type:ignore[return-value]
2947
2955
except UnicodeDecodeError as e :
2948
2956
msg = "Could not decode {!r} for unicode trait '{}' of {} instance."
2949
2957
raise TraitError (msg .format (value , self .name , class_of (obj ))) from e
2950
2958
self .error (obj , value )
2951
2959
2952
2960
def from_string (self , s : str ) -> G :
2953
2961
if self .allow_none and s == "None" :
2954
- return t . cast ( G , None )
2962
+ return None # type:ignore[return-value]
2955
2963
s = os .path .expanduser (s )
2956
2964
if len (s ) >= 2 :
2957
2965
# handle deprecated "1"
@@ -2965,7 +2973,7 @@ def from_string(self, s: str) -> G:
2965
2973
DeprecationWarning ,
2966
2974
stacklevel = 2 ,
2967
2975
)
2968
- return t . cast ( G , s )
2976
+ return s # type:ignore[return-value]
2969
2977
2970
2978
def subclass_init (self , cls : type [t .Any ]) -> None :
2971
2979
pass # fully opt out of instance_init
@@ -3013,7 +3021,7 @@ def __init__(
3013
3021
3014
3022
def validate (self , obj : t .Any , value : t .Any ) -> G :
3015
3023
try :
3016
- return t . cast ( G , str (value ))
3024
+ return str (value ) # type:ignore[return-value]
3017
3025
except Exception :
3018
3026
self .error (obj , value )
3019
3027
@@ -3096,22 +3104,22 @@ def __init__(
3096
3104
3097
3105
def validate (self , obj : t .Any , value : t .Any ) -> G :
3098
3106
if isinstance (value , bool ):
3099
- return t . cast ( G , value )
3107
+ return value # type:ignore[return- value]
3100
3108
elif isinstance (value , int ):
3101
3109
if value == 1 :
3102
- return t . cast ( G , True )
3110
+ return True # type:ignore[return-value]
3103
3111
elif value == 0 :
3104
- return t . cast ( G , False )
3112
+ return False # type:ignore[return-value]
3105
3113
self .error (obj , value )
3106
3114
3107
3115
def from_string (self , s : str ) -> G :
3108
3116
if self .allow_none and s == "None" :
3109
- return t . cast ( G , None )
3117
+ return None # type:ignore[return-value]
3110
3118
s = s .lower ()
3111
3119
if s in {"true" , "1" }:
3112
- return t . cast ( G , True )
3120
+ return True # type:ignore[return-value]
3113
3121
elif s in {"false" , "0" }:
3114
- return t . cast ( G , False )
3122
+ return False # type:ignore[return-value]
3115
3123
else :
3116
3124
raise ValueError ("%r is not 1, 0, true, or false" )
3117
3125
@@ -3168,7 +3176,7 @@ def __init__(
3168
3176
3169
3177
def validate (self , obj : t .Any , value : t .Any ) -> G :
3170
3178
try :
3171
- return t . cast ( G , bool (value ))
3179
+ return bool (value ) # type:ignore[return-value]
3172
3180
except Exception :
3173
3181
self .error (obj , value )
3174
3182
@@ -3225,7 +3233,7 @@ def __init__(
3225
3233
3226
3234
def validate (self , obj : t .Any , value : t .Any ) -> G :
3227
3235
if self .values and value in self .values :
3228
- return t . cast ( G , value )
3236
+ return value # type:ignore[no-any-return]
3229
3237
self .error (obj , value )
3230
3238
3231
3239
def _choices_str (self , as_rst : bool = False ) -> str :
@@ -3252,7 +3260,7 @@ def from_string(self, s: str) -> G:
3252
3260
try :
3253
3261
return self .validate (None , s )
3254
3262
except TraitError :
3255
- return t . cast ( G , _safe_literal_eval (s ))
3263
+ return _safe_literal_eval (s ) # type:ignore[no-any-return]
3256
3264
3257
3265
def subclass_init (self , cls : type [t .Any ]) -> None :
3258
3266
pass # fully opt out of instance_init
@@ -3280,7 +3288,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
3280
3288
for v in self .values or []:
3281
3289
assert isinstance (v , str )
3282
3290
if v .lower () == value .lower ():
3283
- return t . cast ( G , v )
3291
+ return v # type:ignore[return-value]
3284
3292
self .error (obj , value )
3285
3293
3286
3294
def _info (self , as_rst : bool = False ) -> str :
@@ -3484,14 +3492,12 @@ def validate(self, obj: t.Any, value: t.Any) -> T | None:
3484
3492
if value is None :
3485
3493
return value
3486
3494
3487
- value = self .validate_elements (obj , value )
3488
-
3489
- return t .cast (T , value )
3495
+ return self .validate_elements (obj , value )
3490
3496
3491
3497
def validate_elements (self , obj : t .Any , value : t .Any ) -> T | None :
3492
3498
validated = []
3493
3499
if self ._trait is None or isinstance (self ._trait , Any ):
3494
- return t . cast ( T , value )
3500
+ return value # type:ignore[no-any-return]
3495
3501
for v in value :
3496
3502
try :
3497
3503
v = self ._trait ._validate (obj , v )
@@ -3558,7 +3564,7 @@ def from_string_list(self, s_list: list[str]) -> T | None:
3558
3564
else :
3559
3565
# backward-compat: allow item_from_string to ignore index arg
3560
3566
def item_from_string (s : str , index : int | None = None ) -> T | str :
3561
- return t . cast ( T , self .item_from_string (s ) )
3567
+ return self .item_from_string (s )
3562
3568
3563
3569
return self .klass ( # type:ignore[call-arg]
3564
3570
[item_from_string (s , index = idx ) for idx , s in enumerate (s_list )]
@@ -3570,7 +3576,7 @@ def item_from_string(self, s: str, index: int | None = None) -> T | str:
3570
3576
Evaluated when parsing CLI configuration from a string
3571
3577
"""
3572
3578
if self ._trait :
3573
- return t . cast ( T , self ._trait .from_string (s ))
3579
+ return self ._trait .from_string (s ) # type:ignore[no-any-return]
3574
3580
else :
3575
3581
return s
3576
3582
@@ -4056,7 +4062,7 @@ def from_string(self, s: str) -> dict[K, V] | None:
4056
4062
if not isinstance (s , str ):
4057
4063
raise TypeError (f"from_string expects a string, got { s !r} of type { type (s )} " )
4058
4064
try :
4059
- return t . cast ( "dict[K, V]" , self .from_string_list ([s ]))
4065
+ return self .from_string_list ([s ]) # type:ignore[no-any-return]
4060
4066
except Exception :
4061
4067
test = _safe_literal_eval (s )
4062
4068
if isinstance (test , dict ):
@@ -4114,7 +4120,7 @@ def item_from_string(self, s: str) -> dict[K, V]:
4114
4120
value_trait = (self ._per_key_traits or {}).get (key , self ._value_trait )
4115
4121
if value_trait :
4116
4122
value = value_trait .from_string (value )
4117
- return t . cast ( "dict[K, V]" , {key : value })
4123
+ return {key : value } # type:ignore[dict-item]
4118
4124
4119
4125
4120
4126
class TCPAddress (TraitType [G , S ]):
@@ -4170,17 +4176,17 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
4170
4176
if isinstance (value [0 ], str ) and isinstance (value [1 ], int ):
4171
4177
port = value [1 ]
4172
4178
if port >= 0 and port <= 65535 :
4173
- return t . cast ( G , value )
4179
+ return value # type:ignore[return- value]
4174
4180
self .error (obj , value )
4175
4181
4176
4182
def from_string (self , s : str ) -> G :
4177
4183
if self .allow_none and s == "None" :
4178
- return t . cast ( G , None )
4184
+ return None # type:ignore[return-value]
4179
4185
if ":" not in s :
4180
4186
raise ValueError ("Require `ip:port`, got %r" % s )
4181
4187
ip , port_str = s .split (":" , 1 )
4182
4188
port = int (port_str )
4183
- return t . cast ( G , ( ip , port ))
4189
+ return ( ip , port ) # type:ignore[return-value]
4184
4190
4185
4191
4186
4192
class CRegExp (TraitType ["re.Pattern[t.Any]" , t .Union ["re.Pattern[t.Any]" , str ]]):
0 commit comments