@@ -169,8 +169,8 @@ class TraitError(Exception):
169
169
# -----------------------------------------------------------------------------
170
170
171
171
172
- def isidentifier (s : t . Any ) -> bool :
173
- return t . cast ( bool , s .isidentifier () )
172
+ def isidentifier (s : str ) -> bool :
173
+ return s .isidentifier ()
174
174
175
175
176
176
def _safe_literal_eval (s : str ) -> t .Any :
@@ -293,13 +293,21 @@ class link:
293
293
294
294
updating = False
295
295
296
- def __init__ (self , source : t .Any , target : t .Any , transform : t .Any = None ) -> None :
296
+ def __init__ (
297
+ self , source : t .Any , target : t .Any , transform : t .Iterable [FuncT ] | None = None
298
+ ) -> None :
297
299
_validate_link (source , target )
298
300
self .source , self .target = source , target
299
- self . _transform , self . _transform_inv = transform if transform else ( lambda x : x ,) * 2
300
-
301
+ if transform :
302
+ self . _transform , self . _transform_inv = transform # type:ignore[method-assign]
301
303
self .link ()
302
304
305
+ def _transform (self , x : T ) -> T :
306
+ """default transform: no-op"""
307
+ return x
308
+
309
+ _transform_inv = _transform
310
+
303
311
def link (self ) -> None :
304
312
try :
305
313
setattr (
@@ -597,12 +605,12 @@ def default(self, obj: t.Any = None) -> G | None:
597
605
in the same way that dynamic defaults defined by ``@default`` are.
598
606
"""
599
607
if self .default_value is not Undefined :
600
- return t . cast ( G , self .default_value )
608
+ return self .default_value # type:ignore[no-any-return]
601
609
elif hasattr (self , "make_dynamic_default" ):
602
- return t . cast ( G , self .make_dynamic_default ())
610
+ return self .make_dynamic_default () # type:ignore[no-any-return]
603
611
else :
604
612
# Undefined will raise in TraitType.get
605
- return t . cast ( G , self .default_value )
613
+ return self .default_value # type:ignore[no-any-return]
606
614
607
615
def get_default_value (self ) -> G | None :
608
616
"""DEPRECATED: Retrieve the static default value for this trait.
@@ -613,7 +621,7 @@ def get_default_value(self) -> G | None:
613
621
DeprecationWarning ,
614
622
stacklevel = 2 ,
615
623
)
616
- return t . cast ( G , self .default_value )
624
+ return self .default_value # type:ignore[no-any-return]
617
625
618
626
def init_default_value (self , obj : t .Any ) -> G | None :
619
627
"""DEPRECATED: Set the static default value for the trait type."""
@@ -658,12 +666,12 @@ def get(self, obj: HasTraits, cls: type[t.Any] | None = None) -> G | None:
658
666
type = "default" ,
659
667
)
660
668
)
661
- return t . cast ( G , value )
669
+ return value # type:ignore[no-any-return]
662
670
except Exception as e :
663
671
# This should never be reached.
664
672
raise TraitError ("Unexpected error in TraitType: default value not set properly" ) from e
665
673
else :
666
- return t . cast ( G , value )
674
+ return value # type:ignore[no-any-return]
667
675
668
676
@t .overload
669
677
def __get__ (self , obj : None , cls : type [t .Any ]) -> Self :
@@ -684,7 +692,7 @@ def __get__(self, obj: HasTraits | None, cls: type[t.Any]) -> Self | G:
684
692
if obj is None :
685
693
return self
686
694
else :
687
- return t . cast ( G , self .get (obj , cls )) # the G should encode the Optional
695
+ return self .get (obj , cls ) # type:ignore[return-value]
688
696
689
697
def set (self , obj : HasTraits , value : S ) -> None :
690
698
new_value = self ._validate (obj , value )
@@ -722,7 +730,7 @@ def _validate(self, obj: t.Any, value: t.Any) -> G | None:
722
730
value = self .validate (obj , value )
723
731
if obj ._cross_validation_lock is False :
724
732
value = self ._cross_validate (obj , value )
725
- return t . cast ( G , value )
733
+ return value # type:ignore[no-any-return]
726
734
727
735
def _cross_validate (self , obj : t .Any , value : t .Any ) -> G | None :
728
736
if self .name in obj ._trait_validators :
@@ -738,7 +746,7 @@ def _cross_validate(self, obj: t.Any, value: t.Any) -> G | None:
738
746
"use @validate decorator instead." ,
739
747
)
740
748
value = cross_validate (value , self )
741
- return t . cast ( G , value )
749
+ return value # type:ignore[no-any-return]
742
750
743
751
def __or__ (self , other : TraitType [t .Any , t .Any ]) -> Union :
744
752
if isinstance (other , Union ):
@@ -1142,7 +1150,7 @@ def compatible_observer(
1142
1150
)
1143
1151
return func (self , change )
1144
1152
1145
- return t . cast ( FuncT , compatible_observer )
1153
+ return compatible_observer # type:ignore[return-value]
1146
1154
1147
1155
1148
1156
def validate (* names : Sentinel | str ) -> ValidateHandler :
@@ -1894,7 +1902,7 @@ def trait_defaults(self, *names: str, **metadata: t.Any) -> dict[str, t.Any] | S
1894
1902
raise TraitError (f"'{ n } ' is not a trait of '{ type (self ).__name__ } ' instances" )
1895
1903
1896
1904
if len (names ) == 1 and len (metadata ) == 0 :
1897
- return t . cast ( Sentinel , self ._get_trait_default_generator (names [0 ])(self ))
1905
+ return self ._get_trait_default_generator (names [0 ])(self ) # type:ignore[no-any-return]
1898
1906
1899
1907
trait_names = self .trait_names (** metadata )
1900
1908
trait_names .extend (names )
@@ -2144,7 +2152,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2144
2152
) from e
2145
2153
try :
2146
2154
if issubclass (value , self .klass ): # type:ignore[arg-type]
2147
- return t . cast ( G , value )
2155
+ return value # type:ignore[no-any-return]
2148
2156
except Exception :
2149
2157
pass
2150
2158
@@ -2306,7 +2314,7 @@ def validate(self, obj: t.Any, value: t.Any) -> T | None:
2306
2314
if self .allow_none and value is None :
2307
2315
return value
2308
2316
if isinstance (value , self .klass ): # type:ignore[arg-type]
2309
- return t . cast ( T , value )
2317
+ return value # type:ignore[no-any-return]
2310
2318
else :
2311
2319
self .error (obj , value )
2312
2320
@@ -2338,7 +2346,7 @@ def default_value_repr(self) -> str:
2338
2346
return repr (self .make_dynamic_default ())
2339
2347
2340
2348
def from_string (self , s : str ) -> T | None :
2341
- return t . cast ( T , _safe_literal_eval (s ))
2349
+ return _safe_literal_eval (s ) # type:ignore[no-any-return]
2342
2350
2343
2351
2344
2352
class ForwardDeclaredMixin :
@@ -2635,12 +2643,12 @@ def __init__(
2635
2643
def validate (self , obj : t .Any , value : t .Any ) -> G :
2636
2644
if not isinstance (value , int ):
2637
2645
self .error (obj , value )
2638
- return t . cast ( G , _validate_bounds (self , obj , value ))
2646
+ return _validate_bounds (self , obj , value ) # type:ignore[no-any-return]
2639
2647
2640
2648
def from_string (self , s : str ) -> G :
2641
2649
if self .allow_none and s == "None" :
2642
- return t . cast ( G , None )
2643
- return t . cast ( G , int (s ))
2650
+ return None # type:ignore[return-value]
2651
+ return int (s ) # type:ignore[return-value]
2644
2652
2645
2653
def subclass_init (self , cls : type [t .Any ]) -> None :
2646
2654
pass # fully opt out of instance_init
@@ -2691,7 +2699,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2691
2699
value = int (value )
2692
2700
except Exception :
2693
2701
self .error (obj , value )
2694
- return t . cast ( G , _validate_bounds (self , obj , value ))
2702
+ return _validate_bounds (self , obj , value ) # type:ignore[no-any-return]
2695
2703
2696
2704
2697
2705
Long , CLong = Int , CInt
@@ -2753,12 +2761,12 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2753
2761
value = float (value )
2754
2762
if not isinstance (value , float ):
2755
2763
self .error (obj , value )
2756
- return t . cast ( G , _validate_bounds (self , obj , value ))
2764
+ return _validate_bounds (self , obj , value ) # type:ignore[return-value]
2757
2765
2758
2766
def from_string (self , s : str ) -> G :
2759
2767
if self .allow_none and s == "None" :
2760
- return t . cast ( G , None )
2761
- return t . cast ( G , float (s ))
2768
+ return None # type:ignore[return-value]
2769
+ return float (s ) # type:ignore[return-value]
2762
2770
2763
2771
def subclass_init (self , cls : type [t .Any ]) -> None :
2764
2772
pass # fully opt out of instance_init
@@ -2809,7 +2817,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
2809
2817
value = float (value )
2810
2818
except Exception :
2811
2819
self .error (obj , value )
2812
- return t . cast ( G , _validate_bounds (self , obj , value ))
2820
+ return _validate_bounds (self , obj , value ) # type:ignore[no-any-return]
2813
2821
2814
2822
2815
2823
class Complex (TraitType [complex , t .Union [complex , float , int ]]):
@@ -2935,18 +2943,18 @@ def __init__(
2935
2943
2936
2944
def validate (self , obj : t .Any , value : t .Any ) -> G :
2937
2945
if isinstance (value , str ):
2938
- return t . cast ( G , value )
2946
+ return value # type:ignore[return- value]
2939
2947
if isinstance (value , bytes ):
2940
2948
try :
2941
- return t . cast ( G , value .decode ("ascii" , "strict" ))
2949
+ return value .decode ("ascii" , "strict" ) # type:ignore[return-value]
2942
2950
except UnicodeDecodeError as e :
2943
2951
msg = "Could not decode {!r} for unicode trait '{}' of {} instance."
2944
2952
raise TraitError (msg .format (value , self .name , class_of (obj ))) from e
2945
2953
self .error (obj , value )
2946
2954
2947
2955
def from_string (self , s : str ) -> G :
2948
2956
if self .allow_none and s == "None" :
2949
- return t . cast ( G , None )
2957
+ return None # type:ignore[return-value]
2950
2958
s = os .path .expanduser (s )
2951
2959
if len (s ) >= 2 :
2952
2960
# handle deprecated "1"
@@ -2960,7 +2968,7 @@ def from_string(self, s: str) -> G:
2960
2968
DeprecationWarning ,
2961
2969
stacklevel = 2 ,
2962
2970
)
2963
- return t . cast ( G , s )
2971
+ return s # type:ignore[return-value]
2964
2972
2965
2973
def subclass_init (self , cls : type [t .Any ]) -> None :
2966
2974
pass # fully opt out of instance_init
@@ -3008,7 +3016,7 @@ def __init__(
3008
3016
3009
3017
def validate (self , obj : t .Any , value : t .Any ) -> G :
3010
3018
try :
3011
- return t . cast ( G , str (value ))
3019
+ return str (value ) # type:ignore[return-value]
3012
3020
except Exception :
3013
3021
self .error (obj , value )
3014
3022
@@ -3091,22 +3099,22 @@ def __init__(
3091
3099
3092
3100
def validate (self , obj : t .Any , value : t .Any ) -> G :
3093
3101
if isinstance (value , bool ):
3094
- return t . cast ( G , value )
3102
+ return value # type:ignore[return- value]
3095
3103
elif isinstance (value , int ):
3096
3104
if value == 1 :
3097
- return t . cast ( G , True )
3105
+ return True # type:ignore[return-value]
3098
3106
elif value == 0 :
3099
- return t . cast ( G , False )
3107
+ return False # type:ignore[return-value]
3100
3108
self .error (obj , value )
3101
3109
3102
3110
def from_string (self , s : str ) -> G :
3103
3111
if self .allow_none and s == "None" :
3104
- return t . cast ( G , None )
3112
+ return None # type:ignore[return-value]
3105
3113
s = s .lower ()
3106
3114
if s in {"true" , "1" }:
3107
- return t . cast ( G , True )
3115
+ return True # type:ignore[return-value]
3108
3116
elif s in {"false" , "0" }:
3109
- return t . cast ( G , False )
3117
+ return False # type:ignore[return-value]
3110
3118
else :
3111
3119
raise ValueError ("%r is not 1, 0, true, or false" )
3112
3120
@@ -3163,7 +3171,7 @@ def __init__(
3163
3171
3164
3172
def validate (self , obj : t .Any , value : t .Any ) -> G :
3165
3173
try :
3166
- return t . cast ( G , bool (value ))
3174
+ return bool (value ) # type:ignore[return-value]
3167
3175
except Exception :
3168
3176
self .error (obj , value )
3169
3177
@@ -3220,7 +3228,7 @@ def __init__(
3220
3228
3221
3229
def validate (self , obj : t .Any , value : t .Any ) -> G :
3222
3230
if self .values and value in self .values :
3223
- return t . cast ( G , value )
3231
+ return value # type:ignore[no-any-return]
3224
3232
self .error (obj , value )
3225
3233
3226
3234
def _choices_str (self , as_rst : bool = False ) -> str :
@@ -3247,7 +3255,7 @@ def from_string(self, s: str) -> G:
3247
3255
try :
3248
3256
return self .validate (None , s )
3249
3257
except TraitError :
3250
- return t . cast ( G , _safe_literal_eval (s ))
3258
+ return _safe_literal_eval (s ) # type:ignore[no-any-return]
3251
3259
3252
3260
def subclass_init (self , cls : type [t .Any ]) -> None :
3253
3261
pass # fully opt out of instance_init
@@ -3275,7 +3283,7 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
3275
3283
for v in self .values or []:
3276
3284
assert isinstance (v , str )
3277
3285
if v .lower () == value .lower ():
3278
- return t . cast ( G , v )
3286
+ return v # type:ignore[return-value]
3279
3287
self .error (obj , value )
3280
3288
3281
3289
def _info (self , as_rst : bool = False ) -> str :
@@ -3479,14 +3487,12 @@ def validate(self, obj: t.Any, value: t.Any) -> T | None:
3479
3487
if value is None :
3480
3488
return value
3481
3489
3482
- value = self .validate_elements (obj , value )
3483
-
3484
- return t .cast (T , value )
3490
+ return self .validate_elements (obj , value ) # type:ignore[no-any-return]
3485
3491
3486
3492
def validate_elements (self , obj : t .Any , value : t .Any ) -> T | None :
3487
3493
validated = []
3488
3494
if self ._trait is None or isinstance (self ._trait , Any ):
3489
- return t . cast ( T , value )
3495
+ return value # type:ignore[no-any-return]
3490
3496
for v in value :
3491
3497
try :
3492
3498
v = self ._trait ._validate (obj , v )
@@ -3553,7 +3559,7 @@ def from_string_list(self, s_list: list[str]) -> T | None:
3553
3559
else :
3554
3560
# backward-compat: allow item_from_string to ignore index arg
3555
3561
def item_from_string (s : str , index : int | None = None ) -> T | str :
3556
- return t . cast ( T , self .item_from_string (s ) )
3562
+ return self .item_from_string (s )
3557
3563
3558
3564
return self .klass ( # type:ignore[call-arg]
3559
3565
[item_from_string (s , index = idx ) for idx , s in enumerate (s_list )]
@@ -3565,15 +3571,15 @@ def item_from_string(self, s: str, index: int | None = None) -> T | str:
3565
3571
Evaluated when parsing CLI configuration from a string
3566
3572
"""
3567
3573
if self ._trait :
3568
- return t . cast ( T , self ._trait .from_string (s ))
3574
+ return self ._trait .from_string (s ) # type:ignore[no-any-return]
3569
3575
else :
3570
3576
return s
3571
3577
3572
3578
3573
3579
class List (Container [t .List [T ]]):
3574
3580
"""An instance of a Python list."""
3575
3581
3576
- klass = list # type:ignore[assignment]
3582
+ klass = list
3577
3583
_cast_types : t .Any = (tuple ,)
3578
3584
3579
3585
def __init__ (
@@ -4051,7 +4057,7 @@ def from_string(self, s: str) -> dict[K, V] | None:
4051
4057
if not isinstance (s , str ):
4052
4058
raise TypeError (f"from_string expects a string, got { s !r} of type { type (s )} " )
4053
4059
try :
4054
- return t . cast ( "dict[K, V]" , self .from_string_list ([s ]))
4060
+ return self .from_string_list ([s ]) # type:ignore[no-any-return]
4055
4061
except Exception :
4056
4062
test = _safe_literal_eval (s )
4057
4063
if isinstance (test , dict ):
@@ -4109,7 +4115,7 @@ def item_from_string(self, s: str) -> dict[K, V]:
4109
4115
value_trait = (self ._per_key_traits or {}).get (key , self ._value_trait )
4110
4116
if value_trait :
4111
4117
value = value_trait .from_string (value )
4112
- return t . cast ( "dict[K, V]" , {key : value })
4118
+ return {key : value } # type:ignore[dict-item]
4113
4119
4114
4120
4115
4121
class TCPAddress (TraitType [G , S ]):
@@ -4165,17 +4171,17 @@ def validate(self, obj: t.Any, value: t.Any) -> G:
4165
4171
if isinstance (value [0 ], str ) and isinstance (value [1 ], int ):
4166
4172
port = value [1 ]
4167
4173
if port >= 0 and port <= 65535 :
4168
- return t . cast ( G , value )
4174
+ return value # type:ignore[return- value]
4169
4175
self .error (obj , value )
4170
4176
4171
4177
def from_string (self , s : str ) -> G :
4172
4178
if self .allow_none and s == "None" :
4173
- return t . cast ( G , None )
4179
+ return None # type:ignore[return-value]
4174
4180
if ":" not in s :
4175
4181
raise ValueError ("Require `ip:port`, got %r" % s )
4176
4182
ip , port_str = s .split (":" , 1 )
4177
4183
port = int (port_str )
4178
- return t . cast ( G , ( ip , port ))
4184
+ return ( ip , port ) # type:ignore[return-value]
4179
4185
4180
4186
4181
4187
class CRegExp (TraitType ["re.Pattern[t.Any]" , t .Union ["re.Pattern[t.Any]" , str ]]):
0 commit comments