Blob Blame History Raw
From 1d763dc281f5cc056ffa3f6ff9257f2650c76184 Mon Sep 17 00:00:00 2001
From: Davide <setti.davide89@gmail.com>
Date: Thu, 30 Dec 2021 09:53:38 +0100
Subject: [PATCH] Drop support for obsolete python versions

---
 .travis.yml      |  8 ++------
 MANIFEST.in      |  2 +-
 requirements.txt |  1 -
 schema.py        |  9 ++-------
 setup.py         |  8 +-------
 test_schema.py   | 21 +++++++--------------
 tox.ini          |  5 +----
 7 files changed, 14 insertions(+), 40 deletions(-)
 delete mode 100644 requirements.txt

diff --git a/.travis.yml b/.travis.yml
index fe44745..8397a51 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,12 +4,6 @@ language: python
 
 jobs:
   include:
-    - env: TOXENV=py27
-      python: 2.7
-    - env: TOXENV=py34
-      python: 3.4
-    - env: TOXENV=py35
-      python: 3.5
     - env: TOXENV=py36
       python: 3.6
     - env: TOXENV=py37
@@ -18,6 +12,8 @@ jobs:
       python: 3.8
     - env: TOXENV=py39
       python: 3.9
+    - env: TOXENV=py310
+      python: '3.10'
     - env: TOXENV=coverage
       python: 3.8
     - env: TOXENV=checks
diff --git a/MANIFEST.in b/MANIFEST.in
index 1de575e..c983463 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1 +1 @@
-include README.rst requirements.txt LICENSE-MIT *.py
+include README.rst LICENSE-MIT *.py
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 22f593a..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-contextlib2>=0.5.5
diff --git a/schema.py b/schema.py
index 37b0fb1..fc4c561 100644
--- a/schema.py
+++ b/schema.py
@@ -4,12 +4,7 @@
 
 import inspect
 import re
-
-try:
-    from contextlib import ExitStack
-except ImportError:
-    from contextlib2 import ExitStack
-
+from contextlib import ExitStack
 
 __version__ = "0.7.5"
 __all__ = [
@@ -252,7 +247,7 @@ def validate(self, data, **kwargs):
             raise SchemaError("%s(%r) raised %r" % (f, data, x), self._error.format(data) if self._error else None)
 
 
-COMPARABLE, CALLABLE, VALIDATOR, TYPE, DICT, ITERABLE = range(6)
+COMPARABLE, CALLABLE, VALIDATOR, TYPE, DICT, ITERABLE = list(range(6))
 
 
 def _priority(s):
diff --git a/setup.py b/setup.py
index 9b2802d..6202884 100644
--- a/setup.py
+++ b/setup.py
@@ -25,20 +25,14 @@
     py_modules=["schema"],
     long_description=codecs.open("README.rst", "r", "utf-8").read(),
     long_description_content_type="text/x-rst",
-    install_requires=open("requirements.txt", "r").read().split("\n"),
     classifiers=[
         "Development Status :: 3 - Alpha",
         "Topic :: Utilities",
-        "Programming Language :: Python :: 2.6",
-        "Programming Language :: Python :: 2.7",
-        "Programming Language :: Python :: 3.2",
-        "Programming Language :: Python :: 3.3",
-        "Programming Language :: Python :: 3.4",
-        "Programming Language :: Python :: 3.5",
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",
+        "Programming Language :: Python :: 3.10",
         "Programming Language :: Python :: Implementation :: PyPy",
         "License :: OSI Approved :: MIT License",
     ],
diff --git a/test_schema.py b/test_schema.py
index 370298a..75ef098 100644
--- a/test_schema.py
+++ b/test_schema.py
@@ -1,5 +1,3 @@
-from __future__ import with_statement
-
 import copy
 import json
 import os
@@ -9,8 +7,8 @@
 from collections import defaultdict, namedtuple
 from functools import partial
 from operator import methodcaller
+from unittest.mock import Mock
 
-from mock import Mock
 from pytest import mark, raises
 
 from schema import (
@@ -31,11 +29,6 @@
     Use,
 )
 
-if sys.version_info[0] == 3:
-    basestring = str  # Python 3 does not have basestring
-    unicode = str  # Python 3 does not have unicode
-
-
 SE = raises(SchemaError)
 
 
@@ -150,7 +143,7 @@ def unique_list(_list):
         return len(_list) == len(set(_list))
 
     def dict_keys(key, _list):
-        return list(map(lambda d: d[key], _list))
+        return list([d[key] for d in _list])
 
     schema = Schema(Const(And(Use(partial(dict_keys, "index")), unique_list)))
     data = [{"index": 1, "value": "foo"}, {"index": 2, "value": "bar"}]
@@ -194,7 +187,7 @@ def test_regex():
 
     # Validate that the pattern has a buffer interface
     assert Regex(re.compile(r"foo")).validate("foo") == "foo"
-    assert Regex(unicode("foo")).validate("foo") == "foo"
+    assert Regex(str("foo")).validate("foo") == "foo"
     with raises(TypeError):
         Regex(1).validate("bar")
     with raises(TypeError):
@@ -353,7 +346,7 @@ def test_dict_optional_keys():
     assert Schema({"a": 1, Optional("b"): 2}).validate({"a": 1}) == {"a": 1}
     assert Schema({"a": 1, Optional("b"): 2}).validate({"a": 1, "b": 2}) == {"a": 1, "b": 2}
     # Make sure Optionals are favored over types:
-    assert Schema({basestring: 1, Optional("b"): 2}).validate({"a": 1, "b": 2}) == {"a": 1, "b": 2}
+    assert Schema({str: 1, Optional("b"): 2}).validate({"a": 1, "b": 2}) == {"a": 1, "b": 2}
     # Make sure Optionals hash based on their key:
     assert len({Optional("a"): 1, Optional("a"): 1, Optional("b"): 2}) == 2
 
@@ -364,7 +357,7 @@ def test_dict_optional_defaults():
 
     # Optionals take precedence over types. Here, the "a" is served by the
     # Optional:
-    assert Schema({Optional("a", default=1): 11, basestring: 22}).validate({"b": 22}) == {"a": 1, "b": 22}
+    assert Schema({Optional("a", default=1): 11, str: 22}).validate({"b": 22}) == {"a": 1, "b": 22}
 
     with raises(TypeError):
         Optional(And(str, Use(int)), default=7)
@@ -529,7 +522,7 @@ def test_use_json():
     gist_schema = Schema(
         And(
             Use(json.loads),  # first convert from JSON
-            {Optional("description"): basestring, "public": bool, "files": {basestring: {"content": basestring}}},
+            {Optional("description"): str, "public": bool, "files": {str: {"content": str}}},
         )
     )
     gist = """{"description": "the description for this gist",
@@ -667,7 +660,7 @@ def test_optional_key_convert_failed_randomly_while_with_another_optional_object
                 Optional("created_at"): _datetime_validator,
                 Optional("updated_at"): _datetime_validator,
                 Optional("birth"): _datetime_validator,
-                Optional(basestring): object,
+                Optional(str): object,
             }
         )
         data = {"created_at": "2015-10-10 00:00:00"}
diff --git a/tox.ini b/tox.ini
index 74f2d71..c542ea7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,19 +4,17 @@
 # install tox" and then run "tox" from this directory.
 
 [tox]
-envlist = py26, py27, py32, py33, py34, py35, py36, py37, py38, py39, pypy3, coverage, checks
+envlist = py36, py37, py38, py39, py310, pypy3, coverage, checks
 
 [testenv]
 commands = py.test
 recreate = true
 deps = pytest
-       mock
 
 
 [testenv:py38]
 commands = py.test --doctest-glob=README.rst  # test documentation
 deps = pytest
-       mock
 
 [testenv:checks]
 basepython=python3
@@ -31,4 +29,3 @@ commands = coverage erase
 deps = pytest
        pytest-cov
        coverage
-       mock