Hi Dave,

PFA updated patch.

On Mon, Feb 5, 2018 at 7:55 PM, Dave Page <dp...@pgadmin.org> wrote:

> Hi
>
> On Fri, Feb 2, 2018 at 5:46 PM, Murtuza Zabuawala <
> murtuza.zabuaw...@enterprisedb.com> wrote:
>
>> Hi,
>>
>> PFA patch to fix PEP-8 issues in feature_tests, dashboard, about and misc
>> module's python code.
>>
>> To verify the changes,
>> 1) activate virtual environemt
>> 2) Navigate to ../web directory and run following
>> pycodestyle --config=.pycodestyle ./pgadmin/misc/
>> pycodestyle --config=.pycodestyle ./pgadmin/about/
>> pycodestyle --config=.pycodestyle ./pgadmin/dashboard/
>> pycodestyle --config=.pycodestyle ./pgadmin/feature_tests/
>>
>
> I seem to be getting the following failure pretty consistently with this
> patch applied:
>
> ======================================================================
> ERROR: runTest (pgadmin.feature_tests.pg_data
> type_validation_test.PGDataypeFeatureTest)
> Test checks for PG data-types output
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File 
> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_datatype_validation_test.py",
> line 135, in runTest
>     self._check_datatype()
>   File 
> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_datatype_validation_test.py",
> line 161, in _check_datatype
>     query = self.construct_select_query(batch)
>   File 
> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_datatype_validation_test.py",
> line 214, in construct_select_query
>     if not self._is_datatype_available_in_current_database(datatype):
>   File 
> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/pg_datatype_validation_test.py",
> line 252, in _is_datatype_available_in_current_database
>     valid_version = self.database_version >= type_minimum_version[datatype]
> KeyError: u''
>
​
Fixed
​


>
> ----------------------------------------------------------------------
> Ran 10 tests in 209.730s
>
> FAILED (errors=1, skipped=1)
>
> ======================================================================
> Test Result Summary
> ======================================================================
>
> Regression - PG 10:
>
> 8 tests passed
> 1 test failed:
> PGDataypeFeatureTest (Test checks for PG data-types output)
> 1 test skipped:
> CheckDebuggerForXssFeatureTest (Tests to check if Debugger is vulnerable
> to XSS)
>
> ======================================================================
>
> I also got the following whilst testing:
>
> (pgadmin4)piranha:web dpage$ pycodestyle --config=.pycodestyle
> ./pgadmin/feature_tests/
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:33: [E501] line too
> long (95 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:34: [E501] line too
> long (95 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:42: [E501] line too
> long (87 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:51: [E501] line too
> long (114 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:54: [E501] line too
> long (90 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:69: [E501] line too
> long (91 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:75: [E501] line too
> long (89 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:82: [E501] line too
> long (100 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:90: [E501] line too
> long (86 > 79 characters)
> ./pgadmin/feature_tests/keyboard_shortcut_test.py:95: [W391] blank line
> at end of file
> 9       E501 line too long (95 > 79 characters)
> 1       W391 blank line at end of file
> 10
>

​This file was added after I sent the patch :)​

​BTW I have the issues now.​


>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
diff --git a/web/pgadmin/about/__init__.py b/web/pgadmin/about/__init__.py
index 7a8ef95..98a4dd6 100644
--- a/web/pgadmin/about/__init__.py
+++ b/web/pgadmin/about/__init__.py
@@ -11,32 +11,31 @@
 MODULE_NAME = 'about'
 
 import sys
-
 from flask import Response, render_template, __version__, url_for
 from flask_babel import gettext
 from flask_security import current_user, login_required
 from pgadmin.utils import PgAdminModule
 from pgadmin.utils.menu import MenuItem
-
 import config
 
 
 class AboutModule(PgAdminModule):
     def get_own_menuitems(self):
         appname = config.APP_NAME
+
         if hasattr(str, 'decode'):
             appname = appname.decode('utf-8')
+
         return {
             'help_items': [
-                MenuItem(name='mnu_about',
-                         priority=999,
-                         module="pgAdmin.About",
-                         callback='about_show',
-                         icon='fa fa-info-circle',
-                         label=gettext(u'About %(appname)s',
-                                       appname=appname
-                                       )
-                         )
+                MenuItem(
+                    name='mnu_about',
+                    priority=999,
+                    module="pgAdmin.About",
+                    callback='about_show',
+                    icon='fa fa-info-circle',
+                    label=gettext(u'About %(appname)s', appname=appname)
+                )
             ]
         }
 
@@ -50,8 +49,8 @@ class AboutModule(PgAdminModule):
     def get_exposed_url_endpoints(self):
         return ['about.index']
 
-blueprint = AboutModule(MODULE_NAME, __name__,
-                        static_url_path='')
+
+blueprint = AboutModule(MODULE_NAME, __name__, static_url_path='')
 
 
 ##########################################################################
@@ -61,20 +60,29 @@ blueprint = AboutModule(MODULE_NAME, __name__,
 @login_required
 def index():
     """Render the about box."""
-    info = {'python_version': sys.version, 'flask_version': __version__}
-    if config.SERVER_MODE is True:
+    info = {
+        'python_version': sys.version,
+        'flask_version': __version__
+    }
+
+    if config.SERVER_MODE:
         info['app_mode'] = gettext('Server')
     else:
         info['app_mode'] = gettext('Desktop')
+
     info['current_user'] = current_user.email
 
-    return render_template(MODULE_NAME + '/index.html', info=info, _=gettext)
+    return render_template(
+        MODULE_NAME + '/index.html', info=info, _=gettext
+    )
 
 
 @blueprint.route("/about.js")
 @login_required
 def script():
     """render the required javascript"""
-    return Response(response=render_template("about/about.js", _=gettext),
-                    status=200,
-                    mimetype="application/javascript")
+    return Response(
+        response=render_template("about/about.js", _=gettext),
+        status=200,
+        mimetype="application/javascript"
+    )
diff --git a/web/pgadmin/dashboard/__init__.py 
b/web/pgadmin/dashboard/__init__.py
index 06c0b0a..0259a8f 100644
--- a/web/pgadmin/dashboard/__init__.py
+++ b/web/pgadmin/dashboard/__init__.py
@@ -61,7 +61,8 @@ class DashboardModule(PgAdminModule):
                 isPrivate=False,
                 limit=1,
                 isIframe=False,
-                canHide=True).__dict__
+                canHide=True
+            ).__dict__
         ]
 
     def register_preferences(self):
@@ -70,8 +71,9 @@ class DashboardModule(PgAdminModule):
         Register preferences for this module.
         """
         # Register options for the PG and PPAS help paths
-        self.dashboard_preference = Preferences('dashboards',
-                                                gettext('Dashboards'))
+        self.dashboard_preference = Preferences(
+            'dashboards', gettext('Dashboards')
+        )
 
         self.session_stats_refresh = self.dashboard_preference.register(
             'dashboards', 'session_stats_refresh',
@@ -149,6 +151,7 @@ class DashboardModule(PgAdminModule):
             'dashboard.get_config_by_server_id',
         ]
 
+
 blueprint = DashboardModule(MODULE_NAME, __name__)
 
 
@@ -168,11 +171,13 @@ def check_precondition(f):
             kwargs['sid']
         )
 
+        stats_type = ('activity', 'prepared', 'locks', 'config')
+
         # Below check handle the case where existing server is deleted
         # by user and python server will raise exception if this check
         # is not introduce.
         if g.manager is None:
-            if f.__name__ in ['activity', 'prepared', 'locks', 'config']:
+            if f.__name__ in stats_type:
                 return precondition_required(
                     gettext("Please connect to the selected server"
                             " to view the table.")
@@ -187,7 +192,7 @@ def check_precondition(f):
 
         # If DB not connected then return error to browser
         if not g.conn.connected():
-            if f.__name__ in ['activity', 'prepared', 'locks', 'config']:
+            if f.__name__ in stats_type:
                 return precondition_required(
                     gettext("Please connect to the selected server"
                             " to view the table.")
@@ -202,7 +207,7 @@ def check_precondition(f):
             db_conn = g.manager.connection(did=kwargs['did'])
             # If the selected DB not connected then return error to browser
             if not db_conn.connected():
-                if f.__name__ in ['activity', 'prepared', 'locks', 'config']:
+                if f.__name__ in stats_type:
                     return precondition_required(
                         gettext("Please connect to the selected database"
                                 " to view the table.")
@@ -220,8 +225,7 @@ def check_precondition(f):
         # Include server_type in template_path when server_type is gpdb
         g.template_path = 'dashboard/sql/' + (
             '#{0}#{1}#'.format(g.server_type, g.version)
-            if g.server_type == 'gpdb' else
-            '#{0}#'.format(g.version)
+            if g.server_type == 'gpdb' else '#{0}#'.format(g.version)
         )
 
         return f(*args, **kwargs)
@@ -233,10 +237,14 @@ def check_precondition(f):
 @login_required
 def script():
     """render the required javascript"""
-    return Response(response=render_template("dashboard/js/dashboard.js",
-                                             _=gettext),
-                    status=200,
-                    mimetype="application/javascript")
+    return Response(
+        response=render_template(
+            "dashboard/js/dashboard.js",
+            _=gettext
+        ),
+        status=200,
+        mimetype="application/javascript"
+    )
 
 
 @blueprint.route('/', endpoint='index')
@@ -283,16 +291,20 @@ def index(sid=None, did=None):
     if sid is None and did is None:
         return render_template('/dashboard/welcome_dashboard.html')
     if did is None:
-        return render_template('/dashboard/server_dashboard.html',
-                               sid=sid,
-                               rates=rates,
-                               version=g.version)
+        return render_template(
+            '/dashboard/server_dashboard.html',
+            sid=sid,
+            rates=rates,
+            version=g.version
+        )
     else:
-        return render_template('/dashboard/database_dashboard.html',
-                               sid=sid,
-                               did=did,
-                               rates=rates,
-                               version=g.version)
+        return render_template(
+            '/dashboard/database_dashboard.html',
+            sid=sid,
+            did=did,
+            rates=rates,
+            version=g.version
+        )
 
 
 def get_data(sid, did, template):
@@ -327,7 +339,8 @@ def get_data(sid, did, template):
 
 @blueprint.route('/session_stats/', endpoint='session_stats')
 @blueprint.route(
-    '/session_stats/<int:sid>', endpoint='get_session_stats_by_sever_id')
+    '/session_stats/<int:sid>', endpoint='get_session_stats_by_sever_id'
+)
 @blueprint.route(
     '/session_stats/<int:sid>/<int:did>',
     endpoint='get_session_stats_by_database_id'
@@ -362,7 +375,8 @@ def tps_stats(sid=None, did=None):
 @blueprint.route('/ti_stats/', endpoint='ti_stats')
 @blueprint.route('/ti_stats/<int:sid>', endpoint='ti_stats_by_server_id')
 @blueprint.route(
-    '/ti_stats/<int:sid>/<int:did>', endpoint='ti_stats_by_database_id')
+    '/ti_stats/<int:sid>/<int:did>', endpoint='ti_stats_by_database_id'
+)
 @login_required
 @check_precondition
 def ti_stats(sid=None, did=None):
@@ -377,7 +391,8 @@ def ti_stats(sid=None, did=None):
 @blueprint.route('/to_stats/', endpoint='to_stats')
 @blueprint.route('/to_stats/<int:sid>', endpoint='to_stats_by_server_id')
 @blueprint.route(
-    '/to_stats/<int:sid>/<int:did>', endpoint='to_stats_by_database_id')
+    '/to_stats/<int:sid>/<int:did>', endpoint='to_stats_by_database_id'
+)
 @login_required
 @check_precondition
 def to_stats(sid=None, did=None):
@@ -392,7 +407,8 @@ def to_stats(sid=None, did=None):
 @blueprint.route('/bio_stats/', endpoint='bio_stats')
 @blueprint.route('/bio_stats/<int:sid>', endpoint='bio_stats_by_server_id')
 @blueprint.route(
-    '/bio_stats/<int:sid>/<int:did>', endpoint='bio_stats_by_database_id')
+    '/bio_stats/<int:sid>/<int:did>', endpoint='bio_stats_by_database_id'
+)
 @login_required
 @check_precondition
 def bio_stats(sid=None, did=None):
@@ -407,7 +423,8 @@ def bio_stats(sid=None, did=None):
 @blueprint.route('/activity/', endpoint='activity')
 @blueprint.route('/activity/<int:sid>', endpoint='get_activity_by_server_id')
 @blueprint.route(
-    '/activity/<int:sid>/<int:did>', endpoint='get_activity_by_database_id')
+    '/activity/<int:sid>/<int:did>', endpoint='get_activity_by_database_id'
+)
 @login_required
 @check_precondition
 def activity(sid=None, did=None):
@@ -422,7 +439,8 @@ def activity(sid=None, did=None):
 @blueprint.route('/locks/', endpoint='locks')
 @blueprint.route('/locks/<int:sid>', endpoint='get_locks_by_server_id')
 @blueprint.route(
-    '/locks/<int:sid>/<int:did>', endpoint='get_locks_by_database_id')
+    '/locks/<int:sid>/<int:did>', endpoint='get_locks_by_database_id'
+)
 @login_required
 @check_precondition
 def locks(sid=None, did=None):
@@ -437,7 +455,8 @@ def locks(sid=None, did=None):
 @blueprint.route('/prepared/', endpoint='prepared')
 @blueprint.route('/prepared/<int:sid>', endpoint='get_prepared_by_server_id')
 @blueprint.route(
-    '/prepared/<int:sid>/<int:did>', endpoint='get_prepared_by_database_id')
+    '/prepared/<int:sid>/<int:did>', endpoint='get_prepared_by_database_id'
+)
 @login_required
 @check_precondition
 def prepared(sid=None, did=None):
@@ -488,6 +507,7 @@ def cancel_query(sid=None, did=None, pid=None):
         status=200
     )
 
+
 @blueprint.route(
     '/terminate_session/<int:sid>/<int:pid>', methods=['DELETE']
 )
diff --git 
a/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py 
b/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
index 04eee99..e26e993 100644
--- a/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
+++ b/web/pgadmin/feature_tests/copy_selected_query_results_feature_test.py
@@ -26,15 +26,18 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
     ]
 
     def before(self):
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
         test_utils.create_database(self.server, "acceptance_test_db")
-        test_utils.create_table(self.server, "acceptance_test_db", 
"test_table")
+        test_utils.create_table(
+            self.server, "acceptance_test_db", "test_table")
         self.page.add_server(self.server)
 
     def runTest(self):
@@ -62,7 +65,8 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
 
     def _copies_rows(self):
         pyperclip.copy("old clipboard contents")
-        self.page.find_by_xpath("//*[contains(@class, 
'slick-row')]/*[1]").click()
+        self.page.find_by_xpath(
+            "//*[contains(@class, 'slick-row')]/*[1]").click()
 
         self.page.find_by_xpath("//*[@id='btn-copy-row']").click()
 
@@ -71,7 +75,10 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
 
     def _copies_columns(self):
         pyperclip.copy("old clipboard contents")
-        self.page.find_by_xpath("//*[@data-test='output-column-header' and 
contains(., 'some_column')]").click()
+        self.page.find_by_xpath(
+            "//*[@data-test='output-column-header' and "
+            "contains(., 'some_column')]"
+        ).click()
         self.page.find_by_xpath("//*[@id='btn-copy-row']").click()
 
         self.assertEqual(
@@ -82,18 +89,24 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
 
     def _copies_row_using_keyboard_shortcut(self):
         pyperclip.copy("old clipboard contents")
-        self.page.find_by_xpath("//*[contains(@class, 
'slick-row')]/*[1]").click()
+        self.page.find_by_xpath(
+            "//*[contains(@class, 'slick-row')]/*[1]").click()
 
-        
ActionChains(self.page.driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
+        ActionChains(self.page.driver).key_down(
+            Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
 
         self.assertEqual('"Some-Name"\t"6"\t"some info"',
                          pyperclip.paste())
 
     def _copies_column_using_keyboard_shortcut(self):
         pyperclip.copy("old clipboard contents")
-        self.page.find_by_xpath("//*[@data-test='output-column-header' and 
contains(., 'some_column')]").click()
+        self.page.find_by_xpath(
+            "//*[@data-test='output-column-header' and "
+            "contains(., 'some_column')]"
+        ).click()
 
-        
ActionChains(self.page.driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
+        ActionChains(self.page.driver).key_down(
+            Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
 
         self.assertEqual(
             """\"Some-Name"
@@ -105,12 +118,21 @@ class 
CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
         pyperclip.copy("old clipboard contents")
 
         top_left_cell = self.page.find_by_xpath(
-            "//div[contains(@class, 'slick-cell') and contains(., 
'Some-Other-Name')]")
-        bottom_right_cell = self.page.find_by_xpath("//div[contains(@class, 
'slick-cell') and contains(., '14')]")
+            "//div[contains(@class, 'slick-cell') and "
+            "contains(., 'Some-Other-Name')]"
+        )
+        bottom_right_cell = self.page.find_by_xpath(
+            "//div[contains(@class, 'slick-cell') and contains(., '14')]")
+
+        ActionChains(
+            self.page.driver
+        ).click_and_hold(top_left_cell).move_to_element(
+            bottom_right_cell
+        ).release(bottom_right_cell).perform()
 
-        
ActionChains(self.page.driver).click_and_hold(top_left_cell).move_to_element(bottom_right_cell)
 \
-            .release(bottom_right_cell).perform()
-        
ActionChains(self.page.driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
+        ActionChains(
+            self.page.driver
+        ).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
 
         self.assertEqual("""\"Some-Other-Name"\t"22"
 "Yet-Another-Name"\t"14\"""", pyperclip.paste())
@@ -119,14 +141,24 @@ class 
CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
         pyperclip.copy("old clipboard contents")
 
         top_left_cell = self.page.find_by_xpath(
-            "//div[contains(@class, 'slick-cell') and contains(., 
'Some-Other-Name')]")
+            "//div[contains(@class, 'slick-cell') and "
+            "contains(., 'Some-Other-Name')]"
+        )
         initial_bottom_right_cell = self.page.find_by_xpath(
             "//div[contains(@class, 'slick-cell') and contains(., '14')]")
-        
ActionChains(self.page.driver).click_and_hold(top_left_cell).move_to_element(initial_bottom_right_cell)
 \
-            .release(initial_bottom_right_cell).perform()
+        ActionChains(
+            self.page.driver
+        ).click_and_hold(top_left_cell).move_to_element(
+            initial_bottom_right_cell
+        ).release(initial_bottom_right_cell).perform()
 
-        
ActionChains(self.page.driver).key_down(Keys.SHIFT).send_keys(Keys.ARROW_RIGHT).key_up(Keys.SHIFT).perform()
-        
ActionChains(self.page.driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
+        ActionChains(self.page.driver).key_down(Keys.SHIFT).send_keys(
+            Keys.ARROW_RIGHT
+        ).key_up(Keys.SHIFT).perform()
+
+        ActionChains(self.page.driver).key_down(
+            Keys.CONTROL
+        ).send_keys('c').key_up(Keys.CONTROL).perform()
 
         self.assertEqual("""\"Some-Other-Name"\t"22"\t"some other info"
 "Yet-Another-Name"\t"14"\t"cool info\"""", pyperclip.paste())
@@ -134,11 +166,16 @@ class 
CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
     def _shift_resizes_column_selection(self):
         pyperclip.copy("old clipboard contents")
 
-        self.page.find_by_xpath("//*[@data-test='output-column-header' and 
contains(., 'value')]").click()
-        
ActionChains(self.page.driver).key_down(Keys.SHIFT).send_keys(Keys.ARROW_LEFT) \
-            .key_up(Keys.SHIFT).perform()
+        self.page.find_by_xpath(
+            "//*[@data-test='output-column-header' and "
+            "contains(., 'value')]"
+        ).click()
+
+        ActionChains(self.page.driver).key_down(
+            Keys.SHIFT).send_keys(Keys.ARROW_LEFT).key_up(Keys.SHIFT).perform()
 
-        
ActionChains(self.page.driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
+        ActionChains(self.page.driver).key_down(
+            Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
 
         self.assertEqual(
             """\"Some-Name"\t"6"
@@ -150,7 +187,9 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
         pyperclip.copy("old clipboard contents")
 
         bottom_right_cell = self.page.find_by_xpath(
-            "//div[contains(@class, 'slick-cell') and contains(., 'cool 
info')]")
+            "//div[contains(@class, 'slick-cell') and "
+            "contains(., 'cool info')]"
+        )
 
         load_button = self.page.find_by_xpath("//button[@id='btn-load-file']")
         ActionChains(self.page.driver).click_and_hold(bottom_right_cell) \
@@ -158,7 +197,8 @@ class CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
             .release(load_button) \
             .perform()
 
-        
ActionChains(self.page.driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
+        ActionChains(self.page.driver).key_down(
+            Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
 
         self.assertEqual('"cool info"', pyperclip.paste())
 
@@ -166,10 +206,12 @@ class 
CopySelectedQueryResultsFeatureTest(BaseFeatureTest):
         self.page.close_query_tool()
         self.page.remove_server(self.server)
 
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
diff --git a/web/pgadmin/feature_tests/keyboard_shortcut_test.py 
b/web/pgadmin/feature_tests/keyboard_shortcut_test.py
index 0d3f28c..8a1f043 100644
--- a/web/pgadmin/feature_tests/keyboard_shortcut_test.py
+++ b/web/pgadmin/feature_tests/keyboard_shortcut_test.py
@@ -30,8 +30,14 @@ class KeyboardShortcutFeatureTest(BaseFeatureTest):
 
     def before(self):
         self.new_shortcuts = {
-            'mnu_file': {'shortcut': [Keys.ALT, Keys.SHIFT, 'i'], 'locator': 
'File main menu'},
-            'mnu_obj': {'shortcut': [Keys.ALT, Keys.SHIFT, 'j'], 'locator': 
'Object main menu'}
+            'mnu_file': {
+                'shortcut': [Keys.ALT, Keys.SHIFT, 'i'],
+                'locator': 'File main menu'
+            },
+            'mnu_obj': {
+                'shortcut': [Keys.ALT, Keys.SHIFT, 'j'],
+                'locator': 'Object main menu'
+            }
         }
 
         self.wait = WebDriverWait(self.page.driver, 10)
@@ -39,8 +45,8 @@ class KeyboardShortcutFeatureTest(BaseFeatureTest):
     def runTest(self):
         self._update_preferences()
         # On updating keyboard shortcuts, preference cache is updated.
-        # There is no UI event through which we can identify that the cache is 
updated,
-        # So, added time.sleep()
+        # There is no UI event through which we can identify that the cache
+        # is updated, So, added time.sleep()
         time.sleep(1)
         self._check_shortcuts()
 
@@ -48,10 +54,22 @@ class KeyboardShortcutFeatureTest(BaseFeatureTest):
         action = ActionChains(self.driver)
         for s in self.new_shortcuts:
             key_combo = self.new_shortcuts[s]['shortcut']
-            
action.key_down(key_combo[0]).key_down(key_combo[1]).key_down(key_combo[2]).key_up(Keys.ALT).perform()
-
-            self.wait.until(EC.presence_of_element_located(
-                (By.XPATH, "//li[contains(@id, " + s + ") and contains(@class, 
'open')]"))
+            action.key_down(
+                key_combo[0]
+            ).key_down(
+                key_combo[1]
+            ).key_down(
+                key_combo[2]
+            ).key_up(
+                Keys.ALT
+            ).perform()
+
+            self.wait.until(
+                EC.presence_of_element_located(
+                    (By.XPATH, "//li[contains(@id, " +
+                     s +
+                     ") and contains(@class, 'open')]")
+                )
             )
 
             is_open = 'open' in self.page.find_by_id(s).get_attribute('class')
@@ -66,20 +84,24 @@ class KeyboardShortcutFeatureTest(BaseFeatureTest):
             (By.XPATH, "//*[contains(string(), 'Show system objects?')]"))
         )
 
-        self.page.find_by_css_selector(".ajs-dialog.pg-el-container 
.ajs-maximize").click()
+        self.page.find_by_css_selector(
+            ".ajs-dialog.pg-el-container .ajs-maximize"
+        ).click()
 
         browser = self.page.find_by_xpath(
             "//*[contains(@class,'aciTreeLi') and contains(.,'Browser')]")
 
         browser.find_element_by_xpath(
-            "//*[contains(@class,'aciTreeText') and contains(.,'Keyboard 
shortcuts')]") \
-            .click()
+            "//*[contains(@class,'aciTreeText') and "
+            "contains(.,'Keyboard shortcuts')]").click()
 
         for s in self.new_shortcuts:
             key = self.new_shortcuts[s]['shortcut'][2]
             locator = self.new_shortcuts[s]['locator']
             file_menu = self.page.find_by_xpath(
-                "//div[contains(@class,'pgadmin-control-group') and 
contains(.,'" + locator + "')]")
+                "//div[contains(@class,'pgadmin-control-group') "
+                "and contains(.,'" + locator + "')]"
+            )
 
             field = file_menu.find_element_by_name('key')
             field.click()
@@ -87,9 +109,10 @@ class KeyboardShortcutFeatureTest(BaseFeatureTest):
 
         # save and close the preference dialog.
         self.page.find_by_xpath(
-            "//*[contains(@class,'pg-alertify-button') and 
contains(.,'OK')]").click()
+            "//*[contains(@class,'pg-alertify-button') and "
+            "contains(.,'OK')]"
+        ).click()
 
         self.page.wait_for_element_to_disappear(
             lambda driver: driver.find_element_by_css_selector(".ajs-modal")
         )
-
diff --git a/web/pgadmin/feature_tests/pg_datatype_validation_test.py 
b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
index c12b181..3e34c17 100644
--- a/web/pgadmin/feature_tests/pg_datatype_validation_test.py
+++ b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
@@ -25,7 +25,8 @@ try:
     with open(CURRENT_PATH + '/datatype_test.json') as data_file:
         test_data_configuration = json.load(data_file)
         config_data = test_data_configuration['tests']
-        type_minimum_version = 
test_data_configuration['datatype_minimum_version']
+        type_minimum_version = \
+            test_data_configuration['datatype_minimum_version']
 except Exception as e:
     print(str(e))
 
@@ -41,12 +42,14 @@ class PGDataypeFeatureTest(BaseFeatureTest):
     ]
 
     def before(self):
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
 
         self.timezone = int(test_utils.get_timezone_without_dst(connection))
 
@@ -82,17 +85,20 @@ class PGDataypeFeatureTest(BaseFeatureTest):
             (By.XPATH, "//*[contains(string(), 'Show system objects?')]"))
         )
 
-        self.page.find_by_css_selector(".ajs-dialog.pg-el-container 
.ajs-maximize").click()
+        self.page.find_by_css_selector(
+            ".ajs-dialog.pg-el-container .ajs-maximize").click()
 
         sql_editor = self.page.find_by_xpath(
             "//*[contains(@class,'aciTreeLi') and contains(.,'SQL Editor')]")
 
         sql_editor.find_element_by_xpath(
-            "//*[contains(@class,'aciTreeText') and contains(.,'Options')]")\
-            .click()
+            "//*[contains(@class,'aciTreeText') and contains(.,'Options')]"
+        ).click()
 
-        insert_bracket_pairs_control= self.page.find_by_xpath(
-             "//div[contains(@class,'pgadmin-control-group') and 
contains(.,'Insert bracket pairs?')]")
+        insert_bracket_pairs_control = self.page.find_by_xpath(
+            "//div[contains(@class,'pgadmin-control-group') and "
+            "contains(.,'Insert bracket pairs?')]"
+        )
 
         switch_btn = insert_bracket_pairs_control.\
             find_element_by_class_name('bootstrap-switch')
@@ -103,7 +109,9 @@ class PGDataypeFeatureTest(BaseFeatureTest):
 
         # save and close the preference dialog.
         self.page.find_by_xpath(
-            "//*[contains(@class,'pg-alertify-button') and 
contains(.,'OK')]").click()
+            "//*[contains(@class,'pg-alertify-button') and "
+            "contains(.,'OK')]"
+        ).click()
 
         self.page.wait_for_element_to_disappear(
             lambda driver: driver.find_element_by_css_selector(".ajs-modal")
@@ -129,12 +137,14 @@ class PGDataypeFeatureTest(BaseFeatureTest):
 
     def after(self):
         self.page.remove_server(self.server)
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
 
     def _schema_node_expandable(self):
@@ -155,9 +165,10 @@ class PGDataypeFeatureTest(BaseFeatureTest):
 
             wait.until(EC.presence_of_element_located(
                 (By.XPATH,
-                 "//*[contains(@class,'column-type') and 
contains(.,'{}')]".format(batch['datatype'][0])
-                 ))
-            )
+                 "//*[contains(@class,'column-type') and "
+                 "contains(.,'{}')]".format(batch['datatype'][0])
+                 )
+            ))
 
             canvas = wait.until(EC.presence_of_element_located(
                 (By.CSS_SELECTOR, "#datagrid .slick-viewport .grid-canvas"))
@@ -168,10 +179,12 @@ class PGDataypeFeatureTest(BaseFeatureTest):
             cells = canvas.find_elements_by_css_selector('.slick-cell')
             # remove first element as it is row number.
             cells.pop(0)
-            for val, cell, datatype in zip(batch['output'], cells, 
batch['datatype']):
+            for val, cell, datatype in zip(
+                    batch['output'], cells, batch['datatype']):
                 expected_output = batch['output'][cnt - 2]
 
-                if not 
self._is_datatype_available_in_current_database(datatype):
+                if not self._is_datatype_available_in_current_database(
+                        datatype):
                     cnt += 1
                     continue
 
@@ -212,7 +225,7 @@ class PGDataypeFeatureTest(BaseFeatureTest):
             if first:
                 query += dataformatter.format(inputdata, datatype)
             else:
-                query += ','+dataformatter.format(inputdata, datatype)
+                query += ',' + dataformatter.format(inputdata, datatype)
             first = False
         return query + ';'
 
@@ -236,4 +249,6 @@ class PGDataypeFeatureTest(BaseFeatureTest):
         self.page.click_modal('Yes')
 
     def _is_datatype_available_in_current_database(self, datatype):
-        return datatype == '' or self.database_version >= 
type_minimum_version[datatype]
+        if datatype == '':
+            return True
+        return self.database_version >= type_minimum_version[datatype]
diff --git a/web/pgadmin/feature_tests/query_tool_journey_test.py 
b/web/pgadmin/feature_tests/query_tool_journey_test.py
index 1e26b5a..ec12043 100644
--- a/web/pgadmin/feature_tests/query_tool_journey_test.py
+++ b/web/pgadmin/feature_tests/query_tool_journey_test.py
@@ -26,14 +26,17 @@ class QueryToolJourneyTest(BaseFeatureTest):
     ]
 
     def before(self):
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
         test_utils.create_database(self.server, "acceptance_test_db")
-        test_utils.create_table(self.server, "acceptance_test_db", 
"test_table")
+        test_utils.create_table(
+            self.server, "acceptance_test_db", "test_table")
         self.page.add_server(self.server)
 
     def runTest(self):
@@ -50,8 +53,10 @@ class QueryToolJourneyTest(BaseFeatureTest):
     def _test_copies_rows(self):
         pyperclip.copy("old clipboard contents")
         self.page.driver.switch_to.default_content()
-        
self.page.driver.switch_to_frame(self.page.driver.find_element_by_tag_name("iframe"))
-        self.page.find_by_xpath("//*[contains(@class, 
'slick-row')]/*[1]").click()
+        self.page.driver.switch_to_frame(
+            self.page.driver.find_element_by_tag_name("iframe"))
+        self.page.find_by_xpath(
+            "//*[contains(@class, 'slick-row')]/*[1]").click()
         self.page.find_by_xpath("//*[@id='btn-copy-row']").click()
 
         self.assertEqual('"Some-Name"\t"6"\t"some info"',
@@ -61,8 +66,12 @@ class QueryToolJourneyTest(BaseFeatureTest):
         pyperclip.copy("old clipboard contents")
 
         self.page.driver.switch_to.default_content()
-        
self.page.driver.switch_to_frame(self.page.driver.find_element_by_tag_name("iframe"))
-        self.page.find_by_xpath("//*[@data-test='output-column-header' and 
contains(., 'some_column')]").click()
+        self.page.driver.switch_to_frame(
+            self.page.driver.find_element_by_tag_name("iframe"))
+        self.page.find_by_xpath(
+            "//*[@data-test='output-column-header' and "
+            "contains(., 'some_column')]"
+        ).click()
         self.page.find_by_xpath("//*[@id='btn-copy-row']").click()
 
         self.assertTrue('"Some-Name"' in pyperclip.paste())
@@ -76,22 +85,32 @@ class QueryToolJourneyTest(BaseFeatureTest):
         self._execute_query("SELECT * FROM table_that_doesnt_exist")
 
         self.page.click_tab("Query History")
-        selected_history_entry = self.page.find_by_css_selector("#query_list 
.selected")
-        self.assertIn("SELECT * FROM table_that_doesnt_exist", 
selected_history_entry.text)
+        selected_history_entry = self.page.find_by_css_selector(
+            "#query_list .selected")
+        self.assertIn("SELECT * FROM table_that_doesnt_exist",
+                      selected_history_entry.text)
         failed_history_detail_pane = self.page.find_by_id("query_detail")
 
-        self.assertIn("Error Message relation \"table_that_doesnt_exist\" does 
not exist", failed_history_detail_pane.text)
+        self.assertIn(
+            "Error Message relation \"table_that_doesnt_exist\" "
+            "does not exist", failed_history_detail_pane.text
+        )
         ActionChains(self.page.driver) \
             .send_keys(Keys.ARROW_DOWN) \
             .perform()
-        selected_history_entry = self.page.find_by_css_selector("#query_list 
.selected")
-        self.assertIn("SELECT * FROM test_table ORDER BY value", 
selected_history_entry.text)
+        selected_history_entry = self.page.find_by_css_selector(
+            "#query_list .selected")
+        self.assertIn("SELECT * FROM test_table ORDER BY value",
+                      selected_history_entry.text)
         selected_history_detail_pane = self.page.find_by_id("query_detail")
-        self.assertIn("SELECT * FROM test_table ORDER BY value", 
selected_history_detail_pane.text)
-        newly_selected_history_entry = 
self.page.find_by_xpath("//*[@id='query_list']/ul/li[2]")
+        self.assertIn("SELECT * FROM test_table ORDER BY value",
+                      selected_history_detail_pane.text)
+        newly_selected_history_entry = self.page.find_by_xpath(
+            "//*[@id='query_list']/ul/li[2]")
         self.page.click_element(newly_selected_history_entry)
         selected_history_detail_pane = self.page.find_by_id("query_detail")
-        self.assertIn("SELECT * FROM table_that_doesnt_exist", 
selected_history_detail_pane.text)
+        self.assertIn("SELECT * FROM table_that_doesnt_exist",
+                      selected_history_detail_pane.text)
 
         self.__clear_query_tool()
 
@@ -104,7 +123,8 @@ class QueryToolJourneyTest(BaseFeatureTest):
 
         self.page.click_tab("Query History")
 
-        query_we_need_to_scroll_to = 
self.page.find_by_xpath("//*[@id='query_list']/ul/li[17]")
+        query_we_need_to_scroll_to = self.page.find_by_xpath(
+            "//*[@id='query_list']/ul/li[17]")
 
         self.page.click_element(query_we_need_to_scroll_to)
 
diff --git a/web/pgadmin/feature_tests/query_tool_tests.py 
b/web/pgadmin/feature_tests/query_tool_tests.py
index 63c29d0..a0b3713 100644
--- a/web/pgadmin/feature_tests/query_tool_tests.py
+++ b/web/pgadmin/feature_tests/query_tool_tests.py
@@ -29,12 +29,14 @@ class QueryToolFeatureTest(BaseFeatureTest):
     ]
 
     def before(self):
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
         test_utils.create_database(self.server, "acceptance_test_db")
         self.page.wait_for_spinner_to_disappear()
@@ -96,12 +98,14 @@ class QueryToolFeatureTest(BaseFeatureTest):
 
     def after(self):
         self.page.remove_server(self.server)
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
 
     def _reset_options(self):
@@ -152,7 +156,9 @@ class QueryToolFeatureTest(BaseFeatureTest):
         ON_DEMAND_CHUNKS = 2
         row_id_to_find = config.ON_DEMAND_RECORD_COUNT * ON_DEMAND_CHUNKS
 
-        query = """-- On demand query result on scroll, grid select all, 
column select all
+        query = """-- On demand query result on scroll
+-- Grid select all
+-- Column select all
 SELECT generate_series(1, {}) as id1, 'dummy' as id2""".format(
             config.ON_DEMAND_RECORD_COUNT * ON_DEMAND_CHUNKS)
 
@@ -172,7 +178,8 @@ SELECT generate_series(1, {}) as id1, 'dummy' as 
id2""".format(
 
         # scroll to bottom to fetch next chunk of result set.
         self.driver.execute_script(
-            
"pgAdmin.SqlEditor.jquery('.slick-viewport').scrollTop(pgAdmin.SqlEditor.jquery('.grid-canvas').height());"
+            "pgAdmin.SqlEditor.jquery('.slick-viewport')"
+            ".scrollTop(pgAdmin.SqlEditor.jquery('.grid-canvas').height());"
         )
 
         canvas = wait.until(EC.presence_of_element_located(
@@ -214,9 +221,10 @@ SELECT generate_series(1, {}) as id1, 'dummy' as 
id2""".format(
 
         # click on first data column to select all column.
         wait.until(EC.presence_of_element_located(
-          (
-            By.XPATH,
-            "//span[contains(@class, 'column-name') and contains(., 'id1')]"))
+            (
+                By.XPATH,
+                "//span[contains(@class, 'column-name') "
+                "and contains(., 'id1')]"))
         ).click()
 
         canvas = wait.until(EC.presence_of_element_located(
@@ -228,7 +236,8 @@ SELECT generate_series(1, {}) as id1, 'dummy' as 
id2""".format(
     def _check_ondemand_result(self, row_id_to_find, canvas):
         # scroll to bottom to bring last row of next chunk in viewport.
         self.driver.execute_script(
-            
"pgAdmin.SqlEditor.jquery('.slick-viewport').scrollTop(pgAdmin.SqlEditor.jquery('.grid-canvas').height());"
+            "pgAdmin.SqlEditor.jquery('.slick-viewport')"
+            ".scrollTop(pgAdmin.SqlEditor.jquery('.grid-canvas').height());"
         )
 
         canvas.find_element_by_xpath(
@@ -325,7 +334,8 @@ CREATE TABLE public.{}();""".format(table_name)
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "CREATE TABLE")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "CREATE TABLE")]'
         )
 
         self._clear_query_tool()
@@ -339,7 +349,8 @@ ROLLBACK;"""
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "ROLLBACK")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "ROLLBACK")]'
         )
 
         self._clear_query_tool()
@@ -347,7 +358,8 @@ ROLLBACK;"""
 -- 2. (Done) Create table in public schema.
 -- 3. (Done) ROLLBACK transaction.
 -- 4. Check if table is *NOT* created.
-SELECT relname FROM pg_class WHERE relkind IN ('r','s','t') and relnamespace = 
2200::oid;"""
+SELECT relname FROM pg_class
+    WHERE relkind IN ('r','s','t') and relnamespace = 2200::oid;"""
         self.page.fill_codemirror_area_with(query)
         self.page.find_by_id("btn-flash").click()
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
@@ -355,9 +367,14 @@ SELECT relname FROM pg_class WHERE relkind IN 
('r','s','t') and relnamespace = 2
         canvas = wait.until(EC.presence_of_element_located(
             (By.CSS_SELECTOR, "#datagrid .slick-viewport .grid-canvas")))
 
-        el = canvas.find_elements_by_xpath("//div[contains(@class, 
'slick-cell') and contains(text(), '{}')]".format(table_name))
+        el = canvas.find_elements_by_xpath(
+            "//div[contains(@class, 'slick-cell') and "
+            "contains(text(), '{}')]".format(table_name))
 
-        assert len(el) == 0, "Table '{}' created with auto commit disabled and 
without any explicit commit.".format(table_name)
+        assert len(el) == 0, "Table '{}' created with auto commit disabled " \
+                             "and without any explicit commit.".format(
+            table_name
+        )
 
     def _query_tool_auto_commit_enabled(self):
 
@@ -400,7 +417,8 @@ CREATE TABLE public.{}();""".format(table_name)
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "CREATE TABLE")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "CREATE TABLE")]'
         )
 
         self._clear_query_tool()
@@ -415,7 +433,8 @@ ROLLBACK;"""
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "ROLLBACK")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "ROLLBACK")]'
         )
 
         self._clear_query_tool()
@@ -424,7 +443,8 @@ ROLLBACK;"""
 -- 3. (Done) Create table in public schema.
 -- 4. (Done) ROLLBACK transaction
 -- 5. Check if table is created event after ROLLBACK.
-SELECT relname FROM pg_class WHERE relkind IN ('r','s','t') and relnamespace = 
2200::oid;"""
+SELECT relname FROM pg_class
+    WHERE relkind IN ('r','s','t') and relnamespace = 2200::oid;"""
         self.page.fill_codemirror_area_with(query)
         self.page.find_by_id("btn-flash").click()
         self.page.click_tab('Data Output')
@@ -433,9 +453,12 @@ SELECT relname FROM pg_class WHERE relkind IN 
('r','s','t') and relnamespace = 2
         canvas = wait.until(EC.presence_of_element_located(
             (By.CSS_SELECTOR, "#datagrid .slick-viewport .grid-canvas")))
 
-        el = canvas.find_elements_by_xpath("//div[contains(@class, 
'slick-cell') and contains(text(), '{}')]".format(table_name))
+        el = canvas.find_elements_by_xpath(
+            "//div[contains(@class, 'slick-cell') and "
+            "contains(text(), '{}')]".format(table_name))
 
-        assert len(el) != 0, "Table '{}' is not created with auto commit 
enabled.".format(table_name)
+        assert len(el) != 0, "Table '{}' is not created with auto " \
+                             "commit enabled.".format(table_name)
 
     def _query_tool_auto_rollback_enabled(self):
         table_name = 'query_tool_auto_rollback_enabled_table'
@@ -473,7 +496,8 @@ CREATE TABLE public.{}();""".format(table_name)
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "CREATE TABLE")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "CREATE TABLE")]'
         )
 
         self._clear_query_tool()
@@ -489,7 +513,8 @@ SELECT 1/0;"""
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "division by zero")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "division by zero")]'
         )
 
         self._clear_query_tool()
@@ -506,7 +531,8 @@ END;"""
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "Query returned successfully")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "Query returned successfully")]'
         )
 
         self._clear_query_tool()
@@ -516,7 +542,8 @@ END;"""
 -- 4. (Done) Generate error in transaction.
 -- 5. (Done) END transaction.
 -- 6. Check if table is *NOT* created after ending transaction.
-SELECT relname FROM pg_class WHERE relkind IN ('r','s','t') and relnamespace = 
2200::oid;"""
+SELECT relname FROM pg_class
+    WHERE relkind IN ('r','s','t') and relnamespace = 2200::oid;"""
         self.page.fill_codemirror_area_with(query)
         self.page.find_by_id("btn-flash").click()
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
@@ -524,9 +551,12 @@ SELECT relname FROM pg_class WHERE relkind IN 
('r','s','t') and relnamespace = 2
         canvas = wait.until(EC.presence_of_element_located(
             (By.CSS_SELECTOR, "#datagrid .slick-viewport .grid-canvas")))
 
-        el = canvas.find_elements_by_xpath("//div[contains(@class, 
'slick-cell') and contains(text(), '{}')]".format(table_name))
+        el = canvas.find_elements_by_xpath(
+            "//div[contains(@class, 'slick-cell') and "
+            "contains(text(), '{}')]".format(table_name))
 
-        assert len(el) == 0, "Table '{}' created even after ROLLBACK due to 
sql error.".format(table_name)
+        assert len(el) == 0, "Table '{}' created even after ROLLBACK due to " \
+                             "sql error.".format(table_name)
 
     def _query_tool_cancel_query(self):
         query = """-- 1. END any open transaction.
@@ -548,8 +578,8 @@ SELECT 1, pg_sleep(300)"""
         # if auto rollback is disabled then 'i' element will
         # have 'auto-rollback fa fa-check visibility-hidden' classes
 
-        if 'auto-rollback fa fa-check' == 
str(auto_rollback_check.get_attribute(
-                'class')):
+        if 'auto-rollback fa fa-check' == str(
+                auto_rollback_check.get_attribute('class')):
             auto_rollback_btn.click()
 
         auto_commit_btn = self.page.find_by_id("btn-auto-commit")
@@ -561,8 +591,8 @@ SELECT 1, pg_sleep(300)"""
         # if auto commit is disabled then 'i' element will
         # have 'auto-commit fa fa-check visibility-hidden' classes
 
-        if 'auto-commit fa fa-check visibility-hidden' == 
str(auto_commit_check.get_attribute(
-                'class')):
+        if 'auto-commit fa fa-check visibility-hidden' == str(
+                auto_commit_check.get_attribute('class')):
             auto_commit_btn.click()
 
         self.page.find_by_id("btn-flash").click()
@@ -571,14 +601,17 @@ SELECT 1, pg_sleep(300)"""
         self.page.wait_for_query_tool_loading_indicator_to_disappear()
         self.page.click_tab('Messages')
         self.page.find_by_xpath(
-            '//div[contains(@class, "sql-editor-message") and 
contains(string(), "canceling statement due to user request")]'
+            '//div[contains(@class, "sql-editor-message") and '
+            'contains(string(), "canceling statement due to user request")]'
         )
 
     def _test_explain_plan_feature(self):
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         return connection.server_version > 90100
diff --git a/web/pgadmin/feature_tests/table_ddl_feature_test.py 
b/web/pgadmin/feature_tests/table_ddl_feature_test.py
index 401d76d..1876001 100644
--- a/web/pgadmin/feature_tests/table_ddl_feature_test.py
+++ b/web/pgadmin/feature_tests/table_ddl_feature_test.py
@@ -19,12 +19,14 @@ class TableDdlFeatureTest(BaseFeatureTest):
     ]
 
     def before(self):
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
 
         test_utils.create_database(self.server, "acceptance_test_db")
@@ -32,7 +34,8 @@ class TableDdlFeatureTest(BaseFeatureTest):
         self.page.add_server(self.server)
 
     def runTest(self):
-        test_utils.create_table(self.server, "acceptance_test_db", 
"test_table")
+        test_utils.create_table(
+            self.server, "acceptance_test_db", "test_table")
 
         self.page.toggle_open_server(self.server['name'])
         self.page.toggle_open_tree_item('Databases')
@@ -44,14 +47,17 @@ class TableDdlFeatureTest(BaseFeatureTest):
         self.page.click_tab("SQL")
 
         self.page.find_by_xpath(
-            "//*[contains(@class,'CodeMirror-lines') and contains(.,'CREATE 
TABLE public.test_table')]")
+            "//*[contains(@class,'CodeMirror-lines') and "
+            "contains(.,'CREATE TABLE public.test_table')]")
 
     def after(self):
         self.page.remove_server(self.server)
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
diff --git a/web/pgadmin/feature_tests/view_data_dml_queries.py 
b/web/pgadmin/feature_tests/view_data_dml_queries.py
index 52b8055..0423ec1 100644
--- a/web/pgadmin/feature_tests/view_data_dml_queries.py
+++ b/web/pgadmin/feature_tests/view_data_dml_queries.py
@@ -22,7 +22,8 @@ CURRENT_PATH = os.path.dirname(os.path.realpath(__file__))
 
 try:
     with open(CURRENT_PATH + '/test_data.json') as data_file:
-        config_data = 
json.load(data_file)['table_insert_update_cases']['add_update']
+        config_data = json.load(data_file)[
+            'table_insert_update_cases']['add_update']
 except Exception as e:
     print(str(e))
 
@@ -44,8 +45,8 @@ class CheckForViewDataTest(BaseFeatureTest):
     """
 
     scenarios = [
-        ("Validate Insert, Update operations in View/Edit data with given test 
"
-         "data",
+        ("Validate Insert, Update operations in View/Edit data with "
+         "given test data",
          dict())
     ]
 
@@ -58,7 +59,8 @@ CREATE TABLE public.defaults
     id serial NOT NULL,
     number_defaults numeric(100) DEFAULT 1,
     number_null numeric(100),
-    text_defaults text COLLATE pg_catalog."default" DEFAULT 'Hello 
World'::text,
+    text_defaults text COLLATE pg_catalog."default"
+        DEFAULT 'Hello World'::text,
     text_null1 text COLLATE pg_catalog."default",
     text_null2 text COLLATE pg_catalog."default",
     text_null3 text COLLATE pg_catalog."default",
@@ -82,14 +84,18 @@ CREATE TABLE public.defaults
     def before(self):
         with test_utils.Database(self.server) as (connection, _):
             if connection.server_version < 90100:
-                self.skipTest("COLLATE is not present in PG versions below 
v9.1")
-
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+                self.skipTest(
+                    "COLLATE is not present in PG versions below v9.1"
+                )
+
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
         test_utils.create_database(self.server, "acceptance_test_db")
 
@@ -120,12 +126,14 @@ CREATE TABLE public.defaults
 
     def after(self):
         self.page.remove_server(self.server)
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
 
     @staticmethod
@@ -138,7 +146,7 @@ CREATE TABLE public.defaults
             xpath_grid_row = "//*[contains(@class, 'ui-widget-content') " \
                              "and contains(@style, 'top:25px')]"
 
-        xpath_row_cell = '//div[contains(@class, "'+cell+'")]'
+        xpath_row_cell = '//div[contains(@class, "' + cell + '")]'
 
         xpath_cell = '{0}{1}'.format(xpath_grid_row, xpath_row_cell)
 
@@ -149,7 +157,7 @@ CREATE TABLE public.defaults
         wait = WebDriverWait(self.driver, 5)
         try:
             wait.until(EC.text_to_be_present_in_element(
-                (By.XPATH, xpath+"//span"), str(value)),
+                (By.XPATH, xpath + "//span"), str(value)),
                 CheckForViewDataTest.TIMEOUT_STRING
             )
         except Exception:
@@ -192,16 +200,20 @@ CREATE TABLE public.defaults
             ActionChains(self.driver).send_keys(value).perform()
 
             # Click on editor's Save button
-            self.page.find_by_xpath("//*[contains(@class, 'pg_text_editor')]"
-                                    "//button[contains(@class, 
'fa-save')]").click()
+            self.page.find_by_xpath(
+                "//*[contains(@class, 'pg_text_editor')]"
+                "//button[contains(@class, 'fa-save')]"
+            ).click()
         else:
             # Boolean editor test for to True click
             if data[1] == 'true':
-                checkbox_el = 
cell_el.find_element_by_xpath(".//*[contains(@class, 'multi-checkbox')]")
+                checkbox_el = cell_el.find_element_by_xpath(
+                    ".//*[contains(@class, 'multi-checkbox')]")
                 checkbox_el.click()
             # Boolean editor test for to False click
             elif data[1] == 'false':
-                checkbox_el = 
cell_el.find_element_by_xpath(".//*[contains(@class, 'multi-checkbox')]")
+                checkbox_el = cell_el.find_element_by_xpath(
+                    ".//*[contains(@class, 'multi-checkbox')]")
                 # Sets true
                 checkbox_el.click()
                 # Sets false
@@ -217,10 +229,11 @@ CREATE TABLE public.defaults
 
     def _view_data_grid(self):
         self.page.driver.find_element_by_link_text("Object").click()
-        ActionChains(self.page.driver) \
-            .move_to_element(
-                self.page.driver.find_element_by_link_text("View/Edit Data")) \
-            .perform()
+        ActionChains(
+            self.page.driver
+        ).move_to_element(
+            self.page.driver.find_element_by_link_text("View/Edit Data")
+        ).perform()
         self.page.find_by_partial_link_text("All Rows").click()
 
         # wait until datagrid frame is loaded.
@@ -274,7 +287,7 @@ CREATE TABLE public.defaults
     def _add_row(self):
         for idx in range(1, len(config_data.keys()) + 1):
             cell_xpath = CheckForViewDataTest._get_cell_xpath(
-                'r'+str(idx), 1
+                'r' + str(idx), 1
             )
             time.sleep(0.2)
             self._update_cell(cell_xpath, config_data[str(idx)])
diff --git a/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py 
b/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py
index 0ef0e69..4dc082c 100644
--- a/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py
+++ b/web/pgadmin/feature_tests/xss_checks_panels_and_query_tool_test.py
@@ -31,21 +31,26 @@ class CheckForXssFeatureTest(BaseFeatureTest):
     ]
 
     def before(self):
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
         test_utils.create_database(self.server, "acceptance_test_db")
-        test_utils.create_table(self.server, "acceptance_test_db",
-                                "<h1>X")
+        test_utils.create_table(
+            self.server, "acceptance_test_db", "<h1>X"
+        )
 
         # This is needed to test dependents tab (eg: BackGrid)
-        test_utils.create_constraint(self.server, "acceptance_test_db",
-                                     "<h1>X",
-                                     "unique", "<h1 
onmouseover='console.log(2);'>Y")
+        test_utils.create_constraint(
+            self.server, "acceptance_test_db",
+            "<h1>X",
+            "unique", "<h1 onmouseover='console.log(2);'>Y"
+        )
 
     def runTest(self):
         self.page.wait_for_spinner_to_disappear()
@@ -62,12 +67,14 @@ class CheckForXssFeatureTest(BaseFeatureTest):
 
     def after(self):
         self.page.remove_server(self.server)
-        connection = test_utils.get_db_connection(self.server['db'],
-                                                  self.server['username'],
-                                                  self.server['db_password'],
-                                                  self.server['host'],
-                                                  self.server['port'],
-                                                  self.server['sslmode'])
+        connection = test_utils.get_db_connection(
+            self.server['db'],
+            self.server['username'],
+            self.server['db_password'],
+            self.server['host'],
+            self.server['port'],
+            self.server['sslmode']
+        )
         test_utils.drop_database(connection, "acceptance_test_db")
 
     def _tables_node_expandable(self):
@@ -106,7 +113,8 @@ class CheckForXssFeatureTest(BaseFeatureTest):
         self.page.click_tab("SQL")
         # Fetch the inner html & check for escaped characters
         source_code = self.page.find_by_xpath(
-            "//*[contains(@class,'CodeMirror-lines') and contains(.,'CREATE 
TABLE')]"
+            "//*[contains(@class,'CodeMirror-lines') and "
+            "contains(.,'CREATE TABLE')]"
         ).get_attribute('innerHTML')
 
         self._check_escaped_characters(
@@ -115,11 +123,13 @@ class CheckForXssFeatureTest(BaseFeatureTest):
             "SQL tab (Code Mirror)"
         )
 
-    def _check_xss_in_dependents_tab(self): # Create any constraint with xss 
name to test this
+    # Create any constraint with xss name to test this
+    def _check_xss_in_dependents_tab(self):
         self.page.click_tab("Dependents")
 
         source_code = self.page.find_by_xpath(
-            
"//*[@id='5']/table/tbody/tr/td/div/div/div[2]/table/tbody/tr/td[2]"
+            "//*[@id='5']/table/tbody/tr/td/div/div/div[2]/"
+            "table/tbody/tr/td[2]"
         ).get_attribute('innerHTML')
 
         self._check_escaped_characters(
@@ -138,7 +148,8 @@ class CheckForXssFeatureTest(BaseFeatureTest):
         self.page.find_by_id("btn-flash").click()
 
         result_row = self.page.find_by_xpath(
-            "//*[contains(@class, 'ui-widget-content') and contains(@style, 
'top:0px')]"
+            "//*[contains(@class, 'ui-widget-content') and "
+            "contains(@style, 'top:0px')]"
         )
 
         cells = result_row.find_elements_by_tag_name('div')
@@ -154,4 +165,5 @@ class CheckForXssFeatureTest(BaseFeatureTest):
 
     def _check_escaped_characters(self, source_code, string_to_find, source):
         # For XSS we need to search against element's html code
-        assert source_code.find(string_to_find) != -1, "{0} might be 
vulnerable to XSS ".format(source)
+        assert source_code.find(string_to_find) != - \
+            1, "{0} might be vulnerable to XSS ".format(source)
diff --git a/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py 
b/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
index a54a7ed..24a463b 100644
--- a/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
+++ b/web/pgadmin/feature_tests/xss_checks_pgadmin_debugger_test.py
@@ -26,11 +26,15 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
     def before(self):
         with test_utils.Database(self.server) as (connection, _):
             if connection.server_version < 90100:
-                self.skipTest("Functions tree node is not present in pgAdmin 
below PG v9.1")
+                self.skipTest(
+                    "Functions tree node is not present in pgAdmin below "
+                    "PG v9.1"
+                )
 
         # Some test function is needed for debugger
-        test_utils.create_debug_function(self.server, "postgres",
-                                   "a_test_function")
+        test_utils.create_debug_function(
+            self.server, "postgres", "a_test_function"
+        )
 
     def runTest(self):
         self.page.wait_for_spinner_to_disappear()
@@ -40,7 +44,7 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
 
     def after(self):
         test_utils.drop_debug_function(self.server, "postgres",
-                                   "a_test_function")
+                                       "a_test_function")
         self.page.remove_server(self.server)
 
     def _function_node_expandable(self):
@@ -54,17 +58,21 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
 
     def _debug_function(self):
         self.page.driver.find_element_by_link_text("Object").click()
-        ActionChains(self.page.driver) \
-            
.move_to_element(self.page.driver.find_element_by_link_text("Debugging")) \
-            .perform()
+        ActionChains(
+            self.page.driver
+        ).move_to_element(
+            self.page.driver.find_element_by_link_text("Debugging")
+        ).perform()
         self.page.driver.find_element_by_link_text("Debug").click()
 
         # We need to check if debugger plugin is installed or not
         try:
             wait = WebDriverWait(self.page.driver, 2)
             is_error = wait.until(EC.presence_of_element_located(
-                (By.XPATH, "//div[contains(@class, 'alertify') and 
not(contains(@class, 'ajs-hidden'))]//div[contains(@class,'ajs-header')]"))
-            )
+                (By.XPATH, "//div[contains(@class, 'alertify') and "
+                           "not(contains(@class, 'ajs-hidden'))]//div["
+                           "contains(@class,'ajs-header')]")
+            ))
 
         except TimeoutException as e:
             is_error = None
@@ -88,7 +96,8 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
             )
 
             wait.until(EC.presence_of_element_located(
-                (By.XPATH, "//td[contains(@class,'test_function') and 
contains(.,'Hello, pgAdmin4')]"))
+                (By.XPATH, "//td[contains(@class,'test_function') and "
+                           "contains(.,'Hello, pgAdmin4')]"))
             )
 
             # Only this tab is vulnerable rest are BackGrid & Code Mirror
@@ -107,9 +116,11 @@ class CheckDebuggerForXssFeatureTest(BaseFeatureTest):
     def _close_debugger(self):
         self.page.driver.switch_to_default_content()
         self.page.click_element(
-            
self.page.find_by_xpath("//*[@id='dockerContainer']/div/div[3]/div/div[2]/div[1]")
+            self.page.find_by_xpath(
+                "//*[@id='dockerContainer']/div/div[3]/div/div[2]/div[1]")
         )
 
     def _check_escaped_characters(self, source_code, string_to_find, source):
         # For XSS we need to search against element's html code
-        assert source_code.find(string_to_find) != -1, "{0} might be 
vulnerable to XSS ".format(source)
+        assert source_code.find(string_to_find) != - \
+            1, "{0} might be vulnerable to XSS ".format(source)
diff --git a/web/pgadmin/feature_tests/xss_checks_roles_control_test.py 
b/web/pgadmin/feature_tests/xss_checks_roles_control_test.py
index 7fd4819..36f5aa6 100644
--- a/web/pgadmin/feature_tests/xss_checks_roles_control_test.py
+++ b/web/pgadmin/feature_tests/xss_checks_roles_control_test.py
@@ -23,7 +23,8 @@ class CheckRoleMembershipControlFeatureTest(BaseFeatureTest):
     def before(self):
         with test_utils.Database(self.server) as (connection, _):
             if connection.server_version < 90100:
-                self.skipTest("Membership is not present in Postgres below PG 
v9.1")
+                self.skipTest(
+                    "Membership is not present in Postgres below PG v9.1")
 
         # Some test function is needed for debugger
         test_utils.create_role(self.server, "postgres",
@@ -45,11 +46,14 @@ class 
CheckRoleMembershipControlFeatureTest(BaseFeatureTest):
         self.page.remove_server(self.server)
 
     def _connects_to_server(self):
-        self.page.find_by_xpath("//*[@class='aciTreeText' and 
.='Servers']").click()
+        self.page.find_by_xpath(
+            "//*[@class='aciTreeText' and .='Servers']").click()
         self.page.driver.find_element_by_link_text("Object").click()
-        ActionChains(self.page.driver) \
-            
.move_to_element(self.page.driver.find_element_by_link_text("Create")) \
-            .perform()
+        ActionChains(
+            self.page.driver
+        ).move_to_element(
+            self.page.driver.find_element_by_link_text("Create")
+        ).perform()
         self.page.find_by_partial_link_text("Server...").click()
 
         server_config = self.server
@@ -57,8 +61,10 @@ class CheckRoleMembershipControlFeatureTest(BaseFeatureTest):
         self.page.find_by_partial_link_text("Connection").click()
         self.page.fill_input_by_field_name("host", server_config['host'])
         self.page.fill_input_by_field_name("port", server_config['port'])
-        self.page.fill_input_by_field_name("username", 
server_config['username'])
-        self.page.fill_input_by_field_name("password", 
server_config['db_password'])
+        self.page.fill_input_by_field_name(
+            "username", server_config['username'])
+        self.page.fill_input_by_field_name(
+            "password", server_config['db_password'])
         self.page.find_by_xpath("//button[contains(.,'Save')]").click()
 
     def _role_node_expandable(self):
@@ -80,8 +86,12 @@ class CheckRoleMembershipControlFeatureTest(BaseFeatureTest):
             '&lt;h1&gt;test&lt;/h1&gt;',
             'Role Membership Control'
         )
-        self.page.find_by_xpath("//button[contains(@type, 'cancel') and 
contains(.,'Cancel')]").click()
+        self.page.find_by_xpath(
+            "//button[contains(@type, 'cancel') and "
+            "contains(.,'Cancel')]"
+        ).click()
 
     def _check_escaped_characters(self, source_code, string_to_find, source):
         # For XSS we need to search against element's html code
-        assert source_code.find(string_to_find) != -1, "{0} might be 
vulnerable to XSS ".format(source)
+        assert source_code.find(string_to_find) != - \
+            1, "{0} might be vulnerable to XSS ".format(source)
diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py
index df8212a..45eb598 100644
--- a/web/pgadmin/misc/__init__.py
+++ b/web/pgadmin/misc/__init__.py
@@ -11,7 +11,7 @@
 
 import pgadmin.utils.driver as driver
 from flask import url_for, render_template, Response
-from flask_babel import gettext as _
+from flask_babel import gettext
 from pgadmin.utils import PgAdminModule
 from pgadmin.utils.preferences import Preferences
 
@@ -22,18 +22,20 @@ MODULE_NAME = 'misc'
 
 class MiscModule(PgAdminModule):
     def get_own_javascripts(self):
-        return [{
-            'name': 'pgadmin.misc.explain',
-            'path': url_for('misc.index') + 'explain/explain',
-            'preloaded': False
-        }, {
-            'name': 'snap.svg',
-            'path': url_for(
-                'misc.static', filename='explain/vendor/snap.svg/' + (
-                    'snap.svg' if config.DEBUG else 'snap.svg-min'
-                )),
-            'preloaded': False
-        }]
+        return [
+            {
+                'name': 'pgadmin.misc.explain',
+                'path': url_for('misc.index') + 'explain/explain',
+                'preloaded': False
+            }, {
+                'name': 'snap.svg',
+                'path': url_for(
+                    'misc.static', filename='explain/vendor/snap.svg/' + (
+                        'snap.svg' if config.DEBUG else 'snap.svg-min'
+                    )),
+                'preloaded': False
+            }
+        ]
 
     def get_own_stylesheets(self):
         stylesheets = []
@@ -46,18 +48,24 @@ class MiscModule(PgAdminModule):
         """
         Register preferences for this module.
         """
-        self.misc_preference = Preferences('miscellaneous', _('Miscellaneous'))
+        self.misc_preference = Preferences(
+            'miscellaneous', gettext('Miscellaneous')
+        )
 
         lang_options = []
         for lang in config.LANGUAGES:
-            lang_options.append({'label': config.LANGUAGES[lang],
-                                 'value': lang})
+            lang_options.append(
+                {
+                    'label': config.LANGUAGES[lang],
+                    'value': lang
+                }
+            )
 
         # Register options for the User language settings
         self.misc_preference.register(
             'miscellaneous', 'user_language',
-            _("User language"), 'options', 'en',
-            category_label=_('User language'),
+            gettext("User language"), 'options', 'en',
+            category_label=gettext('User language'),
             options=lang_options
         )
 
@@ -102,7 +110,8 @@ def explain_js():
     """
     return Response(
         response=render_template(
-            "explain/js/explain.js", _=_
+            "explain/js/explain.js",
+            _=gettext
         ),
         status=200,
         mimetype="application/javascript"
diff --git a/web/pgadmin/misc/bgprocess/__init__.py 
b/web/pgadmin/misc/bgprocess/__init__.py
index 6a91b65..ce0d539 100644
--- a/web/pgadmin/misc/bgprocess/__init__.py
+++ b/web/pgadmin/misc/bgprocess/__init__.py
@@ -103,7 +103,6 @@ def acknowledge(pid):
     """
     try:
         BatchProcess.acknowledge(pid)
-
         return success_return()
     except LookupError as lerr:
         return gone(errormsg=str(lerr))
diff --git a/web/pgadmin/misc/bgprocess/process_executor.py 
b/web/pgadmin/misc/bgprocess/process_executor.py
index b0316fb..ef82f1f 100644
--- a/web/pgadmin/misc/bgprocess/process_executor.py
+++ b/web/pgadmin/misc/bgprocess/process_executor.py
@@ -55,11 +55,13 @@ if _IS_PY2:
 else:
     def _log(msg):
         with open(_log_file, 'a') as fp:
-            fp.write(('INFO:: %s\n' % msg.encode('ascii', 
'xmlcharrefreplace')))
+            fp.write(
+                ('INFO:: %s\n' % msg.encode('ascii', 'xmlcharrefreplace'))
+            )
 
 
 def _log_exception():
-    type_, value_, traceback_ = info=sys.exc_info()
+    type_, value_, traceback_ = info = sys.exc_info()
 
     with open(_log_file, 'ab') as fp:
         from traceback import format_exception
@@ -159,7 +161,7 @@ class ProcessLogger(Thread):
         Thread.__init__(self)
         self.process = None
         self.stream = None
-        self.logger = open(os.path.join(_out_dir, stream_type),  'wb')
+        self.logger = open(os.path.join(_out_dir, stream_type), 'wb')
 
     def attach_process_stream(self, process, stream):
         """
@@ -189,9 +191,15 @@ class ProcessLogger(Thread):
             # Write into log file
             if self.logger:
                 if msg:
-                    
self.logger.write(get_current_time(format='%y%m%d%H%M%S%f').encode('utf-8'))
+                    self.logger.write(
+                        get_current_time(
+                            format='%y%m%d%H%M%S%f'
+                        ).encode('utf-8')
+                    )
                     self.logger.write(b',')
-                    self.logger.write(msg.lstrip(b'\r\n' if _IS_WIN else 
b'\n'))
+                    self.logger.write(
+                        msg.lstrip(b'\r\n' if _IS_WIN else b'\n')
+                    )
                     self.logger.write(os.linesep.encode('utf-8'))
 
                 return True
@@ -215,7 +223,10 @@ class ProcessLogger(Thread):
                             get_current_time(
                                 format='%y%m%d%H%M%S%f'
                             ),
-                            msg.lstrip(b'\r\n' if _IS_WIN else b'\n'), 
os.linesep
+                            msg.lstrip(
+                                b'\r\n' if _IS_WIN else b'\n'
+                            ),
+                            os.linesep
                         )
                     )
 
@@ -253,9 +264,8 @@ def update_status(**kw):
 
     if _out_dir:
         status = dict(
-            (k, v) for k, v in kw.items() if k in [
-                'start_time', 'end_time', 'exit_code', 'pid'
-            ]
+            (k, v) for k, v in kw.items()
+            if k in ('start_time', 'end_time', 'exit_code', 'pid')
         )
         _log('Updating the status:\n{0}'.format(json.dumps(status)))
         with open(os.path.join(_out_dir, 'status'), 'w') as fp:
@@ -396,7 +406,7 @@ def convert_environment_variables(env):
             if not isinstance(value, str):
                 value = value.encode(_sys_encoding)
             temp_env[key] = value
-        except Exception as e:
+        except Exception:
             _log_exception()
     return temp_env
 
@@ -411,8 +421,8 @@ if __name__ == '__main__':
 
     _fs_encoding = sys.getfilesystemencoding()
     if not _fs_encoding or _fs_encoding == 'ascii':
-        # Fall back to 'utf-8', if we couldn't determine the file-system 
encoding,
-        # or 'ascii'.
+        # Fall back to 'utf-8', if we couldn't determine the file-system
+        # encoding or 'ascii'.
         _fs_encoding = 'utf-8'
 
     def u(_s, _encoding=_sys_encoding):
@@ -442,14 +452,14 @@ if __name__ == '__main__':
         # the child process to run as a daemon. And, it would run without
         # depending on the status of the web-server.
         if 'PGA_BGP_FOREGROUND' in os.environ and \
-        os.environ['PGA_BGP_FOREGROUND'] == "1":
+                os.environ['PGA_BGP_FOREGROUND'] == "1":
             _log('[CHILD] Start process execution...')
             # This is a child process running as the daemon process.
             # Let's do the job assigning to it.
             try:
                 _log('Executing the command now from the detached child...')
                 execute()
-            except:
+            except Exception:
                 _log_exception()
         else:
             from subprocess import CREATE_NEW_PROCESS_GROUP
@@ -464,10 +474,11 @@ if __name__ == '__main__':
             env['PGA_BGP_FOREGROUND'] = "1"
 
             # We need environment variables & values in string
-            _log('[PARENT] Converting the environment variable in the bytes 
format...')
+            _log('[PARENT] Converting the environment variable in the '
+                 'bytes format...')
             try:
                 env = convert_environment_variables(env)
-            except Exception as e:
+            except Exception:
                 _log_exception()
 
             kwargs = {
@@ -477,7 +488,7 @@ if __name__ == '__main__':
                 'creationflags': CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS,
                 'close_fds': False,
                 'cwd': _out_dir,
-                'env':  env
+                'env': env
             }
 
             cmd = [sys.executable]
diff --git a/web/pgadmin/misc/bgprocess/processes.py 
b/web/pgadmin/misc/bgprocess/processes.py
index 39bb8e3..0c4112a 100644
--- a/web/pgadmin/misc/bgprocess/processes.py
+++ b/web/pgadmin/misc/bgprocess/processes.py
@@ -66,7 +66,9 @@ class BatchProcess(object):
         if 'id' in kwargs:
             self._retrieve_process(kwargs['id'])
         else:
-            self._create_process(kwargs['desc'], kwargs['cmd'], kwargs['args'])
+            self._create_process(
+                kwargs['desc'], kwargs['cmd'], kwargs['args']
+            )
 
     def _retrieve_process(self, _id):
         p = Process.query.filter_by(pid=_id, user_id=current_user.id).first()
@@ -159,17 +161,25 @@ class BatchProcess(object):
             args_csv_io, delimiter=str(','), quoting=csv.QUOTE_MINIMAL
         )
         if sys.version_info.major == 2:
-            csv_writer.writerow([a.encode('utf-8') if isinstance(a, unicode) 
else a for a in _args])
+            csv_writer.writerow(
+                [
+                    a.encode('utf-8')
+                    if isinstance(a, unicode) else a for a in _args
+                ]
+            )
         else:
             csv_writer.writerow(_args)
 
         args_val = args_csv_io.getvalue().strip(str('\r\n'))
 
         j = Process(
-            pid=int(id), command=_cmd,
-            arguments=args_val.decode('utf-8', 'replace') if IS_PY2 and 
hasattr(args_val, 'decode') \
-                else args_val,
-            logdir=log_dir, desc=dumps(self.desc), user_id=current_user.id
+            pid=int(id),
+            command=_cmd,
+            arguments=args_val.decode('utf-8', 'replace')
+            if IS_PY2 and hasattr(args_val, 'decode') else args_val,
+            logdir=log_dir,
+            desc=dumps(self.desc),
+            user_id=current_user.id
         )
         db.session.add(j)
         db.session.commit()
@@ -278,7 +288,9 @@ class BatchProcess(object):
         if os.name == 'nt' and IS_PY2:
             command = []
             for c in cmd:
-                command.append(c.encode('utf-8') if isinstance(c, unicode) 
else str(c))
+                command.append(
+                    c.encode('utf-8') if isinstance(c, unicode) else str(c)
+                )
 
             current_app.logger.info(
                 u"Executing the process executor with the arguments: %s",
@@ -288,7 +300,8 @@ class BatchProcess(object):
             cmd = command
         else:
             current_app.logger.info(
-                u"Executing the process executor with the arguments: %s", 
str(cmd)
+                u"Executing the process executor with the arguments: %s",
+                str(cmd)
             )
 
         # Make a copy of environment, and add new variables to support
@@ -318,8 +331,12 @@ class BatchProcess(object):
             stderr = open(stderr, "a")
 
             p = Popen(
-                cmd, close_fds=False, env=env, stdout=stdout.fileno(),
-                stderr=stderr.fileno(), stdin=stdin.fileno(),
+                cmd,
+                close_fds=False,
+                env=env,
+                stdout=stdout.fileno(),
+                stderr=stderr.fileno(),
+                stdin=stdin.fileno(),
                 creationflags=(CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS)
             )
         else:
@@ -424,10 +441,12 @@ class BatchProcess(object):
                 execution_time = (etime - stime).total_seconds()
 
             if process_output:
-                out, out_completed = read_log(self.stdout, stdout, out, ctime,
-                                              self.ecode)
-                err, err_completed = read_log(self.stderr, stderr, err, ctime,
-                                              self.ecode)
+                out, out_completed = read_log(
+                    self.stdout, stdout, out, ctime, self.ecode
+                )
+                err, err_completed = read_log(
+                    self.stderr, stderr, err, ctime, self.ecode
+                )
         else:
             out_completed = err_completed = False
 
@@ -439,8 +458,16 @@ class BatchProcess(object):
             }
 
         return {
-            'out': {'pos': out, 'lines': stdout, 'done': out_completed},
-            'err': {'pos': err, 'lines': stderr, 'done': err_completed},
+            'out': {
+                'pos': out,
+                'lines': stdout,
+                'done': out_completed
+            },
+            'err': {
+                'pos': err,
+                'lines': stderr,
+                'done': err_completed
+            },
             'start_time': self.stime,
             'exit_code': self.ecode,
             'execution_time': execution_time
@@ -475,9 +502,8 @@ class BatchProcess(object):
 
                 except ValueError as e:
                     current_app.logger.warning(
-                        _("Status for the background process '{0}' could not 
be loaded.").format(
-                            p.pid
-                        )
+                        _("Status for the background process '{0}' could "
+                          "not be loaded.").format(p.pid)
                     )
                     current_app.logger.exception(e)
                     return False, False
@@ -514,8 +540,8 @@ class BatchProcess(object):
             if isinstance(desc, IProcessDesc):
                 args = []
                 args_csv = StringIO(
-                  p.arguments.encode('utf-8') \
-                      if hasattr(p.arguments, 'decode') else p.arguments
+                    p.arguments.encode('utf-8')
+                    if hasattr(p.arguments, 'decode') else p.arguments
                 )
                 args_reader = csv.reader(args_csv, delimiter=str(','))
                 for arg in args_reader:
diff --git a/web/pgadmin/misc/file_manager/__init__.py 
b/web/pgadmin/misc/file_manager/__init__.py
index c3beadb..b9be488 100644
--- a/web/pgadmin/misc/file_manager/__init__.py
+++ b/web/pgadmin/misc/file_manager/__init__.py
@@ -253,12 +253,12 @@ def file_manager_config(trans_id):
     show_hidden_files = pref.preference('show_hidden_files').get()
 
     return Response(response=render_template(
-            "file_manager/js/file_manager_config.json",
-            _=gettext,
-            data=data,
-            file_dialog_view=file_dialog_view,
-            show_hidden_files=show_hidden_files
-        ),
+        "file_manager/js/file_manager_config.json",
+        _=gettext,
+        data=data,
+        file_dialog_view=file_dialog_view,
+        show_hidden_files=show_hidden_files
+    ),
         status=200,
         mimetype="application/json"
     )
@@ -301,6 +301,7 @@ def save_last_directory_visited(trans_id):
         data={'status': True}
     )
 
+
 @blueprint.route(
     "/save_file_dialog_view/<int:trans_id>", methods=["POST"],
     endpoint='save_file_dialog_view'
@@ -312,6 +313,7 @@ def save_file_dialog_view(trans_id):
         data={'status': True}
     )
 
+
 @blueprint.route(
     "/save_show_hidden_file_option/<int:trans_id>", methods=["PUT"],
     endpoint='save_show_hidden_file_option'
@@ -331,7 +333,9 @@ class Filemanager(object):
         self.trans_id = trans_id
         self.patherror = encode_json(
             {
-                'Error': gettext('No permission to operate on specified 
path.'),
+                'Error': gettext(
+                    'No permission to operate on specified path.'
+                ),
                 'Code': 0
             }
         )
@@ -407,7 +411,8 @@ class Filemanager(object):
                 last_dir = last_dir[:-1]
             while last_dir:
                 if os.path.exists(
-                        (storage_dir if storage_dir is not None else '') + 
last_dir):
+                        storage_dir
+                        if storage_dir is not None else '' + last_dir):
                     break
                 if _platform == 'win32':
                     index = max(last_dir.rfind('\\'), last_dir.rfind('/'))
@@ -426,7 +431,8 @@ class Filemanager(object):
 
         # create configs using above configs
         configs = {
-            "fileroot": last_dir.replace('\\', '\\\\'),  # for JS json 
compatibility
+            # for JS json compatibility
+            "fileroot": last_dir.replace('\\', '\\\\'),
             "dialog_type": fm_type,
             "title": title,
             "upload": {
@@ -516,7 +522,7 @@ class Filemanager(object):
                         drives.append(letter)
                     bitmask >>= 1
                 if (drive_name != '' and drive_name is not None and
-                            drive_name in drives):
+                        drive_name in drives):
                     return u"{0}{1}".format(drive_name, ':')
                 else:
                     return drives  # return drives if no argument is passed
@@ -577,7 +583,7 @@ class Filemanager(object):
                 try:
                     drive_size = getDriveSize(path)
                     drive_size_in_units = sizeof_fmt(drive_size)
-                except:
+                except Exception:
                     drive_size = 0
                 protected = 1 if drive_size == 0 else 0
                 files[file_name] = {
@@ -606,10 +612,10 @@ class Filemanager(object):
             }
 
         user_dir = path
-        folders_only = trans_data['folders_only'] if 'folders_only' in \
-                                                     trans_data else ''
-        files_only = trans_data['files_only'] if 'files_only' in \
-                                                 trans_data else ''
+        folders_only = trans_data['folders_only'] \
+            if 'folders_only' in trans_data else ''
+        files_only = trans_data['files_only'] \
+            if 'files_only' in trans_data else ''
         supported_types = trans_data['supported_types'] \
             if 'supported_types' in trans_data else []
 
@@ -622,7 +628,7 @@ class Filemanager(object):
 
                 # continue if file/folder is hidden (based on user preference)
                 if not is_show_hidden_files and \
-                    (is_folder_hidden(system_path) or f.startswith('.')):
+                        (is_folder_hidden(system_path) or f.startswith('.')):
                     continue
 
                 user_path = os.path.join(os.path.join(user_dir, f))
@@ -645,8 +651,8 @@ class Filemanager(object):
                     # filter files based on file_type
                     if file_type is not None and file_type != "*":
                         if folders_only or len(supported_types) > 0 and \
-                                        file_extension not in supported_types 
or \
-                                        file_type != file_extension:
+                                file_extension not in supported_types or \
+                                file_type != file_extension:
                             continue
 
                 # create a list of files and folders
@@ -790,8 +796,9 @@ class Filemanager(object):
         }
 
         if not path_exists(orig_path):
-            thefile['Error'] = gettext(u"'{0}' file does not exist.".format(
-                path))
+            thefile['Error'] = gettext(
+                u"'{0}' file does not exist.".format(path)
+            )
             thefile['Code'] = -1
             return thefile
 
@@ -822,7 +829,8 @@ class Filemanager(object):
             if not dir.endswith('/'):
                 dir += u'/'
 
-        filelist = self.list_filesystem(dir, path, trans_data, file_type, 
show_hidden)
+        filelist = self.list_filesystem(
+            dir, path, trans_data, file_type, show_hidden)
         return filelist
 
     def rename(self, old=None, new=None, req=None):
@@ -901,7 +909,8 @@ class Filemanager(object):
             }
 
         dir = self.dir if self.dir is not None else ''
-        path = path.encode('utf-8').decode('utf-8') if hasattr(str, 'decode') 
else path
+        path = path.encode(
+            'utf-8').decode('utf-8') if hasattr(str, 'decode') else path
         orig_path = u"{0}{1}".format(dir, path)
 
         try:
@@ -951,20 +960,23 @@ class Filemanager(object):
             file_obj = req.files['newfile']
             file_name = file_obj.filename
             if hasattr(str, 'decode'):
-                path = 
req.form.get('currentpath').encode('utf-8').decode('utf-8')
+                path = req.form.get('currentpath').encode(
+                    'utf-8').decode('utf-8')
                 file_name = file_obj.filename.encode('utf-8').decode('utf-8')
             orig_path = u"{0}{1}".format(dir, path)
             newName = u"{0}{1}".format(orig_path, file_name)
 
             with open(newName, 'wb') as f:
                 while True:
-                    data = file_obj.read(4194304)  # 4MB chunk (4 * 1024 * 
1024 Bytes)
+                    # 4MB chunk (4 * 1024 * 1024 Bytes)
+                    data = file_obj.read(4194304)
                     if not data:
                         break
                     f.write(data)
         except Exception as e:
             code = 0
-            err_msg = u"Error: {0}".format(e.strerror if hasattr(e, 
'strerror') else u'Unknown')
+            err_msg = u"Error: {0}".format(
+                e.strerror if hasattr(e, 'strerror') else u'Unknown')
 
         try:
             Filemanager.check_access_permission(dir, path)
@@ -998,7 +1010,8 @@ class Filemanager(object):
             path = path.encode('utf-8').decode('utf-8')
         try:
             orig_path = u"{0}{1}".format(dir, path)
-            Filemanager.check_access_permission(dir, u"{}{}".format(path, 
name))
+            Filemanager.check_access_permission(
+                dir, u"{}{}".format(path, name))
 
             newName = u"{0}{1}".format(orig_path, name)
             if not os.path.exists(newName):
@@ -1059,14 +1072,14 @@ class Filemanager(object):
 
         # check if file type is text or binary
         text_chars = bytearray([7, 8, 9, 10, 12, 13, 27]) \
-                    + bytearray(range(0x20, 0x7f)) \
-                    + bytearray(range(0x80, 0x100))
+            + bytearray(range(0x20, 0x7f)) \
+            + bytearray(range(0x80, 0x100))
 
         def is_binary_string(bytes_data):
             """Checks if string data is binary"""
             return bool(
-                    bytes_data.translate(None, text_chars)
-                )
+                bytes_data.translate(None, text_chars)
+            )
 
         # read the file
         try:
@@ -1180,11 +1193,13 @@ class Filemanager(object):
             orig_path = u"{0}{1}".format(dir, path)
 
         try:
-            Filemanager.check_access_permission(dir, u"{}{}".format(
-                path, path))
+            Filemanager.check_access_permission(
+                dir, u"{}{}".format(path, path)
+            )
         except Exception as e:
             resp = Response(gettext(u"Error: {0}".format(e)))
-            resp.headers['Content-Disposition'] = 'attachment; filename=' + 
name
+            resp.headers['Content-Disposition'] = \
+                'attachment; filename=' + name
             return resp
 
         name = path.split('/')[-1]

Reply via email to