Browse Source

Initial setup

Initialize .pylintrc, put ignore in used files' headers.
Marta Marczykowska-Górecka 6 years ago
parent
commit
41b602ec48

+ 196 - 0
.pylintrc

@@ -0,0 +1,196 @@
+[MASTER]
+persistent=no
+ignore=tests
+
+[MESSAGES CONTROL]
+# abstract-class-little-used: see http://www.logilab.org/ticket/111138
+# deprecated-method:
+#   enable again after disabling py-3.4.3 asyncio.ensure_future compat hack
+disable=
+  abstract-class-little-used,
+  bad-continuation,
+  cyclic-import,
+  deprecated-method,
+  duplicate-code,
+  file-ignored,
+  fixme,
+  locally-disabled,
+  locally-enabled,
+  logging-format-interpolation,
+  missing-docstring,
+  star-args,
+  wrong-import-order
+
+[REPORTS]
+
+# Set the output format. Available formats are text, parseable, colorized, msvs
+# (visual studio) and html
+output-format=colorized
+
+#files-output=no
+reports=yes
+
+[TYPECHECK]
+#ignored-classes=
+
+ignore-mixin-members=yes
+generated-members=
+  iter_entry_points,
+  Element,ElementTree,QName,SubElement,fromstring,parse,tostring,
+
+[BASIC]
+
+# List of builtins function names that should not be used, separated by a comma
+bad-functions=
+
+# Regular expression which should only match correct module names
+module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
+
+# Regular expression which should only match correct module level names
+const-rgx=(([A-Za-z_][A-Za-z0-9_]*)|(__.*__))$
+
+# Regular expression which should only match correct class names
+class-rgx=([A-Z_][a-zA-Z0-9]+|TC_\d\d_[a-zA-Z0-9_]+)$
+
+# Regular expression which should only match correct function names
+function-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct method names
+method-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct instance attribute names
+attr-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct argument names
+argument-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct variable names
+variable-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct list comprehension /
+# generator expression variable names
+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
+
+# Bad variable names which should always be refused, separated by a comma
+bad-names=foo,bar,baz,toto,tutu,tata
+
+# Regular expression which should only match functions or classes name which do
+# not require a docstring
+no-docstring-rgx=__.*__
+
+
+[MISCELLANEOUS]
+
+# List of note tags to take in consideration, separated by a comma.
+notes=FIXME,FIX,XXX,TODO
+
+
+[FORMAT]
+
+# Maximum number of characters on a single line.
+max-line-length=80
+
+# Maximum number of lines in a module
+max-module-lines=3000
+
+# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
+# tab).
+indent-string='    '
+
+
+[VARIABLES]
+
+# Tells whether we should check for unused import in __init__ files.
+init-import=no
+
+# A regular expression matching the beginning of the name of dummy variables
+# (i.e. not used).
+dummy-variables-rgx=_|dummy
+
+
+[SIMILARITIES]
+
+# Minimum lines number of a similarity.
+min-similarity-lines=4
+
+# Ignore comments when computing similarities.
+ignore-comments=yes
+
+# Ignore docstrings when computing similarities.
+ignore-docstrings=yes
+
+
+[CLASSES]
+
+# List of method names used to declare (i.e. assign) instance attributes.
+defining-attr-methods=__init__,__new__,setUp
+
+# List of valid names for the first argument in a class method.
+valid-classmethod-first-arg=cls
+
+
+[IMPORTS]
+
+# Deprecated modules which should not be used, separated by a comma
+deprecated-modules=regsub,TERMIOS,Bastion,rexec
+
+# Create a graph of every (i.e. internal and external) dependencies in the
+# given file (report RP0402 must not be disabled)
+import-graph=
+
+# Create a graph of external dependencies in the given file (report RP0402 must
+# not be disabled)
+ext-import-graph=
+
+# Create a graph of internal dependencies in the given file (report RP0402 must
+# not be disabled)
+int-import-graph=
+
+
+[DESIGN]
+
+# Maximum number of arguments for function / method
+max-args=35
+
+# Argument names that match this expression will be ignored. Default to name
+# with leading underscore
+ignored-argument-names=_.*
+
+# Maximum number of locals for function / method body
+# Let's have max-args + 5
+max-locals=40
+
+# Maximum number of return / yield for function / method body
+max-returns=6
+
+# Maximum number of branch for function / method body
+# 4x the default value
+max-branches=48
+
+# Maximum number of statements in function / method body
+# Double default
+max-statements=100
+
+# Maximum number of parents for a class (see R0901).
+max-parents=7
+
+# Maximum number of attributes for a class (see R0902).
+max-attributes=15
+
+# Minimum number of public methods for a class (see R0903).
+min-public-methods=2
+
+# Maximum number of public methods for a class (see R0904).
+max-public-methods=100
+
+
+[EXCEPTIONS]
+
+# Exceptions that will emit a warning when being caught. Defaults to
+# "Exception"
+overgeneral-exceptions=Exception,EnvironmentError
+
+# vim: ft=conf

+ 1 - 0
qubesmanager/about.py

@@ -1,5 +1,6 @@
 #!/usr/bin/python2
 # coding=utf-8
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/backup.py

@@ -1,4 +1,5 @@
 #!/usr/bin/python2
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/backup_utils.py

@@ -1,4 +1,5 @@
 #!/usr/bin/python2
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/block.py

@@ -1,5 +1,6 @@
 #!/usr/bin/python2
 # -*- coding: utf8 -*-
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/clipboard.py

@@ -1,4 +1,5 @@
 #!/usr/bin/python2
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/informationnotes.py

@@ -1,5 +1,6 @@
 #!/usr/bin/python2
 # coding=utf-8
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/log_dialog.py

@@ -1,4 +1,5 @@
 #!/usr/bin/python2
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/releasenotes.py

@@ -1,5 +1,6 @@
 #!/usr/bin/python2
 # coding=utf-8
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 1 - 0
qubesmanager/restore.py

@@ -1,4 +1,5 @@
 #!/usr/bin/python2
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #

+ 62 - 62
qubesmanager/settings.py

@@ -43,12 +43,12 @@ from . import thread_monitor
 
 from .appmenu_select import AppmenuSelectManager
 from .backup_utils import get_path_for_vm
-from .firewall import *
+from . import firewall
 
-from .ui_settingsdlg import *
+from . import ui_settingsdlg
 from .bootfromdevice import main as bootfromdevice
 
-class VMSettingsWindow(Ui_SettingsDialog, QDialog):
+class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, firewall.QDialog):
     tabs_indices = collections.OrderedDict((
             ('basic', 0),
             ('advanced', 1),
@@ -75,8 +75,8 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
             assert (idx in range(self.tabWidget.count()))
             self.tabWidget.setCurrentIndex(idx)
 
-        self.connect(self.buttonBox, SIGNAL("accepted()"), self.save_and_apply)
-        self.connect(self.buttonBox, SIGNAL("rejected()"), self.reject)
+        self.connect(self.buttonBox, firewall.SIGNAL("accepted()"), self.save_and_apply)
+        self.connect(self.buttonBox, firewall.SIGNAL("rejected()"), self.reject)
 
         self.tabWidget.currentChanged.connect(self.current_tab_changed)
 
@@ -92,18 +92,18 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
         ###### advanced tab
         self.__init_advanced_tab__()
         self.include_in_balancing.stateChanged.connect(self.include_in_balancing_state_changed)
-        self.connect(self.init_mem, SIGNAL("editingFinished()"), self.check_mem_changes)
-        self.connect(self.max_mem_size, SIGNAL("editingFinished()"), self.check_mem_changes)
+        self.connect(self.init_mem, firewall.SIGNAL("editingFinished()"), self.check_mem_changes)
+        self.connect(self.max_mem_size, firewall.SIGNAL("editingFinished()"), self.check_mem_changes)
         self.bootFromDeviceButton.clicked.connect(self.boot_from_cdrom_button_pressed)
 
         ###### firewall tab
         if self.tabWidget.isTabEnabled(self.tabs_indices['firewall']):
-            model = QubesFirewallRulesModel()
+            model = firewall.QubesFirewallRulesModel()
             try:
                 model.set_vm(vm)
                 self.set_fw_model(model)
                 self.firewallModifiedOutsidelabel.setVisible(False)
-            except FirewallModifiedOutsideError as ex:
+            except firewall.FirewallModifiedOutsideError as ex:
                 self.disable_all_fw_conf()
 
             self.newRuleButton.clicked.connect(self.new_rule_button_pressed)
@@ -114,7 +114,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 
         ####### devices tab
         self.__init_devices_tab__()
-        self.connect(self.dev_list, SIGNAL("selected_changed()"), self.devices_selection_changed)
+        self.connect(self.dev_list, firewall.SIGNAL("selected_changed()"), self.devices_selection_changed)
 
         ####### services tab
         self.__init_services_tab__()
@@ -141,7 +141,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
         thread.daemon = True
         thread.start()
 
-        progress = QProgressDialog(
+        progress = firewall.QProgressDialog(
             self.tr("Applying settings to <b>{0}</b>...").format(self.vm.name), "", 0, 0)
         progress.setCancelButton(None)
         progress.setModal(True)
@@ -154,9 +154,9 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
         progress.hide()
 
         if not t_monitor.success:
-            QMessageBox.warning(None,
-                self.tr("Error while changing settings for {0}!").format(self.vm.name),
-                    self.tr("ERROR: {0}").format(t_monitor.error_msg))
+            firewall.QMessageBox.warning(None,
+                                         self.tr("Error while changing settings for {0}!").format(self.vm.name),
+                                         self.tr("ERROR: {0}").format(t_monitor.error_msg))
 
         self.done(0)
 
@@ -210,9 +210,9 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
             netvm = self.vm.netvm
             if netvm is not None and \
                     not netvm.features.check_with_template('qubes-firewall', False):
-                QMessageBox.warning(None,
-                    self.tr("VM configuration problem!"),
-                    self.tr("The '{vm}' AppVM is network connected to "
+                firewall.QMessageBox.warning(None,
+                                             self.tr("VM configuration problem!"),
+                                             self.tr("The '{vm}' AppVM is network connected to "
                         "'{netvm}', which does not support firewall!<br/>"
                         "You may edit the '{vm}' VM firewall rules, but these "
                         "will not take any effect until you connect it to "
@@ -236,7 +236,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 
     def __init_basic_tab__(self):
         self.vmname.setText(self.vm.name)
-        self.vmname.setValidator(QRegExpValidator(QRegExp("[a-zA-Z0-9-]*", Qt.CaseInsensitive), None))
+        self.vmname.setValidator(firewall.QRegExpValidator(firewall.QRegExp("[a-zA-Z0-9-]*", firewall.Qt.CaseInsensitive), None))
         self.vmname.setEnabled(False)
         self.rename_vm_button.setEnabled(not self.vm.is_running())
         self.delete_vm_button.setEnabled(not self.vm.is_running())
@@ -394,16 +394,16 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 
     def check_mem_changes(self):
         if self.max_mem_size.value() < self.init_mem.value():
-            QMessageBox.warning(None,
-                self.tr("Warning!"),
-                self.tr("Max memory can not be less than initial memory.<br>"
+            firewall.QMessageBox.warning(None,
+                                         self.tr("Warning!"),
+                                         self.tr("Max memory can not be less than initial memory.<br>"
                         "Setting max memory to equal initial memory."))
             self.max_mem_size.setValue(self.init_mem.value())
         # Linux specific limit: init memory must not be below max_mem_size/10.79 in order to allow scaling up to max_mem_size (or else "add_memory() failed: -17" problem)
         if self.init_mem.value() * 10 < self.max_mem_size.value():
-            QMessageBox.warning(None,
-                self.tr("Warning!"),
-                self.tr("Initial memory can not be less than one tenth "
+            firewall.QMessageBox.warning(None,
+                                         self.tr("Warning!"),
+                                         self.tr("Initial memory can not be less than one tenth "
                         "Max memory.<br>Setting initial memory to the minimum "
                         "allowed value."))
             self.init_mem.setValue(self.max_mem_size.value() / 10)
@@ -419,9 +419,9 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
             time.sleep(0.1)
 
         if not t_monitor.success:
-            QMessageBox.warning(None,
-                                self.tr("Error!"),
-                                self.tr("ERROR: {}").format(
+            firewall.QMessageBox.warning(None,
+                                         self.tr("Error!"),
+                                         self.tr("ERROR: {}").format(
                                     t_monitor.error_msg))
 
 
@@ -438,9 +438,9 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 
     def rename_vm(self):
 
-        new_vm_name, ok = QInputDialog.getText(self,
-            self.tr('Rename VM'),
-            self.tr('New name: (WARNING: '
+        new_vm_name, ok = firewall.QInputDialog.getText(self,
+                                                        self.tr('Rename VM'),
+                                                        self.tr('New name: (WARNING: '
                       'all other changes will be discarded)'))
 
         if ok:
@@ -458,7 +458,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 
     def remove_vm(self):
 
-        answer, ok = QInputDialog.getText(
+        answer, ok = firewall.QInputDialog.getText(
             self,
             self.tr('Delete VM'),
             self.tr('Are you absolutely sure you want to delete this VM? '
@@ -472,7 +472,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
             self.done(0)
 
         elif ok:
-            QMessageBox.warning(
+            firewall.QMessageBox.warning(
                 None,
                 self.tr("Removal cancelled"),
                 self.tr("The VM will not be removed."))
@@ -488,14 +488,14 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 
     def clone_vm(self):
 
-        cloned_vm_name, ok = QInputDialog.getText(
+        cloned_vm_name, ok = firewall.QInputDialog.getText(
             self,
             self.tr('Clone VM'),
             self.tr('Name for the cloned VM:'))
 
         if ok:
             self._run_in_thread(self._clone_vm, cloned_vm_name)
-            QMessageBox.warning(
+            firewall.QMessageBox.warning(
                 None,
                 self.tr("Success"),
                 self.tr("The VM was cloned successfully."))
@@ -602,7 +602,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
         for dev in lspci.splitlines():
             devs.append((dev.rstrip(), dev.split(' ')[0]))
 
-        class DevListWidgetItem(QListWidgetItem):
+        class DevListWidgetItem(firewall.QListWidgetItem):
             def __init__(self, name, ident, parent = None):
                 super(DevListWidgetItem, self).__init__(name, parent)
                 self.ident = ident
@@ -645,7 +645,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
                     for i in range(self.dev_list.selected_list.count())]
             for ident in new:
                 if ident not in old:
-                    ass = qubesadmin.devices.DeviceAssignment(
+                    ass = firewall.qubesadmin.devices.DeviceAssignment(
                         self.vm.app.domains['dom0'],
                         ident.replace(':', '_'),
                         persistent=True)
@@ -671,7 +671,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
                 break
 
         if self.dev_list.selected_list.count() > 0:
-            if state == QtCore.Qt.Checked:
+            if state == ui_settingsdlg.QtCore.Qt.Checked:
                 self.dmm_warning_adv.show()
                 self.dmm_warning_dev.show()
             else:
@@ -736,23 +736,23 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
             if not feature.startswith('service.'):
                 continue
             service = feature[len('service.'):]
-            item = QListWidgetItem(service)
-            item.setCheckState(QtCore.Qt.Checked
-                if self.vm.features[feature] else QtCore.Qt.Unchecked)
+            item = firewall.QListWidgetItem(service)
+            item.setCheckState(ui_settingsdlg.QtCore.Qt.Checked
+                if self.vm.features[feature] else ui_settingsdlg.QtCore.Qt.Unchecked)
             self.services_list.addItem(item)
             self.new_srv_dict[service] = self.vm.features[feature]
 
-        self.connect(self.services_list, SIGNAL("itemClicked(QListWidgetItem *)"), self.services_item_clicked)
+        self.connect(self.services_list, firewall.SIGNAL("itemClicked(QListWidgetItem *)"), self.services_item_clicked)
 
     def __add_service__(self):
         srv = str(self.service_line_edit.text()).strip()
         if srv != "":
             if srv in self.new_srv_dict:
-                QMessageBox.information(None, '',
-                    self.tr('Service already on the list!'))
+                firewall.QMessageBox.information(None, '',
+                                                 self.tr('Service already on the list!'))
             else:
-                item = QListWidgetItem(srv)
-                item.setCheckState(QtCore.Qt.Checked)
+                item = firewall.QListWidgetItem(srv)
+                item.setCheckState(ui_settingsdlg.QtCore.Qt.Checked)
                 self.services_list.addItem(item)
                 self.new_srv_dict[srv] = True
 
@@ -762,9 +762,9 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
         if not item:
             return
         if str(item.text()) == 'meminfo-writer':
-            QMessageBox.information(None,
-                self.tr('Service can not be removed'),
-                self.tr('Service meminfo-writer can not be removed from the list.'))
+            firewall.QMessageBox.information(None,
+                                             self.tr('Service can not be removed'),
+                                             self.tr('Service meminfo-writer can not be removed from the list.'))
             return
 
         row = self.services_list.currentRow()
@@ -774,10 +774,10 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 
     def services_item_clicked(self, item):
         if str(item.text()) == 'meminfo-writer':
-            if item.checkState() == QtCore.Qt.Checked:
+            if item.checkState() == ui_settingsdlg.QtCore.Qt.Checked:
                 if not self.include_in_balancing.isChecked():
                     self.include_in_balancing.setChecked(True)
-            elif item.checkState() == QtCore.Qt.Unchecked:
+            elif item.checkState() == ui_settingsdlg.QtCore.Qt.Unchecked:
                 if self.include_in_balancing.isChecked():
                     self.include_in_balancing.setChecked(False)
 
@@ -788,7 +788,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
         try:
             for r in range(self.services_list.count()):
                 item = self.services_list.item(r)
-                self.new_srv_dict[str(item.text())] = (item.checkState() == QtCore.Qt.Checked)
+                self.new_srv_dict[str(item.text())] = (item.checkState() == ui_settingsdlg.QtCore.Qt.Checked)
 
             balancing_was_checked = self.vm.features.get('service.meminfo-writer', True)
             balancing_is_checked = self.include_in_balancing.isChecked()
@@ -821,14 +821,14 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
     def set_fw_model(self, model):
         self.fw_model = model
         self.rulesTreeView.setModel(model)
-        self.rulesTreeView.header().setResizeMode(QHeaderView.ResizeToContents)
-        self.rulesTreeView.header().setResizeMode(0, QHeaderView.Stretch)
+        self.rulesTreeView.header().setResizeMode(firewall.QHeaderView.ResizeToContents)
+        self.rulesTreeView.header().setResizeMode(0, firewall.QHeaderView.Stretch)
         self.set_allow(model.allow)
         if model.tempFullAccessExpireTime:
             self.tempFullAccess.setChecked(True)
             self.tempFullAccessTime.setValue(
                 (model.tempFullAccessExpireTime -
-                int(datetime.datetime.now().strftime("%s")))/60)
+                 int(firewall.datetime.datetime.now().strftime("%s"))) / 60)
 
     def disable_all_fw_conf(self):
         self.firewallModifiedOutsidelabel.setVisible(True)
@@ -857,7 +857,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
             self.policyDenyRadioButton.isChecked())
 
     def new_rule_button_pressed(self):
-        dialog = NewFwRuleDlg()
+        dialog = firewall.NewFwRuleDlg()
         self.fw_model.run_rule_dialog(dialog)
 
     def edit_rule_button_pressed(self):
@@ -865,7 +865,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
         selected = self.rulesTreeView.selectedIndexes()
 
         if len(selected) > 0:
-            dialog = NewFwRuleDlg()
+            dialog = firewall.NewFwRuleDlg()
             dialog.set_ok_enabled(True)
             row = self.rulesTreeView.selectedIndexes().pop().row()
             self.fw_model.populate_edit_dialog(dialog, row)
@@ -883,7 +883,7 @@ class VMSettingsWindow(Ui_SettingsDialog, QDialog):
 def handle_exception(exc_type, exc_value, exc_traceback):
 
     filename, line, dummy, dummy = traceback.extract_tb(exc_traceback).pop()
-    filename = os.path.basename(filename)
+    filename = firewall.os.path.basename(filename)
     error = "%s: %s" % (exc_type.__name__, exc_value)
 
     strace = ""
@@ -896,9 +896,9 @@ def handle_exception(exc_type, exc_value, exc_traceback):
         strace += "line no.: %d\n" %line
         strace += "file: %s\n" %filename
 
-    msg_box = QMessageBox()
+    msg_box = firewall.QMessageBox()
     msg_box.setDetailedText(strace)
-    msg_box.setIcon(QMessageBox.Critical)
+    msg_box.setIcon(firewall.QMessageBox.Critical)
     msg_box.setWindowTitle("Houston, we have a problem...")
     msg_box.setText("Whoops. A critical error has occured. This is most likely a bug "
                     "in Qubes Manager.<br><br>"
@@ -909,7 +909,7 @@ def handle_exception(exc_type, exc_value, exc_traceback):
     msg_box.exec_()
 
 
-parser = qubesadmin.tools.QubesArgumentParser(vmname_nargs=1)
+parser = firewall.qubesadmin.tools.QubesArgumentParser(vmname_nargs=1)
 
 parser.add_argument('--tab', metavar='TAB',
     action='store',
@@ -925,13 +925,13 @@ def main(args=None):
     args = parser.parse_args(args)
     vm = args.domains.pop()
 
-    qapp = QApplication(sys.argv)
+    qapp = firewall.QApplication(firewall.sys.argv)
     qapp.setOrganizationName('Invisible Things Lab')
     qapp.setOrganizationDomain("https://www.qubes-os.org/")
     qapp.setApplicationName("Qubes VM Settings")
 
     if not utils.is_debug():
-        sys.excepthook = handle_exception
+        firewall.sys.excepthook = handle_exception
 
     settings_window = VMSettingsWindow(vm, qapp, args.tab)
     settings_window.show()

+ 1 - 0
qubesmanager/table_widgets.py

@@ -1,5 +1,6 @@
 #!/usr/bin/python2
 # -*- coding: utf8 -*-
+# pylint: skip-file
 #
 # The Qubes OS Project, http://www.qubes-os.org
 #