mirror of
https://github.com/naruxde/revpicommander.git
synced 2025-11-08 16:43:53 +01:00
refactor: Using module based logger and not root logger from proginit
This commit is contained in:
@@ -5,6 +5,7 @@ __copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
import webbrowser
|
||||
from logging import getLogger
|
||||
from re import compile
|
||||
from sys import platform
|
||||
|
||||
@@ -12,10 +13,11 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from zeroconf import IPVersion, ServiceBrowser, Zeroconf
|
||||
|
||||
from . import helper
|
||||
from . import proginit as pi
|
||||
from .helper import RevPiSettings, WidgetData, all_revpi_settings
|
||||
from .ui.avahisearch_ui import Ui_diag_search
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class AvahiSearchThread(QtCore.QThread):
|
||||
"""Search thread for Revolution Pi with installed RevPiPyLoad."""
|
||||
@@ -34,12 +36,12 @@ class AvahiSearchThread(QtCore.QThread):
|
||||
|
||||
def remove_service(self, zeroconf: Zeroconf, conf_type: str, name: str) -> None:
|
||||
"""Revolution Pi disappeared."""
|
||||
pi.logger.debug("AvahiSearchThread.remove_service")
|
||||
log.debug("AvahiSearchThread.remove_service")
|
||||
self.removed.emit(name, conf_type)
|
||||
|
||||
def add_service(self, zeroconf: Zeroconf, conf_type: str, name: str) -> None:
|
||||
"""New Revolution Pi found."""
|
||||
pi.logger.debug("AvahiSearchThread.add_service")
|
||||
log.debug("AvahiSearchThread.add_service")
|
||||
info = zeroconf.get_service_info(conf_type, name)
|
||||
if not info:
|
||||
return
|
||||
@@ -49,7 +51,7 @@ class AvahiSearchThread(QtCore.QThread):
|
||||
|
||||
def update_service(self, zeroconf: Zeroconf, conf_type: str, name: str) -> None:
|
||||
"""New data of revolution pi"""
|
||||
pi.logger.debug("AvahiSearchThread.add_service")
|
||||
log.debug("AvahiSearchThread.add_service")
|
||||
info = zeroconf.get_service_info(conf_type, name)
|
||||
if not info:
|
||||
return
|
||||
@@ -58,14 +60,14 @@ class AvahiSearchThread(QtCore.QThread):
|
||||
self.updated.emit(name, info.server, info.port, conf_type, ip)
|
||||
|
||||
def run(self) -> None:
|
||||
pi.logger.debug("Started zero conf discovery.")
|
||||
log.debug("Started zero conf discovery.")
|
||||
zeroconf = Zeroconf()
|
||||
revpi_browser = ServiceBrowser(zeroconf, "_revpipyload._tcp.local.", self)
|
||||
while not self.isInterruptionRequested():
|
||||
# Just hanging around :)
|
||||
self.msleep(self._cycle_wait_ms)
|
||||
zeroconf.close()
|
||||
pi.logger.debug("Stopped zero conf discovery.")
|
||||
log.debug("Stopped zero conf discovery.")
|
||||
|
||||
|
||||
class AvahiSearch(QtWidgets.QDialog, Ui_diag_search):
|
||||
@@ -191,7 +193,7 @@ class AvahiSearch(QtWidgets.QDialog, Ui_diag_search):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_act_connect_triggered(self) -> None:
|
||||
"""Connect via existing settings or ask for type."""
|
||||
pi.logger.debug("AvahiSearch.on_act_connect_triggered")
|
||||
log.debug("AvahiSearch.on_act_connect_triggered")
|
||||
selected_items = self.tb_revpi.selectedItems()
|
||||
if not selected_items:
|
||||
return
|
||||
@@ -206,7 +208,7 @@ class AvahiSearch(QtWidgets.QDialog, Ui_diag_search):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_act_connect_ssh_triggered(self) -> None:
|
||||
"""Create new revpi settings with ssh, save and connect."""
|
||||
pi.logger.debug("AvahiSearch.on_act_connect_ssh_triggered")
|
||||
log.debug("AvahiSearch.on_act_connect_ssh_triggered")
|
||||
if self.tb_revpi.currentRow() == -1:
|
||||
return
|
||||
|
||||
@@ -218,7 +220,7 @@ class AvahiSearch(QtWidgets.QDialog, Ui_diag_search):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_act_connect_xmlrpc_triggered(self) -> None:
|
||||
"""Create new revpi settings with XML-RPC, save and connect."""
|
||||
pi.logger.debug("AvahiSearch.on_act_connect_xmlrpc_triggered")
|
||||
log.debug("AvahiSearch.on_act_connect_xmlrpc_triggered")
|
||||
if self.tb_revpi.currentRow() == -1:
|
||||
return
|
||||
|
||||
@@ -331,7 +333,7 @@ class AvahiSearch(QtWidgets.QDialog, Ui_diag_search):
|
||||
@QtCore.pyqtSlot(int, int)
|
||||
def on_tb_revpi_cellDoubleClicked(self, row: int, column: int) -> None:
|
||||
"""Connect to double-clicked Revolution Pi."""
|
||||
pi.logger.debug("AvahiSearch.on_tb_revpi_cellDoubleClicked")
|
||||
log.debug("AvahiSearch.on_tb_revpi_cellDoubleClicked")
|
||||
selected_items = self.tb_revpi.selectedItems()
|
||||
if not selected_items:
|
||||
return
|
||||
@@ -353,7 +355,7 @@ class AvahiSearch(QtWidgets.QDialog, Ui_diag_search):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_connect_clicked(self) -> None:
|
||||
"""Connect to selected Revolution Pi."""
|
||||
pi.logger.debug("AvahiSearch.on_btn_connect_clicked")
|
||||
log.debug("AvahiSearch.on_btn_connect_clicked")
|
||||
selected_items = self.tb_revpi.selectedItems()
|
||||
if not selected_items:
|
||||
return
|
||||
@@ -370,7 +372,7 @@ class AvahiSearch(QtWidgets.QDialog, Ui_diag_search):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_save_clicked(self) -> None:
|
||||
"""Save selected Revolution Pi."""
|
||||
pi.logger.debug("AvahiSearch.on_btn_save_clicked")
|
||||
log.debug("AvahiSearch.on_btn_save_clicked")
|
||||
row_index = self.tb_revpi.currentRow()
|
||||
if row_index == -1:
|
||||
return
|
||||
|
||||
@@ -10,7 +10,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from .ui.backgroundworker_ui import Ui_diag_backgroundworker
|
||||
|
||||
log = getLogger()
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class BackgroundWorker(QtCore.QThread):
|
||||
|
||||
@@ -5,6 +5,7 @@ __copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
import pickle
|
||||
from logging import getLogger
|
||||
from xmlrpc.client import Binary, Fault, MultiCall, MultiCallIterator
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
@@ -14,6 +15,8 @@ from . import proginit as pi
|
||||
from .debugios import DebugIos
|
||||
from .ui.debugcontrol_ui import Ui_wid_debugcontrol
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class PsValues(QtCore.QThread):
|
||||
"""
|
||||
@@ -31,7 +34,7 @@ class PsValues(QtCore.QThread):
|
||||
|
||||
def run(self):
|
||||
"""Read IO values of Revolution Pi."""
|
||||
pi.logger.debug("PsValues.run enter")
|
||||
log.debug("PsValues.run enter")
|
||||
|
||||
while not self.isInterruptionRequested():
|
||||
try:
|
||||
@@ -39,16 +42,16 @@ class PsValues(QtCore.QThread):
|
||||
helper.cm.call_remote_function("ps_values", raise_exception=True)
|
||||
)
|
||||
except Fault:
|
||||
pi.logger.warning("Detected piCtory reset.")
|
||||
log.warning("Detected piCtory reset.")
|
||||
self.requestInterruption()
|
||||
self.driver_reset_detected.emit()
|
||||
except Exception as e:
|
||||
pi.logger.error(e)
|
||||
log.error(e)
|
||||
self.process_image_received.emit(Binary())
|
||||
|
||||
self.msleep(self._cycle_time)
|
||||
|
||||
pi.logger.debug("PsValues.run exit")
|
||||
log.debug("PsValues.run exit")
|
||||
|
||||
|
||||
class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
@@ -87,11 +90,11 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
self.shc_write_o.activated.connect(self.on_btn_write_o_clicked)
|
||||
|
||||
def __del__(self):
|
||||
pi.logger.debug("DebugControl.__del__")
|
||||
log.debug("DebugControl.__del__")
|
||||
|
||||
def _set_gui_control_states(self):
|
||||
"""Set states depending on acl level."""
|
||||
pi.logger.debug("DebugControl._set_gui_control_states")
|
||||
log.debug("DebugControl._set_gui_control_states")
|
||||
# xml_mode view >= 1
|
||||
# xml_mode write >= 3
|
||||
self.btn_read_io.setEnabled(not self.cbx_write.isChecked())
|
||||
@@ -109,7 +112,7 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
|
||||
:param device_position: Only device position or -1 for all
|
||||
"""
|
||||
pi.logger.debug("DebugControl._destroy_io_view")
|
||||
log.debug("DebugControl._destroy_io_view")
|
||||
for position in sorted(self.dict_devices) if device_position == -1 else [device_position]:
|
||||
if position in self.dict_windows:
|
||||
# Remove singe window and button
|
||||
@@ -151,11 +154,11 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
try:
|
||||
ba_values = helper.cm.call_remote_function("ps_values", raise_exception=True)
|
||||
except Fault:
|
||||
pi.logger.warning("Detected piCtory reset.")
|
||||
log.warning("Detected piCtory reset.")
|
||||
self._driver_reset_detected()
|
||||
return
|
||||
except Exception as e:
|
||||
pi.logger.error(e)
|
||||
log.error(e)
|
||||
ba_values = Binary()
|
||||
|
||||
# From now on use bytes instead of Binary
|
||||
@@ -255,7 +258,7 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
return
|
||||
elif not isinstance(return_list, list):
|
||||
return
|
||||
pi.logger.debug("DebugControl._validate_multicall")
|
||||
log.debug("DebugControl._validate_multicall")
|
||||
|
||||
str_errmsg = ""
|
||||
for lst_result in return_list: # type: list
|
||||
@@ -272,13 +275,13 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
self.dict_windows[lst_result[0]].reset_change_value_colors(lst_result[1])
|
||||
|
||||
if str_errmsg != "":
|
||||
pi.logger.error(str_errmsg)
|
||||
log.error(str_errmsg)
|
||||
if not self.cbx_refresh.isChecked():
|
||||
QtWidgets.QMessageBox.critical(self, self.tr("Error"), str_errmsg)
|
||||
|
||||
def deleteLater(self):
|
||||
"""Clean up all sub windows."""
|
||||
pi.logger.debug("DebugControl.deleteLater")
|
||||
log.debug("DebugControl.deleteLater")
|
||||
|
||||
self.cbx_write.setChecked(False)
|
||||
self.cbx_refresh.setChecked(False)
|
||||
@@ -288,7 +291,7 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
|
||||
def reload_devices(self):
|
||||
"""Rebuild GUI depending on devices and ios of Revolution Pi."""
|
||||
pi.logger.debug("DebugControl.reload_devices")
|
||||
log.debug("DebugControl.reload_devices")
|
||||
|
||||
if not helper.cm.call_remote_function("psstart", default_value=False):
|
||||
# RevPiPyLoad does not support psstart (too old)
|
||||
@@ -358,7 +361,7 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
@QtCore.pyqtSlot(bool)
|
||||
def on_btn_device_clicked(self, checked: bool):
|
||||
"""Open or close IO window."""
|
||||
pi.logger.debug("DebugControl.on_btn_device_clicked")
|
||||
log.debug("DebugControl.on_btn_device_clicked")
|
||||
|
||||
position = int(self.sender().objectName())
|
||||
if position in self.dict_windows:
|
||||
@@ -369,14 +372,14 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
@QtCore.pyqtSlot(int)
|
||||
def on_device_closed(self, position: int):
|
||||
"""Change the check state of button, if window was closed."""
|
||||
pi.logger.debug("DebugControl.on_device_closed")
|
||||
log.debug("DebugControl.on_device_closed")
|
||||
btn = self.gb_devices.findChild(QtWidgets.QPushButton, str(position)) # type: QtWidgets.QPushButton
|
||||
btn.setChecked(False)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_read_io_pressed(self):
|
||||
"""Read all IO values and replace changed ones."""
|
||||
pi.logger.debug("DebugControl.on_btn_read_io_pressed")
|
||||
log.debug("DebugControl.on_btn_read_io_pressed")
|
||||
for win in self.dict_windows.values(): # type: DebugIos
|
||||
win.reset_label_colors()
|
||||
self._work_values()
|
||||
@@ -384,14 +387,14 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_refresh_io_pressed(self):
|
||||
"""Read all IO values but do not touch changed ones."""
|
||||
pi.logger.debug("DebugControl.on_btn_refresh_io_pressed")
|
||||
log.debug("DebugControl.on_btn_refresh_io_pressed")
|
||||
if not self.cbx_refresh.isChecked():
|
||||
self._work_values(refresh=True)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_write_o_clicked(self):
|
||||
"""Write outputs."""
|
||||
pi.logger.debug("DebugControl.on_btn_write_o_clicked")
|
||||
log.debug("DebugControl.on_btn_write_o_clicked")
|
||||
if not self.cbx_write.isChecked() and (helper.cm.xml_mode >= 3 or helper.cm.simulating):
|
||||
for win in self.dict_windows.values(): # type: DebugIos
|
||||
win.reset_label_colors()
|
||||
@@ -400,7 +403,7 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
@QtCore.pyqtSlot(int)
|
||||
def on_cbx_refresh_stateChanged(self, state: int):
|
||||
"""Start or stop the auto refresh thread."""
|
||||
pi.logger.debug("DebugControl.cbx_refresh_stateChanged")
|
||||
log.debug("DebugControl.cbx_refresh_stateChanged")
|
||||
|
||||
# Start / stop worker thread
|
||||
if state == QtCore.Qt.Checked and (helper.cm.connected or helper.cm.simulating):
|
||||
@@ -433,7 +436,7 @@ class DebugControl(QtWidgets.QWidget, Ui_wid_debugcontrol):
|
||||
|
||||
@QtCore.pyqtSlot(int)
|
||||
def on_cbx_write_stateChanged(self, state: int):
|
||||
pi.logger.debug("DebugControl.cbx_write_stateChanged")
|
||||
log.debug("DebugControl.cbx_write_stateChanged")
|
||||
checked = state == QtCore.Qt.Checked
|
||||
for win in self.dict_windows.values(): # type: DebugIos
|
||||
win.write_values = checked
|
||||
|
||||
@@ -5,6 +5,7 @@ __copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
import struct
|
||||
from logging import getLogger
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
@@ -12,6 +13,8 @@ from . import helper
|
||||
from . import proginit as pi
|
||||
from .ui.debugios_ui import Ui_win_debugios
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
||||
"""IO window of one device."""
|
||||
@@ -46,10 +49,10 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
||||
self.style_sheet = "background-color: red;"
|
||||
|
||||
def __del__(self):
|
||||
pi.logger.debug("DebugIos.__del__")
|
||||
log.debug("DebugIos.__del__")
|
||||
|
||||
def closeEvent(self, a0: QtGui.QCloseEvent):
|
||||
pi.logger.debug("DebugIos.closeEvent")
|
||||
log.debug("DebugIos.closeEvent")
|
||||
helper.cm.settings.debug_geos[self.position] = self.saveGeometry()
|
||||
self.device_closed.emit(self.position)
|
||||
|
||||
@@ -108,7 +111,7 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
||||
signed != val.property("signed"):
|
||||
del self.__qwa[name]
|
||||
layout.removeRow(layout.getWidgetPosition(val)[0])
|
||||
pi.logger.debug("Destroy property changed IO '{0}'".format(name))
|
||||
log.debug("Destroy property changed IO '{0}'".format(name))
|
||||
else:
|
||||
continue
|
||||
|
||||
@@ -209,7 +212,7 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
||||
@QtCore.pyqtSlot(QtCore.QPoint)
|
||||
def on_context_menu(self, point: QtCore.QPoint):
|
||||
"""Generate menu for data format changes."""
|
||||
pi.logger.debug("DebugIos.on_context_menu")
|
||||
log.debug("DebugIos.on_context_menu")
|
||||
|
||||
sender = self.sender()
|
||||
men = QtWidgets.QMenu(sender)
|
||||
@@ -289,7 +292,7 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
||||
|
||||
:param io_name: Clean up only this IO
|
||||
"""
|
||||
pi.logger.debug("DebugIos.reset_change_value_colors")
|
||||
log.debug("DebugIos.reset_change_value_colors")
|
||||
if io_name is None:
|
||||
lst_wid = self.saw_out.findChildren(
|
||||
self.search_class, options=QtCore.Qt.FindDirectChildrenOnly)
|
||||
@@ -346,7 +349,7 @@ class DebugIos(QtWidgets.QMainWindow, Ui_win_debugios):
|
||||
)
|
||||
return actual_value, last_value
|
||||
except Exception:
|
||||
pi.logger.error("Could not convert '{0}' to bytes".format(actual_value))
|
||||
log.error("Could not convert '{0}' to bytes".format(actual_value))
|
||||
pass
|
||||
|
||||
return actual_value.encode(), last_value.encode()
|
||||
|
||||
@@ -8,6 +8,7 @@ import pickle
|
||||
import socket
|
||||
from enum import IntEnum
|
||||
from http.client import CannotSendRequest
|
||||
from logging import getLogger
|
||||
from os import environ, remove
|
||||
from os.path import exists
|
||||
from queue import Queue
|
||||
@@ -22,6 +23,8 @@ from paramiko.ssh_exception import AuthenticationException
|
||||
from . import proginit as pi
|
||||
from .ssh_tunneling.server import SSHLocalTunnel
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
settings = QtCore.QSettings("revpimodio.org", "revpicommander")
|
||||
"""Global application settings."""
|
||||
|
||||
@@ -243,7 +246,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
self._xml_mode_refresh = False
|
||||
|
||||
def __call_simulator(self, function_name: str, *args, default_value=None, **kwargs):
|
||||
pi.logger.debug("ConnectionManager.__call_simulator({0})".format(function_name))
|
||||
log.debug("ConnectionManager.__call_simulator({0})".format(function_name))
|
||||
if function_name == "ps_values":
|
||||
if self._revpi.readprocimg():
|
||||
bytebuff = bytearray()
|
||||
@@ -387,7 +390,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
xml_funcs = sp.system.listMethods()
|
||||
xml_mode = sp.xmlmodus()
|
||||
except Exception as e:
|
||||
pi.logger.exception(e)
|
||||
log.exception(e)
|
||||
self.connection_error_observed.emit(str(e))
|
||||
|
||||
if revpi_settings.ssh_use_tunnel:
|
||||
@@ -451,7 +454,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
self._revpi = None
|
||||
self._revpi_output = None
|
||||
|
||||
pi.logger.debug("Simulator destroyed.")
|
||||
log.debug("Simulator destroyed.")
|
||||
self.connection_disconnected.emit()
|
||||
|
||||
elif self._cli is not None:
|
||||
@@ -483,7 +486,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
:param procimg: Process image, which is a 4 kByte file for simulation
|
||||
:param clean_existing: Reset the file to ZERO \x00 bytes
|
||||
"""
|
||||
pi.logger.debug("ConnectionManager.start_simulate")
|
||||
log.debug("ConnectionManager.start_simulate")
|
||||
|
||||
if not exists(procimg) or clean_existing:
|
||||
with open(procimg, "wb") as fh:
|
||||
@@ -507,7 +510,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
self.connection_established.emit()
|
||||
|
||||
except Exception as e:
|
||||
pi.logger.exception(e)
|
||||
log.exception(e)
|
||||
self.connection_error_observed.emit(str(e))
|
||||
self._revpi_output = None
|
||||
self._revpi = None
|
||||
@@ -522,7 +525,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
|
||||
def reset_simulator(self):
|
||||
"""Reset all io to piCtory defaults."""
|
||||
pi.logger.debug("ConnectionManager.reset_simulator")
|
||||
log.debug("ConnectionManager.reset_simulator")
|
||||
if settings.value("simulator/restart_zero", False, bool):
|
||||
with open(self._revpi.procimg, "wb") as fh:
|
||||
fh.write(b'\x00' * 4096)
|
||||
@@ -558,9 +561,9 @@ class ConnectionManager(QtCore.QThread):
|
||||
self.xml_mode = sp.xmlmodus()
|
||||
self._xml_mode_refresh = False
|
||||
except CannotSendRequest as e:
|
||||
pi.logger.warning(e)
|
||||
log.warning(e)
|
||||
except Exception as e:
|
||||
pi.logger.warning(e)
|
||||
log.warning(e)
|
||||
self.status_changed.emit(self.tr("SERVER ERROR"), "red")
|
||||
self.connection_error_observed.emit("{0} | {1}".format(e, type(e)))
|
||||
|
||||
@@ -614,7 +617,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
:return: Return value of remote function or default_value
|
||||
"""
|
||||
if self._cli is None and self._revpi is None:
|
||||
pi.logger.error("Not connected while calling {0}".format(function_name))
|
||||
log.error("Not connected while calling {0}".format(function_name))
|
||||
if raise_exception:
|
||||
raise ConnectionError("Connection manager not connected")
|
||||
return default_value
|
||||
@@ -638,7 +641,7 @@ class ConnectionManager(QtCore.QThread):
|
||||
if reload_funcs:
|
||||
self.xml_funcs = self._cli.system.listMethods()
|
||||
except Exception as e:
|
||||
pi.logger.error(e)
|
||||
log.error(e)
|
||||
if raise_exception:
|
||||
self._lck_cli.release()
|
||||
raise
|
||||
@@ -722,7 +725,7 @@ def import_old_settings():
|
||||
revpi_setting._settings = settings
|
||||
revpi_setting.save_settings()
|
||||
except Exception:
|
||||
pi.logger.warning("Could not import saved connection {0}".format(i))
|
||||
log.warning("Could not import saved connection {0}".format(i))
|
||||
|
||||
|
||||
import_old_settings()
|
||||
|
||||
@@ -5,11 +5,14 @@ __author__ = "Sven Sager"
|
||||
__copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
from logging import getLogger
|
||||
|
||||
from PyQt5 import QtGui, QtWidgets
|
||||
|
||||
from . import proginit as pi
|
||||
from .ui.mqttmanager_ui import Ui_diag_mqtt
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class MqttManager(QtWidgets.QDialog, Ui_diag_mqtt):
|
||||
"""MQTT settings for option window."""
|
||||
@@ -55,7 +58,7 @@ class MqttManager(QtWidgets.QDialog, Ui_diag_mqtt):
|
||||
self.txt_password.setText(self.dc["mqttpassword"])
|
||||
self.txt_client_id.setText(self.dc["mqttclient_id"])
|
||||
except Exception as e:
|
||||
pi.logger.exception(e)
|
||||
log.exception(e)
|
||||
self.dc = {}
|
||||
return False
|
||||
return True
|
||||
|
||||
@@ -7,6 +7,7 @@ __copyright__ = "Copyright (C) 2018 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
import webbrowser
|
||||
from logging import getLogger
|
||||
from os.path import dirname, join
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
@@ -28,6 +29,8 @@ from .simulator import Simulator
|
||||
from .sshauth import SSHAuth
|
||||
from .ui.revpicommander_ui import Ui_win_revpicommander
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class ConnectingPyload(QtCore.QThread):
|
||||
"""
|
||||
@@ -88,7 +91,7 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
self.setWindowFlag(QtCore.Qt.WindowMaximizeButtonHint, False)
|
||||
|
||||
def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
|
||||
pi.logger.debug("RevPiCommander.closeEvent")
|
||||
log.debug("RevPiCommander.closeEvent")
|
||||
helper.cm.pyload_disconnect()
|
||||
helper.settings.setValue("revpicommander/geo", self.saveGeometry())
|
||||
|
||||
@@ -157,7 +160,7 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_cm_connection_disconnected(self):
|
||||
"""Connection of connection manager was disconnected."""
|
||||
pi.logger.debug("RevPiCommander.on_cm_connection_disconnected")
|
||||
log.debug("RevPiCommander.on_cm_connection_disconnected")
|
||||
|
||||
self._set_gui_control_states()
|
||||
self.txt_host.setVisible(True)
|
||||
@@ -167,7 +170,7 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_cm_connection_disconnecting(self):
|
||||
"""Connection of connection manager will now disconnect."""
|
||||
pi.logger.debug("RevPiCommander.on_cm_connection_disconnecting")
|
||||
log.debug("RevPiCommander.on_cm_connection_disconnecting")
|
||||
|
||||
# This will remove the widgets in the button functions
|
||||
self.btn_plc_debug.setChecked(False)
|
||||
@@ -184,7 +187,7 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_cm_connection_established(self):
|
||||
"""Connection manager established a new connection and loaded values."""
|
||||
pi.logger.debug("RevPiCommander.on_cm_connection_established")
|
||||
log.debug("RevPiCommander.on_cm_connection_established")
|
||||
|
||||
self._set_gui_control_states()
|
||||
if helper.cm.simulating:
|
||||
@@ -325,7 +328,7 @@ class RevPiCommander(QtWidgets.QMainWindow, Ui_win_revpicommander):
|
||||
).format(procimg_file, configrsc_file)
|
||||
)
|
||||
else:
|
||||
pi.logger.error("Can not start simulator")
|
||||
log.error("Can not start simulator")
|
||||
QtWidgets.QMessageBox.critical(
|
||||
self, self.tr("Can not start..."), self.tr(
|
||||
"Can not start the simulator! Maybe the piCtory file is corrupt "
|
||||
|
||||
@@ -7,16 +7,18 @@ __license__ = "GPLv2"
|
||||
import gzip
|
||||
import os
|
||||
from enum import IntEnum
|
||||
from logging import getLogger
|
||||
from xmlrpc.client import Binary
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from . import helper
|
||||
from . import proginit as pi
|
||||
from .backgroundworker import BackgroundWorker
|
||||
from .helper import WidgetData
|
||||
from .ui.files_ui import Ui_win_files
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class NodeType(IntEnum):
|
||||
FILE = 1000
|
||||
@@ -58,7 +60,7 @@ class UploadFiles(BackgroundWorker):
|
||||
default_value=False
|
||||
)
|
||||
except Exception as e:
|
||||
pi.logger.error(e)
|
||||
log.error(e)
|
||||
self.ec = -2
|
||||
return
|
||||
|
||||
@@ -99,10 +101,10 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
self.splitter.setSizes(list(map(int, helper.settings.value("files/splitter", [0, 0]))))
|
||||
|
||||
def __del__(self):
|
||||
pi.logger.debug("RevPiFiles.__del__")
|
||||
log.debug("RevPiFiles.__del__")
|
||||
|
||||
def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
|
||||
pi.logger.debug("RevPiFiles.closeEvent")
|
||||
log.debug("RevPiFiles.closeEvent")
|
||||
helper.settings.setValue("files/geo", self.saveGeometry())
|
||||
helper.settings.setValue("files/splitter", self.splitter.sizes())
|
||||
|
||||
@@ -197,7 +199,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
def _select_children(self, top_item: QtWidgets.QTreeWidgetItem, value: bool):
|
||||
"""Recursive select children from parent."""
|
||||
pi.logger.debug("RevPiFiles._select_children")
|
||||
log.debug("RevPiFiles._select_children")
|
||||
|
||||
for i in range(top_item.childCount()):
|
||||
item = top_item.child(i)
|
||||
@@ -213,7 +215,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
if item is None:
|
||||
return
|
||||
|
||||
pi.logger.debug("RevPiFiles.__itemSelectionChanged")
|
||||
log.debug("RevPiFiles.__itemSelectionChanged")
|
||||
|
||||
# Block while preselect other entries
|
||||
tree_view.blockSignals(True)
|
||||
@@ -296,7 +298,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
:param silent: Do not show message boxes
|
||||
"""
|
||||
pi.logger.debug("RevPiFiles._load_files_local")
|
||||
log.debug("RevPiFiles._load_files_local")
|
||||
|
||||
self.tree_files_counter = 0
|
||||
self.tree_files_local.blockSignals(True)
|
||||
@@ -316,7 +318,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
def file_list_local(self):
|
||||
"""Generate a file list with full path of selected entries."""
|
||||
pi.logger.debug("RevPiFiles.file_list_local")
|
||||
log.debug("RevPiFiles.file_list_local")
|
||||
lst = []
|
||||
for item in self.tree_files_local.selectedItems():
|
||||
if item.type() == NodeType.DIR:
|
||||
@@ -337,7 +339,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
:param silent: Do not show message boxes
|
||||
"""
|
||||
pi.logger.debug("RevPiFiles._load_files_revpi")
|
||||
log.debug("RevPiFiles._load_files_revpi")
|
||||
|
||||
self.tree_files_revpi.blockSignals(True)
|
||||
self.tree_files_revpi.clear()
|
||||
@@ -421,7 +423,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
def file_list_revpi(self):
|
||||
"""Generate a file list with full path of selected entries."""
|
||||
pi.logger.debug("RevPiFiles.file_list_revpi")
|
||||
log.debug("RevPiFiles.file_list_revpi")
|
||||
lst = []
|
||||
for item in self.tree_files_revpi.selectedItems():
|
||||
if item.type() == NodeType.DIR:
|
||||
@@ -435,13 +437,13 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_all_clicked(self):
|
||||
pi.logger.debug("RevPiFiles.on_btn_all_clicked")
|
||||
log.debug("RevPiFiles.on_btn_all_clicked")
|
||||
self._do_my_job(True)
|
||||
self.file_list_revpi()
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_select_local_clicked(self):
|
||||
pi.logger.debug("RevPiFiles.on_btn_select_clicked")
|
||||
log.debug("RevPiFiles.on_btn_select_clicked")
|
||||
|
||||
diag_folder = QtWidgets.QFileDialog(
|
||||
self, self.tr("Select folder..."),
|
||||
@@ -472,25 +474,25 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_refresh_local_clicked(self):
|
||||
pi.logger.debug("RevPiFiles.on_btn_refresh_clicked")
|
||||
log.debug("RevPiFiles.on_btn_refresh_clicked")
|
||||
self._load_files_local(False)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_refresh_revpi_clicked(self):
|
||||
pi.logger.debug("RevPiFiles.on_btn_refresh_revpi_clicked")
|
||||
log.debug("RevPiFiles.on_btn_refresh_revpi_clicked")
|
||||
self._load_files_revpi(False)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_to_right_clicked(self):
|
||||
"""Upload selected files to revolution pi."""
|
||||
pi.logger.debug("RevPiFiles.on_btn_to_right_clicked")
|
||||
log.debug("RevPiFiles.on_btn_to_right_clicked")
|
||||
self._do_my_job(False)
|
||||
self._load_files_revpi(True)
|
||||
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_to_left_clicked(self):
|
||||
"""Download selected file."""
|
||||
pi.logger.debug("RevPiFiles.on_btn_to_left_clicked")
|
||||
log.debug("RevPiFiles.on_btn_to_left_clicked")
|
||||
|
||||
override = None
|
||||
for item in self.tree_files_revpi.selectedItems():
|
||||
@@ -524,7 +526,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
override = rc_diag == QtWidgets.QMessageBox.Yes
|
||||
|
||||
if os.path.exists(file_name) and not override:
|
||||
pi.logger.debug("Skip existing file '{0}'".format(file_name))
|
||||
log.debug("Skip existing file '{0}'".format(file_name))
|
||||
continue
|
||||
|
||||
os.makedirs(os.path.dirname(file_name), exist_ok=True)
|
||||
@@ -537,7 +539,7 @@ class RevPiFiles(QtWidgets.QMainWindow, Ui_win_files):
|
||||
@QtCore.pyqtSlot()
|
||||
def on_btn_delete_revpi_clicked(self):
|
||||
"""Remove selected files from working directory on revolution pi."""
|
||||
pi.logger.debug("RevPiFiles.btn_delete_revpi_clicked")
|
||||
log.debug("RevPiFiles.btn_delete_revpi_clicked")
|
||||
|
||||
lst_delete = []
|
||||
for item in self.tree_files_revpi.selectedItems():
|
||||
|
||||
@@ -5,13 +5,15 @@ __copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
from enum import IntEnum
|
||||
from logging import getLogger
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from . import helper
|
||||
from . import proginit as pi
|
||||
from .ui.revpilogfile_ui import Ui_win_revpilogfile
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class LogType(IntEnum):
|
||||
NONE = 0
|
||||
@@ -60,7 +62,7 @@ class DataThread(QtCore.QThread):
|
||||
# The log file was rotated by log rotate on the Revolution Pi
|
||||
start_position = 0
|
||||
eof = False
|
||||
pi.logger.info("RevPi started a new log file.")
|
||||
log.info("RevPi started a new log file.")
|
||||
|
||||
elif buff_log:
|
||||
start_position += len(buff_log)
|
||||
@@ -71,16 +73,16 @@ class DataThread(QtCore.QThread):
|
||||
|
||||
def pause(self):
|
||||
"""Stop checking new log lines, but leave thread alive."""
|
||||
pi.logger.debug("DataThread.pause")
|
||||
log.debug("DataThread.pause")
|
||||
self._paused = True
|
||||
|
||||
def resume(self):
|
||||
"""Start checking for new log lines."""
|
||||
pi.logger.debug("DataThread.resume")
|
||||
log.debug("DataThread.resume")
|
||||
self._paused = False
|
||||
|
||||
def run(self) -> None:
|
||||
pi.logger.debug("DataThread.run")
|
||||
log.debug("DataThread.run")
|
||||
|
||||
while not self.isInterruptionRequested():
|
||||
eof_app = False
|
||||
@@ -191,7 +193,7 @@ class RevPiLogfile(QtWidgets.QMainWindow, Ui_win_revpilogfile):
|
||||
|
||||
@QtCore.pyqtSlot(LogType, bool, str)
|
||||
def on_line_logged(self, log_type: LogType, success: bool, text: str):
|
||||
pi.logger.debug("RevPiLogfile.on_line_logged")
|
||||
log.debug("RevPiLogfile.on_line_logged")
|
||||
|
||||
if log_type == LogType.APP:
|
||||
textwidget = self.txt_app
|
||||
|
||||
@@ -4,14 +4,17 @@ __author__ = "Sven Sager"
|
||||
__copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
from logging import getLogger
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from . import helper
|
||||
from . import proginit as pi
|
||||
from .aclmanager import AclManager
|
||||
from .mqttmanager import MqttManager
|
||||
from .ui.revpioption_ui import Ui_diag_options
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class RevPiOption(QtWidgets.QDialog, Ui_diag_options):
|
||||
"""Set options of RevPiPyLoad."""
|
||||
@@ -110,7 +113,7 @@ class RevPiOption(QtWidgets.QDialog, Ui_diag_options):
|
||||
|
||||
def _load_settings(self):
|
||||
"""Load values to GUI widgets."""
|
||||
pi.logger.debug("RevPiOption._load_settings")
|
||||
log.debug("RevPiOption._load_settings")
|
||||
|
||||
self.mrk_xml_ask = True
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ __copyright__ = "Copyright (C) 2023 Sven Sager"
|
||||
__license__ = "GPLv2"
|
||||
|
||||
from enum import IntEnum
|
||||
from logging import getLogger
|
||||
|
||||
import keyring
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
@@ -15,6 +16,8 @@ from . import proginit as pi
|
||||
from .helper import RevPiSettings, WidgetData
|
||||
from .ui.revpiplclist_ui import Ui_diag_connections
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class NodeType(IntEnum):
|
||||
CON = 1000
|
||||
@@ -58,7 +61,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections):
|
||||
|
||||
def _load_settings(self):
|
||||
"""Load values to GUI widgets."""
|
||||
pi.logger.debug("RevPiPlcList._load_settings")
|
||||
log.debug("RevPiPlcList._load_settings")
|
||||
|
||||
self.tre_connections.clear()
|
||||
|
||||
@@ -95,7 +98,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections):
|
||||
self._edit_state()
|
||||
|
||||
def accept(self) -> None:
|
||||
pi.logger.debug("RevPiPlcList.accept")
|
||||
log.debug("RevPiPlcList.accept")
|
||||
|
||||
for internal_id, ssh_user in self._keyring_cleanup_id_user:
|
||||
service_name = "{0}.{1}_{2}".format(
|
||||
@@ -107,7 +110,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections):
|
||||
# Remove information from os keyring, which we collected on_btn_delete_clicked
|
||||
keyring.delete_password(service_name, ssh_user)
|
||||
except KeyringError as e:
|
||||
pi.logger.error(e)
|
||||
log.error(e)
|
||||
|
||||
helper.settings.remove("connections")
|
||||
|
||||
@@ -127,7 +130,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections):
|
||||
super().accept()
|
||||
|
||||
def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
|
||||
pi.logger.debug("RevPiPlcList.closeEvent")
|
||||
log.debug("RevPiPlcList.closeEvent")
|
||||
if self.changes:
|
||||
ask = QtWidgets.QMessageBox.question(
|
||||
self, self.tr("Question"), self.tr(
|
||||
@@ -165,7 +168,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections):
|
||||
|
||||
def _edit_state(self):
|
||||
"""Set enabled status of all controls, depending on selected item."""
|
||||
pi.logger.debug("RevPiPlcList._edit_state")
|
||||
log.debug("RevPiPlcList._edit_state")
|
||||
|
||||
item = self.tre_connections.currentItem()
|
||||
if item is None:
|
||||
@@ -409,7 +412,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections):
|
||||
|
||||
@QtCore.pyqtSlot(str)
|
||||
def on_cbb_folder_currentIndexChanged(self, text: str):
|
||||
pi.logger.debug("RevPiPlcList.on_cbb_folder_currentIndexChanged({0})".format(text))
|
||||
log.debug("RevPiPlcList.on_cbb_folder_currentIndexChanged({0})".format(text))
|
||||
|
||||
if self.__current_item.type() == NodeType.CON:
|
||||
new_dir_node = self._get_folder_item(text)
|
||||
@@ -443,7 +446,7 @@ class RevPiPlcList(QtWidgets.QDialog, Ui_diag_connections):
|
||||
|
||||
@QtCore.pyqtSlot(str)
|
||||
def on_cbb_folder_editTextChanged(self, text: str):
|
||||
pi.logger.debug("RevPiPlcList.on_cbb_folder_editTextChanged({0})".format(text))
|
||||
log.debug("RevPiPlcList.on_cbb_folder_editTextChanged({0})".format(text))
|
||||
|
||||
if self.__current_item.type() == NodeType.DIR and self.__current_item.text(0) != text:
|
||||
# We just have to rename the dir node
|
||||
|
||||
@@ -8,6 +8,7 @@ import gzip
|
||||
import os
|
||||
import tarfile
|
||||
import zipfile
|
||||
from logging import getLogger
|
||||
from shutil import rmtree
|
||||
from tempfile import mkdtemp
|
||||
from xmlrpc.client import Binary
|
||||
@@ -15,9 +16,10 @@ from xmlrpc.client import Binary
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from . import helper
|
||||
from . import proginit as pi
|
||||
from .ui.revpiprogram_ui import Ui_diag_program
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class RevPiProgram(QtWidgets.QDialog, Ui_diag_program):
|
||||
"""Program options of RevPiPyLoad."""
|
||||
@@ -67,7 +69,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program):
|
||||
|
||||
def _load_settings(self, files_only=False):
|
||||
"""Load values to GUI widgets."""
|
||||
pi.logger.debug("RevPiProgram._load_settings")
|
||||
log.debug("RevPiProgram._load_settings")
|
||||
|
||||
if files_only:
|
||||
mrk_program = self.cbb_plcprogram.currentText()
|
||||
@@ -88,7 +90,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program):
|
||||
is_in_list = True
|
||||
|
||||
if not is_in_list:
|
||||
pi.logger.warning("File {0} is not in list".format(mrk_program or self.dc.get("plcprogram", "")))
|
||||
log.warning("File {0} is not in list".format(mrk_program or self.dc.get("plcprogram", "")))
|
||||
|
||||
if files_only:
|
||||
self.cbb_plcprogram.setCurrentText(mrk_program)
|
||||
@@ -382,7 +384,7 @@ class RevPiProgram(QtWidgets.QDialog, Ui_diag_program):
|
||||
fh.close()
|
||||
|
||||
except Exception as e:
|
||||
pi.logger.error(e)
|
||||
log.error(e)
|
||||
QtWidgets.QMessageBox.critical(
|
||||
self, self.tr("Error"), self.tr(
|
||||
"Coud not save the archive or extract the files!\n"
|
||||
|
||||
@@ -12,7 +12,7 @@ from keyring.errors import KeyringError
|
||||
|
||||
from .ui.sshauth_ui import Ui_diag_sshauth
|
||||
|
||||
log = getLogger()
|
||||
log = getLogger(__name__)
|
||||
|
||||
|
||||
class SSHAuth(QtWidgets.QDialog, Ui_diag_sshauth):
|
||||
|
||||
Reference in New Issue
Block a user