Revert "初步的 kvmd 国际化(汉化)支持"

This reverts commit 20927c7226.
This commit is contained in:
mofeng-git
2024-11-20 11:54:27 +00:00
parent 8fdb7d7cd6
commit 6928fab16c
34 changed files with 114 additions and 1000 deletions

View File

@@ -25,8 +25,6 @@ from typing import AsyncGenerator
from ...errors import OperationError
from ...errors import IsBusyError
from ...lanuages import Lanuages
from .. import BasePlugin
from .. import get_plugin_class
@@ -42,7 +40,7 @@ class AtxOperationError(OperationError, AtxError):
class AtxIsBusyError(IsBusyError, AtxError):
def __init__(self) -> None:
super().__init__(Lanuages().gettext("Performing another ATX operation, please try again later"))
super().__init__("Performing another ATX operation, please try again later")
# =====

View File

@@ -39,8 +39,6 @@ from ...validators.basic import valid_float_f01
from ...validators.os import valid_abs_path
from ...validators.hw import valid_gpio_pin
from ...lanuages import Lanuages
from . import AtxIsBusyError
from . import BaseAtx
@@ -90,7 +88,6 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes
notifier=self.__notifier,
)
@classmethod
def get_plugin_options(cls) -> dict:
return {
@@ -193,7 +190,7 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes
await self.__inner_click(name, pin, delay)
else:
await aiotools.run_region_task(
Lanuages().gettext(f"Can't perform ATX {name} click or operation was not completed"),
f"Can't perform ATX {name} click or operation was not completed",
self.__region, self.__inner_click, name, pin, delay,
)
@@ -206,4 +203,4 @@ class Plugin(BaseAtx): # pylint: disable=too-many-instance-attributes
finally:
self.__line_request.set_value(pin, gpiod.line.Value(False))
await asyncio.sleep(1)
get_logger(0).info(Lanuages().gettext("Clicked ATX button %r"), name)
get_logger(0).info("Clicked ATX button %r", name)

View File

@@ -32,8 +32,6 @@ from ...logging import get_logger
from ... import htclient
from ...lanuages import Lanuages
from . import BaseAuthService
@@ -91,7 +89,7 @@ class Plugin(BaseAuthService):
htclient.raise_not_200(response)
return True
except Exception:
get_logger().exception(Lanuages().gettext("Failed HTTP auth request for user %r"), user)
get_logger().exception("Failed HTTP auth request for user %r", user)
return False
async def cleanup(self) -> None:

View File

@@ -33,8 +33,6 @@ from ...logging import get_logger
from ... import tools
from ... import aiotools
from ...lanuages import Lanuages
from . import BaseAuthService
@@ -103,9 +101,9 @@ class Plugin(BaseAuthService):
except ldap.INVALID_CREDENTIALS:
pass
except ldap.SERVER_DOWN as err:
get_logger().error(Lanuages().gettext("LDAP server is down: %s"), tools.efmt(err))
get_logger().error("LDAP server is down: %s", tools.efmt(err))
except Exception as err:
get_logger().error(Lanuages().gettext("Unexpected LDAP error: %s"), tools.efmt(err))
get_logger().error("Unexpected LDAP error: %s", tools.efmt(err))
finally:
if conn is not None:
try:

View File

@@ -34,8 +34,6 @@ from ...logging import get_logger
from ... import aiotools
from ...lanuages import Lanuages
from . import BaseAuthService
@@ -88,13 +86,13 @@ class Plugin(BaseAuthService):
return False
else:
if uid < self.__allow_uids_at:
get_logger().error(Lanuages().gettext("Unallowed UID of user %r: uid=%d < allow_uids_at=%d"),
get_logger().error("Unallowed UID of user %r: uid=%d < allow_uids_at=%d",
user, uid, self.__allow_uids_at)
return False
pam_obj = pam.pam()
if not pam_obj.authenticate(user, passwd, service=self.__service):
get_logger().error(Lanuages().gettext("Can't authorize user %r using PAM: code=%d; reason=%s"),
get_logger().error("Can't authorize user %r using PAM: code=%d; reason=%s",
user, pam_obj.code, pam_obj.reason)
return False
return True

View File

@@ -36,8 +36,6 @@ from ...logging import get_logger
from ... import aiotools
from ...lanuages import Lanuages
from . import BaseAuthService
@@ -442,5 +440,5 @@ class Plugin(BaseAuthService):
response = client.SendPacket(request)
return (response.code == pyrad.packet.AccessAccept)
except Exception:
get_logger().exception(Lanuages().gettext("Failed RADIUS auth request for user %r"), user)
get_logger().exception("Failed RADIUS auth request for user %r", user)
return False

View File

@@ -46,8 +46,6 @@ from ....validators.basic import valid_float_f01
from ....validators.os import valid_abs_path
from ....validators.hw import valid_gpio_pin_optional
from ....lanuages import Lanuages
from .. import BaseHid
from .gpio import Gpio
@@ -146,8 +144,6 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
self.__stop_event = multiprocessing.Event()
self.gettext=Lanuages().gettext
@classmethod
def get_plugin_options(cls) -> dict:
return {
@@ -251,7 +247,7 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
@aiotools.atomic_fg
async def cleanup(self) -> None:
if self.is_alive():
get_logger(0).info(self.gettext("Stopping HID daemon ..."))
get_logger(0).info("Stopping HID daemon ...")
self.__stop_event.set()
if self.is_alive() or self.exitcode is not None:
self.join()
@@ -320,14 +316,14 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
with self.__gpio:
self.__hid_loop()
if self.__phy.has_device():
logger.info(self.gettext("Clearing HID events ..."))
logger.info("Clearing HID events ...")
try:
with self.__phy.connected() as conn:
self.__process_request(conn, ClearEvent().make_request())
except Exception:
logger.exception(self.gettext("Can't clear HID events"))
logger.exception("Can't clear HID events")
except Exception:
logger.exception(self.gettext("Unexpected error in the GPIO loop"))
logger.exception("Unexpected error in the GPIO loop")
time.sleep(1)
def __hid_loop(self) -> None:
@@ -357,24 +353,24 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
reset = False
except Exception:
self.clear_events()
get_logger(0).exception(self.gettext("Unexpected error in the HID loop"))
get_logger(0).exception("Unexpected error in the HID loop")
time.sleep(1)
def __hid_loop_wait_device(self, reset: bool) -> bool:
logger = get_logger(0)
if reset:
logger.info(self.gettext("Initial HID reset and wait for %s ..."), self.__phy)
logger.info("Initial HID reset and wait for %s ...", self.__phy)
self.__gpio.reset()
# На самом деле SPI и Serial-девайсы не пропадают,
# а вот USB CDC (Pico HID Bridge) вполне себе пропадает
for _ in range(10):
if self.__phy.has_device():
logger.info(self.gettext("Physical HID interface found: %s"), self.__phy)
logger.info("Physical HID interface found: %s", self.__phy)
return True
if self.__stop_event.is_set():
break
time.sleep(1)
logger.error(self.gettext("Missing physical HID interface: %s"), self.__phy)
logger.error("Missing physical HID interface: %s", self.__phy)
self.__set_state_online(False)
return False
@@ -392,28 +388,28 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
try:
if len(response) < 4:
read_retries -= 1
raise _TempRequestError(self.gettext(f"No response from HID: request={request!r}"))
raise _TempRequestError(f"No response from HID: request={request!r}")
if not check_response(response):
request = REQUEST_REPEAT
raise _TempRequestError(self.gettext("Invalid response CRC; requesting response again ..."))
raise _TempRequestError("Invalid response CRC; requesting response again ...")
code = response[1]
if code == 0x48: # Request timeout # pylint: disable=no-else-raise
raise _TempRequestError(self.gettext(f"Got request timeout from HID: request={request!r}"))
raise _TempRequestError(f"Got request timeout from HID: request={request!r}")
elif code == 0x40: # CRC Error
raise _TempRequestError(self.gettext(f"Got CRC error of request from HID: request={request!r}"))
raise _TempRequestError(f"Got CRC error of request from HID: request={request!r}")
elif code == 0x45: # Unknown command
raise _PermRequestError(self.gettext(f"HID did not recognize the request={request!r}"))
raise _PermRequestError(f"HID did not recognize the request={request!r}")
elif code == 0x24: # Rebooted?
raise _PermRequestError(self.gettext("No previous command state inside HID, seems it was rebooted"))
raise _PermRequestError("No previous command state inside HID, seems it was rebooted")
elif code == 0x20: # Legacy done
self.__set_state_online(True)
return True
elif code & 0x80: # Pong/Done with state
self.__set_state_pong(response)
return True
raise _TempRequestError(self.gettext(f"Invalid response from HID: request={request!r}, response=0x{response!r}"))
raise _TempRequestError(f"Invalid response from HID: request={request!r}, response=0x{response!r}")
except _RequestError as err:
common_retries -= 1
@@ -444,7 +440,7 @@ class BaseMcuHid(BaseHid, multiprocessing.Process): # pylint: disable=too-many-
for msg in error_messages:
logger.error(msg)
if not (common_retries and read_retries):
logger.error(self.gettext("Can't process HID request due many errors: %r", request))
logger.error("Can't process HID request due many errors: %r", request)
return error_retval
def __set_state_online(self, online: bool) -> None:

View File

@@ -27,7 +27,6 @@ import gpiod
from ....logging import get_logger
from ....lanuages import Lanuages
# =====
class Gpio: # pylint: disable=too-many-instance-attributes
@@ -51,8 +50,6 @@ class Gpio: # pylint: disable=too-many-instance-attributes
self.__line_request: (gpiod.LineRequest | None) = None
self.__last_power: (bool | None) = None
self.gettext=Lanuages().gettext
def __enter__(self) -> None:
if self.__power_detect_pin >= 0 or self.__reset_pin >= 0:
assert self.__line_request is None
@@ -94,7 +91,7 @@ class Gpio: # pylint: disable=too-many-instance-attributes
assert self.__line_request
power = bool(self.__line_request.get_value(self.__power_detect_pin).value)
if power != self.__last_power:
get_logger(0).info(self.gettext("HID power state changed: %s -> %s"), self.__last_power, power)
get_logger(0).info("HID power state changed: %s -> %s", self.__last_power, power)
self.__last_power = power
return power
return True
@@ -108,4 +105,4 @@ class Gpio: # pylint: disable=too-many-instance-attributes
finally:
self.__line_request.set_value(self.__reset_pin, gpiod.line.Value(self.__reset_inverted))
time.sleep(1)
get_logger(0).info(self.gettext("Reset HID performed"))
get_logger(0).info("Reset HID performed")

View File

@@ -40,8 +40,6 @@ from .... import aiotools
from .... import aiomulti
from .... import aioproc
from ....lanuages import Lanuages
from .. import BaseHid
from ..otg.events import ResetEvent
@@ -109,8 +107,6 @@ class Plugin(BaseHid): # pylint: disable=too-many-instance-attributes
stop_event=self.__stop_event,
)
self.gettext=Lanuages().gettext
@classmethod
def get_plugin_options(cls) -> dict:
return {
@@ -134,7 +130,7 @@ class Plugin(BaseHid): # pylint: disable=too-many-instance-attributes
}
def sysprep(self) -> None:
get_logger(0).info(self.gettext("Starting HID daemon ..."))
get_logger(0).info("Starting HID daemon ...")
self.__proc = multiprocessing.Process(target=self.__server_worker, daemon=True)
self.__proc.start()
@@ -179,7 +175,7 @@ class Plugin(BaseHid): # pylint: disable=too-many-instance-attributes
async def cleanup(self) -> None:
if self.__proc is not None:
if self.__proc.is_alive():
get_logger(0).info(self.gettext("Stopping HID daemon ..."))
get_logger(0).info("Stopping HID daemon ...")
self.__stop_event.set()
if self.__proc.is_alive() or self.__proc.exitcode is not None:
self.__proc.join()
@@ -228,5 +224,5 @@ class Plugin(BaseHid): # pylint: disable=too-many-instance-attributes
try:
self.__server.run()
except Exception:
logger.exception(self.gettext("Unexpected HID error"))
logger.exception("Unexpected HID error")
time.sleep(5)

View File

@@ -38,8 +38,6 @@ from .... import aiomulti
from ....keyboard.mappings import UsbKey
from ....lanuages import Lanuages
from ..otg.events import BaseEvent
from ..otg.events import ClearEvent
from ..otg.events import ResetEvent
@@ -117,8 +115,6 @@ class BtServer: # pylint: disable=too-many-instance-attributes
self.__keys: list[UsbKey | None] = [None] * 6
self.__mouse_buttons = 0
self.gettext=Lanuages().gettext
def run(self) -> None:
with self.__iface:
self.__iface.configure()
@@ -150,7 +146,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
@contextlib.contextmanager
def __listen(self, role: _RoleT, addr: str, port: int) -> Generator[socket.socket, None, None]:
get_logger(0).info(self.gettext("Listening [%s]:%d for %s ..."), addr, port, role)
get_logger(0).info("Listening [%s]:%d for %s ...", addr, port, role)
with socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_L2CAP) as sock: # type: ignore
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.settimeout(self.__socket_timeout)
@@ -187,7 +183,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
elif data == b"\x71":
sock.send(b"\x00")
except Exception as err:
get_logger(0).exception(self.gettext("CTL socket error on %s: %s"), client.addr, tools.efmt(err))
get_logger(0).exception("CTL socket error on %s: %s", client.addr, tools.efmt(err))
self.__close_client("CTL", client, "ctl_sock")
continue
@@ -201,7 +197,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
elif data[:2] == b"\xA2\x01":
self.__process_leds(data[2])
except Exception as err:
get_logger(0).exception(self.gettext("INT socket error on %s: %s"), client.addr, tools.efmt(err))
get_logger(0).exception("INT socket error on %s: %s", client.addr, tools.efmt(err))
self.__close_client("INT", client, "ctl_sock")
if qr in ready_read:
@@ -284,7 +280,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
try:
client.int_sock.send(report)
except Exception as err:
get_logger(0).info(self.gettext("Can't send %s report to %s: %s"), name, client.addr, tools.efmt(err))
get_logger(0).info("Can't send %s report to %s: %s", name, client.addr, tools.efmt(err))
self.__close_client_pair(client)
def __clear_modifiers(self) -> None:
@@ -311,12 +307,12 @@ class BtServer: # pylint: disable=too-many-instance-attributes
(sock, peer) = server_sock.accept()
sock.setblocking(True)
except Exception:
get_logger(0).exception(self.gettext("Can't accept %s client"), role)
get_logger(0).exception("Can't accept %s client", role)
else:
if peer[0] not in self.__clients:
if len(self.__clients) >= self.__max_clients:
self.__close_sock(sock)
get_logger(0).info(self.gettext("Refused %s client: %s: max clients reached"), role, peer[0])
get_logger(0).info("Refused %s client: %s: max clients reached", role, peer[0])
return
self.__clients[peer[0]] = _BtClient(peer[0])
client = self.__clients[peer[0]]
@@ -325,7 +321,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
setattr(client, sock_attr, sock)
self.__to_read.add(sock)
get_logger(0).info(self.gettext("Accepted %s client: %s"), role, peer[0])
get_logger(0).info("Accepted %s client: %s", role, peer[0])
self.__state_flags.update(online=True)
self.__set_public(len(self.__clients) < self.__max_clients)
@@ -337,7 +333,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
setattr(client, sock_attr, None)
self.__to_read.remove(sock)
get_logger(0).info(self.gettext("Closed %s client %s"), role, client.addr)
get_logger(0).info("Closed %s client %s", role, client.addr)
if client.ctl_sock is None and client.int_sock is None:
self.__clients.pop(client.addr)
@@ -372,16 +368,16 @@ class BtServer: # pylint: disable=too-many-instance-attributes
def __set_public(self, public: bool) -> None:
logger = get_logger(0)
if self.__control_public:
logger.info(self.gettext("Publishing ...") if public else self.gettext("Unpublishing ..."))
logger.info("Publishing ..." if public else "Unpublishing ...")
try:
self.__iface.set_public(public)
except Exception as err:
logger.error(self.gettext("Can't change public mode: %s"), tools.efmt(err))
logger.error("Can't change public mode: %s", tools.efmt(err))
def __unpair_client(self, client: _BtClient) -> None:
logger = get_logger(0)
logger.info(self.gettext("Unpairing %s ..."), client.addr)
logger.info("Unpairing %s ...", client.addr)
try:
self.__iface.unpair(client.addr)
except Exception as err:
logger.error(self.gettext("Can't unpair %s: %s"), client.addr, tools.efmt(err))
logger.error("Can't unpair %s: %s", client.addr, tools.efmt(err))

View File

@@ -41,8 +41,6 @@ from ....validators.basic import valid_float_f01
from ....validators.os import valid_abs_path
from ....validators.hw import valid_tty_speed
from ....lanuages import Lanuages
from .. import BaseHid
from .chip import ChipResponseError
@@ -84,8 +82,6 @@ class Plugin(BaseHid, multiprocessing.Process): # pylint: disable=too-many-inst
self.__keyboard = Keyboard()
self.__mouse = Mouse()
self.gettext=Lanuages().gettext
@classmethod
def get_plugin_options(cls) -> dict:
return {
@@ -96,7 +92,7 @@ class Plugin(BaseHid, multiprocessing.Process): # pylint: disable=too-many-inst
}
def sysprep(self) -> None:
get_logger(0).info(self.gettext("Starting HID daemon ..."))
get_logger(0).info("Starting HID daemon ...")
self.start()
async def get_state(self) -> dict:
@@ -138,7 +134,7 @@ class Plugin(BaseHid, multiprocessing.Process): # pylint: disable=too-many-inst
@aiotools.atomic_fg
async def cleanup(self) -> None:
if self.is_alive():
get_logger(0).info(self.gettext("Stopping HID daemon ..."))
get_logger(0).info("Stopping HID daemon ...")
self.__stop_event.set()
if self.is_alive() or self.exitcode is not None:
self.join()
@@ -175,7 +171,7 @@ class Plugin(BaseHid, multiprocessing.Process): # pylint: disable=too-many-inst
_ = keyboard_output
if mouse_output is not None:
get_logger(0).info(self.gettext("HID : mouse output = %s"), mouse_output)
get_logger(0).info("HID : mouse output = %s", mouse_output)
absolute = (mouse_output == "usb")
self.__mouse.set_absolute(absolute)
self._set_jiggler_absolute(absolute)
@@ -205,7 +201,7 @@ class Plugin(BaseHid, multiprocessing.Process): # pylint: disable=too-many-inst
try:
self.__hid_loop()
except Exception:
logger.exception(self.gettext("Unexpected error in the run loop"))
logger.exception("Unexpected error in the run loop")
time.sleep(1)
def __hid_loop(self) -> None:
@@ -228,7 +224,7 @@ class Plugin(BaseHid, multiprocessing.Process): # pylint: disable=too-many-inst
self.__process_cmd(conn, cmd)
except Exception:
self.clear_events()
get_logger(0).exception(self.gettext("Unexpected error in the HID loop"))
get_logger(0).exception("Unexpected error in the HID loop")
time.sleep(2)
def __process_cmd(self, conn: ChipConnection, cmd: bytes) -> bool: # pylint: disable=too-many-branches

View File

@@ -25,8 +25,6 @@ import contextlib
from typing import Generator
from ....lanuages import Lanuages
# =====
class ChipResponseError(Exception):
@@ -37,7 +35,6 @@ class ChipResponseError(Exception):
class ChipConnection:
def __init__(self, tty: serial.Serial) -> None:
self.__tty = tty
self.gettext=Lanuages().gettext
def xfer(self, cmd: bytes) -> int:
self.__send(cmd)
@@ -55,16 +52,16 @@ class ChipConnection:
def __recv(self) -> int:
data = self.__tty.read(5)
if len(data) < 5:
raise ChipResponseError(self.gettext("Too short response, HID might be disconnected"))
raise ChipResponseError("Too short response, HID might be disconnected")
if data and data[4]:
data += self.__tty.read(data[4] + 1)
if self.__make_checksum(data[:-1]) != data[-1]:
raise ChipResponseError(self.gettext("Invalid response checksum"))
raise ChipResponseError("Invalid response checksum")
if data[4] == 1 and data[5] != 0:
raise ChipResponseError(self.gettext(f"Response error code = {data[5]!r}"))
raise ChipResponseError(f"Response error code = {data[5]!r}")
# led_byte (info) response
return (data[7] if data[3] == 0x81 else -1)

View File

@@ -37,8 +37,6 @@ from .... import aiomulti
from .... import aioproc
from .... import usb
from ....lanuages import Lanuages
from .events import BaseEvent
@@ -77,8 +75,6 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
self.__no_device_reported = False
self.__logger: (logging.Logger | None) = None
self.gettext=Lanuages().gettext
def start(self, udc: str) -> None: # type: ignore # pylint: disable=arguments-differ
self.__udc_state_path = usb.get_udc_path(udc, usb.U_STATE)
@@ -122,7 +118,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
retries -= 1
except Exception:
self.__logger.exception(self.gettext("Unexpected HID-%s error"), self.__name)
self.__logger.exception("Unexpected HID-%s error", self.__name)
time.sleep(1)
self.__close_device()
@@ -149,7 +145,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
def _stop(self) -> None:
if self.is_alive():
get_logger().info(self.gettext("Stopping HID-%s daemon ..."), self.__name)
get_logger().info("Stopping HID-%s daemon ...", self.__name)
self.__stop_event.set()
if self.is_alive() or self.exitcode is not None:
self.join()
@@ -194,7 +190,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
self.__state_flags.update(online=True)
return True
else:
logger.error(self.gettext("HID-%s write() error: written (%s) != report length (%d)"),
logger.error("HID-%s write() error: written (%s) != report length (%d)",
self.__name, written, len(report))
except Exception as err:
if isinstance(err, OSError) and (
@@ -202,9 +198,9 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
err.errno == errno.EAGAIN # pylint: disable=no-member
or err.errno == errno.ESHUTDOWN # pylint: disable=no-member
):
logger.debug(self.gettext("HID-%s busy/unplugged (write): %s"), self.__name, tools.efmt(err))
logger.debug("HID-%s busy/unplugged (write): %s", self.__name, tools.efmt(err))
else:
logger.exception(self.gettext("Can't write report to HID-%s"), self.__name)
logger.exception("Can't write report to HID-%s", self.__name)
self.__state_flags.update(online=False)
return False
@@ -221,7 +217,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
try:
read = bool(select.select([self.__fd], [], [], 0)[0])
except Exception as err:
logger.error(self.gettext("Can't select() for read HID-%s: %s"), self.__name, tools.efmt(err))
logger.error("Can't select() for read HID-%s: %s", self.__name, tools.efmt(err))
break
if read:
@@ -229,9 +225,9 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
report = os.read(self.__fd, self.__read_size)
except Exception as err:
if isinstance(err, OSError) and err.errno == errno.EAGAIN: # pylint: disable=no-member
logger.debug(self.gettext("HID-%s busy/unplugged (read): %s"), self.__name, tools.efmt(err))
logger.debug("HID-%s busy/unplugged (read): %s", self.__name, tools.efmt(err))
else:
logger.exception(self.gettext("Can't read report from HID-%s"), self.__name)
logger.exception("Can't read report from HID-%s", self.__name)
else:
self._process_read_report(report)
@@ -248,7 +244,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
self.__close_device()
self.__state_flags.update(online=False)
if not self.__no_device_reported:
logger.error(self.gettext("Missing HID-%s device: %s"), self.__name, self.__device_path)
logger.error("Missing HID-%s device: %s", self.__name, self.__device_path)
self.__no_device_reported = True
return False
self.__no_device_reported = False
@@ -260,8 +256,8 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
flags |= (os.O_RDWR if self.__read_size else os.O_WRONLY)
self.__fd = os.open(self.__device_path, flags)
except Exception as err:
#logger.error(self.gettext("Can't open HID-%s device %s: %s"),self.__name, self.__device_path, tools.efmt(err))
pass
logger.error("Can't open HID-%s device %s: %s",
self.__name, self.__device_path, tools.efmt(err))
if self.__fd >= 0:
try:
@@ -271,9 +267,9 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
return True
else:
# Если запись недоступна, то скорее всего устройство отключено
logger.debug(self.gettext("HID-%s is busy/unplugged (write select)"), self.__name)
logger.debug("HID-%s is busy/unplugged (write select)", self.__name)
except Exception as err:
logger.error(self.gettext("Can't select() for write HID-%s: %s"), self.__name, tools.efmt(err))
logger.error("Can't select() for write HID-%s: %s", self.__name, tools.efmt(err))
self.__state_flags.update(online=False)
return False

View File

@@ -41,7 +41,6 @@ from .events import get_led_scroll
from .events import get_led_num
from .events import make_keyboard_report
from ....lanuages import Lanuages
# =====
class KeyboardProcess(BaseDeviceProcess):
@@ -55,11 +54,10 @@ class KeyboardProcess(BaseDeviceProcess):
self.__pressed_modifiers: set[UsbKey] = set()
self.__pressed_keys: list[UsbKey | None] = [None] * 6
self.gettext=Lanuages().gettext
def cleanup(self) -> None:
self._stop()
get_logger().info(self.gettext("Clearing HID-keyboard events ..."))
get_logger().info("Clearing HID-keyboard events ...")
self._cleanup_write(b"\x00" * 8) # Release all keys and modifiers
def send_clear_event(self) -> None:

View File

@@ -36,7 +36,6 @@ from .events import MouseRelativeEvent
from .events import MouseWheelEvent
from .events import make_mouse_report
from ....lanuages import Lanuages
# =====
class MouseProcess(BaseDeviceProcess):
@@ -55,7 +54,6 @@ class MouseProcess(BaseDeviceProcess):
self.__x = 0 # For absolute
self.__y = 0
self.__win98_fix = False
self.gettext=Lanuages().gettext
def is_absolute(self) -> bool:
return self.__absolute
@@ -68,7 +66,7 @@ class MouseProcess(BaseDeviceProcess):
def cleanup(self) -> None:
self._stop()
get_logger().info(self.gettext("Clearing HID-mouse events ..."))
get_logger().info("Clearing HID-mouse events ...")
report = make_mouse_report(
absolute=self.__absolute,
buttons=0,

View File

@@ -41,8 +41,6 @@ from ...validators.basic import valid_int_f1
from ...validators.basic import valid_float_f01
from ...validators.hw import valid_gpio_pin_optional
from ...lanuages import Lanuages
from ._mcu import BasePhyConnection
from ._mcu import BasePhy
from ._mcu import BaseMcuHid
@@ -58,7 +56,6 @@ class _SpiPhyConnection(BasePhyConnection):
self.__xfer = xfer
self.__read_timeout = read_timeout
self.gettext=Lanuages().gettext
def send(self, request: bytes) -> bytes:
assert len(request) == 8

View File

@@ -40,7 +40,6 @@ from ... import aiotools
from .. import BasePlugin
from .. import get_plugin_class
from ...lanuages import Lanuages
# =====
class MsdError(Exception):
@@ -53,44 +52,37 @@ class MsdOperationError(OperationError, MsdError):
class MsdIsBusyError(IsBusyError, MsdError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("Performing another MSD operation, please try again later"))
super().__init__("Performing another MSD operation, please try again later")
class MsdOfflineError(MsdOperationError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("MSD is not found"))
super().__init__("MSD is not found")
class MsdConnectedError(MsdOperationError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("MSD is connected to Server, but shouldn't for this operation"))
super().__init__("MSD is connected to Server, but shouldn't for this operation")
class MsdDisconnectedError(MsdOperationError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("MSD is disconnected from Server, but should be for this operation"))
super().__init__("MSD is disconnected from Server, but should be for this operation")
class MsdImageNotSelected(MsdOperationError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("The image is not selected"))
super().__init__("The image is not selected")
class MsdUnknownImageError(MsdOperationError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("The image is not found in the storage"))
super().__init__("The image is not found in the storage")
class MsdImageExistsError(MsdOperationError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("This image is already exists"))
super().__init__("This image is already exists")
# =====

View File

@@ -31,13 +31,11 @@ from . import BaseMsdReader
from . import BaseMsdWriter
from . import BaseMsd
from ...lanuages import Lanuages
# =====
class MsdDisabledError(MsdOperationError):
def __init__(self) -> None:
gettext=Lanuages().gettext
super().__init__(gettext("MSD is disabled"))
super().__init__("MSD is disabled")
# =====

View File

@@ -29,7 +29,6 @@ import os
from typing import AsyncGenerator
from ....lanuages import Lanuages
from ....logging import get_logger
from ....inotify import InotifyMask
@@ -45,8 +44,6 @@ from ....validators.kvm import valid_msd_image_name
from .... import aiotools
from .... import fstab
from ....lanuages import Lanuages
from .. import MsdIsBusyError
from .. import MsdOfflineError
from .. import MsdConnectedError
@@ -62,6 +59,7 @@ from .storage import Image
from .storage import Storage
from .drive import Drive
# =====
@dataclasses.dataclass(frozen=True)
class _DriveState:
@@ -143,10 +141,9 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
self.__notifier = aiotools.AioNotifier()
self.__state = _State(self.__notifier)
self.gettext=Lanuages().gettext
logger = get_logger(0)
logger.info(self.gettext("Using OTG gadget %r as MSD"), gadget)
logger.info("Using OTG gadget %r as MSD", gadget)
aiotools.run_sync(self.__reload_state(notify=False))
@classmethod
@@ -221,7 +218,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
self.__drive.set_rw_flag(False)
await self.__storage.remount_rw(False)
except Exception:
get_logger(0).exception(self.gettext("Can't reset MSD properly"))
get_logger(0).exception("Can't reset MSD properly")
@aiotools.atomic_fg
async def cleanup(self) -> None:
@@ -450,7 +447,7 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
if need_reload_state:
await self.__reload_state()
except Exception:
logger.exception(self.gettext("Unexpected MSD watcher error"))
logger.exception("Unexpected MSD watcher error")
time.sleep(1)
async def __reload_state(self, notify: bool=True) -> None:
@@ -469,13 +466,13 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
if self.__state.vd is None and drive_state.image is None:
# Если только что включились и образ не подключен - попробовать
# перемонтировать хранилище (и создать images и meta).
logger.info(self.gettext("Probing to remount storage ..."))
logger.info("Probing to remount storage ...")
await self.__storage.remount_rw(True)
await self.__storage.remount_rw(False)
await self.__setup_initial()
except Exception:
logger.exception(self.gettext("Error while reloading MSD state; switching to offline"))
logger.exception("Error while reloading MSD state; switching to offline")
self.__state.storage = None
self.__state.vd = None
@@ -503,12 +500,12 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes
logger = get_logger(0)
image = await self.__storage.make_image_by_name(self.__initial_image)
if (await image.exists()):
logger.info(self.gettext("Setting up initial image %r ..."), self.__initial_image)
logger.info("Setting up initial image %r ...", self.__initial_image)
try:
self.__drive.set_rw_flag(False)
self.__drive.set_cdrom_flag(self.__initial_cdrom)
self.__drive.set_image_path(image.path)
except Exception:
logger.exception(self.gettext("Can't setup initial image: ignored"))
logger.exception("Can't setup initial image: ignored")
else:
logger.error(self.gettext("Can't find initial image %r: ignored"), self.__initial_image)
logger.error("Can't find initial image %r: ignored", self.__initial_image)

View File

@@ -27,13 +27,11 @@ from .... import usb
from .. import MsdOperationError
from ....lanuages import Lanuages
# =====
class MsdDriveLockedError(MsdOperationError):
def __init__(self) -> None:
super().__init__(Lanuages().gettext("MSD drive is locked on IO operation"))
super().__init__("MSD drive is locked on IO operation")
# =====

View File

@@ -31,8 +31,6 @@ from typing import Optional
import aiofiles
import aiofiles.os
from ....lanuages import Lanuages
from .... import aiotools
from .... import aiohelpers
@@ -294,4 +292,4 @@ class Storage(_StorageDc):
async def remount_rw(self, rw: bool, fatal: bool=True) -> None:
if not (await aiohelpers.remount("MSD", self.__remount_cmd, rw)):
if fatal:
raise MsdError(Lanuages().gettext("Can't execute remount helper"))
raise MsdError("Can't execute remount helper")

View File

@@ -41,8 +41,6 @@ from ...validators.basic import valid_bool
from ...validators.basic import valid_number
from ...validators.basic import valid_float_f01
from ...lanuages import Lanuages
from . import BaseUserGpioDriver
from . import GpioDriverOfflineError
@@ -148,8 +146,7 @@ class Plugin(BaseUserGpioDriver): # pylint: disable=too-many-instance-attribute
) as response:
htclient.raise_not_200(response)
except Exception as err:
get_logger().error(Lanuages().gettext("Failed ANELPWR POST request to pin %s: %s"), pin, tools.efmt(err))
get_logger().error("Failed ANELPWR POST request to pin %s: %s", pin, tools.efmt(err))
raise GpioDriverOfflineError(self)
self.__update_notifier.notify()