From 52082ad6424aaece561f50ade2f739103c177496 Mon Sep 17 00:00:00 2001 From: Philippe Pepiot Date: Fri, 8 Nov 2019 14:48:57 +0100 Subject: Nearly drop dependency on six --- logilab/common/__init__.py | 1 - logilab/common/changelog.py | 4 +--- logilab/common/configuration.py | 7 +++---- logilab/common/daemon.py | 1 - logilab/common/date.py | 2 -- logilab/common/decorators.py | 7 +------ logilab/common/logging_ext.py | 4 +--- logilab/common/modutils.py | 12 ------------ logilab/common/optik_ext.py | 4 +--- logilab/common/registry.py | 9 +++------ logilab/common/shellutils.py | 7 ++----- logilab/common/table.py | 1 - logilab/common/tasksqueue.py | 2 +- logilab/common/testlib.py | 12 +++++------- logilab/common/umessage.py | 16 +++++++--------- logilab/common/ureports/docbook_writer.py | 2 -- logilab/common/ureports/html_writer.py | 2 -- logilab/common/ureports/nodes.py | 4 +--- logilab/common/ureports/text_writer.py | 2 -- test/unittest_configuration.py | 4 +--- test/unittest_deprecation.py | 8 ++------ test/unittest_shellutils.py | 2 -- test/unittest_table.py | 2 -- test/unittest_testlib.py | 2 -- test/unittest_umessage.py | 14 ++++++-------- 25 files changed, 35 insertions(+), 96 deletions(-) diff --git a/logilab/common/__init__.py b/logilab/common/__init__.py index 796831a..bf35711 100644 --- a/logilab/common/__init__.py +++ b/logilab/common/__init__.py @@ -150,7 +150,6 @@ def make_domains(lists): >>> make_domains(['a', 'b'], ['c','d', 'e']) [['a', 'b', 'a', 'b', 'a', 'b'], ['c', 'c', 'd', 'd', 'e', 'e']] """ - from six.moves import range domains = [] for iterable in lists: new_domain = iterable[:] diff --git a/logilab/common/changelog.py b/logilab/common/changelog.py index 3f62bd4..6eb8432 100644 --- a/logilab/common/changelog.py +++ b/logilab/common/changelog.py @@ -50,8 +50,6 @@ import sys from stat import S_IWRITE import codecs -from six import string_types - BULLET = '*' SUBBULLET = '-' INDENT = ' ' * 4 @@ -70,7 +68,7 @@ class Version(tuple): correctly printing it as X.Y.Z """ def __new__(cls, versionstr): - if isinstance(versionstr, string_types): + if isinstance(versionstr, str): versionstr = versionstr.strip(' :') # XXX (syt) duh? parsed = cls.parse(versionstr) else: diff --git a/logilab/common/configuration.py b/logilab/common/configuration.py index 7f4299c..8489de5 100644 --- a/logilab/common/configuration.py +++ b/logilab/common/configuration.py @@ -122,8 +122,7 @@ from os.path import exists, expanduser from copy import copy from warnings import warn -from six import integer_types, string_types -from six.moves import range, configparser as cp, input +import configparser as cp from logilab.common.compat import str_encode as _encode from logilab.common.deprecation import deprecated @@ -370,9 +369,9 @@ def format_option_value(optdict, value): value = value.pattern elif optdict.get('type') == 'yn': value = value and 'yes' or 'no' - elif isinstance(value, string_types) and value.isspace(): + elif isinstance(value, str) and value.isspace(): value = "'%s'" % value - elif optdict.get('type') == 'time' and isinstance(value, (float, ) + integer_types): + elif optdict.get('type') == 'time' and isinstance(value, (float, int)): value = format_time(value) elif optdict.get('type') == 'bytes' and hasattr(value, '__int__'): value = format_bytes(value) diff --git a/logilab/common/daemon.py b/logilab/common/daemon.py index 40319a4..78e4743 100644 --- a/logilab/common/daemon.py +++ b/logilab/common/daemon.py @@ -26,7 +26,6 @@ import sys import time import warnings -from six.moves import range def setugid(user): """Change process user and group ID diff --git a/logilab/common/date.py b/logilab/common/date.py index 1d13a77..cdf2317 100644 --- a/logilab/common/date.py +++ b/logilab/common/date.py @@ -28,8 +28,6 @@ from datetime import date, time, datetime, timedelta from time import strptime as time_strptime from calendar import monthrange, timegm -from six.moves import range - try: from mx.DateTime import RelativeDateTime, Date, DateTimeType except ImportError: diff --git a/logilab/common/decorators.py b/logilab/common/decorators.py index 9ec1b5f..8dd2e7f 100644 --- a/logilab/common/decorators.py +++ b/logilab/common/decorators.py @@ -26,12 +26,7 @@ import types from time import process_time, time from inspect import isgeneratorfunction -import six - -if six.PY3: - from inspect import getfullargspec -else: - from inspect import getargspec as getfullargspec +from inspect import getfullargspec from logilab.common.compat import method_type diff --git a/logilab/common/logging_ext.py b/logilab/common/logging_ext.py index 3b6a580..9657581 100644 --- a/logilab/common/logging_ext.py +++ b/logilab/common/logging_ext.py @@ -24,8 +24,6 @@ import os import sys import logging -from six import string_types - from logilab.common.textutils import colorize_ansi @@ -133,7 +131,7 @@ def get_threshold(debug=False, logthreshold=None): logthreshold = logging.DEBUG else: logthreshold = logging.ERROR - elif isinstance(logthreshold, string_types): + elif isinstance(logthreshold, str): logthreshold = getattr(logging, THRESHOLD_MAP.get(logthreshold, logthreshold)) return logthreshold diff --git a/logilab/common/modutils.py b/logilab/common/modutils.py index 030cfa3..34419bd 100644 --- a/logilab/common/modutils.py +++ b/logilab/common/modutils.py @@ -38,9 +38,6 @@ from imp import find_module, load_module, C_BUILTIN, PY_COMPILED, PKG_DIRECTORY from distutils.sysconfig import get_config_var, get_python_lib, get_python_version from distutils.errors import DistutilsPlatformError -from six import PY3 -from six.moves import map, range - try: import zipimport except ImportError: @@ -226,14 +223,6 @@ def _canonicalize_path(path): return realpath(expanduser(path)) -def _path_from_filename(filename): - if PY3: - return filename - else: - if filename.endswith(".pyc"): - return filename[:-1] - return filename - @deprecated('you should avoid using modpath_from_file()') def modpath_from_file(filename, extrapath=None): @@ -258,7 +247,6 @@ def modpath_from_file(filename, extrapath=None): :rtype: list(str) :return: the corresponding splitted module's name """ - filename = _path_from_filename(filename) filename = _canonicalize_path(filename) base = os.path.splitext(filename)[0] diff --git a/logilab/common/optik_ext.py b/logilab/common/optik_ext.py index 95489c2..07365a7 100644 --- a/logilab/common/optik_ext.py +++ b/logilab/common/optik_ext.py @@ -56,8 +56,6 @@ import time from copy import copy from os.path import exists -from six import integer_types - # python >= 2.3 from optparse import OptionParser as BaseParser, Option as BaseOption, \ OptionGroup, OptionContainer, OptionValueError, OptionError, \ @@ -171,7 +169,7 @@ def check_color(option, opt, value): raise OptionValueError(msg % (opt, value)) def check_time(option, opt, value): - if isinstance(value, integer_types + (float,)): + if isinstance(value, (int, float)): return value return apply_units(value, TIME_UNITS) diff --git a/logilab/common/registry.py b/logilab/common/registry.py index 07d4353..2a8a1c0 100644 --- a/logilab/common/registry.py +++ b/logilab/common/registry.py @@ -90,8 +90,6 @@ from os.path import join, isdir, exists from logging import getLogger from warnings import warn -from six import string_types, add_metaclass - from logilab.common.modutils import modpath_from_file from logilab.common.logging_ext import set_log_methods from logilab.common.decorators import classproperty @@ -317,7 +315,7 @@ class Registry(dict): # XXXFIXME this is a duplication of unregister() # remove register_and_replace in favor of unregister + register # or simplify by calling unregister then register here - if not isinstance(replaced, string_types): + if not isinstance(replaced, str): replaced = self.objid(replaced) # prevent from misspelling assert obj is not replaced, 'replacing an object by itself: %s' % obj @@ -623,7 +621,7 @@ class RegistryStore(dict): :meth:`~logilab.common.registry.RegistryStore.register_and_replace` for instance). """ - assert isinstance(modname, string_types), \ + assert isinstance(modname, str), \ 'modname expected to be a module name (ie string), got %r' % modname for obj in objects: if self.is_registrable(obj) and obj.__module__ == modname and not obj in butclasses: @@ -985,8 +983,7 @@ class PredicateMetaClass(type): return inst -@add_metaclass(PredicateMetaClass) -class Predicate(object): +class Predicate(object, metaclass=PredicateMetaClass): """base class for selector classes providing implementation for operators ``&``, ``|`` and ``~`` diff --git a/logilab/common/shellutils.py b/logilab/common/shellutils.py index b9d5fa6..44f34ef 100644 --- a/logilab/common/shellutils.py +++ b/logilab/common/shellutils.py @@ -37,9 +37,6 @@ import random import subprocess from os.path import exists, isdir, islink, basename, join -from six import string_types -from six.moves import range, input as raw_input - from logilab.common import STD_BLACKLIST, _handle_blacklist from logilab.common.compat import str_to_bytes from logilab.common.deprecation import deprecated @@ -157,7 +154,7 @@ def find(directory, exts, exclude=False, blacklist=STD_BLACKLIST): :return: the list of all matching files """ - if isinstance(exts, string_types): + if isinstance(exts, str): exts = (exts,) if exclude: def match(filename, exts): @@ -342,7 +339,7 @@ class progress(object): class RawInput(object): def __init__(self, input=None, printer=None): - self._input = input or raw_input + self._input = input self._print = printer def ask(self, question, options, default): diff --git a/logilab/common/table.py b/logilab/common/table.py index 6e22c65..1f1101c 100644 --- a/logilab/common/table.py +++ b/logilab/common/table.py @@ -21,7 +21,6 @@ from __future__ import print_function __docformat__ = "restructuredtext en" -from six.moves import range class Table(object): """Table defines a data table with column and row names. diff --git a/logilab/common/tasksqueue.py b/logilab/common/tasksqueue.py index ed74cf5..7d561ca 100644 --- a/logilab/common/tasksqueue.py +++ b/logilab/common/tasksqueue.py @@ -21,7 +21,7 @@ __docformat__ = "restructuredtext en" from bisect import insort_left -from six.moves import queue +import queue LOW = 0 MEDIUM = 10 diff --git a/logilab/common/testlib.py b/logilab/common/testlib.py index fa3e36e..dae1ff5 100644 --- a/logilab/common/testlib.py +++ b/logilab/common/testlib.py @@ -56,8 +56,8 @@ from shutil import rmtree from operator import itemgetter from inspect import isgeneratorfunction -from six import PY2, add_metaclass, string_types -from six.moves import builtins, range, configparser, input +import builtins +import configparser from logilab.common.deprecation import class_deprecated, deprecated @@ -90,8 +90,7 @@ is_generator = deprecated('[lgc 0.63] use inspect.isgeneratorfunction')(isgenera __unittest = 1 -@deprecated('with_tempdir is deprecated, use {0}.TemporaryDirectory.'.format( - 'tempfile' if not PY2 else 'backports.tempfile')) +@deprecated('with_tempdir is deprecated, use tempfile.TemporaryDirectory.') def with_tempdir(callable): """A decorator ensuring no temporary file left when the function return Work only for temporary file created with the tempfile module""" @@ -304,7 +303,7 @@ class Tags(set): if kwargs: raise TypeError("%s are an invalid keyword argument for this function" % kwargs.keys()) - if len(tags) == 1 and not isinstance(tags[0], string_types): + if len(tags) == 1 and not isinstance(tags[0], str): tags = tags[0] super(Tags, self).__init__(tags, **kwargs) @@ -550,8 +549,7 @@ class DocTestFinder(doctest.DocTestFinder): globs, source_lines) -@add_metaclass(class_deprecated) -class DocTest(TestCase): +class DocTest(TestCase, metaclass=class_deprecated): """trigger module doctest I don't know how to make unittest.main consider the DocTestSuite instance without this hack diff --git a/logilab/common/umessage.py b/logilab/common/umessage.py index a0394bc..e5a7f4e 100644 --- a/logilab/common/umessage.py +++ b/logilab/common/umessage.py @@ -27,8 +27,6 @@ from email.header import decode_header from datetime import datetime -from six import text_type, binary_type - try: from mx.DateTime import DateTime except ImportError: @@ -46,9 +44,9 @@ def decode_QP(string): # the 'official' fix is to use the new 'policy' APIs # https://bugs.python.org/issue24797 # let's just handle this bug ourselves for now - if isinstance(decoded, binary_type): + if isinstance(decoded, bytes): decoded = decoded.decode(charset, 'replace') - assert isinstance(decoded, text_type) + assert isinstance(decoded, str) parts.append(decoded) if sys.version_info < (3, 3): @@ -109,29 +107,29 @@ class UMessage: return [UMessage(msg) for msg in payload] if message.get_content_maintype() != 'text': return payload - if isinstance(payload, text_type): + if isinstance(payload, str): return payload charset = message.get_content_charset() or 'iso-8859-1' if search_function(charset) is None: charset = 'iso-8859-1' - return text_type(payload or b'', charset, "replace") + return str(payload or b'', charset, "replace") else: payload = UMessage(message.get_payload(index, decode)) return payload def get_content_maintype(self): - return text_type(self.message.get_content_maintype()) + return str(self.message.get_content_maintype()) def get_content_type(self): - return text_type(self.message.get_content_type()) + return str(self.message.get_content_type()) def get_filename(self, failobj=None): value = self.message.get_filename(failobj) if value is failobj: return value try: - return text_type(value) + return str(value) except UnicodeDecodeError: return u'error decoding filename' diff --git a/logilab/common/ureports/docbook_writer.py b/logilab/common/ureports/docbook_writer.py index 857068c..a520364 100644 --- a/logilab/common/ureports/docbook_writer.py +++ b/logilab/common/ureports/docbook_writer.py @@ -18,8 +18,6 @@ """HTML formatting drivers for ureports""" __docformat__ = "restructuredtext en" -from six.moves import range - from logilab.common.ureports import HTMLWriter class DocbookWriter(HTMLWriter): diff --git a/logilab/common/ureports/html_writer.py b/logilab/common/ureports/html_writer.py index eba34ea..02d0816 100644 --- a/logilab/common/ureports/html_writer.py +++ b/logilab/common/ureports/html_writer.py @@ -20,8 +20,6 @@ __docformat__ = "restructuredtext en" from cgi import escape -from six.moves import range - from logilab.common.ureports import BaseWriter diff --git a/logilab/common/ureports/nodes.py b/logilab/common/ureports/nodes.py index a9585b3..b90de74 100644 --- a/logilab/common/ureports/nodes.py +++ b/logilab/common/ureports/nodes.py @@ -23,8 +23,6 @@ __docformat__ = "restructuredtext en" from logilab.common.tree import VNode -from six import string_types - class BaseComponent(VNode): """base report component @@ -81,7 +79,7 @@ class Text(BaseComponent): super(Text, self).__init__(**kwargs) #if isinstance(data, unicode): # data = data.encode('ascii') - assert isinstance(data, string_types), data.__class__ + assert isinstance(data, str), data.__class__ self.escaped = escaped self.data = data diff --git a/logilab/common/ureports/text_writer.py b/logilab/common/ureports/text_writer.py index c87613c..b894c09 100644 --- a/logilab/common/ureports/text_writer.py +++ b/logilab/common/ureports/text_writer.py @@ -21,8 +21,6 @@ from __future__ import print_function __docformat__ = "restructuredtext en" -from six.moves import range - from logilab.common.textutils import linesep from logilab.common.ureports import BaseWriter diff --git a/test/unittest_configuration.py b/test/unittest_configuration.py index ea7cdca..2dee7d0 100644 --- a/test/unittest_configuration.py +++ b/test/unittest_configuration.py @@ -22,8 +22,6 @@ import re from sys import version_info -from six import integer_types - from logilab.common import attrdict from logilab.common.compat import StringIO from logilab.common.testlib import TestCase, unittest_main @@ -75,7 +73,7 @@ class ConfigurationTC(TestCase): self.assertEqual(cfg['multiple'], ['yop', 'yep']) self.assertEqual(cfg['number'], 2) self.assertEqual(cfg['bytes'], 1024) - self.assertIsInstance(cfg['bytes'], integer_types) + self.assertIsInstance(cfg['bytes'], int) self.assertEqual(cfg['choice'], 'yo') self.assertEqual(cfg['multiple-choice'], ['yo', 'ye']) self.assertEqual(cfg['named'], {'key': 'val'}) diff --git a/test/unittest_deprecation.py b/test/unittest_deprecation.py index b0f8a1a..be64e07 100644 --- a/test/unittest_deprecation.py +++ b/test/unittest_deprecation.py @@ -19,8 +19,6 @@ import warnings -from six import add_metaclass - from logilab.common.testlib import TestCase, unittest_main from logilab.common import deprecation @@ -47,8 +45,7 @@ class RawInputTC(TestCase): return any_func def test_class_deprecated(self): - @add_metaclass(deprecation.class_deprecated) - class AnyClass(object): + class AnyClass(object, metaclass=deprecation.class_deprecated): pass AnyClass() self.assertEqual(self.messages, @@ -107,8 +104,7 @@ class RawInputTC(TestCase): def test_class_deprecated_manager(self): deprecator = deprecation.DeprecationManager("module_name") deprecator.compatibility('1.3') - @add_metaclass(deprecator.class_deprecated('1.2')) - class AnyClass(object): + class AnyClass(object, metaclass=deprecator.class_deprecated('1.2')): pass AnyClass() self.assertEqual(self.messages, diff --git a/test/unittest_shellutils.py b/test/unittest_shellutils.py index 9342ae9..4ae76c7 100644 --- a/test/unittest_shellutils.py +++ b/test/unittest_shellutils.py @@ -21,8 +21,6 @@ import sys, os, tempfile, shutil from os.path import join, dirname, abspath import datetime, time -from six.moves import range - from logilab.common.testlib import TestCase, unittest_main from logilab.common.shellutils import (globfind, find, ProgressBar, diff --git a/test/unittest_table.py b/test/unittest_table.py index 320b693..0c40a7c 100644 --- a/test/unittest_table.py +++ b/test/unittest_table.py @@ -23,8 +23,6 @@ Unittests for table management import sys import os -from six.moves import range - from logilab.common.compat import StringIO from logilab.common.testlib import TestCase, unittest_main from logilab.common.table import Table, TableStyleSheet, DocbookTableWriter, \ diff --git a/test/unittest_testlib.py b/test/unittest_testlib.py index fe2e31a..d26f2a6 100644 --- a/test/unittest_testlib.py +++ b/test/unittest_testlib.py @@ -30,8 +30,6 @@ try: except NameError: __file__ = sys.argv[0] -from six.moves import range - from logilab.common.compat import StringIO from logilab.common.testlib import (unittest, TestSuite, unittest_main, Tags, TestCase, mock_object, create_files, InnerTest, with_tempdir, tag, diff --git a/test/unittest_umessage.py b/test/unittest_umessage.py index 2841172..e70e386 100644 --- a/test/unittest_umessage.py +++ b/test/unittest_umessage.py @@ -20,8 +20,6 @@ import sys import email from os.path import join, dirname, abspath -from six import text_type - from logilab.common.testlib import TestCase, unittest_main from logilab.common.umessage import UMessage, decode_QP, message_from_string @@ -42,17 +40,17 @@ class UMessageTC(TestCase): def test_get_subject(self): subj = self.umessage2.get('Subject') - self.assertEqual(type(subj), text_type) + self.assertEqual(type(subj), str) self.assertEqual(subj, u'À LA MER') def test_get_all(self): to = self.umessage2.get_all('To') - self.assertEqual(type(to[0]), text_type) + self.assertEqual(type(to[0]), str) self.assertEqual(to, [u'élément à accents ']) def test_get_payload_no_multi(self): payload = self.umessage1.get_payload() - self.assertEqual(type(payload), text_type) + self.assertEqual(type(payload), str) def test_get_payload_decode(self): msg = """\ @@ -74,19 +72,19 @@ dW4gcGV0aXQgY8O2dWNvdQ== def test_decode_QP(self): test_line = '=??b?UmFwaGHrbA==?= DUPONT' test = decode_QP(test_line) - self.assertEqual(type(test), text_type) + self.assertEqual(type(test), str) self.assertEqual(test, u'Raphaël DUPONT') def test_decode_QP_utf8(self): test_line = '=?utf-8?q?o=C3=AEm?= ' test = decode_QP(test_line) - self.assertEqual(type(test), text_type) + self.assertEqual(type(test), str) self.assertEqual(test, u'oîm ') def test_decode_QP_ascii(self): test_line = 'test ' test = decode_QP(test_line) - self.assertEqual(type(test), text_type) + self.assertEqual(type(test), str) self.assertEqual(test, u'test ') -- cgit v1.2.1