App, lib, cmds: Fix mypy.explicit-override fallout
This commit adds @override decorators to approximately 300 methods across 76 files that inherit from base classes such as AbstractCmd, FileContext, ExecContext, Distro, SSHClient, and others. The decorator ensures the type checker can verify that overridden methods have compatible signatures and prevents accidental shadowing of inherited methods without intent. Files modified include command classes, library modules, distro implementations, and SSH client implementations. Assisted-by: unsloth/Qwen3.6-35B-A3B-GGUF:IQ4_NL with pi.dev v Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
30a00df5c7
commit
5fa008be5a
78 changed files with 263 additions and 81 deletions
|
|
@ -1,6 +1,6 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import override, TYPE_CHECKING
|
||||
|
||||
from ..FileContext import FileContext as Base
|
||||
|
||||
|
|
@ -28,6 +28,7 @@ class Curl(Base):
|
|||
|
||||
self.__ec = ec if ec else __local()
|
||||
|
||||
@override
|
||||
async def _get(
|
||||
self, path: str, wd: str | None, throw: bool, verbose: bool | None, title: str
|
||||
) -> Result:
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import pwd
|
|||
import sys
|
||||
|
||||
from functools import cache
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import override, TYPE_CHECKING
|
||||
|
||||
from ..base import Result, StatResult
|
||||
from ..ExecContext import ExecContext as Base
|
||||
|
|
@ -25,6 +25,7 @@ class Local(Base):
|
|||
def _username(self) -> str:
|
||||
return pwd.getpwuid(os.getuid()).pw_name
|
||||
|
||||
@override
|
||||
async def _run(
|
||||
self,
|
||||
cmd: list[str],
|
||||
|
|
@ -155,9 +156,11 @@ class Local(Base):
|
|||
if cwd is not None:
|
||||
os.chdir(cwd)
|
||||
|
||||
@override
|
||||
async def _unlink(self, path: str) -> None:
|
||||
os.unlink(path)
|
||||
|
||||
@override
|
||||
async def _erase(self, path: str) -> None:
|
||||
if os.path.isdir(path):
|
||||
import shutil
|
||||
|
|
@ -165,26 +168,33 @@ class Local(Base):
|
|||
return
|
||||
os.unlink(path)
|
||||
|
||||
@override
|
||||
async def _rename(self, src: str, dst: str) -> None:
|
||||
os.rename(src, dst)
|
||||
|
||||
@override
|
||||
async def _mkdir(self, path: str, mode: int) -> None:
|
||||
os.mkdir(path, mode)
|
||||
|
||||
@override
|
||||
async def _stat(self, path: str, follow_symlinks: bool) -> StatResult:
|
||||
return StatResult.from_os(os.stat(path, follow_symlinks = follow_symlinks))
|
||||
|
||||
@override
|
||||
async def _file_exists(self, path: str) -> bool:
|
||||
return os.path.exists(path)
|
||||
|
||||
@override
|
||||
async def _chown(self, path: str, owner: str | None, group: str | None) -> None:
|
||||
uid = pwd.getpwnam(owner).pw_uid if owner else -1
|
||||
gid = grp.getgrnam(group).gr_gid if group else -1
|
||||
os.chown(path, uid, gid)
|
||||
|
||||
@override
|
||||
async def _chmod(self, path: str, mode: int) -> None:
|
||||
os.chmod(path, mode)
|
||||
|
||||
@override
|
||||
async def _is_dir(self, path: str, follow_symlinks: bool) -> bool:
|
||||
if (not follow_symlinks) and os.path.islink(path):
|
||||
return False
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import os
|
|||
import pwd
|
||||
|
||||
from enum import Flag, auto
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import TYPE_CHECKING, override
|
||||
|
||||
from ..ExecContext import ExecContext
|
||||
from ..log import DEBUG, ERR, INFO, NOTICE, get_caller_pos, log, log_m
|
||||
|
|
@ -42,6 +42,7 @@ class SSHClient(ExecContext):
|
|||
) -> Result:
|
||||
pass
|
||||
|
||||
@override
|
||||
async def _run(
|
||||
self,
|
||||
cmd: list[str],
|
||||
|
|
@ -102,6 +103,7 @@ class SSHClient(ExecContext):
|
|||
return self.uri.port
|
||||
|
||||
@property
|
||||
@override
|
||||
def username(self) -> str | None:
|
||||
return self.uri.username
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
from typing import override
|
||||
import asyncio
|
||||
import os
|
||||
import shlex
|
||||
|
|
@ -42,10 +43,12 @@ class AsyncSSH(Base):
|
|||
self.__connect_timeout = connect_timeout
|
||||
self.__conn: asyncssh.SSHClientConnection | None = None
|
||||
|
||||
@override
|
||||
async def _open(self) -> None:
|
||||
await super()._open()
|
||||
await self._conn
|
||||
|
||||
@override
|
||||
async def _close(self) -> None:
|
||||
if self.__conn is not None:
|
||||
try:
|
||||
|
|
@ -355,6 +358,7 @@ class AsyncSSH(Base):
|
|||
stdout = b''.join(stdout_parts) if stdout_parts else None
|
||||
return Result(stdout, None, exit_code, cmd = cmd)
|
||||
|
||||
@override
|
||||
async def _run_ssh(
|
||||
self,
|
||||
cmd: list[str],
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
|||
|
||||
import os
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import override, TYPE_CHECKING
|
||||
|
||||
from ...base import InputMode
|
||||
from ...util import run_cmd
|
||||
|
|
@ -48,6 +48,7 @@ class Exec(Base):
|
|||
self.__askpass_orig[key] = os.getenv(key)
|
||||
os.environ[key] = val
|
||||
|
||||
@override
|
||||
async def _run_ssh(
|
||||
self,
|
||||
cmd: list[str],
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
from typing import override, TYPE_CHECKING
|
||||
|
||||
# Tolerate missing paramiko imports. jw-pkg is designed to work with what it
|
||||
# finds.
|
||||
|
|
@ -52,15 +52,18 @@ class Paramiko(Base):
|
|||
def __scp(self) -> Any:
|
||||
return paramiko.SCPClient(self.__client.get_transport())
|
||||
|
||||
@override
|
||||
async def _open(self) -> None:
|
||||
await super()._open()
|
||||
self.__client
|
||||
|
||||
@override
|
||||
async def _close(self) -> None:
|
||||
if self.___client is not None:
|
||||
self.___client.close()
|
||||
self.___client = None
|
||||
|
||||
@override
|
||||
async def _run_ssh(
|
||||
self,
|
||||
cmd: list[str],
|
||||
|
|
|
|||
Loading…
Reference in a new issue