File 0001-Revert-Drop-support-for-python3.6-125.patch of Package python-filelock

From c61df24afea0aec25c3f4bca9446b6832a720045 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mark=C3=A9ta?= <meggy.calabkova@gmail.com>
Date: Fri, 2 Dec 2022 10:52:53 +0100
Subject: [PATCH] Revert "Drop support for python3.6 (#125)"

This reverts commit b5e956c3a8e4bc80430209b3136dfb2a6f953d83.
---
 .github/workflows/check.yml |  2 +-
 setup.cfg                   |  2 +-
 setup.py                    |  2 --
 src/filelock/__init__.py    |  9 ++++-----
 src/filelock/_api.py        | 33 ++++++++++++++++-----------------
 src/filelock/_error.py      |  3 ---
 src/filelock/_soft.py       |  2 --
 src/filelock/_unix.py       |  2 --
 src/filelock/_util.py       |  2 --
 src/filelock/_windows.py    |  2 --
 tests/test_filelock.py      | 36 +++++++++++++++++-------------------
 tox.ini                     |  6 +++---
 12 files changed, 42 insertions(+), 59 deletions(-)

Index: filelock-3.7.1/.github/workflows/check.yml
===================================================================
--- filelock-3.7.1.orig/.github/workflows/check.yml
+++ filelock-3.7.1/.github/workflows/check.yml
@@ -108,7 +108,7 @@ jobs:
         uses: actions/upload-artifact@v2
         with:
           name: html-report
-          path: .tox/htmlcov
+          path: htmlcov
 
   check:
     name: ${{ matrix.tox_env }} - ${{ matrix.os }}
Index: filelock-3.7.1/setup.cfg
===================================================================
--- filelock-3.7.1.orig/setup.cfg
+++ filelock-3.7.1/setup.cfg
@@ -30,7 +30,7 @@ project_urls =
 
 [options]
 packages = find:
-python_requires = >=3.7
+python_requires = >=3.6
 package_dir = 
 	=src
 zip_safe = True
Index: filelock-3.7.1/setup.py
===================================================================
--- filelock-3.7.1.orig/setup.py
+++ filelock-3.7.1/setup.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
 from setuptools import setup
 
 setup()
Index: filelock-3.7.1/src/filelock/__init__.py
===================================================================
--- filelock-3.7.1.orig/src/filelock/__init__.py
+++ filelock-3.7.1/src/filelock/__init__.py
@@ -5,10 +5,9 @@ A platform independent file lock that su
    :no-value:
 
 """
-from __future__ import annotations
-
 import sys
 import warnings
+from typing import Type
 
 from ._api import AcquireReturnProxy, BaseFileLock
 from ._error import Timeout
@@ -22,10 +21,10 @@ __version__: str = version
 
 
 if sys.platform == "win32":  # pragma: win32 cover
-    _FileLock: type[BaseFileLock] = WindowsFileLock
+    _FileLock: Type[BaseFileLock] = WindowsFileLock
 else:  # pragma: win32 no cover
     if has_fcntl:
-        _FileLock: type[BaseFileLock] = UnixFileLock
+        _FileLock: Type[BaseFileLock] = UnixFileLock
     else:
         _FileLock = SoftFileLock
         if warnings is not None:
@@ -33,7 +32,7 @@ else:  # pragma: win32 no cover
 
 #: Alias for the lock, which should be used for the current platform. On Windows, this is an alias for
 # :class:`WindowsFileLock`, on Unix for :class:`UnixFileLock` and otherwise for :class:`SoftFileLock`.
-FileLock: type[BaseFileLock] = _FileLock
+FileLock: Type[BaseFileLock] = _FileLock
 
 
 __all__ = [
Index: filelock-3.7.1/src/filelock/_api.py
===================================================================
--- filelock-3.7.1.orig/src/filelock/_api.py
+++ filelock-3.7.1/src/filelock/_api.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
 import contextlib
 import logging
 import os
@@ -8,7 +6,7 @@ import warnings
 from abc import ABC, abstractmethod
 from threading import Lock
 from types import TracebackType
-from typing import Any
+from typing import Any, Optional, Type, Union
 
 from ._error import Timeout
 
@@ -21,17 +19,17 @@ _LOGGER = logging.getLogger("filelock")
 class AcquireReturnProxy:
     """A context aware object that will release the lock file when exiting."""
 
-    def __init__(self, lock: BaseFileLock) -> None:
+    def __init__(self, lock: "BaseFileLock") -> None:
         self.lock = lock
 
-    def __enter__(self) -> BaseFileLock:
+    def __enter__(self) -> "BaseFileLock":
         return self.lock
 
     def __exit__(
         self,
-        exc_type: type[BaseException] | None,  # noqa: U100
-        exc_value: BaseException | None,  # noqa: U100
-        traceback: TracebackType | None,  # noqa: U100
+        exc_type: Optional[Type[BaseException]],  # noqa: U100
+        exc_value: Optional[BaseException],  # noqa: U100
+        traceback: Optional[TracebackType],  # noqa: U100
     ) -> None:
         self.lock.release()
 
@@ -39,7 +37,7 @@ class AcquireReturnProxy:
 class BaseFileLock(ABC, contextlib.ContextDecorator):
     """Abstract base class for a file lock object."""
 
-    def __init__(self, lock_file: str | os.PathLike[Any], timeout: float = -1) -> None:
+    def __init__(self, lock_file: Union[str, "os.PathLike[Any]"], timeout: float = -1) -> None:
         """
         Create a new lock object.
 
@@ -53,7 +51,7 @@ class BaseFileLock(ABC, contextlib.Conte
 
         # The file descriptor for the *_lock_file* as it is returned by the os.open() function.
         # This file lock is only NOT None, if the object currently holds the lock.
-        self._lock_file_fd: int | None = None
+        self._lock_file_fd: Optional[int] = None
 
         # The default timeout value.
         self.timeout: float = timeout
@@ -80,7 +78,7 @@ class BaseFileLock(ABC, contextlib.Conte
         return self._timeout
 
     @timeout.setter
-    def timeout(self, value: float | str) -> None:
+    def timeout(self, value: Union[float, str]) -> None:
         """
         Change the default timeout value.
 
@@ -112,10 +110,10 @@ class BaseFileLock(ABC, contextlib.Conte
 
     def acquire(
         self,
-        timeout: float | None = None,
+        timeout: Optional[float] = None,
         poll_interval: float = 0.05,
         *,
-        poll_intervall: float | None = None,
+        poll_intervall: Optional[float] = None,
         blocking: bool = True,
     ) -> AcquireReturnProxy:
         """
@@ -211,7 +209,7 @@ class BaseFileLock(ABC, contextlib.Conte
                     self._lock_counter = 0
                     _LOGGER.debug("Lock %s released on %s", lock_id, lock_filename)
 
-    def __enter__(self) -> BaseFileLock:
+    def __enter__(self) -> "BaseFileLock":
         """
         Acquire the lock.
 
@@ -222,9 +220,9 @@ class BaseFileLock(ABC, contextlib.Conte
 
     def __exit__(
         self,
-        exc_type: type[BaseException] | None,  # noqa: U100
-        exc_value: BaseException | None,  # noqa: U100
-        traceback: TracebackType | None,  # noqa: U100
+        exc_type: Optional[Type[BaseException]],  # noqa: U100
+        exc_value: Optional[BaseException],  # noqa: U100
+        traceback: Optional[TracebackType],  # noqa: U100
     ) -> None:
         """
         Release the lock.
Index: filelock-3.7.1/src/filelock/_error.py
===================================================================
--- filelock-3.7.1.orig/src/filelock/_error.py
+++ filelock-3.7.1/src/filelock/_error.py
@@ -1,6 +1,3 @@
-from __future__ import annotations
-
-
 class Timeout(TimeoutError):
     """Raised when the lock could not be acquired in *timeout* seconds."""
 
Index: filelock-3.7.1/src/filelock/_soft.py
===================================================================
--- filelock-3.7.1.orig/src/filelock/_soft.py
+++ filelock-3.7.1/src/filelock/_soft.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
 import os
 import sys
 from errno import EACCES, EEXIST, ENOENT
Index: filelock-3.7.1/src/filelock/_unix.py
===================================================================
--- filelock-3.7.1.orig/src/filelock/_unix.py
+++ filelock-3.7.1/src/filelock/_unix.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
 import os
 import sys
 from typing import cast
Index: filelock-3.7.1/src/filelock/_util.py
===================================================================
--- filelock-3.7.1.orig/src/filelock/_util.py
+++ filelock-3.7.1/src/filelock/_util.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
 import os
 import stat
 
Index: filelock-3.7.1/src/filelock/_windows.py
===================================================================
--- filelock-3.7.1.orig/src/filelock/_windows.py
+++ filelock-3.7.1/src/filelock/_windows.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
 import os
 import sys
 from errno import ENOENT
Index: filelock-3.7.1/tests/test_filelock.py
===================================================================
--- filelock-3.7.1.orig/tests/test_filelock.py
+++ filelock-3.7.1/tests/test_filelock.py
@@ -1,5 +1,3 @@
-from __future__ import annotations
-
 import inspect
 import logging
 import sys
@@ -9,7 +7,7 @@ from inspect import getframeinfo, stack
 from pathlib import Path, PurePath
 from stat import S_IWGRP, S_IWOTH, S_IWUSR
 from types import TracebackType
-from typing import Callable, Iterator, Tuple, Type, Union
+from typing import Callable, Iterator, Optional, Tuple, Type, Union
 
 import pytest
 from _pytest.logging import LogCaptureFixture
@@ -29,7 +27,7 @@ from filelock import BaseFileLock, FileL
     ],
 )
 def test_simple(
-    lock_type: type[BaseFileLock], path_type: type[str] | type[Path], tmp_path: Path, caplog: LogCaptureFixture
+    lock_type: Type[BaseFileLock], path_type: Union[Type[str], Type[Path]], tmp_path: Path, caplog: LogCaptureFixture
 ) -> None:
     caplog.set_level(logging.DEBUG)
 
@@ -68,7 +66,7 @@ def tmp_path_ro(tmp_path: Path) -> Itera
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
 @pytest.mark.skipif(sys.platform == "win32", reason="Windows does not have read only folders")
-def test_ro_folder(lock_type: type[BaseFileLock], tmp_path_ro: Path) -> None:
+def test_ro_folder(lock_type: Type[BaseFileLock], tmp_path_ro: Path) -> None:
     lock = lock_type(str(tmp_path_ro / "a"))
     with pytest.raises(PermissionError, match="Permission denied"):
         lock.acquire()
@@ -83,14 +81,14 @@ def tmp_file_ro(tmp_path: Path) -> Itera
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_ro_file(lock_type: type[BaseFileLock], tmp_file_ro: Path) -> None:
+def test_ro_file(lock_type: Type[BaseFileLock], tmp_file_ro: Path) -> None:
     lock = lock_type(str(tmp_file_ro))
     with pytest.raises(PermissionError, match="Permission denied"):
         lock.acquire()
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_missing_directory(lock_type: type[BaseFileLock], tmp_path_ro: Path) -> None:
+def test_missing_directory(lock_type: Type[BaseFileLock], tmp_path_ro: Path) -> None:
     lock_path = tmp_path_ro / "a" / "b"
     lock = lock_type(str(lock_path))
 
@@ -99,7 +97,7 @@ def test_missing_directory(lock_type: ty
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_nested_context_manager(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_nested_context_manager(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # lock is not released before the most outer with statement that locked the lock, is left
     lock_path = tmp_path / "a"
     lock = lock_type(str(lock_path))
@@ -122,7 +120,7 @@ def test_nested_context_manager(lock_typ
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_nested_acquire(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_nested_acquire(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # lock is not released before the most outer with statement that locked the lock, is left
     lock_path = tmp_path / "a"
     lock = lock_type(str(lock_path))
@@ -145,7 +143,7 @@ def test_nested_acquire(lock_type: type[
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_nested_forced_release(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_nested_forced_release(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # acquires the lock using a with-statement and releases the lock before leaving the with-statement
     lock_path = tmp_path / "a"
     lock = lock_type(str(lock_path))
@@ -167,7 +165,7 @@ _ExcInfoType = Union[Tuple[Type[BaseExce
 class ExThread(threading.Thread):
     def __init__(self, target: Callable[[], None], name: str) -> None:
         super().__init__(target=target, name=name)
-        self.ex: _ExcInfoType | None = None
+        self.ex: Optional[_ExcInfoType] = None
 
     def run(self) -> None:
         try:
@@ -175,7 +173,7 @@ class ExThread(threading.Thread):
         except Exception:  # pragma: no cover
             self.ex = sys.exc_info()  # pragma: no cover
 
-    def join(self, timeout: float | None = None) -> None:
+    def join(self, timeout: Optional[float] = None) -> None:
         super().join(timeout=timeout)
         if self.ex is not None:
             print(f"fail from thread {self.name}")  # pragma: no cover
@@ -183,7 +181,7 @@ class ExThread(threading.Thread):
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_threaded_shared_lock_obj(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_threaded_shared_lock_obj(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # Runs 100 threads, which need the filelock. The lock must be acquired if at least one thread required it and
     # released, as soon as all threads stopped.
     lock_path = tmp_path / "a"
@@ -205,7 +203,7 @@ def test_threaded_shared_lock_obj(lock_t
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
 @pytest.mark.skipif(hasattr(sys, "pypy_version_info") and sys.platform == "win32", reason="deadlocks randomly")
-def test_threaded_lock_different_lock_obj(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_threaded_lock_different_lock_obj(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # Runs multiple threads, which acquire the same lock file with a different FileLock object. When thread group 1
     # acquired the lock, thread group 2 must not hold their lock.
 
@@ -237,7 +235,7 @@ def test_threaded_lock_different_lock_ob
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_timeout(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_timeout(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # raises Timeout error when the lock cannot be acquired
     lock_path = tmp_path / "a"
     lock_1, lock_2 = lock_type(str(lock_path)), lock_type(str(lock_path))
@@ -260,7 +258,7 @@ def test_timeout(lock_type: type[BaseFil
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_non_blocking(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_non_blocking(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # raises Timeout error when the lock cannot be acquired
     lock_path = tmp_path / "a"
     lock_1, lock_2 = lock_type(str(lock_path)), lock_type(str(lock_path))
@@ -283,7 +281,7 @@ def test_non_blocking(lock_type: type[Ba
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_default_timeout(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_default_timeout(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # test if the default timeout parameter works
     lock_path = tmp_path / "a"
     lock_1, lock_2 = lock_type(str(lock_path)), lock_type(str(lock_path), timeout=0.1)
@@ -315,7 +313,7 @@ def test_default_timeout(lock_type: type
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_context_release_on_exc(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_context_release_on_exc(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # lock is released when an exception is thrown in a with-statement
     lock_path = tmp_path / "a"
     lock = lock_type(str(lock_path))
@@ -330,7 +328,7 @@ def test_context_release_on_exc(lock_typ
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_acquire_release_on_exc(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_acquire_release_on_exc(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # lock is released when an exception is thrown in a acquire statement
     lock_path = tmp_path / "a"
     lock = lock_type(str(lock_path))
@@ -346,7 +344,7 @@ def test_acquire_release_on_exc(lock_typ
 
 @pytest.mark.skipif(hasattr(sys, "pypy_version_info"), reason="del() does not trigger GC in PyPy")
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_del(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_del(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     # lock is released when the object is deleted
     lock_path = tmp_path / "a"
     lock_1, lock_2 = lock_type(str(lock_path)), lock_type(str(lock_path))
@@ -380,7 +378,7 @@ def test_cleanup_soft_lock(tmp_path: Pat
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_poll_intervall_deprecated(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_poll_intervall_deprecated(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     lock_path = tmp_path / "a"
     lock = lock_type(str(lock_path))
 
@@ -395,7 +393,7 @@ def test_poll_intervall_deprecated(lock_
 
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
-def test_context_decorator(lock_type: type[BaseFileLock], tmp_path: Path) -> None:
+def test_context_decorator(lock_type: Type[BaseFileLock], tmp_path: Path) -> None:
     lock_path = tmp_path / "a"
     lock = lock_type(str(lock_path))
 
openSUSE Build Service is sponsored by