diff --git a/IPython/core/alias.py b/IPython/core/alias.py index 28a9ccb..ee377d5 100644 --- a/IPython/core/alias.py +++ b/IPython/core/alias.py @@ -27,7 +27,6 @@ import sys from traitlets.config.configurable import Configurable from IPython.core.error import UsageError -from IPython.utils.py3compat import string_types from traitlets import List, Instance from logging import error @@ -148,7 +147,7 @@ class Alias(object): raise InvalidAliasError("The name %s can't be aliased " "because it is another magic command." % self.name) - if not (isinstance(self.cmd, string_types)): + if not (isinstance(self.cmd, str)): raise InvalidAliasError("An alias command must be a string, " "got: %r" % self.cmd) diff --git a/IPython/core/completer.py b/IPython/core/completer.py index cc822c1..3e2ab79 100644 --- a/IPython/core/completer.py +++ b/IPython/core/completer.py @@ -35,7 +35,7 @@ from IPython.utils import generics from IPython.utils.decorators import undoc from IPython.utils.dir2 import dir2, get_real_method from IPython.utils.process import arg_split -from IPython.utils.py3compat import builtin_mod, string_types, PY3, cast_unicode_py2 +from IPython.utils.py3compat import builtin_mod, PY3, cast_unicode_py2 from traitlets import Bool, Enum, observe from functools import wraps @@ -423,14 +423,14 @@ def get__all__entries(obj): except: return [] - return [cast_unicode_py2(w) for w in words if isinstance(w, string_types)] + return [cast_unicode_py2(w) for w in words if isinstance(w, str)] def match_dict_keys(keys, prefix, delims): """Used by dict_key_matches, matching the prefix to a list of keys""" if not prefix: return None, 0, [repr(k) for k in keys - if isinstance(k, (string_types, bytes))] + if isinstance(k, (str, bytes))] quote_match = re.search('["\']', prefix) quote = quote_match.group() try: diff --git a/IPython/core/completerlib.py b/IPython/core/completerlib.py index cd2ac20..1bbc51b 100644 --- a/IPython/core/completerlib.py +++ b/IPython/core/completerlib.py @@ -39,7 +39,6 @@ from zipimport import zipimporter from IPython.core.completer import expand_user, compress_user from IPython.core.error import TryNext from IPython.utils._process_common import arg_split -from IPython.utils.py3compat import string_types # FIXME: this should be pulled in with the right call via the component system from IPython import get_ipython @@ -169,7 +168,7 @@ def try_import(mod, only_modules=False): completions.extend(getattr(m, '__all__', [])) if m_is_init: completions.extend(module_list(os.path.dirname(m.__file__))) - completions = {c for c in completions if isinstance(c, string_types)} + completions = {c for c in completions if isinstance(c, str)} completions.discard('__init__') return list(completions) @@ -193,7 +192,7 @@ def quick_completer(cmd, completions): [d:\ipython]|3> foo ba """ - if isinstance(completions, string_types): + if isinstance(completions, str): completions = completions.split() def do_complete(self, event): diff --git a/IPython/core/display.py b/IPython/core/display.py index dbbff3e..8ac4ee6 100644 --- a/IPython/core/display.py +++ b/IPython/core/display.py @@ -18,8 +18,7 @@ import struct import sys import warnings -from IPython.utils.py3compat import (string_types, cast_bytes_py2, cast_unicode, - unicode_type) +from IPython.utils.py3compat import cast_bytes_py2, cast_unicode, unicode_type from IPython.testing.skipdoctest import skip_doctest __all__ = ['display', 'display_pretty', 'display_html', 'display_markdown', @@ -481,7 +480,7 @@ class DisplayObject(object): filename : unicode Path to a local file to load the data from. """ - if data is not None and isinstance(data, string_types): + if data is not None and isinstance(data, str): if data.startswith('http') and url is None: url = data filename = None @@ -539,7 +538,7 @@ class DisplayObject(object): class TextDisplayObject(DisplayObject): """Validate that display data is text""" def _check_data(self): - if self.data is not None and not isinstance(self.data, string_types): + if self.data is not None and not isinstance(self.data, str): raise TypeError("%s expects text, not %r" % (self.__class__.__name__, self.data)) class Pretty(TextDisplayObject): @@ -657,7 +656,7 @@ class JSON(DisplayObject): @data.setter def data(self, data): - if isinstance(data, string_types): + if isinstance(data, str): warnings.warn("JSON expects JSONable dict or list, not JSON strings") data = json.loads(data) self._data = data @@ -715,11 +714,11 @@ class Javascript(TextDisplayObject): The full URLs of the css files should be given. A single css URL can also be given as a string. """ - if isinstance(lib, string_types): + if isinstance(lib, str): lib = [lib] elif lib is None: lib = [] - if isinstance(css, string_types): + if isinstance(css, str): css = [css] elif css is None: css = [] @@ -848,7 +847,7 @@ class Image(DisplayObject): ext = self._find_ext(url) elif data is None: raise ValueError("No image data found. Expecting filename, url, or data.") - elif isinstance(data, string_types) and ( + elif isinstance(data, str) and ( data.startswith('http') or _safe_exists(data) ): ext = self._find_ext(data) @@ -999,7 +998,7 @@ class Video(DisplayObject): Video('path/to/video.mp4', embed=True) Video(b'raw-videodata', embed=True) """ - if url is None and isinstance(data, string_types) and data.startswith(('http:', 'https:')): + if url is None and isinstance(data, str) and data.startswith(('http:', 'https:')): url = data data = None elif os.path.exists(data): diff --git a/IPython/core/formatters.py b/IPython/core/formatters.py index adef488..31de644 100644 --- a/IPython/core/formatters.py +++ b/IPython/core/formatters.py @@ -29,7 +29,7 @@ from traitlets import ( default, observe, ) from IPython.utils.py3compat import ( - with_metaclass, string_types, unicode_type, + with_metaclass, unicode_type, ) @@ -276,7 +276,7 @@ class BaseFormatter(Configurable): """ format_type = Unicode('text/plain') - _return_type = string_types + _return_type = str enabled = Bool(True).tag(config=True) @@ -376,7 +376,7 @@ class BaseFormatter(Configurable): ------ KeyError if the type has not been registered. """ - if isinstance(typ, string_types): + if isinstance(typ, str): typ_key = tuple(typ.rsplit('.',1)) if typ_key not in self.deferred_printers: # We may have it cached in the type map. We will have to @@ -419,7 +419,7 @@ class BaseFormatter(Configurable): this will be the previous value (to enable restoring later). """ # if string given, interpret as 'pkg.module.class_name' - if isinstance(typ, string_types): + if isinstance(typ, str): type_module, type_name = typ.rsplit('.', 1) return self.for_type_by_name(type_module, type_name, func) @@ -491,7 +491,7 @@ class BaseFormatter(Configurable): KeyError if the type is not registered and default is not specified. """ - if isinstance(typ, string_types): + if isinstance(typ, str): typ_key = tuple(typ.rsplit('.',1)) if typ_key not in self.deferred_printers: # We may have it cached in the type map. We will have to @@ -804,7 +804,7 @@ class JSONFormatter(BaseFormatter): r, md = r # handle deprecated JSON-as-string form from IPython < 3 - if isinstance(r, string_types): + if isinstance(r, str): warnings.warn("JSON expects JSONable list/dict containers, not JSON strings", FormatterWarning) r = json.loads(r) diff --git a/IPython/core/interactiveshell.py b/IPython/core/interactiveshell.py index 9d2c325..70185d5 100644 --- a/IPython/core/interactiveshell.py +++ b/IPython/core/interactiveshell.py @@ -67,8 +67,7 @@ from IPython.utils.ipstruct import Struct from IPython.paths import get_ipython_dir from IPython.utils.path import get_home_dir, get_py_filename, ensure_dir_exists from IPython.utils.process import system, getoutput -from IPython.utils.py3compat import (builtin_mod, unicode_type, string_types, - with_metaclass) +from IPython.utils.py3compat import builtin_mod, unicode_type, with_metaclass from IPython.utils.strdispatch import StrDispatch from IPython.utils.syspathcontext import prepended_to_syspath from IPython.utils.text import format_screen, LSString, SList, DollarFormatter @@ -1307,8 +1306,8 @@ class InteractiveShell(SingletonConfigurable): # We need a dict of name/value pairs to do namespace updates. if isinstance(variables, dict): vdict = variables - elif isinstance(variables, string_types+(list, tuple)): - if isinstance(variables, string_types): + elif isinstance(variables, (str, list, tuple)): + if isinstance(variables, str): vlist = variables.split() else: vlist = variables @@ -1651,14 +1650,14 @@ class InteractiveShell(SingletonConfigurable): msg = "CustomTB must return list of strings, not %r" % stb if stb is None: return [] - elif isinstance(stb, string_types): + elif isinstance(stb, str): return [stb] elif not isinstance(stb, list): raise TypeError(msg) # it's a list for line in stb: # check every element - if not isinstance(line, string_types): + if not isinstance(line, str): raise TypeError(msg) return stb @@ -2154,7 +2153,7 @@ class InteractiveShell(SingletonConfigurable): from IPython.core import macro - if isinstance(themacro, string_types): + if isinstance(themacro, str): themacro = macro.Macro(themacro) if not isinstance(themacro, macro.Macro): raise ValueError('A macro must be a string or a Macro instance.') @@ -3165,7 +3164,7 @@ class InteractiveShell(SingletonConfigurable): raise ValueError(("'%s' was not found in history, as a file, url, " "nor in the user namespace.") % target) - if isinstance(codeobj, string_types): + if isinstance(codeobj, str): return codeobj elif isinstance(codeobj, Macro): return codeobj.value diff --git a/IPython/core/macro.py b/IPython/core/macro.py index 9032706..367998b 100644 --- a/IPython/core/macro.py +++ b/IPython/core/macro.py @@ -52,6 +52,6 @@ class Macro(object): def __add__(self, other): if isinstance(other, Macro): return Macro(self.value + other.value) - elif isinstance(other, py3compat.string_types): + elif isinstance(other, str): return Macro(self.value + other) raise TypeError diff --git a/IPython/core/magic.py b/IPython/core/magic.py index 7c1e90c..132e958 100644 --- a/IPython/core/magic.py +++ b/IPython/core/magic.py @@ -24,7 +24,6 @@ from IPython.core.inputsplitter import ESC_MAGIC, ESC_MAGIC2 from decorator import decorator from IPython.utils.ipstruct import Struct from IPython.utils.process import arg_split -from IPython.utils.py3compat import string_types from IPython.utils.text import dedent from traitlets import Bool, Dict, Instance, observe from logging import error @@ -192,7 +191,7 @@ def _method_magic_marker(magic_kind): name = func.__name__ retval = decorator(call, func) record_magic(magics, magic_kind, name, name) - elif isinstance(arg, string_types): + elif isinstance(arg, str): # Decorator called with arguments (@foo('bar')) name = arg def mark(func, *a, **kw): @@ -237,7 +236,7 @@ def _function_magic_marker(magic_kind): name = func.__name__ ip.register_magic_function(func, magic_kind, name) retval = decorator(call, func) - elif isinstance(arg, string_types): + elif isinstance(arg, str): # Decorator called with arguments (@foo('bar')) name = arg def mark(func, *a, **kw): @@ -511,7 +510,7 @@ class Magics(Configurable): tab = self.magics[mtype] = {} cls_tab = class_magics[mtype] for magic_name, meth_name in cls_tab.items(): - if isinstance(meth_name, string_types): + if isinstance(meth_name, str): # it's a method name, grab it tab[magic_name] = getattr(self, meth_name) else: diff --git a/IPython/core/magics/code.py b/IPython/core/magics/code.py index 6439df7..804e1ea 100644 --- a/IPython/core/magics/code.py +++ b/IPython/core/magics/code.py @@ -28,7 +28,6 @@ from IPython.core.magic import Magics, magics_class, line_magic from IPython.core.oinspect import find_file, find_source_lines from IPython.testing.skipdoctest import skip_doctest from IPython.utils import py3compat -from IPython.utils.py3compat import string_types from IPython.utils.contexts import preserve_keys from IPython.utils.path import get_py_filename from warnings import warn @@ -443,7 +442,7 @@ class CodeMagics(Magics): #print '*** args',args,'type',type(args) # dbg data = eval(args, shell.user_ns) - if not isinstance(data, string_types): + if not isinstance(data, str): raise DataIsObject except (NameError,SyntaxError): diff --git a/IPython/core/oinspect.py b/IPython/core/oinspect.py index 7f273a5..a36e3a8 100644 --- a/IPython/core/oinspect.py +++ b/IPython/core/oinspect.py @@ -39,7 +39,7 @@ from IPython.utils.path import compress_user from IPython.utils.text import indent from IPython.utils.wildcard import list_namespace from IPython.utils.coloransi import TermColors, ColorScheme, ColorSchemeTable -from IPython.utils.py3compat import cast_unicode, string_types, PY3 +from IPython.utils.py3compat import cast_unicode, PY3 from IPython.utils.colorable import Colorable from pygments import highlight @@ -127,7 +127,7 @@ def getdoc(obj): pass else: # if we get extra info, we add it to the normal docstring. - if isinstance(ds, string_types): + if isinstance(ds, str): return inspect.cleandoc(ds) try: docstr = inspect.getdoc(obj) diff --git a/IPython/core/pylabtools.py b/IPython/core/pylabtools.py index 33f2a03..30ca16b 100644 --- a/IPython/core/pylabtools.py +++ b/IPython/core/pylabtools.py @@ -217,7 +217,7 @@ def select_figure_formats(shell, formats, **kwargs): jpg_formatter = shell.display_formatter.formatters['image/jpeg'] pdf_formatter = shell.display_formatter.formatters['application/pdf'] - if isinstance(formats, py3compat.string_types): + if isinstance(formats, str): formats = {formats} # cast in case of list / tuple formats = set(formats) diff --git a/IPython/core/tests/test_completer.py b/IPython/core/tests/test_completer.py index 03c0a4f..4b81de6 100644 --- a/IPython/core/tests/test_completer.py +++ b/IPython/core/tests/test_completer.py @@ -18,7 +18,7 @@ from IPython.core import completer from IPython.external.decorators import knownfailureif from IPython.utils.tempdir import TemporaryDirectory, TemporaryWorkingDirectory from IPython.utils.generics import complete_object -from IPython.utils.py3compat import string_types, unicode_type +from IPython.utils.py3compat import unicode_type from IPython.testing import decorators as dec #----------------------------------------------------------------------------- @@ -129,7 +129,7 @@ def test_unicode_completions(): # should be thrown and the return value should be a pair of text, list # values. text, matches = ip.complete(t) - nt.assert_true(isinstance(text, string_types)) + nt.assert_true(isinstance(text, str)) nt.assert_true(isinstance(matches, list)) def test_latex_completions(): diff --git a/IPython/core/tests/test_completerlib.py b/IPython/core/tests/test_completerlib.py index 82d246b..0f10884 100644 --- a/IPython/core/tests/test_completerlib.py +++ b/IPython/core/tests/test_completerlib.py @@ -157,6 +157,6 @@ def test_bad_module_all(): results = module_completion('from bad_all import ') nt.assert_in('puppies', results) for r in results: - nt.assert_is_instance(r, py3compat.string_types) + nt.assert_is_instance(r, str) finally: sys.path.remove(testsdir) diff --git a/IPython/core/tests/test_inputsplitter.py b/IPython/core/tests/test_inputsplitter.py index 17a7e37..90dd911 100644 --- a/IPython/core/tests/test_inputsplitter.py +++ b/IPython/core/tests/test_inputsplitter.py @@ -15,7 +15,7 @@ from IPython.core.inputtransformer import InputTransformer from IPython.core.tests.test_inputtransformer import syntax, syntax_ml from IPython.testing import tools as tt from IPython.utils import py3compat -from IPython.utils.py3compat import string_types, input +from IPython.utils.py3compat import input #----------------------------------------------------------------------------- # Semi-complete examples (also used as tests) @@ -100,7 +100,7 @@ def test_remove_comments(): def test_get_input_encoding(): encoding = isp.get_input_encoding() - nt.assert_true(isinstance(encoding, string_types)) + nt.assert_true(isinstance(encoding, str)) # simple-minded check that at least encoding a simple string works with the # encoding we got. nt.assert_equal(u'test'.encode(encoding), b'test') diff --git a/IPython/core/ultratb.py b/IPython/core/ultratb.py index df451e0..f7d4c76 100644 --- a/IPython/core/ultratb.py +++ b/IPython/core/ultratb.py @@ -1060,7 +1060,7 @@ class VerboseTB(TBTools): if (not py3compat.PY3) and type(evalue) is types.InstanceType: try: - names = [w for w in dir(evalue) if isinstance(w, py3compat.string_types)] + names = [w for w in dir(evalue) if isinstance(w, str)] except: # Every now and then, an object with funny internals blows up # when dir() is called on it. We do the best we can to report @@ -1429,7 +1429,7 @@ class SyntaxTB(ListTB): # be wrong (retrieved from an outdated cache). This replaces it with # the current value. if isinstance(value, SyntaxError) \ - and isinstance(value.filename, py3compat.string_types) \ + and isinstance(value.filename, str) \ and isinstance(value.lineno, int): linecache.checkcache(value.filename) newtext = ulinecache.getline(value.filename, value.lineno) diff --git a/IPython/extensions/storemagic.py b/IPython/extensions/storemagic.py index 32a3505..9a203ff 100644 --- a/IPython/extensions/storemagic.py +++ b/IPython/extensions/storemagic.py @@ -18,7 +18,6 @@ import inspect, os, sys, textwrap from IPython.core.error import UsageError from IPython.core.magic import Magics, magics_class, line_magic from traitlets import Bool -from IPython.utils.py3compat import string_types def restore_aliases(ip): @@ -178,7 +177,7 @@ class StoreMagics(Magics): obj.__class__.__name__, fnam)) - if not isinstance (obj, string_types): + if not isinstance (obj, str): from pprint import pprint pprint(obj, fil) else: diff --git a/IPython/lib/backgroundjobs.py b/IPython/lib/backgroundjobs.py index a3a02ab..1fc81d7 100644 --- a/IPython/lib/backgroundjobs.py +++ b/IPython/lib/backgroundjobs.py @@ -36,7 +36,6 @@ import threading from IPython import get_ipython from IPython.core.ultratb import AutoFormattedTB from logging import error -from IPython.utils.py3compat import string_types class BackgroundJobManager(object): @@ -171,7 +170,7 @@ class BackgroundJobManager(object): if callable(func_or_exp): kw = kwargs.get('kw',{}) job = BackgroundJobFunc(func_or_exp,*args,**kw) - elif isinstance(func_or_exp, string_types): + elif isinstance(func_or_exp, str): if not args: frame = sys._getframe(1) glob, loc = frame.f_globals, frame.f_locals diff --git a/IPython/lib/pretty.py b/IPython/lib/pretty.py index 6e31daa..83cf094 100644 --- a/IPython/lib/pretty.py +++ b/IPython/lib/pretty.py @@ -84,7 +84,7 @@ import re import datetime from collections import deque -from IPython.utils.py3compat import PY3, PYPY, cast_unicode, string_types +from IPython.utils.py3compat import PY3, PYPY, cast_unicode from IPython.utils.encoding import get_stream_enc from io import StringIO @@ -679,13 +679,13 @@ def _type_pprint(obj, p, cycle): mod = _safe_getattr(obj, '__module__', None) try: name = obj.__qualname__ - if not isinstance(name, string_types): + if not isinstance(name, str): # This can happen if the type implements __qualname__ as a property # or other descriptor in Python 2. raise Exception("Try __name__") except Exception: name = obj.__name__ - if not isinstance(name, string_types): + if not isinstance(name, str): name = '' if mod in (None, '__builtin__', 'builtins', 'exceptions'): diff --git a/IPython/terminal/interactiveshell.py b/IPython/terminal/interactiveshell.py index 763761b..22e84c7 100644 --- a/IPython/terminal/interactiveshell.py +++ b/IPython/terminal/interactiveshell.py @@ -7,7 +7,7 @@ from warnings import warn from IPython.core.interactiveshell import InteractiveShell, InteractiveShellABC from IPython.utils import io -from IPython.utils.py3compat import PY3, cast_unicode_py2, input, string_types +from IPython.utils.py3compat import PY3, cast_unicode_py2, input from IPython.utils.terminal import toggle_set_term_title, set_term_title from IPython.utils.process import abbrev_cwd from traitlets import Bool, Unicode, Dict, Integer, observe, Instance, Type, default, Enum, Union @@ -289,7 +289,7 @@ class TerminalInteractiveShell(InteractiveShell): else : raise ValueError('Got unknown colors: ', legacy) else : - if isinstance(name_or_cls, string_types): + if isinstance(name_or_cls, str): style_cls = get_style_by_name(name_or_cls) else: style_cls = name_or_cls diff --git a/IPython/terminal/magics.py b/IPython/terminal/magics.py index 474d9e6..5be9234 100644 --- a/IPython/terminal/magics.py +++ b/IPython/terminal/magics.py @@ -72,7 +72,7 @@ class TerminalMagics(Magics): # Sanity checks if b is None: raise UsageError('No previous pasted block available') - if not isinstance(b, py3compat.string_types): + if not isinstance(b, str): raise UsageError( "Variable 'pasted_block' is not a string, can't execute") diff --git a/IPython/testing/decorators.py b/IPython/testing/decorators.py index 45c26ea..5a1a46c 100644 --- a/IPython/testing/decorators.py +++ b/IPython/testing/decorators.py @@ -49,7 +49,7 @@ from .ipunittest import ipdoctest, ipdocstring from IPython.external.decorators import * # For onlyif_cmd_exists decorator -from IPython.utils.py3compat import string_types, which, PY2, PY3, PYPY +from IPython.utils.py3compat import which, PY2, PY3, PYPY #----------------------------------------------------------------------------- # Classes and functions @@ -131,7 +131,7 @@ def make_label_dec(label, ds=None): warnings.warn("The function `make_label_dec` is deprecated since IPython 4.0", DeprecationWarning, stacklevel=2) - if isinstance(label, string_types): + if isinstance(label, str): labels = [label] else: labels = label diff --git a/IPython/testing/tools.py b/IPython/testing/tools.py index 40cfde7..1779221 100644 --- a/IPython/testing/tools.py +++ b/IPython/testing/tools.py @@ -354,7 +354,7 @@ class AssertPrints(object): """ def __init__(self, s, channel='stdout', suppress=True): self.s = s - if isinstance(self.s, (py3compat.string_types, _re_type)): + if isinstance(self.s, (str, _re_type)): self.s = [self.s] self.channel = channel self.suppress = suppress diff --git a/IPython/utils/_process_common.py b/IPython/utils/_process_common.py index 9ede30d..fa2144c 100644 --- a/IPython/utils/_process_common.py +++ b/IPython/utils/_process_common.py @@ -71,7 +71,7 @@ def process_handler(cmd, callback, stderr=subprocess.PIPE): # On win32, close_fds can't be true when using pipes for stdin/out/err close_fds = sys.platform != 'win32' # Determine if cmd should be run with system shell. - shell = isinstance(cmd, py3compat.string_types) + shell = isinstance(cmd, str) # On POSIX systems run shell commands with user-preferred shell. executable = None if shell and os.name == 'posix' and 'SHELL' in os.environ: diff --git a/IPython/utils/dir2.py b/IPython/utils/dir2.py index f6f164f..50805e0 100644 --- a/IPython/utils/dir2.py +++ b/IPython/utils/dir2.py @@ -6,7 +6,6 @@ # Distributed under the terms of the Modified BSD License. import inspect -from .py3compat import string_types def safe_hasattr(obj, attr): @@ -44,7 +43,7 @@ def dir2(obj): # filter out non-string attributes which may be stuffed by dir() calls # and poor coding in third-party modules - words = [w for w in words if isinstance(w, string_types)] + words = [w for w in words if isinstance(w, str)] return sorted(words) diff --git a/IPython/utils/io.py b/IPython/utils/io.py index cf27dd1..dcbef22 100644 --- a/IPython/utils/io.py +++ b/IPython/utils/io.py @@ -17,7 +17,7 @@ from warnings import warn from IPython.utils.decorators import undoc from .capture import CapturedIO, capture_output -from .py3compat import string_types, input, PY3 +from .py3compat import input, PY3 @undoc class IOStream: @@ -63,7 +63,7 @@ class IOStream: def writelines(self, lines): warn('IOStream is deprecated since IPython 5.0, use sys.{stdin,stdout,stderr} instead', DeprecationWarning, stacklevel=2) - if isinstance(lines, string_types): + if isinstance(lines, str): lines = [lines] for line in lines: self.write(line) diff --git a/IPython/utils/path.py b/IPython/utils/path.py index fa85081..0f900b4 100644 --- a/IPython/utils/path.py +++ b/IPython/utils/path.py @@ -154,7 +154,7 @@ def filefind(filename, path_dirs=None): if path_dirs is None: path_dirs = ("",) - elif isinstance(path_dirs, py3compat.string_types): + elif isinstance(path_dirs, str): path_dirs = (path_dirs,) for path in path_dirs: diff --git a/IPython/utils/text.py b/IPython/utils/text.py index 2c39dee..bb1f3c9 100644 --- a/IPython/utils/text.py +++ b/IPython/utils/text.py @@ -159,7 +159,7 @@ class SList(list): except IndexError: return "" - if isinstance(pattern, py3compat.string_types): + if isinstance(pattern, str): pred = lambda x : re.search(pattern, x, re.IGNORECASE) else: pred = pattern @@ -307,8 +307,10 @@ def list_strings(arg): Out[9]: ['A', 'list', 'of', 'strings'] """ - if isinstance(arg, py3compat.string_types): return [arg] - else: return arg + if isinstance(arg, str): + return [arg] + else: + return arg def marquee(txt='',width=78,mark='*'):