diff --git a/python-schema-no-mock.patch b/python-schema-no-mock.patch deleted file mode 100644 index 594239d..0000000 --- a/python-schema-no-mock.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -upr schema-0.7.5.orig/test_schema.py schema-0.7.5/test_schema.py ---- schema-0.7.5.orig/test_schema.py 2022-05-04 11:01:08.770513691 +0200 -+++ schema-0.7.5/test_schema.py 2022-05-04 11:01:08.774513716 +0200 -@@ -10,7 +10,7 @@ from collections import defaultdict, nam - from functools import partial - from operator import methodcaller - --from mock import Mock -+from unittest.mock import Mock - from pytest import mark, raises - - from schema import ( diff --git a/python-schema.changes b/python-schema.changes index c28ea45..f15649c 100644 --- a/python-schema.changes +++ b/python-schema.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Thu Aug 11 05:40:14 UTC 2022 - Steve Kowalik + +- Drop patch python-schema-no-mock.patch: + * Replaced by the below path. +- Add patch remove-old-python-support.patch: + * Remove support for old Python versions as well mock and contextlib2. +- Clean up {Build,}Requires as a result. + ------------------------------------------------------------------- Wed May 4 09:07:11 UTC 2022 - pgajdos@suse.com diff --git a/python-schema.spec b/python-schema.spec index 1676903..fff5c3d 100644 --- a/python-schema.spec +++ b/python-schema.spec @@ -22,19 +22,16 @@ Version: 0.7.5 Release: 0 Summary: Data validation library License: MIT -Group: Development/Languages/Python URL: https://github.com/keleshev/schema Source: https://files.pythonhosted.org/packages/source/s/schema/schema-%{version}.tar.gz -# https://github.com/keleshev/schema/pull/273 -Patch0: python-schema-no-mock.patch +# PATCH-FIX-UPSTREAM gh#keleshev/schema#273 +Patch0: remove-old-python-support.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros # SECTION test requirements -BuildRequires: %{python_module contextlib2 >= 0.5.5} BuildRequires: %{python_module pytest} # /SECTION -Requires: python-contextlib2 >= 0.5.5 BuildArch: noarch %python_subpackages @@ -45,8 +42,7 @@ obtained from config-files, forms, external services or command-line parsing, converted from JSON/YAML (or something else) to Python data-types. %prep -%setup -q -n schema-%{version} -%patch0 -p1 +%autosetup -p1 -n schema-%{version} %build %python_build diff --git a/remove-old-python-support.patch b/remove-old-python-support.patch new file mode 100644 index 0000000..0e59b31 --- /dev/null +++ b/remove-old-python-support.patch @@ -0,0 +1,225 @@ +From 1d763dc281f5cc056ffa3f6ff9257f2650c76184 Mon Sep 17 00:00:00 2001 +From: Davide +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