diff --git a/src/revpicommander/avahisearch.py b/src/revpicommander/avahisearch.py index 9b7f6f4..6c93953 100644 --- a/src/revpicommander/avahisearch.py +++ b/src/revpicommander/avahisearch.py @@ -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 diff --git a/src/revpicommander/backgroundworker.py b/src/revpicommander/backgroundworker.py index e1c599b..5e55311 100644 --- a/src/revpicommander/backgroundworker.py +++ b/src/revpicommander/backgroundworker.py @@ -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): diff --git a/src/revpicommander/debugcontrol.py b/src/revpicommander/debugcontrol.py index a31254f..bfccec0 100644 --- a/src/revpicommander/debugcontrol.py +++ b/src/revpicommander/debugcontrol.py @@ -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 diff --git a/src/revpicommander/debugios.py b/src/revpicommander/debugios.py index 43a8797..7eab788 100644 --- a/src/revpicommander/debugios.py +++ b/src/revpicommander/debugios.py @@ -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() diff --git a/src/revpicommander/helper.py b/src/revpicommander/helper.py index 545008a..1c1cfe1 100644 --- a/src/revpicommander/helper.py +++ b/src/revpicommander/helper.py @@ -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() diff --git a/src/revpicommander/mqttmanager.py b/src/revpicommander/mqttmanager.py index c032884..c8c5287 100644 --- a/src/revpicommander/mqttmanager.py +++ b/src/revpicommander/mqttmanager.py @@ -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 diff --git a/src/revpicommander/revpicommander.py b/src/revpicommander/revpicommander.py index a4033a6..d755710 100644 --- a/src/revpicommander/revpicommander.py +++ b/src/revpicommander/revpicommander.py @@ -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 " diff --git a/src/revpicommander/revpifiles.py b/src/revpicommander/revpifiles.py index 038f073..fa8e98a 100644 --- a/src/revpicommander/revpifiles.py +++ b/src/revpicommander/revpifiles.py @@ -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(): diff --git a/src/revpicommander/revpilogfile.py b/src/revpicommander/revpilogfile.py index c7f85e7..14b8e14 100644 --- a/src/revpicommander/revpilogfile.py +++ b/src/revpicommander/revpilogfile.py @@ -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 diff --git a/src/revpicommander/revpioption.py b/src/revpicommander/revpioption.py index ce878d2..69f7543 100644 --- a/src/revpicommander/revpioption.py +++ b/src/revpicommander/revpioption.py @@ -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 diff --git a/src/revpicommander/revpiplclist.py b/src/revpicommander/revpiplclist.py index 649296f..977b5de 100644 --- a/src/revpicommander/revpiplclist.py +++ b/src/revpicommander/revpiplclist.py @@ -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 diff --git a/src/revpicommander/revpiprogram.py b/src/revpicommander/revpiprogram.py index 14af78e..3fcca6c 100644 --- a/src/revpicommander/revpiprogram.py +++ b/src/revpicommander/revpiprogram.py @@ -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" diff --git a/src/revpicommander/sshauth.py b/src/revpicommander/sshauth.py index c26475e..8598d3c 100644 --- a/src/revpicommander/sshauth.py +++ b/src/revpicommander/sshauth.py @@ -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):