diff --git a/pr_9_1.patch b/pr_9_1.patch new file mode 100644 index 0000000..592254a --- /dev/null +++ b/pr_9_1.patch @@ -0,0 +1,47 @@ +# HG changeset patch +# User Alan Pevec +# Date 1562888158 -7200 +# Branch stable +# Node ID 98c08467d15759acc3b0f88d2661f6e530147c33 +# Parent 27866c441d18c7ce42e3f7afe824f89da4f8d21b +Fix for Python 3.8 + +This was a deprecation when running in Python 3.7: + +DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working + if isinstance(source, collections.Sequence): + +diff --git a/passlib/utils/__init__.py b/passlib/utils/__init__.py +--- a/passlib/utils/__init__.py ++++ b/passlib/utils/__init__.py +@@ -6,7 +6,12 @@ + # core + from binascii import b2a_base64, a2b_base64, Error as _BinAsciiError + from base64 import b64encode, b64decode +-import collections ++try: ++ from collections.abc import Sequence ++ from collections.abc import Iterable ++except ImportError: ++ from collections import Sequence ++ from collections import Iterable + from codecs import lookup as _lookup_codec + from functools import update_wrapper + import itertools +@@ -276,14 +281,14 @@ + """ + if size < 1: + raise ValueError("size must be positive integer") +- if isinstance(source, collections.Sequence): ++ if isinstance(source, Sequence): + end = len(source) + i = 0 + while i < end: + n = i + size + yield source[i:n] + i = n +- elif isinstance(source, collections.Iterable): ++ elif isinstance(source, Iterable): + itr = iter(source) + while True: + chunk_itr = itertools.islice(itr, size) diff --git a/pr_9_2.patch b/pr_9_2.patch new file mode 100644 index 0000000..d62116a --- /dev/null +++ b/pr_9_2.patch @@ -0,0 +1,51 @@ +# HG changeset patch +# User Alan Pevec +# Date 1562844713 -7200 +# Branch stable +# Node ID 58f3efd111e930baf39ff50df27ed7f2d24f759d +# Parent 4801587cebf01f5037ddc9cd52fc94708559bbfb +Remove time.clock(), deprecated in 3.8 + +The function time.clock(), used in passlib/utils/__init__.py +has been removed. It was deprecated since Python 3.3. +More info: +https://docs.python.org/3.8/whatsnew/3.8.html#api-and-feature-removals + +To make the code both Python 2 and 3 compatible, use timeit.default_timer + +diff --git a/passlib/utils/__init__.py b/passlib/utils/__init__.py +--- a/passlib/utils/__init__.py ++++ b/passlib/utils/__init__.py +@@ -30,6 +30,7 @@ + import time + if stringprep: + import unicodedata ++import timeit + import types + from warnings import warn + # site +@@ -839,14 +840,7 @@ + assert secret and hash + return safe_crypt(secret, hash) == hash + +-# pick best timer function to expose as "tick" - lifted from timeit module. +-if sys.platform == "win32": +- # On Windows, the best timer is time.clock() +- from time import clock as timer +-else: +- # On most other platforms the best timer is time.time() +- from time import time as timer +- ++timer = timeit.default_timer + # legacy alias, will be removed in passlib 2.0 + tick = timer + +@@ -903,7 +897,7 @@ + + # the current time, to whatever precision os uses + time.time(), +- time.clock(), ++ tick(), + + # if urandom available, might as well mix some bytes in. + os.urandom(32).decode("latin-1") if has_urandom else 0, diff --git a/python-passlib.changes b/python-passlib.changes index 2721879..6495395 100644 --- a/python-passlib.changes +++ b/python-passlib.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Oct 3 15:09:46 UTC 2019 - John Vandenberg + +- Add two patches to fix Python 3.8 compatibility + * pr_9_1.patch and pr_9_2.patch + ------------------------------------------------------------------- Mon Mar 18 10:46:39 UTC 2019 - Tomáš Chvátal diff --git a/python-passlib.spec b/python-passlib.spec index 515effb..278b8d4 100644 --- a/python-passlib.spec +++ b/python-passlib.spec @@ -26,6 +26,9 @@ Group: Development/Languages/Python URL: https://bitbucket.org/ecollins/passlib Source: https://files.pythonhosted.org/packages/source/p/passlib/passlib-%{version}.tar.gz Patch0: python-passlib-1.7.1-libxcrypt-compat.patch +# Python 3.8 compatibility patches +Patch1: pr_9_1.patch +Patch2: pr_9_2.patch # test requirements BuildRequires: %{python_module nose} BuildRequires: %{python_module setuptools} @@ -44,6 +47,8 @@ applications. %prep %setup -q -n passlib-%{version} %patch0 -p1 +%patch1 -p1 +%patch2 -p1 %build %python_build