Reparametrize the `socketprovider.SocketProvider.register` decorator
Marco Ricci

Marco Ricci commited on 2025-12-26 12:25:39
Zeige 1 geänderte Dateien mit 8 Einfügungen und 7 Löschungen.


Use parametric types to allow better introspection into decorated
classes.
... ...
@@ -28,10 +28,15 @@ if TYPE_CHECKING:
28 28
     from collections.abc import Callable
29 29
     from typing import ClassVar
30 30
 
31
-    from typing_extensions import Any, Buffer, Literal, Self
31
+    from typing_extensions import Any, Buffer, Literal, Self, TypeVar
32 32
 
33 33
     from derivepassphrase import _types
34 34
 
35
+    SSHAgentSocketProviderT = TypeVar(
36
+        "SSHAgentSocketProviderT", bound=_types.SSHAgentSocketProvider
37
+    )
38
+    """A parametrized SSH agent socket provider."""
39
+
35 40
     kernel32: ctypes.WinDLL  # type: ignore[name-defined]
36 41
     crypt32: ctypes.WinDLL  # type: ignore[name-defined]
37 42
 
... ...
@@ -605,9 +610,7 @@ class SocketProvider:
605 610
         cls,
606 611
         name: str,
607 612
         *aliases: str,
608
-    ) -> Callable[
609
-        [_types.SSHAgentSocketProvider], _types.SSHAgentSocketProvider
610
-    ]:
613
+    ) -> Callable[[SSHAgentSocketProviderT], SSHAgentSocketProviderT]:
611 614
         """Register a callable as an SSH agent socket provider (decorator).
612 615
 
613 616
         Attempting to re-register an existing alias, or a name with an
... ...
@@ -626,9 +629,7 @@ class SocketProvider:
626 629
 
627 630
         """
628 631
 
629
-        def decorator(
630
-            f: _types.SSHAgentSocketProvider,
631
-        ) -> _types.SSHAgentSocketProvider:
632
+        def decorator(f: SSHAgentSocketProviderT) -> SSHAgentSocketProviderT:
632 633
             """Register a callable as an SSH agent socket provider.
633 634
 
634 635
             Attempting to re-register an existing alias, or a name with
635 636