refactoring

This commit is contained in:
Devaev Maxim 2021-01-23 07:00:49 +03:00
parent ebe40697a5
commit 4d4fb69d2e
9 changed files with 34 additions and 32 deletions

View File

@ -34,6 +34,7 @@ from ....logging import get_logger
from ....yamlconf import Section from ....yamlconf import Section
from ....yamlconf.loader import load_yaml_file from ....yamlconf.loader import load_yaml_file
from .... import tools
from .... import aiotools from .... import aiotools
from .base import BaseInfoSubmanager from .base import BaseInfoSubmanager
@ -98,5 +99,5 @@ class ExtrasInfoSubmanager(BaseInfoSubmanager):
return (enabled or (manager.GetUnitFileState(name) in ["enabled", "enabled-runtime", "static", "indirect", "generated"])) return (enabled or (manager.GetUnitFileState(name) in ["enabled", "enabled-runtime", "static", "indirect", "generated"]))
except Exception as err: except Exception as err:
get_logger(0).error("Can't get info about the service %r: %s: %s", name, type(err).__name__, err) get_logger(0).error("Can't get info about the service %r: %s", name, tools.efmt(err))
return True return True

View File

@ -325,7 +325,7 @@ class Streamer: # pylint: disable=too-many-instance-attributes
return snapshot return snapshot
logger.error("Stream is offline, no signal or so") logger.error("Stream is offline, no signal or so")
except (aiohttp.ClientConnectionError, aiohttp.ServerConnectionError) as err: except (aiohttp.ClientConnectionError, aiohttp.ServerConnectionError) as err:
logger.error("Can't connect to streamer: %s: %s", type(err).__name__, err) logger.error("Can't connect to streamer: %s", tools.efmt(err))
except Exception: except Exception:
logger.exception("Invalid streamer response from /snapshot") logger.exception("Invalid streamer response from /snapshot")
return None return None

View File

@ -50,6 +50,8 @@ from ...clients.streamer import BaseStreamerClient
from ...clients.streamer import StreamerHttpClient from ...clients.streamer import StreamerHttpClient
from ...clients.streamer import StreamerMemsinkClient from ...clients.streamer import StreamerMemsinkClient
from ... import tools
from .rfb import RfbClient from .rfb import RfbClient
from .rfb.stream import rfb_format_remote from .rfb.stream import rfb_format_remote
from .rfb.stream import rfb_close_writer from .rfb.stream import rfb_close_writer
@ -397,7 +399,7 @@ class VncServer: # pylint: disable=too-many-instance-attributes
async with kvmd.make_session("", "") as kvmd_session: async with kvmd.make_session("", "") as kvmd_session:
none_auth_only = await kvmd_session.auth.check() none_auth_only = await kvmd_session.auth.check()
except (aiohttp.ClientError, asyncio.TimeoutError) as err: except (aiohttp.ClientError, asyncio.TimeoutError) as err:
logger.error("[entry] %s: Can't check KVMD auth mode: %s: %s", remote, type(err).__name__, err) logger.error("[entry] %s: Can't check KVMD auth mode: %s", remote, tools.efmt(err))
return return
await _Client( await _Client(

View File

@ -33,6 +33,7 @@ try:
except ImportError: except ImportError:
ustreamer = None ustreamer = None
from .. import tools
from .. import aiotools from .. import aiotools
from .. import htclient from .. import htclient
@ -119,7 +120,7 @@ class StreamerHttpClient(BaseStreamerClient):
except Exception as err: # Тут бывают и ассерты, и KeyError, и прочая херня except Exception as err: # Тут бывают и ассерты, и KeyError, и прочая херня
if isinstance(err, StreamerTempError): if isinstance(err, StreamerTempError):
raise raise
raise StreamerTempError(f"{type(err).__name__}: {err}") raise StreamerTempError(tools.efmt(err))
raise StreamerTempError("Reached EOF") raise StreamerTempError("Reached EOF")
def __make_http_session(self) -> aiohttp.ClientSession: def __make_http_session(self) -> aiohttp.ClientSession:
@ -165,6 +166,6 @@ class StreamerMemsinkClient(BaseStreamerClient):
if frame is not None: if frame is not None:
yield (frame["online"], frame["width"], frame["height"], frame["data"]) yield (frame["online"], frame["width"], frame["height"], frame["data"])
except FileNotFoundError as err: except FileNotFoundError as err:
raise StreamerTempError(f"{type(err).__name__}: {err}") raise StreamerTempError(tools.efmt(err))
except Exception as err: except Exception as err:
raise StreamerPermError(f"{type(err).__name__}: {err}") raise StreamerPermError(tools.efmt(err))

View File

@ -187,8 +187,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
elif data == b"\x71": elif data == b"\x71":
sock.send(b"\x00") sock.send(b"\x00")
except Exception as err: except Exception as err:
get_logger(0).exception("CTL socket error on %s: %s: %s", get_logger(0).exception("CTL socket error on %s: %s", client.addr, tools.efmt(err))
client.addr, type(err).__name__, err)
self.__close_client("CTL", client, "ctl_sock") self.__close_client("CTL", client, "ctl_sock")
continue continue
@ -202,8 +201,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
elif data[:2] == b"\xA2\x01": elif data[:2] == b"\xA2\x01":
self.__process_leds(data[2]) self.__process_leds(data[2])
except Exception as err: except Exception as err:
get_logger(0).exception("INT socket error on %s: %s: %s", get_logger(0).exception("INT socket error on %s: %s", client.addr, tools.efmt(err))
client.addr, type(err).__name__, err)
self.__close_client("INT", client, "ctl_sock") self.__close_client("INT", client, "ctl_sock")
if qr in ready_read: if qr in ready_read:
@ -286,8 +284,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
try: try:
client.int_sock.send(report) client.int_sock.send(report)
except Exception as err: except Exception as err:
get_logger(0).info("Can't send %s report to %s: %s: %s", get_logger(0).info("Can't send %s report to %s: %s", name, client.addr, tools.efmt(err))
name, client.addr, type(err).__name__, err)
self.__close_client_pair(client) self.__close_client_pair(client)
def __clear_modifiers(self) -> None: def __clear_modifiers(self) -> None:
@ -379,7 +376,7 @@ class BtServer: # pylint: disable=too-many-instance-attributes
try: try:
self.__iface.set_public(public) self.__iface.set_public(public)
except Exception as err: except Exception as err:
logger.error("Can't change public mode: %s: %s", type(err).__name__, err) logger.error("Can't change public mode: %s", tools.efmt(err))
def __unpair_client(self, client: _BtClient) -> None: def __unpair_client(self, client: _BtClient) -> None:
logger = get_logger(0) logger = get_logger(0)
@ -387,4 +384,4 @@ class BtServer: # pylint: disable=too-many-instance-attributes
try: try:
self.__iface.unpair(client.addr) self.__iface.unpair(client.addr)
except Exception as err: except Exception as err:
logger.error("Can't unpair %s: %s: %s", client.addr, type(err).__name__, err) logger.error("Can't unpair %s: %s", client.addr, tools.efmt(err))

View File

@ -167,8 +167,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
err.errno == errno.EAGAIN # pylint: disable=no-member err.errno == errno.EAGAIN # pylint: disable=no-member
or err.errno == errno.ESHUTDOWN # pylint: disable=no-member or err.errno == errno.ESHUTDOWN # pylint: disable=no-member
): ):
logger.debug("HID-%s busy/unplugged (write): %s: %s", logger.debug("HID-%s busy/unplugged (write): %s", self.__name, tools.efmt(err))
self.__name, type(err).__name__, err)
else: else:
logger.exception("Can't write report to HID-%s", self.__name) logger.exception("Can't write report to HID-%s", self.__name)
@ -193,7 +192,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
try: try:
read = bool(select.select([self.__fd], [], [], 0)[0]) read = bool(select.select([self.__fd], [], [], 0)[0])
except Exception as err: except Exception as err:
logger.error("Can't select() for read HID-%s: %s: %s", self.__name, type(err).__name__, err) logger.error("Can't select() for read HID-%s: %s", self.__name, tools.efmt(err))
break break
if read: if read:
@ -201,8 +200,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
report = os.read(self.__fd, self.__read_size) report = os.read(self.__fd, self.__read_size)
except Exception as err: except Exception as err:
if isinstance(err, OSError) and err.errno == errno.EAGAIN: # pylint: disable=no-member if isinstance(err, OSError) and err.errno == errno.EAGAIN: # pylint: disable=no-member
logger.debug("HID-%s busy/unplugged (read): %s: %s", logger.debug("HID-%s busy/unplugged (read): %s", self.__name, tools.efmt(err))
self.__name, type(err).__name__, err)
else: else:
logger.exception("Can't read report from HID-%s", self.__name) logger.exception("Can't read report from HID-%s", self.__name)
else: else:
@ -220,12 +218,8 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
flags = os.O_NONBLOCK flags = os.O_NONBLOCK
flags |= (os.O_RDWR if self.__read_size else os.O_WRONLY) flags |= (os.O_RDWR if self.__read_size else os.O_WRONLY)
self.__fd = os.open(self.__device_path, flags) self.__fd = os.open(self.__device_path, flags)
except FileNotFoundError:
logger.error("Missing HID-%s device: %s", self.__name, self.__device_path)
time.sleep(self.__reopen_delay)
except Exception as err: except Exception as err:
logger.error("Can't open HID-%s device: %s: %s: %s", logger.error("Can't open HID-%s device %s: %s", self.__name, self.__device_path, tools.efmt(err))
self.__name, self.__device_path, type(err).__name__, err)
time.sleep(self.__reopen_delay) time.sleep(self.__reopen_delay)
else: else:
time.sleep(self.__reopen_delay) time.sleep(self.__reopen_delay)
@ -238,7 +232,7 @@ class BaseDeviceProcess(multiprocessing.Process): # pylint: disable=too-many-in
else: else:
logger.debug("HID-%s is busy/unplugged (write select)", self.__name) logger.debug("HID-%s is busy/unplugged (write select)", self.__name)
except Exception as err: except Exception as err:
logger.error("Can't select() for write HID-%s: %s: %s", self.__name, type(err).__name__, err) logger.error("Can't select() for write HID-%s: %s", self.__name, tools.efmt(err))
self.__close_device() self.__close_device()
self.__state_flags.update(online=False) self.__state_flags.update(online=False)

View File

@ -25,6 +25,7 @@ import os
from ....logging import get_logger from ....logging import get_logger
from .... import env from .... import env
from .... import tools
# ===== # =====
@ -47,7 +48,7 @@ class UsbDeviceController:
try: try:
candidates = sorted(os.listdir(path)) candidates = sorted(os.listdir(path))
except Exception as err: except Exception as err:
logger.error("Can't list %s: %s: %s: ignored", path, type(err).__name__, err) logger.error("Can't list %s: %s: ignored", path, tools.efmt(err))
return return
udc = "" udc = ""

View File

@ -31,6 +31,7 @@ import hid
from ...logging import get_logger from ...logging import get_logger
from ... import tools
from ... import aiotools from ... import aiotools
from ...yamlconf import Option from ...yamlconf import Option
@ -91,8 +92,8 @@ class Plugin(BaseUserGpioDriver):
with self.__ensure_device("probing"): with self.__ensure_device("probing"):
pass pass
except Exception as err: except Exception as err:
logger.error("Can't probe %s on %s: %s: %s", logger.error("Can't probe %s on %s: %s",
self, self.__device_path, type(err).__name__, err) self, self.__device_path, tools.efmt(err))
self.__reset_pins() self.__reset_pins()
async def run(self) -> None: async def run(self) -> None:
@ -135,8 +136,8 @@ class Plugin(BaseUserGpioDriver):
try: try:
self.__inner_write(pin, state) self.__inner_write(pin, state)
except Exception as err: except Exception as err:
logger.error("Can't reset pin=%d of %s on %s: %s: %s", logger.error("Can't reset pin=%d of %s on %s: %s",
pin, self, self.__device_path, type(err).__name__, err) pin, self, self.__device_path, tools.efmt(err))
def __inner_read(self, pin: int) -> bool: def __inner_read(self, pin: int) -> bool:
if self.__check_pin(pin): if self.__check_pin(pin):
@ -173,8 +174,8 @@ class Plugin(BaseUserGpioDriver):
try: try:
yield self.__device yield self.__device
except Exception as err: except Exception as err:
get_logger(0).error("Error occured on %s on %s while %s: %s: %s", get_logger(0).error("Error occured on %s on %s while %s: %s",
self, self.__device_path, context, type(err).__name__, err) self, self.__device_path, context, tools.efmt(err))
self.__close_device() self.__close_device()
raise raise

View File

@ -32,6 +32,11 @@ from typing import Hashable
from typing import TypeVar from typing import TypeVar
# =====
def efmt(err: Exception) -> str:
return f"{type(err).__name__}: {err}"
# ===== # =====
def merge(dest: Dict, src: Dict) -> None: def merge(dest: Dict, src: Dict) -> None:
for key in src: for key in src: