diff --git a/tcp_tests/helpers/env_config.py b/tcp_tests/helpers/env_config.py
index 0331ac9..81e6764 100644
--- a/tcp_tests/helpers/env_config.py
+++ b/tcp_tests/helpers/env_config.py
@@ -19,7 +19,6 @@
 import os
 import re
 
-#from devops.helpers import templates
 from devops import error
 import json
 import yaml
@@ -316,7 +315,7 @@
                 )
             )
 
-            #self.config = templates.yaml_template_load(filename)
+            # self.config = templates.yaml_template_load(filename)
             self.config = yaml_template_load(filename, options)
         else:
             LOG.error("Template filename is not set, loading config " +
diff --git a/tcp_tests/helpers/ext.py b/tcp_tests/helpers/ext.py
index 98853f5..e525eea 100644
--- a/tcp_tests/helpers/ext.py
+++ b/tcp_tests/helpers/ext.py
@@ -23,6 +23,7 @@
         return collections.namedtuple('Enum', names)(*values)
     return collections.namedtuple('Enum', values)(*values)
 
+
 UNDERLAY_NODE_ROLES = enum(
     'salt_master',
     'salt_minion',
@@ -32,11 +33,13 @@
     'decapod_all',
 )
 
+
 NETWORK_TYPE = enum(
     'private',
     'admin'
 )
 
+
 SNAPSHOT = enum(
     'hardware',
     'underlay',
@@ -51,6 +54,7 @@
     'decapod_deployed',
 )
 
+
 LOG_LEVELS = enum(
     'INFO',
     'WARNING',
diff --git a/tcp_tests/helpers/netchecker.py b/tcp_tests/helpers/netchecker.py
index 76e7640..c83cac4 100644
--- a/tcp_tests/helpers/netchecker.py
+++ b/tcp_tests/helpers/netchecker.py
@@ -331,8 +331,9 @@
 
 
 @utils.retry(3, requests.exceptions.RequestException)
-def get_connectivity_status(k8sclient, netchecker_pod_port=NETCHECKER_NODE_PORT,
-               pod_name='netchecker-server', namespace='default'):
+def get_connectivity_status(k8sclient,
+                            netchecker_pod_port=NETCHECKER_NODE_PORT,
+                            pod_name='netchecker-server', namespace='default'):
 
     netchecker_srv_pod_names = [pod.name for pod in
                                 k8sclient.pods.list(namespace=namespace)
@@ -362,7 +363,7 @@
               if pod_name in pod.name], phase='Running', timeout=600)
 
 
-def check_network(k8sclient,  netchecker_pod_port,
+def check_network(k8sclient, netchecker_pod_port,
                   namespace='default', works=True):
     if works:
         assert get_connectivity_status(
@@ -376,11 +377,13 @@
 
 def wait_check_network(k8sclient, namespace='default', works=True, timeout=120,
                        interval=5, netchecker_pod_port=NETCHECKER_NODE_PORT):
-    helpers.wait_pass(lambda: check_network(k8sclient,
-                                            netchecker_pod_port=netchecker_pod_port,
-                                            namespace=namespace,
-                                            works=works),
-                      timeout=timeout, interval=interval)
+    helpers.wait_pass(
+        lambda: check_network(
+            k8sclient, netchecker_pod_port=netchecker_pod_port,
+            namespace=namespace,
+            works=works),
+        timeout=timeout,
+        interval=interval)
 
 
 def calico_block_traffic_on_node(underlay, target_node):
@@ -559,7 +562,7 @@
 
 
 def get_service_port(k8sclient, service_name='netchecker',
-                        namespace='netchecker'):
+                     namespace='netchecker'):
     full_service_name = [service.name for service
                          in k8sclient.services.list(namespace=namespace)
                          if service_name in service.name]
diff --git a/tcp_tests/helpers/oslo_cfg_types.py b/tcp_tests/helpers/oslo_cfg_types.py
index 135798f..d9d091b 100644
--- a/tcp_tests/helpers/oslo_cfg_types.py
+++ b/tcp_tests/helpers/oslo_cfg_types.py
@@ -112,5 +112,5 @@
 
         # Print info about default environment variables to console
         print ('{}={}  # {}'.format(env_var_name,
-                                   kwargs.get('default', ''),
-                                   kwargs.get('help', '')))
+                                    kwargs.get('default', ''),
+                                    kwargs.get('help', '')))
diff --git a/tcp_tests/helpers/utils.py b/tcp_tests/helpers/utils.py
index bf4eab4..922f5f2 100644
--- a/tcp_tests/helpers/utils.py
+++ b/tcp_tests/helpers/utils.py
@@ -336,11 +336,13 @@
 def render_template(file_path, options=None):
     required_env_vars = set()
     optional_env_vars = dict()
+
     def os_env(var_name, default=None):
         var = os.environ.get(var_name, default)
 
         if var is None:
-            raise Exception("Environment variable '{0}' is undefined!".format(var_name))
+            raise Exception("Environment variable '{0}' is undefined!"
+                            .format(var_name))
 
         if default is None:
             required_env_vars.add(var_name)
@@ -351,13 +353,14 @@
 
     if options is None:
         options = {}
-    options.update({'os_env': os_env,})
+    options.update({'os_env': os_env, })
 
     LOG.info("Reading template {0}".format(file_path))
 
     path, filename = os.path.split(file_path)
     environment = jinja2.Environment(
-        loader=jinja2.FileSystemLoader([path, os.path.dirname(path)], followlinks=True))
+        loader=jinja2.FileSystemLoader([path, os.path.dirname(path)],
+                                       followlinks=True))
     template = environment.get_template(filename).render(options)
 
     if required_env_vars:
