summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.pylintrc39
-rw-r--r--cloudinit/net/network_state.py5
-rw-r--r--cloudinit/net/renderer.py5
-rw-r--r--cloudinit/sources/DataSourceAltCloud.py3
-rw-r--r--cloudinit/sources/DataSourceOpenNebula.py4
-rw-r--r--cloudinit/sources/__init__.py2
-rw-r--r--cloudinit/url_helper.py2
-rw-r--r--tox.ini10
8 files changed, 61 insertions, 9 deletions
diff --git a/.pylintrc b/.pylintrc
new file mode 100644
index 00000000..b8cda03c
--- /dev/null
+++ b/.pylintrc
@@ -0,0 +1,39 @@
+[MASTER]
+
+# --go-faster, use multiple processes to speed up Pylint
+jobs=4
+
+
+[MESSAGES CONTROL]
+
+# Errors only
+disable=C, F, I, R, W
+
+
+[REPORTS]
+
+# Set the output format. Available formats are text, parseable, colorized, msvs
+output-format=colorized
+
+# Just the errors please, no full report
+reports=no
+
+
+[TYPECHECK]
+
+# List of module names for which member attributes should not be checked
+# (useful for modules/projects where namespaces are manipulated during runtime
+# and thus existing member attributes cannot be deduced by static analysis. It
+# supports qualified module names, as well as Unix pattern matching.
+ignored-modules=six.moves,pkg_resources
+
+# List of class names for which member attributes should not be checked (useful
+# for classes with dynamically set attributes). This supports the use of
+# qualified names.
+ignored-classes=optparse.Values,thread._local
+
+# List of members which are set dynamically and missed by pylint inference
+# system, and so shouldn't trigger E1101 when accessed. Python regular
+# expressions are accepted.
+generated-members=types,http.client,command_handlers
+
diff --git a/cloudinit/net/network_state.py b/cloudinit/net/network_state.py
index 701aaa4e..692b6007 100644
--- a/cloudinit/net/network_state.py
+++ b/cloudinit/net/network_state.py
@@ -214,7 +214,7 @@ class NetworkStateInterpreter(object):
return util.yaml_dumps(self._network_state)
def as_dict(self):
- return {'version': self.version, 'config': self.config}
+ return {'version': self._version, 'config': self._config}
def get_network_state(self):
ns = self.network_state
@@ -611,7 +611,8 @@ class NetworkStateInterpreter(object):
self.handle_vlan(vlan_cmd)
def handle_wifis(self, command):
- raise NotImplemented('NetworkState V2: Skipping wifi configuration')
+ raise NotImplementedError("NetworkState V2: "
+ "Skipping wifi configuration")
def _v2_common(self, cfg):
LOG.debug('v2_common: handling config:\n%s', cfg)
diff --git a/cloudinit/net/renderer.py b/cloudinit/net/renderer.py
index a5b2b573..c68658dc 100644
--- a/cloudinit/net/renderer.py
+++ b/cloudinit/net/renderer.py
@@ -5,6 +5,7 @@
#
# This file is part of cloud-init. See LICENSE file for license information.
+import abc
import six
from .network_state import parse_net_config_data
@@ -37,6 +38,10 @@ class Renderer(object):
iface['mac_address']))
return content.getvalue()
+ @abc.abstractmethod
+ def render_network_state(self, network_state, target=None):
+ """Render network state."""
+
def render_network_config(self, network_config, target=None):
return self.render_network_state(
network_state=parse_net_config_data(network_config), target=target)
diff --git a/cloudinit/sources/DataSourceAltCloud.py b/cloudinit/sources/DataSourceAltCloud.py
index c2b0eac2..8528fa10 100644
--- a/cloudinit/sources/DataSourceAltCloud.py
+++ b/cloudinit/sources/DataSourceAltCloud.py
@@ -201,8 +201,7 @@ class DataSourceAltCloud(sources.DataSource):
util.logexc(LOG, 'Failed command: %s\n%s', ' '.join(cmd), _err)
return False
except OSError as _err:
- util.logexc(LOG, 'Failed command: %s\n%s', ' '.join(cmd),
- _err.message)
+ util.logexc(LOG, 'Failed command: %s\n%s', ' '.join(cmd), _err)
return False
try:
diff --git a/cloudinit/sources/DataSourceOpenNebula.py b/cloudinit/sources/DataSourceOpenNebula.py
index 1f1baf46..cd75e6ea 100644
--- a/cloudinit/sources/DataSourceOpenNebula.py
+++ b/cloudinit/sources/DataSourceOpenNebula.py
@@ -286,12 +286,12 @@ def parse_shell_config(content, keylist=None, bash=None, asuser=None,
output = output[0:-1] # remove trailing null
# go through output. First _start_ is for 'preset', second for 'target'.
- # Add to target only things were changed and not in volitile
+ # Add to ret only things were changed and not in excluded.
for line in output.split("\x00"):
try:
(key, val) = line.split("=", 1)
if target is preset:
- target[key] = val
+ preset[key] = val
elif (key not in excluded and
(key in keylist_in or preset.get(key) != val)):
ret[key] = val
diff --git a/cloudinit/sources/__init__.py b/cloudinit/sources/__init__.py
index 18294505..5c99437e 100644
--- a/cloudinit/sources/__init__.py
+++ b/cloudinit/sources/__init__.py
@@ -50,7 +50,7 @@ class DataSource(object):
self.distro = distro
self.paths = paths
self.userdata = None
- self.metadata = None
+ self.metadata = {}
self.userdata_raw = None
self.vendordata = None
self.vendordata_raw = None
diff --git a/cloudinit/url_helper.py b/cloudinit/url_helper.py
index 312b0460..2f6a158e 100644
--- a/cloudinit/url_helper.py
+++ b/cloudinit/url_helper.py
@@ -45,7 +45,7 @@ try:
from distutils.version import LooseVersion
import pkg_resources
_REQ = pkg_resources.get_distribution('requests')
- _REQ_VER = LooseVersion(_REQ.version)
+ _REQ_VER = LooseVersion(_REQ.version) # pylint: disable=no-member
if _REQ_VER >= LooseVersion('0.8.8'):
SSL_ENABLED = True
if _REQ_VER >= LooseVersion('0.7.0') and _REQ_VER < LooseVersion('1.0.0'):
diff --git a/tox.ini b/tox.ini
index f016f206..bf9046af 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
[tox]
-envlist = py27, py3, flake8, xenial
+envlist = py27, py3, flake8, xenial, pylint
recreate = True
[testenv]
@@ -17,6 +17,10 @@ commands = {envpython} -m flake8 {posargs:cloudinit/ tests/ tools/}
setenv =
LC_ALL = en_US.utf-8
+[testenv:pylint]
+deps = pylint==1.6.5
+commands = {envpython} -m pylint {posargs:cloudinit}
+
[testenv:py3]
basepython = python3
commands = {envpython} -m nose {posargs:--with-coverage \
@@ -88,6 +92,10 @@ deps = pycodestyle
commands = {envpython} -m pyflakes {posargs:cloudinit/ tests/ tools/}
deps = pyflakes
+[testenv:tip-pylint]
+commands = {envpython} -m pylint {posargs:cloudinit}
+deps = pylint
+
[testenv:citest]
basepython = python3
commands = {envpython} -m tests.cloud_tests {posargs}