changeset 52890:7ca9c05ec335

typing: make `mercurial.util.sortdict` a generic class
author Matt Harbison <matt_harbison@yahoo.com>
date Fri, 20 Dec 2024 20:31:15 -0500
parents 9a8815128679
children b1daf3064362
files mercurial/util.py
diffstat 1 files changed, 9 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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