14
14
DT = types .Dict [KT , VT ]
15
15
KT_cast = types .Optional [types .Callable [[Any ], KT ]]
16
16
VT_cast = types .Optional [types .Callable [[Any ], VT ]]
17
+ HT = types .TypeVar ('HT' , bound = types .Hashable )
17
18
18
19
# Using types.Union instead of | since Python 3.7 doesn't fully support it
19
20
DictUpdateArgs = types .Union [
@@ -173,7 +174,7 @@ def values(self) -> Generator[VT, None, None]: # type: ignore
173
174
yield self ._value_cast (value )
174
175
175
176
176
- class UniqueList (types .List [VT ]):
177
+ class UniqueList (types .List [HT ]):
177
178
'''
178
179
A list that only allows unique values. Duplicate values are ignored by
179
180
default, but can be configured to raise an exception instead.
@@ -207,11 +208,11 @@ class UniqueList(types.List[VT]):
207
208
ValueError: Duplicate value: 4
208
209
'''
209
210
210
- _set : set [VT ]
211
+ _set : set [HT ]
211
212
212
213
def __init__ (
213
214
self ,
214
- * args : VT ,
215
+ * args : HT ,
215
216
on_duplicate : types .Literal ['raise' , 'ignore' ] = 'ignore' ,
216
217
):
217
218
self .on_duplicate = on_duplicate
@@ -220,7 +221,7 @@ def __init__(
220
221
for arg in args :
221
222
self .append (arg )
222
223
223
- def insert (self , index : types .SupportsIndex , value : VT ) -> None :
224
+ def insert (self , index : types .SupportsIndex , value : HT ) -> None :
224
225
if value in self ._set :
225
226
if self .on_duplicate == 'raise' :
226
227
raise ValueError ('Duplicate value: %s' % value )
@@ -230,7 +231,7 @@ def insert(self, index: types.SupportsIndex, value: VT) -> None:
230
231
self ._set .add (value )
231
232
super ().insert (index , value )
232
233
233
- def append (self , value : VT ) -> None :
234
+ def append (self , value : HT ) -> None :
234
235
if value in self ._set :
235
236
if self .on_duplicate == 'raise' :
236
237
raise ValueError ('Duplicate value: %s' % value )
@@ -244,11 +245,11 @@ def __contains__(self, item):
244
245
return item in self ._set
245
246
246
247
@types .overload
247
- def __setitem__ (self , indices : types .SupportsIndex , values : VT ) -> None :
248
+ def __setitem__ (self , indices : types .SupportsIndex , values : HT ) -> None :
248
249
...
249
250
250
251
@types .overload
251
- def __setitem__ (self , indices : slice , values : types .Iterable [VT ]) -> None :
252
+ def __setitem__ (self , indices : slice , values : types .Iterable [HT ]) -> None :
252
253
...
253
254
254
255
def __setitem__ (self , indices , values ) -> None :
0 commit comments