# HG changeset patch # User Matt Harbison # Date 1734744675 18000 # Node ID 7ca9c05ec3352018aaf91f6163ad006440514e3d # Parent 9a8815128679e9db21187389d7ae093990774237 typing: make `mercurial.util.sortdict` a generic class diff -r 9a8815128679 -r 7ca9c05ec335 mercurial/util.py --- a/mercurial/util.py Sat Feb 08 00:14:20 2025 -0500 +++ b/mercurial/util.py Fri Dec 20 20:31:15 2024 -0500 @@ -95,6 +95,12 @@ _Tcow = TypeVar('_Tcow', bound="cow") +_KT = TypeVar("_KT") +"""An unconstrained key type for container classes (see typing.KT).""" + +_VT = TypeVar("_VT") +"""An unconstrained value type for container classes (see typing.VT).""" + base85: intmod.Base85 = policy.importmod('base85') osutil = policy.importmod('osutil') @@ -1351,7 +1357,7 @@ return self -class sortdict(collections.OrderedDict): +class sortdict(collections.OrderedDict[_KT, _VT]): """a simple sorted dictionary >>> d1 = sortdict([(b'a', 0), (b'b', 1)]) @@ -1366,7 +1372,7 @@ [('a', 0), ('a.5', 0.5), ('b', 1)] """ - def __setitem__(self, key, value): + def __setitem__(self, key: _KT, value: _VT) -> None: if key in self: del self[key] super().__setitem__(key, value) @@ -1381,7 +1387,7 @@ for k in f: self[k] = f[k] - def insert(self, position, key, value): + def insert(self, position: int, key: _KT, value: _VT): for i, (k, v) in enumerate(list(self.items())): if i == position: self[key] = value