From 4cb41d4e70aee5865614b2626599c7de5be13aeb Mon Sep 17 00:00:00 2001 From: Rafael Laverde Date: Thu, 16 Feb 2017 17:51:28 -0500 Subject: [PATCH 1/3] Edgeline:Fix error when checking if option is string in python2.7 --- spyder/widgets/panels/edgeline.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spyder/widgets/panels/edgeline.py b/spyder/widgets/panels/edgeline.py index 499cbf9b1d8..797e8c5a581 100644 --- a/spyder/widgets/panels/edgeline.py +++ b/spyder/widgets/panels/edgeline.py @@ -12,6 +12,7 @@ from qtpy.QtCore import Qt, QRect from qtpy.QtGui import QPainter, QColor +from spyder.py3compat import is_text_string class EdgeLine(QWidget): """Source code editor's edge line (default: 79 columns, PEP8)""" @@ -53,7 +54,7 @@ def set_columns(self, columns): """Set edge line columns values.""" if isinstance(columns, tuple): self.columns = columns - elif isinstance(columns, str): + elif is_text_string(columns): self.columns = tuple(int(e) for e in columns.split(',')) self.update() From 8d9bfafbf87010f3f52866fa201d4cbcf4726847 Mon Sep 17 00:00:00 2001 From: Rafael Laverde Date: Thu, 16 Feb 2017 19:21:10 -0500 Subject: [PATCH 2/3] Add test for py3compat usage. --- spyder/tests/tests_py3compat_usage.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 spyder/tests/tests_py3compat_usage.py diff --git a/spyder/tests/tests_py3compat_usage.py b/spyder/tests/tests_py3compat_usage.py new file mode 100644 index 00000000000..8d2ae49eefb --- /dev/null +++ b/spyder/tests/tests_py3compat_usage.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +import os +import re + +root_path = os.path.realpath(os.path.join(os.getcwd(), 'spyder')) + +pattern = re.compile("isinstance\(.*,.*str\)") + + +def test_dont_use_isinstance_str(): + found = False + for dir_name, _, file_list in os.walk(root_path): + for fname in file_list: + if fname.endswith('.py') and fname != 'py3compat.py': + file = os.path.join(dir_name, fname) + + for i, line in enumerate(open(file)): + for match in re.finditer(pattern, line): + print("{}\nline:{}, {}".format(file, i + 1, line)) + found = True + + assert found == False, ("Don't use builtin isinstance() function," + "use spyder.py3compat.is_text_string() instead") From 37a4af6a1cdbad2d81afe5dbf92d6a8b905db787 Mon Sep 17 00:00:00 2001 From: Rafael Laverde Date: Thu, 16 Feb 2017 19:25:15 -0500 Subject: [PATCH 3/3] Change usage of isinstance(*,str) to py3commpat.is_text_string(). --- spyder/widgets/panels/manager.py | 4 ++-- spyder/workers/updates.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spyder/widgets/panels/manager.py b/spyder/widgets/panels/manager.py index 1afca755b8e..897a2e0c086 100644 --- a/spyder/widgets/panels/manager.py +++ b/spyder/widgets/panels/manager.py @@ -14,7 +14,7 @@ from spyder.api.manager import Manager from spyder.api.panel import Panel from spyder.config.base import debug_print - +from spyder.py3compat import is_text_string class PanelsManager(Manager): """ @@ -94,7 +94,7 @@ def get(self, name_or_klass): :param name_or_klass: Name or class of the panel to retrieve. :return: The specified panel instance. """ - if not isinstance(name_or_klass, str): + if not is_text_string(name_or_klass, str): name_or_klass = name_or_klass.__name__ for zone in range(4): try: diff --git a/spyder/workers/updates.py b/spyder/workers/updates.py index fb1337c547f..ba45e0bb9b1 100644 --- a/spyder/workers/updates.py +++ b/spyder/workers/updates.py @@ -14,7 +14,7 @@ # Local imports from spyder import __version__ from spyder.config.base import _ -from spyder.py3compat import PY3 +from spyder.py3compat import PY3, is_text_string from spyder.utils.programs import check_version, is_stable_version @@ -76,7 +76,7 @@ def start(self): data = page.read() # Needed step for python3 compatibility - if not isinstance(data, str): + if not is_text_string(data, str): data = data.decode() data = json.loads(data)