From bf29d5e5b57ccfb9f58b1fbc550a3f224a22a780 Mon Sep 17 00:00:00 2001 From: Wojtek Porczyk Date: Mon, 19 Jan 2015 19:02:28 +0100 Subject: [PATCH] qubes: pylint fixes (disable unfounded messages) --- qubes/__init__.py | 30 ++++++++++++++++++++++++------ qubes/_pluginloader.py | 1 + qubes/dochelpers.py | 4 +++- qubes/events.py | 1 + qubes/ext/__init__.py | 2 +- qubes/plugins.py | 6 ++++++ qubes/rngdoc.py | 1 + qubes/storage/__init__.py | 3 ++- qubes/storage/xen.py | 1 + qubes/tests/__init__.py | 14 ++++++++------ qubes/tests/events.py | 1 + qubes/tests/init.py | 4 +++- qubes/tests/run.py | 25 ++++++++++++++----------- qubes/tests/vm/adminvm.py | 5 ++++- qubes/tests/vm/init.py | 1 + qubes/tests/vm/qubesvm.py | 7 +++++++ qubes/vm/__init__.py | 4 +++- qubes/vm/adminvm.py | 2 +- qubes/vm/qubesvm.py | 26 +++++++++++++++++++++----- 19 files changed, 103 insertions(+), 35 deletions(-) diff --git a/qubes/__init__.py b/qubes/__init__.py index 5a85543f..e3838109 100644 --- a/qubes/__init__.py +++ b/qubes/__init__.py @@ -61,6 +61,7 @@ import qubes.ext if os.name == 'posix': import fcntl elif os.name == 'nt': + # pylint: disable=import-error import win32con import win32file import pywintypes @@ -187,6 +188,7 @@ class QubesHost(object): if self._no_cpus is not None: return + # pylint: disable=unused-variable (model, memory, cpus, mhz, nodes, socket, cores, threads) = \ self.app.vmm.libvirt_conn.getInfo() self._total_mem = long(memory) * 1024 @@ -525,7 +527,7 @@ class VMCollection(object): raise LookupError("Cannot find unused netid!") -class property(object): +class property(object): # pylint: disable=redefined-builtin,invalid-name '''Qubes property. This class holds one property that can be saved to and loaded from @@ -581,6 +583,7 @@ class property(object): def __init__(self, name, setter=None, saver=None, type=None, default=_NO_DEFAULT, load_stage=2, order=0, save_via_ref=False, doc=None): + # pylint: disable=redefined-builtin self.__name__ = name self._setter = setter self._saver = saver if saver is not None else ( @@ -638,7 +641,7 @@ class property(object): else: instance.fire_event_pre('property-pre-set:' + self.__name__, value) - instance._init_property(self, value) + instance._init_property(self, value) # pylint: disable=protected-access if has_oldvalue: instance.fire_event( @@ -689,6 +692,7 @@ class property(object): if not self.__doc__: return '' + # pylint: disable=unused-variable output, pub = docutils.core.publish_programmatically( source_class=docutils.io.StringInput, source=' '.join(self.__doc__.strip().split()), @@ -716,6 +720,7 @@ class property(object): @staticmethod def dontsave(self, prop, value): '''Dummy saver that never saves anything.''' + # pylint: disable=bad-staticmethod-argument,unused-argument raise DontSave() # @@ -730,7 +735,7 @@ class property(object): unwanted property. When someone attempts to load such a property, it :throws AttributeError: always - ''' + ''' # pylint: disable=bad-staticmethod-argument,unused-argument raise AttributeError( 'setting {} property on {} instance is forbidden'.format( @@ -744,7 +749,7 @@ class property(object): It accepts (case-insensitive) ``'0'``, ``'no'`` and ``false`` as :py:obj:`False` and ``'1'``, ``'yes'`` and ``'true'`` as :py:obj:`True`. - ''' + ''' # pylint: disable=bad-staticmethod-argument,unused-argument lcvalue = value.lower() if lcvalue in ('0', 'no', 'false'): @@ -841,6 +846,7 @@ class PropertyHolder(qubes.events.Emitter): :param value: value ''' + # pylint: disable=protected-access setattr(self, self.get_property_def(prop)._attr_name, value) @@ -856,6 +862,7 @@ class PropertyHolder(qubes.events.Emitter): :rtype: bool ''' + # pylint: disable=protected-access return hasattr(self, self.get_property_def(prop)._attr_name) @@ -920,6 +927,7 @@ class PropertyHolder(qubes.events.Emitter): properties = lxml.etree.Element('properties') for prop in self.get_props_list(): + # pylint: disable=protected-access try: value = getattr( self, (prop.__name__ if with_defaults else prop._attr_name)) @@ -958,6 +966,7 @@ class PropertyHolder(qubes.events.Emitter): for prop in self.proplist(): try: + # pylint: disable=protected-access self._init_property(self, prop, getattr(src, prop._attr_name)) except AttributeError: continue @@ -984,6 +993,7 @@ class PropertyHolder(qubes.events.Emitter): if value is None and not allow_none: raise AttributeError() except AttributeError: + # pylint: disable=no-member msg = 'Required property {!r} not set on {!r}'.format(prop, self) if hard: raise AssertionError(msg) @@ -1119,8 +1129,9 @@ class Qubes(PropertyHolder): self.log = logging.getLogger('app') - self._extensions = set(ext(self) - for ext in qubes.ext.Extension.register.values()) + # pylint: disable=no-member + self._extensions = set( + ext(self) for ext in qubes.ext.Extension.register.values()) #: collection of all VMs managed by this Qubes instance self.domains = VMCollection(self) @@ -1166,6 +1177,7 @@ class Qubes(PropertyHolder): if os.name == 'posix': fcntl.lockf(self._storefd, fcntl.LOCK_EX) elif os.name == 'nt': + # pylint: disable=protected-access win32file.LockFileEx( win32file._get_osfhandle(self._storefd.fileno()), win32con.LOCKFILE_EXCLUSIVE_LOCK, @@ -1304,6 +1316,7 @@ class Qubes(PropertyHolder): @qubes.events.handler('domain-pre-deleted') def on_domain_pre_deleted(self, event, vm): + # pylint: disable=unused-argument if isinstance(vm, qubes.vm.templatevm.TemplateVM): appvms = self.get_vms_based_on(vm) if appvms: @@ -1315,6 +1328,7 @@ class Qubes(PropertyHolder): @qubes.events.handler('domain-deleted') def on_domain_deleted(self, event, vm): + # pylint: disable=unused-argument if self.default_netvm == vm: del self.default_netvm if self.default_fw_netvm == vm: @@ -1331,6 +1345,7 @@ class Qubes(PropertyHolder): @qubes.events.handler('property-pre-set:clockvm') def on_property_pre_set_clockvm(self, event, name, newvalue, oldvalue=None): + # pylint: disable=unused-argument,no-self-use if 'ntpd' in newvalue.services: if newvalue.services['ntpd']: raise QubesException('Cannot set {!r} as {!r} property since ' @@ -1342,6 +1357,7 @@ class Qubes(PropertyHolder): @qubes.events.handler('property-pre-set:default_netvm') def on_property_pre_set_default_netvm(self, event, name, newvalue, oldvalue=None): + # pylint: disable=unused-argument,invalid-name if newvalue is not None and oldvalue is not None \ and oldvalue.is_running() and not newvalue.is_running() \ and self.domains.get_vms_connected_to(oldvalue): @@ -1352,6 +1368,7 @@ class Qubes(PropertyHolder): @qubes.events.handler('property-set:default_fw_netvm') def on_property_set_default_netvm(self, event, name, newvalue, oldvalue=None): + # pylint: disable=unused-argument,invalid-name for vm in self.domains: if not vm.provides_network and vm.property_is_default('netvm'): # fire property-del:netvm as it is responsible for resetting @@ -1362,6 +1379,7 @@ class Qubes(PropertyHolder): @qubes.events.handler('property-set:default_netvm') def on_property_set_default_netvm(self, event, name, newvalue, oldvalue=None): + # pylint: disable=unused-argument for vm in self.domains: if vm.provides_network and vm.property_is_default('netvm'): # fire property-del:netvm as it is responsible for resetting diff --git a/qubes/_pluginloader.py b/qubes/_pluginloader.py index df4df52a..a4eabfd5 100644 --- a/qubes/_pluginloader.py +++ b/qubes/_pluginloader.py @@ -1,5 +1,6 @@ #!/usr/bin/python2 -O # vim: fileencoding=utf-8 +# pylint: disable=wildcard-import,unused-wildcard-import from qubes.vm import * from qubes.ext import * diff --git a/qubes/dochelpers.py b/qubes/dochelpers.py index 39ad9663..331f0414 100644 --- a/qubes/dochelpers.py +++ b/qubes/dochelpers.py @@ -69,7 +69,7 @@ def ticket(name, rawtext, text, lineno, inliner, options={}, content=[]): that called this function :param options: Directive options for customisation :param content: The directive content for customisation - ''' + ''' # pylint: disable=unused-argument ticket = text.lstrip('#') if not ticket.isdigit(): @@ -100,6 +100,7 @@ def ticket(name, rawtext, text, lineno, inliner, options={}, content=[]): class versioncheck(docutils.nodes.warning): + # pylint: disable=invalid-name pass def visit(self, node): @@ -150,6 +151,7 @@ class VersionCheck(docutils.parsers.rst.Directive): event_sig_re = re.compile(r'([a-zA-Z-:<>]+)\s*\((.*)\)') def parse_event(env, sig, signode): + # pylint: disable=unused-argument m = event_sig_re.match(sig) if not m: signode += sphinx.addnodes.desc_name(sig, sig) diff --git a/qubes/events.py b/qubes/events.py index 4a3dda9d..6b166a3b 100644 --- a/qubes/events.py +++ b/qubes/events.py @@ -110,6 +110,7 @@ class Emitter(object): :param collections.Callable handler: handler callable ''' + # pylint: disable=no-member cls.__handlers__[event].add(handler) diff --git a/qubes/ext/__init__.py b/qubes/ext/__init__.py index 244e6232..24b488d0 100644 --- a/qubes/ext/__init__.py +++ b/qubes/ext/__init__.py @@ -50,7 +50,7 @@ class Extension(object): '''Base class for all extensions :param qubes.Qubes app: application object - ''' + ''' # pylint: disable=too-few-public-methods __metaclass__ = ExtensionPlugin diff --git a/qubes/plugins.py b/qubes/plugins.py index 438a7436..18e4e98d 100644 --- a/qubes/plugins.py +++ b/qubes/plugins.py @@ -33,6 +33,7 @@ import os class Plugin(type): '''Base metaclass for plugins''' def __init__(cls, name, bases, dict_): + # pylint: disable=unused-argument if hasattr(cls, 'register'): cls.register[cls.__name__] = cls else: @@ -49,13 +50,18 @@ def load(modfile): >>> __all__ = qubes.plugins.load(__file__) # doctest: +SKIP ''' + path = os.path.dirname(modfile) listdir = os.listdir(path) ret = set() + + # pylint: disable=unused-variable for suffix, mode, type_ in imp.get_suffixes(): for filename in listdir: if filename.endswith(suffix): ret.add(filename[:-len(suffix)]) + if '__init__' in ret: ret.remove('__init__') + return list(sorted(ret)) diff --git a/qubes/rngdoc.py b/qubes/rngdoc.py index 8a15cc65..bdf39b9c 100755 --- a/qubes/rngdoc.py +++ b/qubes/rngdoc.py @@ -161,6 +161,7 @@ class Element(object): class Schema(object): + # pylint: disable=too-few-public-methods nsmap = { 'rng': 'http://relaxng.org/ns/structure/1.0', 'q': 'http://qubes-os.org/qubes/3', diff --git a/qubes/storage/__init__.py b/qubes/storage/__init__.py index bd066e56..20644bdf 100644 --- a/qubes/storage/__init__.py +++ b/qubes/storage/__init__.py @@ -42,7 +42,7 @@ class VMStorage(object): This is base class for all other implementations, mostly with Xen on Linux in mind. - ''' + ''' # pylint: disable=abstract-class-little-used def __init__(self, vm, private_img_size=None, root_img_size=None, modules_img=None, modules_img_rw=False): @@ -116,6 +116,7 @@ class VMStorage(object): return qubes.utils.get_disk_usage(self.vmdir) def get_disk_utilization_private_img(self): + # pylint: disable=invalid-name return qubes.utils.get_disk_usage(self.private_img) def get_private_img_sz(self): diff --git a/qubes/storage/xen.py b/qubes/storage/xen.py index 8e83c61c..498bc22e 100644 --- a/qubes/storage/xen.py +++ b/qubes/storage/xen.py @@ -49,6 +49,7 @@ class XenVMStorage(qubes.storage.VMStorage): modules_dev = 'xvdd' + # pylint: disable=redefined-builtin @staticmethod def _format_disk_dev(path, vdev, script=None, rw=True, type='disk', domain=None): diff --git a/qubes/tests/__init__.py b/qubes/tests/__init__.py index 7ff2f04f..01a94680 100644 --- a/qubes/tests/__init__.py +++ b/qubes/tests/__init__.py @@ -64,7 +64,7 @@ def skipUnlessDom0(test_item): Some tests (especially integration tests) have to be run in more or less working dom0. This is checked by connecting to libvirt. - ''' + ''' # pylint: disable=invalid-name return unittest.skipUnless(in_dom0, 'outside dom0')(test_item) @@ -74,7 +74,7 @@ def skipUnlessGit(test_item): There are very few tests that an be run only in git. One example is correctness of example code that won't get included in RPM. - ''' + ''' # pylint: disable=invalid-name return unittest.skipUnless(in_git, 'outside git tree')(test_item) @@ -129,7 +129,8 @@ class QubesTestCase(unittest.TestCase): :param xml2: second element :type xml1: :py:class:`lxml.etree._Element` :type xml2: :py:class:`lxml.etree._Element` - ''' + ''' # pylint: disable=invalid-name + self.assertEqual(xml1.tag, xml2.tag) self.assertEqual(xml1.text, xml2.text) self.assertItemsEqual(xml1.keys(), xml2.keys()) @@ -148,7 +149,7 @@ class QubesTestCase(unittest.TestCase): an event :param list kwargs: when given, all items must appear in kwargs passed \ to an event - ''' + ''' # pylint: disable=invalid-name for ev, ev_args, ev_kwargs in emitter.fired_events: if ev != event: @@ -173,7 +174,7 @@ class QubesTestCase(unittest.TestCase): an event :param list kwargs: when given, all items must appear in kwargs passed \ to an event - ''' + ''' # pylint: disable=invalid-name for ev, ev_args, ev_kwargs in emitter.fired_events: if ev != event: @@ -202,12 +203,13 @@ class QubesTestCase(unittest.TestCase): :param lxml.etree._Element xml: XML element instance to check :param str file: filename of Relax NG schema :param str schema: optional explicit schema string - ''' + ''' # pylint: disable=invalid-name,redefined-builtin if schema is not None and file is None: relaxng = schema if isinstance(relaxng, str): relaxng = lxml.etree.XML(relaxng) + # pylint: disable=protected-access if isinstance(relaxng, lxml.etree._Element): relaxng = lxml.etree.RelaxNG(relaxng) diff --git a/qubes/tests/events.py b/qubes/tests/events.py index 4e5ff9fd..bff9ca38 100644 --- a/qubes/tests/events.py +++ b/qubes/tests/events.py @@ -31,6 +31,7 @@ class TC_00_Emitter(qubes.tests.QubesTestCase): testevent_fired = [False] def on_testevent(subject, event): + # pylint: disable=unused-argument if event == 'testevent': testevent_fired[0] = True diff --git a/qubes/tests/init.py b/qubes/tests/init.py index f0223883..7bc28665 100644 --- a/qubes/tests/init.py +++ b/qubes/tests/init.py @@ -1,5 +1,6 @@ #!/usr/bin/python2 -O # vim: fileencoding=utf-8 +# pylint: disable=protected-access,pointless-statement # # The Qubes OS Project, https://www.qubes-os.org/ @@ -67,7 +68,7 @@ class TC_10_property(qubes.tests.QubesTestCase): try: class TestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder): testprop1 = qubes.property('testprop1') - except: + except: # pylint: disable=bare-except self.skipTest('TestHolder class definition failed') self.holder = TestHolder(None) @@ -348,6 +349,7 @@ class TC_30_VMCollection(qubes.tests.QubesTestCase): class TC_90_Qubes(qubes.tests.QubesTestCase): @qubes.tests.skipUnlessDom0 def test_000_init_empty(self): + # pylint: disable=no-self-use,unused-variable,bare-except try: os.unlink('/tmp/qubestest.xml') except: diff --git a/qubes/tests/run.py b/qubes/tests/run.py index 762ebb9b..49fd002a 100755 --- a/qubes/tests/run.py +++ b/qubes/tests/run.py @@ -45,6 +45,7 @@ class ANSIColor(dict): except curses.error: return + # pylint: disable=bad-whitespace self['black'] = curses.tparm(curses.tigetstr('setaf'), 0) self['red'] = curses.tparm(curses.tigetstr('setaf'), 1) self['green'] = curses.tparm(curses.tigetstr('setaf'), 2) @@ -58,6 +59,7 @@ class ANSIColor(dict): self['normal'] = curses.tigetstr('sgr0') def __missing__(self, key): + # pylint: disable=unused-argument,no-self-use return '' @@ -73,7 +75,7 @@ class ANSITestResult(unittest.TestResult): def __init__(self, stream, descriptions, verbosity): super(ANSITestResult, self).__init__(stream, descriptions, verbosity) self.stream = stream - self.showAll = verbosity > 1 + self.showAll = verbosity > 1 # pylint: disable=invalid-name self.dots = verbosity == 1 self.descriptions = descriptions @@ -88,7 +90,7 @@ class ANSITestResult(unittest.TestResult): return '{color[bold]}{}{color[normal]}'.format( err[0].__name__, color=self.color) - def getDescription(self, test): + def getDescription(self, test): # pylint: disable=invalid-name teststr = str(test).split('/') teststr[-1] = '{color[bold]}{}{color[normal]}'.format( teststr[-1], color=self.color) @@ -101,14 +103,14 @@ class ANSITestResult(unittest.TestResult): else: return teststr - def startTest(self, test): + def startTest(self, test): # pylint: disable=invalid-name super(ANSITestResult, self).startTest(test) if self.showAll: self.stream.write(self.getDescription(test)) self.stream.write(' ... ') self.stream.flush() - def addSuccess(self, test): + def addSuccess(self, test): # pylint: disable=invalid-name super(ANSITestResult, self).addSuccess(test) if self.showAll: self.stream.writeln('{color[green]}ok{color[normal]}'.format( @@ -117,7 +119,7 @@ class ANSITestResult(unittest.TestResult): self.stream.write('.') self.stream.flush() - def addError(self, test, err): + def addError(self, test, err): # pylint: disable=invalid-name super(ANSITestResult, self).addError(test, err) if self.showAll: self.stream.writeln( @@ -129,7 +131,7 @@ class ANSITestResult(unittest.TestResult): color=self.color)) self.stream.flush() - def addFailure(self, test, err): + def addFailure(self, test, err): # pylint: disable=invalid-name super(ANSITestResult, self).addFailure(test, err) if self.showAll: self.stream.writeln('{color[red]}FAIL{color[normal]}'.format( @@ -139,7 +141,7 @@ class ANSITestResult(unittest.TestResult): color=self.color)) self.stream.flush() - def addSkip(self, test, reason): + def addSkip(self, test, reason): # pylint: disable=invalid-name super(ANSITestResult, self).addSkip(test, reason) if self.showAll: self.stream.writeln( @@ -150,7 +152,7 @@ class ANSITestResult(unittest.TestResult): color=self.color)) self.stream.flush() - def addExpectedFailure(self, test, err): + def addExpectedFailure(self, test, err): # pylint: disable=invalid-name super(ANSITestResult, self).addExpectedFailure(test, err) if self.showAll: self.stream.writeln( @@ -161,7 +163,7 @@ class ANSITestResult(unittest.TestResult): color=self.color)) self.stream.flush() - def addUnexpectedSuccess(self, test): + def addUnexpectedSuccess(self, test): # pylint: disable=invalid-name super(ANSITestResult, self).addUnexpectedSuccess(test) if self.showAll: self.stream.writeln( @@ -173,7 +175,7 @@ class ANSITestResult(unittest.TestResult): color=self.color)) self.stream.flush() - def printErrors(self): + def printErrors(self): # pylint: disable=invalid-name if self.dots or self.showAll: self.stream.writeln() self.printErrorList( @@ -184,7 +186,7 @@ class ANSITestResult(unittest.TestResult): '{color[red]}FAIL{color[normal]}'.format(color=self.color), self.failures) - def printErrorList(self, flavour, errors): + def printErrorList(self, flavour, errors): # pylint: disable=invalid-name for test, err in errors: self.stream.writeln(self.separator1) self.stream.writeln('%s: %s' % (flavour, self.getDescription(test))) @@ -196,6 +198,7 @@ def demo(verbosity=2): import qubes.tests class TC_Demo(qubes.tests.QubesTestCase): '''Demo class''' + # pylint: disable=no-self-use def test_0_success(self): '''Demo test (success)''' pass diff --git a/qubes/tests/vm/adminvm.py b/qubes/tests/vm/adminvm.py index 02e8dd57..8bc3e316 100644 --- a/qubes/tests/vm/adminvm.py +++ b/qubes/tests/vm/adminvm.py @@ -30,10 +30,12 @@ import qubes.vm.adminvm import qubes.tests class TestVMM(object): + # pylint: disable=too-few-public-methods def __init__(self, offline_mode=False): self.offline_mode = offline_mode class TestHost(object): + # pylint: disable=too-few-public-methods def __init__(self, offline_mode=False): self.memory_total = 1000 @@ -51,7 +53,7 @@ class TC_00_AdminVM(qubes.tests.QubesTestCase): self.app = TestApp() self.vm = qubes.vm.adminvm.AdminVM(self.app, xml=None, qid=0, name='dom0') - except: + except: # pylint: disable=bare-except if self.id().endswith('.test_000_init'): raise self.skipTest('setup failed') @@ -85,6 +87,7 @@ class TC_00_AdminVM(qubes.tests.QubesTestCase): self.assertEqual(self.vm.get_disk_utilization(), 0) def test_305_get_disk_utilization_private_img(self): + # pylint: disable=invalid-name self.assertEqual(self.vm.get_disk_utilization_private_img(), 0) def test_306_get_private_img_sz(self): diff --git a/qubes/tests/vm/init.py b/qubes/tests/vm/init.py index ea442b65..9827eca9 100644 --- a/qubes/tests/vm/init.py +++ b/qubes/tests/vm/init.py @@ -1,5 +1,6 @@ #!/usr/bin/python2 -O # vim: fileencoding=utf-8 +# pylint: disable=protected-access # # The Qubes OS Project, https://www.qubes-os.org/ diff --git a/qubes/tests/vm/qubesvm.py b/qubes/tests/vm/qubesvm.py index 30ed92fa..2cb86862 100644 --- a/qubes/tests/vm/qubesvm.py +++ b/qubes/tests/vm/qubesvm.py @@ -1,5 +1,6 @@ #!/usr/bin/python2 -O # vim: fileencoding=utf-8 +# pylint: disable=protected-access # # The Qubes OS Project, https://www.qubes-os.org/ @@ -31,10 +32,12 @@ import qubes.tests class TestProp(object): + # pylint: disable=too-few-public-methods __name__ = 'testprop' class TestVM(object): + # pylint: disable=too-few-public-methods def __init__(self): self.running = False self.installed_by_rpm = False @@ -68,14 +71,17 @@ class TC_00_setters(qubes.tests.QubesTestCase): 'test_name-1') def test_011_setter_name_longer_than_31(self): + # pylint: disable=invalid-name with self.assertRaises(ValueError): qubes.vm.qubesvm._setter_name(self.vm, self.prop, 't' * 32) def test_012_setter_name_illegal_character(self): + # pylint: disable=invalid-name with self.assertRaises(ValueError): qubes.vm.qubesvm._setter_name(self.vm, self.prop, 'test#') def test_013_setter_name_first_not_letter(self): + # pylint: disable=invalid-name with self.assertRaises(ValueError): qubes.vm.qubesvm._setter_name(self.vm, self.prop, '1test') @@ -85,6 +91,7 @@ class TC_00_setters(qubes.tests.QubesTestCase): qubes.vm.qubesvm._setter_name(self.vm, self.prop, 'testname') def test_015_setter_name_installed_by_rpm(self): + # pylint: disable=invalid-name self.vm.installed_by_rpm = True with self.assertRaises(qubes.QubesException): qubes.vm.qubesvm._setter_name(self.vm, self.prop, 'testname') diff --git a/qubes/vm/__init__.py b/qubes/vm/__init__.py index 5d33101e..d8632f05 100644 --- a/qubes/vm/__init__.py +++ b/qubes/vm/__init__.py @@ -137,11 +137,13 @@ class BaseVM(qubes.PropertyHolder): provides basic framework. It contains no management logic. For that, see :py:class:`qubes.vm.qubesvm.QubesVM`. ''' + # pylint: disable=no-member __metaclass__ = BaseVMMeta def __init__(self, app, xml, load_stage=2, services={}, devices=None, tags={}, *args, **kwargs): + # pylint: disable=redefined-outer-name #: mother :py:class:`qubes.Qubes` object self.app = app @@ -217,7 +219,7 @@ class BaseVM(qubes.PropertyHolder): :param lxml.etree._Element xml: XML node reference :param int load_stage: do not change the default (2) unless you know, \ what you are doing - ''' + ''' # pylint: disable=redefined-outer-name if xml is None: return cls(app) diff --git a/qubes/vm/adminvm.py b/qubes/vm/adminvm.py index 8b14bc28..aae10dee 100644 --- a/qubes/vm/adminvm.py +++ b/qubes/vm/adminvm.py @@ -141,7 +141,7 @@ class AdminVM(qubes.vm.qubesvm.QubesVM): .. seealso: :py:meth:`qubes.vm.qubesvm.QubesVM.start` - ''' + ''' # pylint: disable=unused-argument raise qubes.QubesException('Cannot start Dom0 fake domain!') diff --git a/qubes/vm/qubesvm.py b/qubes/vm/qubesvm.py index b4c05302..7e7b282f 100644 --- a/qubes/vm/qubesvm.py +++ b/qubes/vm/qubesvm.py @@ -47,6 +47,7 @@ import qubes.vm qmemman_present = False try: + # pylint: disable=import-error import qubes.qmemman_client qmemman_present = True except ImportError: @@ -54,6 +55,7 @@ except ImportError: def _setter_qid(self, prop, value): + # pylint: disable=unused-argument if not 0 <= value <= qubes.config.max_qid: raise ValueError( '{} value must be between 0 and qubes.config.max_qid'.format( @@ -85,6 +87,7 @@ def _setter_name(self, prop, value): def _setter_kernel(self, prop, value): + # pylint: disable=unused-argument if not os.path.exists(os.path.join(system_path[ 'qubes_kernels_base_dir'], value)): raise qubes.QubesException('Kernel {!r} not installed'.format(value)) @@ -381,6 +384,8 @@ class QubesVM(qubes.vm.BaseVM): @property def gateway(self): '''Gateway for other domains that use this domain as netvm.''' + # pylint: disable=no-self-use + # This is gateway IP for _other_ VMs, so make sense only in NetVMs return None @@ -458,6 +463,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('property-set:label') def on_property_set_label(self, event, name, new_label, old_label=None): + # pylint: disable=unused-argument if self.icon_path: try: os.remove(self.icon_path) @@ -473,6 +479,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('property-del:netvm') def on_property_del_netvm(self, event, name, old_netvm): + # pylint: disable=unused-argument # we are changing to default netvm new_netvm = self.netvm if new_netvm == old_netvm: @@ -482,6 +489,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('property-set:netvm') def on_property_set_netvm(self, event, name, new_netvm, old_netvm=None): + # pylint: disable=unused-argument if self.is_running() and new_netvm is not None \ and not new_netvm.is_running(): raise QubesException("Cannot dynamically attach to stopped NetVM") @@ -524,6 +532,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('property-pre-set:name') def on_property_pre_set_name(self, event, name, newvalue, oldvalue=None): + # pylint: disable=unused-argument # TODO not self.is_stopped() would be more appropriate if self.is_running(): raise QubesException('Cannot change name of running domain') @@ -531,6 +540,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('property-pre-set:dir_path') def on_property_pre_set_name(self, event, name, newvalue, oldvalue=None): + # pylint: disable=unused-argument # TODO not self.is_stopped() would be more appropriate if self.is_running(): raise QubesException('Cannot change dir_path of running domain') @@ -538,11 +548,13 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('property-set:dir_path') def on_property_set_dir_path(self, event, name, newvalue, oldvalue=None): + # pylint: disable=unused-argument self.storage.rename(newvalue, oldvalue) @qubes.events.handler('property-set:name') def on_property_set_name(self, event, name, new_name, old_name=None): + # pylint: disable=unused-argument if self._libvirt_domain is not None: self.libvirt_domain.undefine() self._libvirt_domain = None @@ -574,6 +586,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('property-pre-set:autostart') def on_property_pre_set_autostart(self, event, prop, name, value, oldvalue=None): + # pylint: disable=unused-argument if subprocess.call(['sudo', 'systemctl', ('enable' if value else 'disable'), 'qubes-vm@{}.service'.format(self.name)]): @@ -582,6 +595,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('device-pre-attached:pci') def on_device_pre_attached_pci(self, event, pci): + # pylint: disable=unused-argument if not os.path.exists('/sys/bus/pci/devices/0000:%s' % pci): raise QubesException("Invalid PCI device: %s" % pci) if not self.is_running(): @@ -600,6 +614,7 @@ class QubesVM(qubes.vm.BaseVM): @qubes.events.handler('device-pre-detached:pci') def on_device_pre_detached_pci(self, event, pci): + # pylint: disable=unused-argument if not self.is_running(): return @@ -836,7 +851,7 @@ class QubesVM(qubes.vm.BaseVM): raise QubesException( 'Error while starting the {!r} VM: {!s}'.format( self.name, e)) - except (MemoryError) as err: + except MemoryError: raise QubesException('Not enough memory to start {!r} VM! ' 'Close one or more running VMs and try again.'.format( self.name)) @@ -907,7 +922,7 @@ class QubesVM(qubes.vm.BaseVM): :param str user: username to run service as :param bool passio_popen: passed verbatim to :py:meth:`run` :param str input: string passed as input to service - ''' + ''' # pylint: disable=redefined-builtin if input is not None and passio_popen is not None: raise ValueError("'input' and 'passio_popen' cannot be used " @@ -1021,6 +1036,7 @@ class QubesVM(qubes.vm.BaseVM): ''' if source_template is None: + # pylint: disable=no-member source_template = self.template assert source_template is not None @@ -1247,8 +1263,7 @@ class QubesVM(qubes.vm.BaseVM): https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainState Libvirt API for changing state of a domain. - - ''' + ''' # pylint: disable=too-many-return-statements libvirt_domain = self.libvirt_domain if libvirt_domain is None: @@ -1435,7 +1450,7 @@ class QubesVM(qubes.vm.BaseVM): :rtype: FIXME .. seealso:: :py:meth:`get_private_img_sz` - ''' + ''' # pylint: disable=invalid-name return qubes.utils.get_disk_usage(self.private_img) @@ -1520,6 +1535,7 @@ class QubesVM(qubes.vm.BaseVM): # Makes sense only on VM based on template if self.template is None: return False + # pylint: disable=no-member if not self.is_running(): return False