From 0b2f9834ea15df3be3c365ac0c2da0ffb0c796e6 Mon Sep 17 00:00:00 2001 From: Artem30801 Date: Tue, 21 Jan 2020 11:28:12 +0300 Subject: [PATCH 1/3] Revert logger to logging calls --- Server/server_qt.py | 63 +++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 40 deletions(-) diff --git a/Server/server_qt.py b/Server/server_qt.py index 8ac8ee2..8854489 100644 --- a/Server/server_qt.py +++ b/Server/server_qt.py @@ -29,23 +29,6 @@ from copter_table import CopterTableWidget from visual_land_dialog import VisualLandDialog from config_editor_models import ConfigDialog -logging.basicConfig( - level=logging.DEBUG, - format="%(asctime)s [%(name)-7.7s] [%(threadName)-19.19s] [%(levelname)-7.7s] %(message)s", - handlers=[ - logging.FileHandler("server_logs/{}.log".format(now)), - logging.StreamHandler(sys.stdout) - ]) - -handler = logging.StreamHandler(sys.stdout) -handler.setLevel(logging.DEBUG) -formatter = logging.Formatter("%(asctime)s [%(name)-7.7s] [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s") -handler.setFormatter(formatter) - -logger = logging.getLogger(__name__) -logger.setLevel(logging.DEBUG) -logger.addHandler(handler) - def multi_glob(*patterns): return itertools.chain.from_iterable(glob.iglob(pattern) for pattern in patterns) @@ -65,10 +48,10 @@ def confirmation_required(text="Are you sure?", label="Confirm operation?"): QMessageBox.Yes | QMessageBox.No, QMessageBox.No ) if reply == QMessageBox.Yes: - logger.debug("Dialog accepted") + logging.debug("Dialog accepted") return f(*args, **kwargs) - logger.debug("Dialog declined") + logging.debug("Dialog declined") return wrapper @@ -205,26 +188,26 @@ class MainWindow(QtWidgets.QMainWindow): return list(self.iterate_selected(lambda copter: copter.client.send_message(command, command_args))) def new_client_connected(self, client: Client): - logger.debug("Added client {}".format(client)) + logging.debug("Added client {}".format(client)) self.ui.copter_table.add_client(copter_id=client.copter_id, client=client) def client_connection_changed(self, client: Client): - logger.debug("Connection {} changed {}".format(client, client.connected)) + logging.debug("Connection {} changed {}".format(client, client.connected)) row_data = self.model.get_row_by_attr("client", client) if row_data is None: - logger.error("No row for client presented") + logging.error("No row for client presented") return if self.server.config.table_remove_disconnected and (not client.connected): client.remove() self.ui.copter_table.remove_client_data(row_data) - logger.debug("Removing from table") + logging.debug("Removing from table") else: row_num = self.model.get_row_index(row_data) if row_num is not None: self.ui.copter_table.update_data(row_num, 0, client.connected, table.ModelStateRole) - logger.debug("Client status updated") + logging.debug("Client status updated") @pyqtSlot() def selfcheck_selected(self): @@ -250,7 +233,7 @@ class MainWindow(QtWidgets.QMainWindow): for key, value in telems.items(): col = cols_dict.get(key, None) if col is None: - logger.error("No column {} present!".format(key)) + logging.error("No column {} present!".format(key)) continue row_data = self.model.get_row_by_attr("client", client) @@ -264,18 +247,18 @@ class MainWindow(QtWidgets.QMainWindow): copter.client.remove() if not self.server.config.table_remove_disconnected: self.ui.copter_table.remove_client_data(copter) - logger.info("Client removed from table!") + logging.info("Client removed from table!") @pyqtSlot() @confirmation_required("This operation will takeoff selected copters with delay and start animation. Proceed?") def send_start_time_selected(self): time_now = server.time_now() dt = self.ui.start_delay_spin.value() - logger.info('Wait {} seconds to start animation'.format(dt)) + logging.info('Wait {} seconds to start animation'.format(dt)) if self.ui.music_checkbox.isChecked(): music_dt = self.ui.music_delay_spin.value() asyncio.ensure_future(self.play_music_at_time(music_dt + time_now), loop=loop) - logger.info('Wait {} seconds to play music'.format(music_dt)) + logging.info('Wait {} seconds to play music'.format(music_dt)) # self.selfcheck_selected() for copter in filter(self.model.checks.all_checks, self.model.user_selected()): server.send_starttime(copter.client, dt + time_now) @@ -346,7 +329,7 @@ class MainWindow(QtWidgets.QMainWindow): for num, file in enumerate(files): filepath, filename = os.path.split(file) - logger.info("Preparing file for sending: {} {}".format(filepath, filename)) + logging.info("Preparing file for sending: {} {}".format(filepath, filename)) if match_id: name = os.path.splitext(filename)[0] @@ -355,10 +338,10 @@ class MainWindow(QtWidgets.QMainWindow): to_send = copters if not to_send: - logger.error(f"No copters to send file {filename} to") + logging.error(f"No copters to send file {filename} to") continue - logger.info(f"Sending file {filename} to clients: {to_send}") + logging.info(f"Sending file {filename} to clients: {to_send}") filename = client_filename.format(num, filename) or filename for copter in to_send: @@ -440,7 +423,7 @@ class MainWindow(QtWidgets.QMainWindow): @pyqtSlot() def send_fcu_parameters(self): def request_callback(client, value): - logger.info("Send parameters to {} success: {}".format(client.copter_id, value)) + logging.info("Send parameters to {} success: {}".format(client.copter_id, value)) def callback(copter): copter.client.get_response("load_params", request_callback) @@ -462,7 +445,7 @@ class MainWindow(QtWidgets.QMainWindow): config = cfg.ConfigManager() config.load_only_config(path) data = config.full_dict - logger.info(f"Loaded config from {path}") + logging.info(f"Loaded config from {path}") copters = self.model.user_selected() for copter in copters: @@ -489,10 +472,10 @@ class MainWindow(QtWidgets.QMainWindow): @pyqtSlot() def play_music(self): if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.InvalidMedia: - logger.info("Can't play media") + logging.info("Can't play media") return if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.NoMedia: - logger.info("No media file") + logging.info("No media file") return if self.player.state() == QtMultimedia.QMediaPlayer.StoppedState or \ @@ -506,24 +489,24 @@ class MainWindow(QtWidgets.QMainWindow): @pyqtSlot() def stop_music(self): if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.InvalidMedia: - logger.error("Can't stop media") + logging.error("Can't stop media") return if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.NoMedia: - logger.error("No media file") + logging.error("No media file") return self.player.stop() @asyncio.coroutine def play_music_at_time(self, t): if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.InvalidMedia: - logger.error("Can't play media") + logging.error("Can't play media") return if self.player.mediaStatus() == QtMultimedia.QMediaPlayer.NoMedia: - logger.error("No media file") + logging.error("No media file") return self.player.stop() yield from asyncio.sleep(t - time.time()) - logger.info("Playing music") + logging.info("Playing music") self.player.play() @pyqtSlot() From 2a1e16c61223888c3a74d0546717e8cf27f3a651 Mon Sep 17 00:00:00 2001 From: Artem30801 Date: Tue, 21 Jan 2020 15:26:29 +0300 Subject: [PATCH 2/3] Debug code for messaging lib --- messaging_lib.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/messaging_lib.py b/messaging_lib.py index ccb6852..dab54f5 100644 --- a/messaging_lib.py +++ b/messaging_lib.py @@ -8,6 +8,7 @@ import random import logging import threading import collections +import traceback from contextlib import closing @@ -392,9 +393,15 @@ class ConnectionManager(object): logger.debug( "Request {} successfully closed with value {}".format(request, message.content["value"]) ) + print(self, "CALLBACK", request.callback, "VAL", value, "ARGS",request.callback_args, request.callback_kwargs) + try: + request.callback(self, value, *request.callback_args, **request.callback_kwargs) + print(1) + except Exception as e: + logging.error("Error during callback call of request") # TODO more info + traceback.print_exc() + print(e) - f = request.callback - f(self, value, *request.callback_args, **request.callback_kwargs) else: logger.warning("Unexpected response!") From 089d3905870791608ecfa084e16bb7b18bf0bf19 Mon Sep 17 00:00:00 2001 From: Artem30801 Date: Tue, 21 Jan 2020 15:28:57 +0300 Subject: [PATCH 3/3] Fix for copter config dialog call --- Server/config_editor_models.py | 8 ++++++++ Server/copter_table.py | 14 ++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Server/config_editor_models.py b/Server/config_editor_models.py index 4690eb6..cf5dec2 100644 --- a/Server/config_editor_models.py +++ b/Server/config_editor_models.py @@ -686,11 +686,14 @@ class ConfigTreeWidget(QTreeView): class ConfigDialog(QtWidgets.QDialog): + copter_editor_signal = QtCore.pyqtSignal(object, object) + def __init__(self, parent=None): super(ConfigDialog, self).__init__(parent) self.ui = config_editor.Ui_config_dialog() self.model = ConfigModel(widget=self) self.setupUi() + self.copter_editor_signal.connect(self._call_copter_dialog) def setupModel(self, data, pure_dict=False, convert_types=False): if pure_dict: @@ -749,6 +752,11 @@ class ConfigDialog(QtWidgets.QDialog): return True def call_copter_dialog(self, client, value): + self.copter_editor_signal.emit(client, value) + + @pyqtSlot(object, object) + def _call_copter_dialog(self, client, value): + logging.info("Opening dialog") config_dict, spec_dict = value["config"], value["configspec"] cfg = config.ConfigManager() cfg.load_from_dict(config_dict, spec_dict) diff --git a/Server/copter_table.py b/Server/copter_table.py index 0d89830..abb22c2 100644 --- a/Server/copter_table.py +++ b/Server/copter_table.py @@ -14,8 +14,6 @@ import copter_table_models as table class CopterTableWidget(QTableView): - config_dialog_signal = QtCore.pyqtSignal(object, object) - def __init__(self, model, data_model=table.StatedCopterData): QTableView.__init__(self) @@ -45,8 +43,6 @@ class CopterTableWidget(QTableView): self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.open_menu) - self.config_dialog_signal.connect(lambda x: x) - # Adjust properties self.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) self.resizeColumnsToContents() @@ -121,14 +117,8 @@ class CopterTableWidget(QTableView): @pyqtSlot() def edit_config(self, copter): - try: - self.config_dialog_signal.disconnect() - except (TypeError, RuntimeError) as error: - logging.error(f"Disconnection of signal failed: {error}") - else: - call = ConfigDialog().call_copter_dialog - self.config_dialog_signal.connect(call) - copter.client.get_response("config", self.config_dialog_signal.emit) + dialog = ConfigDialog() + copter.client.get_response("config", dialog.call_copter_dialog) # def _selfcheck_shortener(self, data): # TODO!!! # shortened = []