From d30554bc90f36d7f7835bd21fe5c5b86169b5432 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 18 Mar 2018 03:19:43 +0100 Subject: [PATCH] Network F5: Adjust for Python 3 scoping rules (#37554) This PR makes and adjustment for Python 3 scoping rules which differ from Python 2. In Python 3, the variable __ex__ goes out of scope at the exit of the __try-except__ block. This means that when __ex__ is referred to on the lines that follow, it would be an _undefined name_ causing a __NameError__ to be raised instead of the expected __ConnectionError__. flake8 testing of https://github.com/ansible/ansible on Python 3.6.3 The command "echo ; echo -n "flake8 testing of ${URL} on " ; python -V" exited with 0. 130.72s$ time flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics ./lib/ansible/module_utils/api.py:114:21: F823 local variable 'retry_count' (defined in enclosing scope on line 107) referenced before assignment retry_count += 1 # pylint: disable=undefined-variable ^ ./lib/ansible/module_utils/six/__init__.py:54:20: F821 undefined name 'basestring' string_types = basestring, ^ ./lib/ansible/module_utils/six/__init__.py:55:27: F821 undefined name 'long' integer_types = (int, long) ^ ./lib/ansible/module_utils/six/__init__.py:57:17: F821 undefined name 'unicode' text_type = unicode ^ ./lib/ansible/module_utils/six/__init__.py:658:16: F821 undefined name 'unicode' return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") ^ ./lib/ansible/module_utils/six/__init__.py:754:37: F821 undefined name 'basestring' if not isinstance(data, basestring): ^ ./lib/ansible/module_utils/six/__init__.py:757:32: F821 undefined name 'file' if (isinstance(fp, file) and ^ ./lib/ansible/module_utils/six/__init__.py:758:38: F821 undefined name 'unicode' isinstance(data, unicode) and ^ ./lib/ansible/module_utils/six/__init__.py:768:32: F821 undefined name 'unicode' if isinstance(sep, unicode): ^ ./lib/ansible/module_utils/six/__init__.py:774:32: F821 undefined name 'unicode' if isinstance(end, unicode): ^ ./lib/ansible/module_utils/six/__init__.py:782:36: F821 undefined name 'unicode' if isinstance(arg, unicode): ^ ./lib/ansible/module_utils/six/__init__.py:786:23: F821 undefined name 'unicode' newline = unicode("\n") ^ ./lib/ansible/module_utils/six/__init__.py:787:21: F821 undefined name 'unicode' space = unicode(" ") ^ ./lib/ansible/modules/cloud/misc/rhevm.py:594:24: F821 undefined name 'e' setMsg(str(e)) ^ ./lib/ansible/modules/cloud/openstack/os_user.py:202:38: F821 undefined name 'shade' if description and StrictVersion(shade.__version__) < StrictVersion('1.13.0'): ^ ./lib/ansible/modules/cloud/openstack/os_volume.py:153:27: F821 undefined name 'shade' StrictVersion(shade.__version__) < StrictVersion('1.22')): ^ ./lib/ansible/modules/files/archive.py:391:92: F821 undefined name 'e' module.fail_json(dest=dest, msg='Error deleting some source files: ' + str(e), files=errors) ^ ./lib/ansible/modules/network/dellos9/dellos9_facts.py:379:24: F821 undefined name 'key' parsed[key] += '\n%s' % line ^ ./lib/ansible/modules/network/dellos9/dellos9_facts.py:399:24: F821 undefined name 'key' parsed[key] += '\n%s' % line ^ ./lib/ansible/modules/network/dellos9/dellos9_facts.py:403:24: F821 undefined name 'key' parsed[key] += '\n%s' % line ^ ./lib/ansible/modules/network/dellos9/dellos9_facts.py:418:24: F821 undefined name 'key' parsed[key] += '\n%s' % line ^ ./lib/ansible/modules/network/f5/bigip_device_httpd.py:461:40: F821 undefined name 'ex' if 'Connection aborted' in str(ex) and 'redirectHttpToHttps' in params: ^ ./lib/ansible/modules/network/f5/bigip_device_httpd.py:465:33: F821 undefined name 'ex' raise F5ModuleError(str(ex)) ^ ./lib/ansible/modules/network/ironware/ironware_facts.py:274:24: F821 undefined name 'key' parsed[key] += '\n%s' % line ^ ./lib/ansible/modules/network/ironware/ironware_facts.py:514:24: F821 undefined name 'key' parsed[key] += '\n%s' % line ^ 24 F821 undefined name 'basestring' 1 F823 local variable 'retry_count' (defined in enclosing scope on line 107) referenced before assignment 25 --- .../modules/network/f5/bigip_device_httpd.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/ansible/modules/network/f5/bigip_device_httpd.py b/lib/ansible/modules/network/f5/bigip_device_httpd.py index 38c3310a3ee..7c5802e5700 100644 --- a/lib/ansible/modules/network/f5/bigip_device_httpd.py +++ b/lib/ansible/modules/network/f5/bigip_device_httpd.py @@ -454,15 +454,13 @@ class ModuleManager(object): resource.modify(**params) return True except ConnectionError as ex: - pass - - # BIG-IP will kill your management connection when you change the HTTP - # redirect setting. So this catches that and handles it gracefully. - if 'Connection aborted' in str(ex) and 'redirectHttpToHttps' in params: - # Wait for BIG-IP web server to settle after changing this - time.sleep(2) - return True - raise F5ModuleError(str(ex)) + # BIG-IP will kill your management connection when you change the HTTP + # redirect setting. So this catches that and handles it gracefully. + if 'Connection aborted' in str(ex) and 'redirectHttpToHttps' in params: + # Wait for BIG-IP web server to settle after changing this + time.sleep(2) + return True + raise F5ModuleError(str(ex)) def read_current_from_device(self): resource = self.client.api.tm.sys.httpd.load()