From 899ca6d394917887478650129bd7b70d5bfca54a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marta=20Marczykowska-G=C3=B3recka?= Date: Mon, 8 Jan 2018 03:06:42 +0100 Subject: [PATCH] Pylint corrections Removed errors discovered by pylint, or told it to be quiet when needed. --- ci/pylintrc | 2 +- qubesmanager/log_dialog.py | 11 ++-- qubesmanager/qube_manager.py | 117 +++++++++++++--------------------- qubesmanager/table_widgets.py | 62 ++++++++---------- 4 files changed, 79 insertions(+), 113 deletions(-) diff --git a/ci/pylintrc b/ci/pylintrc index d79fa35..85eefb5 100644 --- a/ci/pylintrc +++ b/ci/pylintrc @@ -87,7 +87,7 @@ variable-rgx=[a-z_][a-z0-9_]{2,30}$ inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ # Good variable names which should always be accepted, separated by a comma -good-names=e,i,j,k,m,p,v,ex,Run,_,log,vm,ok +good-names=e,i,j,k,m,p,v,ex,Run,_,log,vm,ok,ip # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata diff --git a/qubesmanager/log_dialog.py b/qubesmanager/log_dialog.py index 23af4b1..af96abf 100644 --- a/qubesmanager/log_dialog.py +++ b/qubesmanager/log_dialog.py @@ -20,10 +20,10 @@ # # -from PyQt4 import QtCore -from PyQt4 import QtGui +from PyQt4 import QtCore # pylint: disable=import-error +from PyQt4 import QtGui # pylint: disable=import-error -from . import ui_logdlg +from . import ui_logdlg # pylint: disable=no-name-in-module from . import clipboard # Display only this size of log @@ -31,6 +31,7 @@ LOG_DISPLAY_SIZE = 1024*1024 class LogDialog(ui_logdlg.Ui_LogDialog, QtGui.QDialog): + # pylint: disable=too-few-public-methods def __init__(self, app, log_path, parent=None): super(LogDialog, self).__init__(parent) @@ -43,7 +44,7 @@ class LogDialog(ui_logdlg.Ui_LogDialog, QtGui.QDialog): self.connect(self.copy_to_qubes_clipboard, QtCore.SIGNAL("clicked()"), - self.copy_to_qubes_clipboard_triggered) + self.copy_to_clipboard_triggered) self.__init_log_text__() @@ -61,5 +62,5 @@ class LogDialog(ui_logdlg.Ui_LogDialog, QtGui.QDialog): log.close() self.log_text.setPlainText(self.displayed_text) - def copy_to_qubes_clipboard_triggered(self): + def copy_to_clipboard_triggered(self): clipboard.copy_text_to_qubes_clipboard(self.displayed_text) diff --git a/qubesmanager/qube_manager.py b/qubesmanager/qube_manager.py index cfa0127..9942977 100755 --- a/qubesmanager/qube_manager.py +++ b/qubesmanager/qube_manager.py @@ -31,11 +31,12 @@ from datetime import datetime, timedelta import traceback from qubesadmin import Qubes +from qubesadmin import exc -from PyQt4 import QtGui -from PyQt4 import QtCore +from PyQt4 import QtGui # pylint: disable=import-error +from PyQt4 import QtCore # pylint: disable=import-error -from . import ui_qubemanager +from . import ui_qubemanager # pylint: disable=no-name-in-module from . import thread_monitor from . import table_widgets from . import settings @@ -48,23 +49,17 @@ import threading from qubesmanager.about import AboutDialog -class QMVmState: - ErrorMsg = 1 - AudioRecAvailable = 2 - AudioRecAllowed = 3 - - class SearchBox(QtGui.QLineEdit): def __init__(self, parent=None): super(SearchBox, self).__init__(parent) self.focusing = False - def focusInEvent(self, e): + def focusInEvent(self, e): # pylint: disable=invalid-name super(SearchBox, self).focusInEvent(e) self.selectAll() self.focusing = True - def mousePressEvent(self, e): + def mousePressEvent(self, e): # pylint: disable=invalid-name super(SearchBox, self).mousePressEvent(e) if self.focusing: self.selectAll() @@ -72,6 +67,7 @@ class SearchBox(QtGui.QLineEdit): class VmRowInTable(object): + # pylint: disable=too-few-public-methods def __init__(self, vm, row_no, table): self.vm = vm @@ -86,13 +82,13 @@ class VmRowInTable(object): table.setCellWidget(row_no, VmManagerWindow.columns_indices['Type'], self.type_widget) table.setItem(row_no, VmManagerWindow.columns_indices['Type'], - self.type_widget.tableItem) + self.type_widget.table_item) self.label_widget = table_widgets.VmLabelWidget(vm) table.setCellWidget(row_no, VmManagerWindow.columns_indices['Label'], self.label_widget) table.setItem(row_no, VmManagerWindow.columns_indices['Label'], - self.label_widget.tableItem) + self.label_widget.table_item) self.name_widget = table_widgets.VmNameItem(vm) table.setItem(row_no, VmManagerWindow.columns_indices['Name'], @@ -102,7 +98,7 @@ class VmRowInTable(object): table.setCellWidget(row_no, VmManagerWindow.columns_indices['State'], self.info_widget) table.setItem(row_no, VmManagerWindow.columns_indices['State'], - self.info_widget.tableItem) + self.info_widget.table_item) self.template_widget = table_widgets.VmTemplateItem(vm) table.setItem(row_no, VmManagerWindow.columns_indices['Template'], @@ -213,6 +209,7 @@ class VmShutdownMonitor(QtCore.QObject): class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): + # pylint: disable=too-many-instance-attributes row_height = 30 column_width = 200 min_visible_rows = 10 @@ -233,6 +230,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): } def __init__(self, qubes_app, qt_app, parent=None): + # pylint: disable=unused-argument super(VmManagerWindow, self).__init__() self.setupUi(self) self.toolbar = self.toolBar @@ -259,9 +257,6 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): self.vms_in_table = {} self.reload_table = False - self.vm_errors = {} - self.vm_rec = {} - self.frame_width = 0 self.frame_height = 0 @@ -343,7 +338,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): self.connect( self.table.horizontalHeader(), QtCore.SIGNAL("sortIndicatorChanged(int, Qt::SortOrder)"), - self.sortIndicatorChanged) + self.sort_indicator_changed) self.connect(self.table, QtCore.SIGNAL("customContextMenuRequested(const QPoint&)"), self.open_context_menu) @@ -381,11 +376,11 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): def load_manager_settings(self): # visible columns - for col in self.columns_indices.keys(): + for col in self.columns_indices: col_no = self.columns_indices[col] visible = self.manager_settings.value( 'columns/%s' % col, - defaultValue=not self.table.isColumnHidden(col_no)) + defaultValue="true") self.columns_actions[col_no].setChecked(visible == "true") self.sort_by_column = str( @@ -393,8 +388,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): defaultValue=self.sort_by_column)) self.sort_order = QtCore.Qt.SortOrder( self.manager_settings.value("view/sort_order", - defaultValue=self.sort_order)[ - 0]) + defaultValue=self.sort_order)) self.table.sortItems(self.columns_indices[self.sort_by_column], self.sort_order) if not self.manager_settings.value("view/menubar_visible", @@ -478,13 +472,8 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): self.table_selection_changed() # noinspection PyPep8Naming - @QtCore.pyqtSlot(bool, str) - def recAllowedChanged(self, state, vmname): - self.vm_rec[str(vmname)] = bool(state) - - # noinspection PyPep8Naming - def sortIndicatorChanged(self, column, order): - self.sort_by_column = [name for name in self.columns_indices.keys() if + def sort_indicator_changed(self, column, order): + self.sort_by_column = [name for name in self.columns_indices if self.columns_indices[name] == column][0] self.sort_order = order if self.settings_loaded: @@ -546,29 +535,9 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): self.action_run_command_in_vm.setEnabled(False) self.action_set_keyboard_layout.setEnabled(False) - def set_error(self, qid, message): - for vm in self.vms_list: - if vm.qid == qid: - vm.qubes_manager_state[QMVmState.ErrorMsg] = message - # Store error in separate dict to make it immune to VM list reload - self.vm_errors[qid] = str(message) - - def clear_error(self, qid): - self.vm_errors.pop(qid, None) - for vm in self.vms_list: - if vm.qid == qid: - vm.qubes_manager_state[QMVmState.ErrorMsg] = None - - def clear_error_exact(self, qid, message): - for vm in self.vms_list: - if vm.qid == qid: - if vm.qubes_manager_state[QMVmState.ErrorMsg] == message: - vm.qubes_manager_state[QMVmState.ErrorMsg] = None - self.vm_errors.pop(qid, None) - # noinspection PyArgumentList @QtCore.pyqtSlot(name='on_action_createvm_triggered') - def action_createvm_triggered(self): + def action_createvm_triggered(self): # pylint: disable=no-self-use subprocess.check_call('qubes-vm-create') def get_selected_vm(self): @@ -665,7 +634,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): def do_remove_vm(vm, qubes_app, t_monitor): try: del qubes_app.domains[vm.name] - except Exception as ex: + except exc.QubesException as ex: t_monitor.set_error_msg(str(ex)) t_monitor.set_finished() @@ -721,7 +690,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): dst_vm = None try: dst_vm = qubes_app.clone_vm(src_vm, dst_name) - except Exception as ex: + except exc.QubesException as ex: t_monitor.set_error_msg(str(ex)) if dst_vm: pass @@ -735,7 +704,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): if vm.get_power_state() in ["Paused", "Suspended"]: try: vm.unpause() - except Exception as ex: + except exc.QubesException as ex: QtGui.QMessageBox.warning( None, self.tr("Error unpausing Qube!"), self.tr("ERROR: {0}").format(ex)) @@ -758,9 +727,10 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): time.sleep(0.1) if not t_monitor.success: - self.set_error( - vm.qid, - self.tr("Error starting Qube: %s") % t_monitor.error_msg) + QtGui.QMessageBox.warning( + None, + self.tr("Error starting Qube!"), + self.tr("ERROR: {0}").format(t_monitor.error_msg)) self.update_table() @@ -768,7 +738,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): def do_start_vm(vm, t_monitor): try: vm.start() - except Exception as ex: + except exc.QubesException as ex: t_monitor.set_error_msg(str(ex)) t_monitor.set_finished() return @@ -779,6 +749,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): @QtCore.pyqtSlot(name='on_action_startvm_tools_install_triggered') # TODO: replace with boot from device def action_startvm_tools_install_triggered(self): + # pylint: disable=invalid-name pass @QtCore.pyqtSlot(name='on_action_pausevm_triggered') @@ -788,7 +759,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): try: vm.pause() self.update_table() - except Exception as ex: + except exc.QubesException as ex: QtGui.QMessageBox.warning( None, self.tr("Error pausing Qube!"), @@ -819,7 +790,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): check_time=vm_restart_check_timeout, and_restart=False): try: vm.shutdown() - except Exception as ex: + except exc.QubesException as ex: QtGui.QMessageBox.warning( None, self.tr("Error shutting down Qube!"), @@ -873,7 +844,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): if reply == QtGui.QMessageBox.Yes: try: vm.force_shutdown() - except Exception as ex: + except exc.QubesException as ex: QtGui.QMessageBox.critical( None, self.tr("Error while killing Qube!"), self.tr( @@ -961,7 +932,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): vm.start() vm.run_service("qubes.InstallUpdatesGUI", user="root", wait=False) - except Exception as ex: + except (ChildProcessError, exc.QubesException) as ex: t_monitor.set_error_msg(str(ex)) t_monitor.set_finished() return @@ -970,6 +941,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): # noinspection PyArgumentList @QtCore.pyqtSlot(name='on_action_run_command_in_vm_triggered') def action_run_command_in_vm_triggered(self): + # pylint: disable=invalid-name vm = self.get_selected_vm() (command_to_run, ok) = QtGui.QInputDialog.getText( @@ -997,13 +969,14 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): def do_run_command_in_vm(vm, command_to_run, t_monitor): try: vm.run(command_to_run) - except Exception as ex: + except (ChildProcessError, exc.QubesException) as ex: t_monitor.set_error_msg(str(ex)) t_monitor.set_finished() # noinspection PyArgumentList @QtCore.pyqtSlot(name='on_action_set_keyboard_layout_triggered') def action_set_keyboard_layout_triggered(self): + # pylint: disable=invalid-name vm = self.get_selected_vm() vm.run('qubes-change-keyboard-layout') @@ -1016,7 +989,7 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): # noinspection PyArgumentList @QtCore.pyqtSlot(name='on_action_global_settings_triggered') - def action_global_settings_triggered(self): + def action_global_settings_triggered(self): # pylint: disable=invalid-name global_settings_window = global_settings.GlobalSettingsWindow( self.qt_app, self.qubes_app) @@ -1070,19 +1043,19 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): if self.visible_columns_count == 1: # disable hiding the last one - for c in self.columns_actions: - if self.columns_actions[c].isChecked(): - self.columns_actions[c].setEnabled(False) + for col in self.columns_actions: + if self.columns_actions[col].isChecked(): + self.columns_actions[col].setEnabled(False) break elif self.visible_columns_count == 2 and val == 1: # enable hiding previously disabled column - for c in self.columns_actions: - if not self.columns_actions[c].isEnabled(): - self.columns_actions[c].setEnabled(True) + for col in self.columns_actions: + if not self.columns_actions[col].isEnabled(): + self.columns_actions[col].setEnabled(True) break if self.settings_loaded: - col_name = [name for name in self.columns_indices.keys() if + col_name = [name for name in self.columns_indices if self.columns_indices[name] == col_num][0] self.manager_settings.setValue('columns/%s' % col_name, show) self.manager_settings.sync() @@ -1122,11 +1095,11 @@ class VmManagerWindow(ui_qubemanager.Ui_VmManagerWindow, QtGui.QMainWindow): # noinspection PyArgumentList @QtCore.pyqtSlot(name='on_action_about_qubes_triggered') - def action_about_qubes_triggered(self): + def action_about_qubes_triggered(self): # pylint: disable=no-self-use about = AboutDialog() about.exec_() - def createPopupMenu(self): + def createPopupMenu(self): # pylint: disable=invalid-name menu = QtGui.QMenu() menu.addAction(self.action_toolbar) menu.addAction(self.action_menubar) diff --git a/qubesmanager/table_widgets.py b/qubesmanager/table_widgets.py index f72b278..7477dcc 100644 --- a/qubesmanager/table_widgets.py +++ b/qubesmanager/table_widgets.py @@ -19,8 +19,9 @@ # You should have received a copy of the GNU Lesser General Public License along # with this program; if not, see . -from PyQt4 import QtGui -from PyQt4 import QtCore +from PyQt4 import QtGui # pylint: disable=import-error +from PyQt4 import QtCore # pylint: disable=import-error +# pylint: disable=too-few-public-methods power_order = QtCore.Qt.DescendingOrder update_order = QtCore.Qt.AscendingOrder @@ -54,7 +55,7 @@ class VmIconWidget(QtGui.QWidget): layout.setContentsMargins(0, 0, 0, 0) self.setLayout(layout) - def setToolTip(self, tooltip): + def setToolTip(self, tooltip): # pylint: disable=invalid-name if tooltip is not None: self.label_icon.setToolTip(tooltip) else: @@ -78,15 +79,14 @@ class VmTypeWidget(VmIconWidget): return False elif self.value == other.value: return self.vm.name < other.vm.name - else: - return self.value < other.value + return self.value < other.value def __init__(self, vm, parent=None): (icon_path, tooltip) = self.get_vm_icon(vm) super(VmTypeWidget, self).__init__( icon_path, True, 0.8, tooltip, parent) self.vm = vm - self.tableItem = self.VmTypeItem(self.value, vm) + self.table_item = self.VmTypeItem(self.value, vm) self.value = None # TODO: add "provides network" column @@ -126,14 +126,13 @@ class VmLabelWidget(VmIconWidget): return False elif self.value == other.value: return self.vm.name < other.vm.name - else: - return self.value < other.value + return self.value < other.value def __init__(self, vm, parent=None): icon_path = self.get_vm_icon_path(vm) super(VmLabelWidget, self).__init__(icon_path, True, 0.8, None, parent) self.vm = vm - self.tableItem = self.VmLabelItem(self.value, vm) + self.table_item = self.VmLabelItem(self.value, vm) self.value = None def get_vm_icon_path(self, vm): @@ -141,7 +140,7 @@ class VmLabelWidget(VmIconWidget): return vm.label.icon -class VmNameItem (QtGui.QTableWidgetItem): +class VmNameItem(QtGui.QTableWidgetItem): def __init__(self, vm): super(VmNameItem, self).__init__() self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) @@ -186,14 +185,15 @@ class VmStatusIcon(QtGui.QLabel): self.setFixedSize(icon_sz) -class VmInfoWidget (QtGui.QWidget): - class VmInfoItem (QtGui.QTableWidgetItem): +class VmInfoWidget(QtGui.QWidget): + class VmInfoItem(QtGui.QTableWidgetItem): def __init__(self, upd_info_item, vm): super(VmInfoWidget.VmInfoItem, self).__init__() self.upd_info_item = upd_info_item self.vm = vm def __lt__(self, other): + # pylint: disable=too-many-return-statements if self.vm.qid == 0: return True elif other.vm.qid == 0: @@ -209,8 +209,7 @@ class VmInfoWidget (QtGui.QWidget): other_val += 1 if other.vm.is_running() else 0 if self_val == other_val: return self.vm.name < other.vm.name - else: - return self_val > other_val + return self_val > other_val elif self.tableWidget().\ horizontalHeader().sortIndicatorOrder() == power_order: # the result will be sorted by power state, @@ -221,8 +220,7 @@ class VmInfoWidget (QtGui.QWidget): 10*(1 if other.vm.is_running() else 0)) if self_val == other_val: return self.vm.name < other.vm.name - else: - return self_val > other_val + return self_val > other_val else: # it would be strange if this happened return @@ -254,14 +252,14 @@ class VmInfoWidget (QtGui.QWidget): self.blk_icon.setVisible(False) self.error_icon.setVisible(False) - self.tableItem = self.VmInfoItem(self.upd_info.tableItem, vm) + self.table_item = self.VmInfoItem(self.upd_info.table_item, vm) def update_vm_state(self, vm): self.on_icon.update() self.upd_info.update_outdated(vm) -class VmTemplateItem (QtGui.QTableWidgetItem): +class VmTemplateItem(QtGui.QTableWidgetItem): def __init__(self, vm): super(VmTemplateItem, self).__init__() self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) @@ -286,11 +284,10 @@ class VmTemplateItem (QtGui.QTableWidgetItem): return False elif self.text() == other.text(): return self.vm.name < other.vm.name - else: - return super(VmTemplateItem, self).__lt__(other) + return super(VmTemplateItem, self).__lt__(other) -class VmNetvmItem (QtGui.QTableWidgetItem): +class VmNetvmItem(QtGui.QTableWidgetItem): def __init__(self, vm): super(VmNetvmItem, self).__init__() self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) @@ -310,8 +307,7 @@ class VmNetvmItem (QtGui.QTableWidgetItem): return False elif self.text() == other.text(): return self.vm.name < other.vm.name - else: - return super(VmNetvmItem, self).__lt__(other) + return super(VmNetvmItem, self).__lt__(other) class VmInternalItem(QtGui.QTableWidgetItem): @@ -335,7 +331,7 @@ class VmInternalItem(QtGui.QTableWidgetItem): # features man qvm-features class VmUpdateInfoWidget(QtGui.QWidget): - class VmUpdateInfoItem (QtGui.QTableWidgetItem): + class VmUpdateInfoItem(QtGui.QTableWidgetItem): def __init__(self, value, vm): super(VmUpdateInfoWidget.VmUpdateInfoItem, self).__init__() self.value = 0 @@ -357,8 +353,7 @@ class VmUpdateInfoWidget(QtGui.QWidget): return False elif self.value == other.value: return self.vm.name < other.vm.name - else: - return self.value < other.value + return self.value < other.value def __init__(self, vm, show_text=True, parent=None): super(VmUpdateInfoWidget, self).__init__(parent) @@ -375,7 +370,7 @@ class VmUpdateInfoWidget(QtGui.QWidget): self.previous_outdated_state = None self.previous_update_recommended = None self.value = None - self.tableItem = VmUpdateInfoWidget.VmUpdateInfoItem(self.value, vm) + self.table_item = VmUpdateInfoWidget.VmUpdateInfoItem(self.value, vm) def update_outdated(self, vm): @@ -403,7 +398,7 @@ class VmUpdateInfoWidget(QtGui.QWidget): def update_status_widget(self, state): self.value = state - self.tableItem.set_value(state) + self.table_item.set_value(state) if state == "update": label_text = "Check updates" icon_path = ":/update-recommended.png" @@ -438,7 +433,7 @@ class VmUpdateInfoWidget(QtGui.QWidget): self.layout().addWidget(self.icon, alignment=QtCore.Qt.AlignCenter) -class VmSizeOnDiskItem (QtGui.QTableWidgetItem): +class VmSizeOnDiskItem(QtGui.QTableWidgetItem): def __init__(self, vm): super(VmSizeOnDiskItem, self).__init__() self.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) @@ -463,8 +458,7 @@ class VmSizeOnDiskItem (QtGui.QTableWidgetItem): return False elif self.value == other.value: return self.vm.name < other.vm.name - else: - return self.value < other.value + return self.value < other.value class VmIPItem(QtGui.QTableWidgetItem): @@ -502,8 +496,7 @@ class VmIncludeInBackupsItem(QtGui.QTableWidgetItem): return False elif self.vm.include_in_backups == other.vm.include_in_backups: return self.vm.name < other.vm.name - else: - return self.vm.include_in_backups < other.vm.include_in_backups + return self.vm.include_in_backups < other.vm.include_in_backups class VmLastBackupItem(QtGui.QTableWidgetItem): @@ -528,5 +521,4 @@ class VmLastBackupItem(QtGui.QTableWidgetItem): return False elif not other.vm.backup_timestamp: return True - else: - return self.vm.backup_timestamp < other.vm.backup_timestamp + return self.vm.backup_timestamp < other.vm.backup_timestamp