refactor: Using module based logger and not root logger from proginit

This commit is contained in:
2023-10-11 21:01:49 +02:00
parent 32ee413d9b
commit 8c2f66b2b5
13 changed files with 124 additions and 95 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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 "

View File

@@ -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():

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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):