Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-filelock for openSUSE:Factory 
checked in at 2023-06-12 15:24:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-filelock (Old)
 and      /work/SRC/openSUSE:Factory/.python-filelock.new.15902 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-filelock"

Mon Jun 12 15:24:53 2023 rev:13 rq:1092285 version:3.12.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-filelock/python-filelock.changes  
2023-04-29 17:27:35.646404889 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-filelock.new.15902/python-filelock.changes   
    2023-06-12 15:25:19.706653374 +0200
@@ -1,0 +2,7 @@
+Sun Jun 11 12:40:08 UTC 2023 - Dirk Müller <dmuel...@suse.com>
+
+- update to 3.12.1:
+  * Add 3.12 support
+  * Fix test_bad_lock_file for other OSes
+
+-------------------------------------------------------------------

Old:
----
  filelock-3.12.0.tar.gz

New:
----
  filelock-3.12.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-filelock.spec ++++++
--- /var/tmp/diff_new_pack.BydPba/_old  2023-06-12 15:25:20.342657137 +0200
+++ /var/tmp/diff_new_pack.BydPba/_new  2023-06-12 15:25:20.346657161 +0200
@@ -19,7 +19,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-filelock
-Version:        3.12.0
+Version:        3.12.1
 Release:        0
 Summary:        Platform Independent File Lock in Python
 License:        Unlicense
@@ -28,8 +28,8 @@
 BuildRequires:  %{python_module hatch_vcs}
 BuildRequires:  %{python_module hatchling}
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module pytest-mock}
+BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros

++++++ filelock-3.12.0.tar.gz -> filelock-3.12.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/PKG-INFO new/filelock-3.12.1/PKG-INFO
--- old/filelock-3.12.0/PKG-INFO        2020-02-02 01:00:00.000000000 +0100
+++ new/filelock-3.12.1/PKG-INFO        2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: filelock
-Version: 3.12.0
+Version: 3.12.1
 Summary: A platform independent file lock.
 Project-URL: Documentation, https://py-filelock.readthedocs.io
 Project-URL: Homepage, https://github.com/tox-dev/py-filelock
@@ -15,21 +15,26 @@
 Classifier: License :: OSI Approved :: The Unlicense (Unlicense)
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Classifier: Programming Language :: Python :: 3.12
 Classifier: Topic :: Internet
 Classifier: Topic :: Software Development :: Libraries
 Classifier: Topic :: System
 Requires-Python: >=3.7
 Provides-Extra: docs
-Requires-Dist: furo>=2023.3.27; extra == 'docs'
+Requires-Dist: furo>=2023.5.20; extra == 'docs'
 Requires-Dist: sphinx-autodoc-typehints!=1.23.4,>=1.23; extra == 'docs'
-Requires-Dist: sphinx>=6.1.3; extra == 'docs'
+Requires-Dist: sphinx>=7.0.1; extra == 'docs'
 Provides-Extra: testing
 Requires-Dist: covdefaults>=2.3; extra == 'testing'
-Requires-Dist: coverage>=7.2.3; extra == 'testing'
+Requires-Dist: coverage>=7.2.7; extra == 'testing'
 Requires-Dist: diff-cover>=7.5; extra == 'testing'
-Requires-Dist: pytest-cov>=4; extra == 'testing'
+Requires-Dist: pytest-cov>=4.1; extra == 'testing'
 Requires-Dist: pytest-mock>=3.10; extra == 'testing'
 Requires-Dist: pytest-timeout>=2.1; extra == 'testing'
 Requires-Dist: pytest>=7.3.1; extra == 'testing'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/pyproject.toml 
new/filelock-3.12.1/pyproject.toml
--- old/filelock-3.12.0/pyproject.toml  2020-02-02 01:00:00.000000000 +0100
+++ new/filelock-3.12.1/pyproject.toml  2020-02-02 01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
 build-backend = "hatchling.build"
 requires = [
   "hatch-vcs>=0.3",
-  "hatchling>=1.14",
+  "hatchling>=1.17.1",
 ]
 
 [project]
@@ -25,8 +25,13 @@
   "License :: OSI Approved :: The Unlicense (Unlicense)",
   "Operating System :: OS Independent",
   "Programming Language :: Python",
-  "Programming Language :: Python :: 3",
   "Programming Language :: Python :: 3 :: Only",
+  "Programming Language :: Python :: 3.7",
+  "Programming Language :: Python :: 3.8",
+  "Programming Language :: Python :: 3.9",
+  "Programming Language :: Python :: 3.10",
+  "Programming Language :: Python :: 3.11",
+  "Programming Language :: Python :: 3.12",
   "Topic :: Internet",
   "Topic :: Software Development :: Libraries",
   "Topic :: System",
@@ -35,16 +40,16 @@
   "version",
 ]
 optional-dependencies.docs = [
-  "furo>=2023.3.27",
-  "sphinx>=6.1.3",
+  "furo>=2023.5.20",
+  "sphinx>=7.0.1",
   "sphinx-autodoc-typehints!=1.23.4,>=1.23",
 ]
 optional-dependencies.testing = [
   "covdefaults>=2.3",
-  "coverage>=7.2.3",
+  "coverage>=7.2.7",
   "diff-cover>=7.5",
   "pytest>=7.3.1",
-  "pytest-cov>=4",
+  "pytest-cov>=4.1",
   "pytest-mock>=3.10",
   "pytest-timeout>=2.1",
 ]
@@ -61,18 +66,6 @@
 [tool.black]
 line-length = 120
 
-[tool.isort]
-profile = "black"
-known_first_party = ["filelock"]
-add_imports = ["from __future__ import annotations"]
-
-[tool.flake8]
-max-complexity = 22
-max-line-length = 120
-unused-arguments-ignore-abstract-functions = true
-noqa-require-code = true
-dictionaries = ["en_US", "python", "technical", "django"]
-
 [tool.coverage]
 html.show_contexts = true
 html.skip_covered = false
@@ -88,5 +81,26 @@
 strict = true
 overrides = [{ module = ["appdirs.*", "jnius.*"], ignore_missing_imports = 
true }]
 
-[tool.pep8]
-max-line-length = "120"
+[tool.ruff]
+select = ["ALL"]
+line-length = 120
+target-version = "py37"
+isort = {known-first-party = ["platformdirs", "tests"], required-imports = 
["from __future__ import annotations"]}
+ignore = [
+    "ANN101",  # Missing type annotation for `self` in method
+    "D301",  #  Use `r"""` if any backslashes in a docstring
+    "D205",  # 1 blank line required between summary line and description
+    "D401",  # First line of docstring should be in imperative mood
+    "D203",  # `one-blank-line-before-class` (D203) and 
`no-blank-line-before-class` (D211) are incompatible
+    "D212",  # `multi-line-summary-first-line` (D212) and 
`multi-line-summary-second-line` (D213) are incompatible
+    "S104",  # Possible binding to all interface
+]
+[tool.ruff.per-file-ignores]
+"tests/**/*.py" = [
+    "S101",  # asserts allowed in tests...
+    "FBT",  # don"t care about booleans as positional arguments in tests
+    "INP001", # no implicit namespace
+    "D",  # don"t care about documentation in tests
+    "S603",  # `subprocess` call: check for execution of untrusted input
+    "PLR2004",  # Magic value used in comparison, consider replacing with a 
constant variable
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/__init__.py 
new/filelock-3.12.1/src/filelock/__init__.py
--- old/filelock-3.12.0/src/filelock/__init__.py        2020-02-02 
01:00:00.000000000 +0100
+++ new/filelock-3.12.1/src/filelock/__init__.py        2020-02-02 
01:00:00.000000000 +0100
@@ -25,18 +25,16 @@
 if sys.platform == "win32":  # pragma: win32 cover
     _FileLock: type[BaseFileLock] = WindowsFileLock
 else:  # pragma: win32 no cover
-    if has_fcntl:
+    if has_fcntl:  # noqa: PLR5501
         _FileLock: type[BaseFileLock] = UnixFileLock
     else:
         _FileLock = SoftFileLock
         if warnings is not None:
             warnings.warn("only soft file lock is available", stacklevel=2)
 
-if TYPE_CHECKING:
-    FileLock = SoftFileLock
-else:
-    #: Alias for the lock, which should be used for the current platform.
-    FileLock = _FileLock
+
+#: Alias for the lock, which should be used for the current platform.
+FileLock: type[BaseFileLock] = SoftFileLock if TYPE_CHECKING else _FileLock  # 
type: ignore[assignment]
 
 
 __all__ = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/_api.py 
new/filelock-3.12.1/src/filelock/_api.py
--- old/filelock-3.12.0/src/filelock/_api.py    2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/src/filelock/_api.py    2020-02-02 01:00:00.000000000 
+0100
@@ -8,11 +8,13 @@
 from abc import ABC, abstractmethod
 from dataclasses import dataclass
 from threading import local
-from types import TracebackType
-from typing import Any
+from typing import TYPE_CHECKING, Any
 
 from ._error import Timeout
 
+if TYPE_CHECKING:
+    from types import TracebackType
+
 _LOGGER = logging.getLogger("filelock")
 
 
@@ -30,18 +32,16 @@
 
     def __exit__(
         self,
-        exc_type: type[BaseException] | None,  # noqa: U100
-        exc_value: BaseException | None,  # noqa: U100
-        traceback: TracebackType | None,  # noqa: U100
+        exc_type: type[BaseException] | None,
+        exc_value: BaseException | None,
+        traceback: TracebackType | None,
     ) -> None:
         self.lock.release()
 
 
 @dataclass
 class FileLockContext:
-    """
-    A dataclass which holds the context for a ``BaseFileLock`` object.
-    """
+    """A dataclass which holds the context for a ``BaseFileLock`` object."""
 
     # The context is held in a separate class to allow optional use of thread 
local storage via the
     # ThreadLocalFileContext class.
@@ -63,9 +63,7 @@
 
 
 class ThreadLocalFileContext(FileLockContext, local):
-    """
-    A thread local version of the ``FileLockContext`` class.
-    """
+    """A thread local version of the ``FileLockContext`` class."""
 
 
 class BaseFileLock(ABC, contextlib.ContextDecorator):
@@ -76,7 +74,7 @@
         lock_file: str | os.PathLike[Any],
         timeout: float = -1,
         mode: int = 0o644,
-        thread_local: bool = True,
+        thread_local: bool = True,  # noqa: FBT001, FBT002
     ) -> None:
         """
         Create a new lock object.
@@ -151,9 +149,7 @@
 
     @property
     def lock_counter(self) -> int:
-        """
-        :return: The number of times this lock has been acquired (but not yet 
released).
-        """
+        """:return: The number of times this lock has been acquired (but not 
yet released)."""
         return self._context.lock_counter
 
     def acquire(
@@ -218,22 +214,21 @@
                 if self.is_locked:
                     _LOGGER.debug("Lock %s acquired on %s", lock_id, 
lock_filename)
                     break
-                elif blocking is False:
+                if blocking is False:
                     _LOGGER.debug("Failed to immediately acquire lock %s on 
%s", lock_id, lock_filename)
-                    raise Timeout(lock_filename)
-                elif 0 <= timeout < time.perf_counter() - start_time:
+                    raise Timeout(lock_filename)  # noqa: TRY301
+                if 0 <= timeout < time.perf_counter() - start_time:
                     _LOGGER.debug("Timeout on acquiring lock %s on %s", 
lock_id, lock_filename)
-                    raise Timeout(lock_filename)
-                else:
-                    msg = "Lock %s not acquired on %s, waiting %s seconds ..."
-                    _LOGGER.debug(msg, lock_id, lock_filename, poll_interval)
-                    time.sleep(poll_interval)
+                    raise Timeout(lock_filename)  # noqa: TRY301
+                msg = "Lock %s not acquired on %s, waiting %s seconds ..."
+                _LOGGER.debug(msg, lock_id, lock_filename, poll_interval)
+                time.sleep(poll_interval)
         except BaseException:  # Something did go wrong, so decrement the 
counter.
             self._context.lock_counter = max(0, self._context.lock_counter - 1)
             raise
         return AcquireReturnProxy(lock=self)
 
-    def release(self, force: bool = False) -> None:
+    def release(self, force: bool = False) -> None:  # noqa: FBT001, FBT002
         """
         Releases the file lock. Please note, that the lock is only completely 
released, if the lock counter is 0. Also
         note, that the lock file itself is not automatically deleted.
@@ -262,9 +257,9 @@
 
     def __exit__(
         self,
-        exc_type: type[BaseException] | None,  # noqa: U100
-        exc_value: BaseException | None,  # noqa: U100
-        traceback: TracebackType | None,  # noqa: U100
+        exc_type: type[BaseException] | None,
+        exc_value: BaseException | None,
+        traceback: TracebackType | None,
     ) -> None:
         """
         Release the lock.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/_error.py 
new/filelock-3.12.1/src/filelock/_error.py
--- old/filelock-3.12.0/src/filelock/_error.py  2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/src/filelock/_error.py  2020-02-02 01:00:00.000000000 
+0100
@@ -3,7 +3,7 @@
 from typing import Any
 
 
-class Timeout(TimeoutError):
+class Timeout(TimeoutError):  # noqa: N818
     """Raised when the lock could not be acquired in *timeout* seconds."""
 
     def __init__(self, lock_file: str) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/_soft.py 
new/filelock-3.12.1/src/filelock/_soft.py
--- old/filelock-3.12.0/src/filelock/_soft.py   2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/src/filelock/_soft.py   2020-02-02 01:00:00.000000000 
+0100
@@ -2,7 +2,9 @@
 
 import os
 import sys
+from contextlib import suppress
 from errno import EACCES, EEXIST
+from pathlib import Path
 
 from ._api import BaseFileLock
 from ._util import raise_on_not_writable_file
@@ -32,12 +34,11 @@
             self._context.lock_file_fd = file_handler
 
     def _release(self) -> None:
-        os.close(self._context.lock_file_fd)  # type: ignore # the lock file 
is definitely not None
+        assert self._context.lock_file_fd is not None  # noqa: S101
+        os.close(self._context.lock_file_fd)  # the lock file is definitely 
not None
         self._context.lock_file_fd = None
-        try:
-            os.remove(self.lock_file)
-        except OSError:  # the file is already deleted and that's what we want
-            pass
+        with suppress(OSError):  # the file is already deleted and that's what 
we want
+            Path(self.lock_file).unlink()
 
 
 __all__ = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/_unix.py 
new/filelock-3.12.1/src/filelock/_unix.py
--- old/filelock-3.12.0/src/filelock/_unix.py   2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/src/filelock/_unix.py   2020-02-02 01:00:00.000000000 
+0100
@@ -2,6 +2,7 @@
 
 import os
 import sys
+from contextlib import suppress
 from errno import ENOSYS
 from typing import cast
 
@@ -34,16 +35,15 @@
         def _acquire(self) -> None:
             open_flags = os.O_RDWR | os.O_CREAT | os.O_TRUNC
             fd = os.open(self.lock_file, open_flags, self._context.mode)
-            try:
+            with suppress(PermissionError):  # This locked is not owned by 
this UID
                 os.fchmod(fd, self._context.mode)
-            except PermissionError:
-                pass  # This locked is not owned by this UID
             try:
                 fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
             except OSError as exception:
                 os.close(fd)
                 if exception.errno == ENOSYS:  # NotImplemented error
-                    raise NotImplementedError("FileSystem does not appear to 
support flock; user SoftFileLock instead")
+                    msg = "FileSystem does not appear to support flock; user 
SoftFileLock instead"
+                    raise NotImplementedError(msg) from exception
             else:
                 self._context.lock_file_fd = fd
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/_util.py 
new/filelock-3.12.1/src/filelock/_util.py
--- old/filelock-3.12.0/src/filelock/_util.py   2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/src/filelock/_util.py   2020-02-02 01:00:00.000000000 
+0100
@@ -12,12 +12,12 @@
     This is done so files that will never be writable can be separated from
     files that are writable but currently locked
     :param filename: file to check
-    :raises OSError: as if the file was opened for writing
+    :raises OSError: as if the file was opened for writing.
     """
-    try:
-        file_stat = os.stat(filename)  # use stat to do exists + can write to 
check without race condition
+    try:  # use stat to do exists + can write to check without race condition
+        file_stat = os.stat(filename)  # noqa: PTH116
     except OSError:
-        return None  # swallow does not exist or other errors
+        return  # swallow does not exist or other errors
 
     if file_stat.st_mtime != 0:  # if os.stat returns but modification is zero 
that's an invalid os.stat - ignore it
         if not (file_stat.st_mode & stat.S_IWUSR):
@@ -27,7 +27,7 @@
             if sys.platform == "win32":  # pragma: win32 cover
                 # On Windows, this is PermissionError
                 raise PermissionError(EACCES, "Permission denied", filename)
-            else:  # pragma: win32 no cover
+            else:  # pragma: win32 no cover # noqa: RET506
                 # On linux / macOS, this is IsADirectoryError
                 raise IsADirectoryError(EISDIR, "Is a directory", filename)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/_windows.py 
new/filelock-3.12.1/src/filelock/_windows.py
--- old/filelock-3.12.0/src/filelock/_windows.py        2020-02-02 
01:00:00.000000000 +0100
+++ new/filelock-3.12.1/src/filelock/_windows.py        2020-02-02 
01:00:00.000000000 +0100
@@ -2,7 +2,9 @@
 
 import os
 import sys
+from contextlib import suppress
 from errno import EACCES
+from pathlib import Path
 from typing import cast
 
 from ._api import BaseFileLock
@@ -42,11 +44,8 @@
             msvcrt.locking(fd, msvcrt.LK_UNLCK, 1)
             os.close(fd)
 
-            try:
-                os.remove(self.lock_file)
-            # Probably another instance of the application hat acquired the 
file lock.
-            except OSError:
-                pass
+            with suppress(OSError):  # Probably another instance of the 
application hat acquired the file lock.
+                Path(self.lock_file).unlink()
 
 else:  # pragma: win32 no cover
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/src/filelock/version.py 
new/filelock-3.12.1/src/filelock/version.py
--- old/filelock-3.12.0/src/filelock/version.py 2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/src/filelock/version.py 2020-02-02 01:00:00.000000000 
+0100
@@ -1,4 +1,4 @@
 # file generated by setuptools_scm
 # don't change, don't track in version control
-__version__ = version = '3.12.0'
-__version_tuple__ = version_tuple = (3, 12, 0)
+__version__ = version = '3.12.1'
+__version_tuple__ = version_tuple = (3, 12, 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/tests/test_error.py 
new/filelock-3.12.1/tests/test_error.py
--- old/filelock-3.12.0/tests/test_error.py     2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/tests/test_error.py     2020-02-02 01:00:00.000000000 
+0100
@@ -22,7 +22,7 @@
 
 def test_timeout_pickle() -> None:
     timeout = Timeout("/path/to/lock")
-    timeout_loaded = pickle.loads(pickle.dumps(timeout))
+    timeout_loaded = pickle.loads(pickle.dumps(timeout))  # noqa: S301
 
     assert timeout.__class__ == timeout_loaded.__class__
     assert str(timeout) == str(timeout_loaded)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/filelock-3.12.0/tests/test_filelock.py 
new/filelock-3.12.1/tests/test_filelock.py
--- old/filelock-3.12.0/tests/test_filelock.py  2020-02-02 01:00:00.000000000 
+0100
+++ new/filelock-3.12.1/tests/test_filelock.py  2020-02-02 01:00:00.000000000 
+0100
@@ -12,21 +12,14 @@
 from pathlib import Path, PurePath
 from stat import S_IWGRP, S_IWOTH, S_IWUSR, filemode
 from types import TracebackType
-from typing import Callable, Iterator, Tuple, Type, Union
+from typing import TYPE_CHECKING, Callable, Iterator, Tuple, Type, Union
 from uuid import uuid4
 
 import pytest
-from _pytest.logging import LogCaptureFixture
-from pytest_mock import MockerFixture
+from filelock import BaseFileLock, FileLock, SoftFileLock, Timeout, 
UnixFileLock, WindowsFileLock
 
-from filelock import (
-    BaseFileLock,
-    FileLock,
-    SoftFileLock,
-    Timeout,
-    UnixFileLock,
-    WindowsFileLock,
-)
+if TYPE_CHECKING:
+    from pytest_mock import MockerFixture
 
 
 @pytest.mark.parametrize(
@@ -44,7 +37,7 @@
     lock_type: type[BaseFileLock],
     path_type: type[str] | type[Path],
     tmp_path: Path,
-    caplog: LogCaptureFixture,
+    caplog: pytest.LogCaptureFixture,
 ) -> None:
     caplog.set_level(logging.DEBUG)
 
@@ -84,7 +77,7 @@
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
 @pytest.mark.skipif(sys.platform == "win32", reason="Windows does not have 
read only folders")
 @pytest.mark.skipif(
-    sys.platform != "win32" and os.geteuid() == 0,  # noqa: SC200
+    sys.platform != "win32" and os.geteuid() == 0,
     reason="Cannot make a read only file (that the current user: root can't 
read)",
 )
 def test_ro_folder(lock_type: type[BaseFileLock], tmp_path_ro: Path) -> None:
@@ -103,7 +96,7 @@
 
 @pytest.mark.parametrize("lock_type", [FileLock, SoftFileLock])
 @pytest.mark.skipif(
-    sys.platform != "win32" and os.geteuid() == 0,  # noqa: SC200
+    sys.platform != "win32" and os.geteuid() == 0,
     reason="Cannot make a read only file (that the current user: root can't 
read)",
 )
 def test_ro_file(lock_type: type[BaseFileLock], tmp_file_ro: Path) -> None:
@@ -122,11 +115,16 @@
         pytest.param(FileNotFoundError, "No such file or directory:", "a/b", 
id="non_existent_directory"),
         pytest.param(FileNotFoundError, "No such file or directory:", "", 
id="blank_filename"),
         pytest.param(ValueError, "embedded null (byte|character)", "\0", 
id="null_byte"),
-        pytest.param(
-            PermissionError if sys.platform == "win32" else IsADirectoryError,
-            "Permission denied:" if sys.platform == "win32" else "Is a 
directory",
-            ".",
-            id="current_directory",
+        # Should be PermissionError on Windows
+        pytest.param(PermissionError, "Permission denied:", ".", 
id="current_directory")
+        if sys.platform == "win32"
+        else (
+            # Should be IsADirectoryError on MacOS and Linux
+            pytest.param(IsADirectoryError, "Is a directory", ".", 
id="current_directory")
+            if sys.platform in ["darwin", "linux"]
+            else
+            # Should be some type of OSError at least on other operating 
systems
+            pytest.param(OSError, None, ".", id="current_directory")
         ),
     ]
     + [pytest.param(OSError, "Invalid argument", i, id=f"invalid_{i}", 
marks=WindowsOnly) for i in '<>:"|?*\a']
@@ -219,13 +217,12 @@
     def run(self) -> None:
         try:
             super().run()
-        except Exception:  # pragma: no cover
+        except Exception:  # noqa: BLE001 # pragma: no cover
             self.ex = sys.exc_info()  # pragma: no cover
 
     def join(self, timeout: float | None = None) -> None:
         super().join(timeout=timeout)
         if self.ex is not None:
-            print(f"fail from thread {self.name}")  # pragma: no cover
             raise RuntimeError from self.ex[1]  # pragma: no cover
 
 
@@ -371,7 +368,7 @@
         with lock as lock_1:
             assert lock is lock_1
             assert lock.is_locked
-            raise ValueError
+            raise ValueError  # noqa: TRY301
     except ValueError:
         assert not lock.is_locked
 
@@ -386,7 +383,7 @@
         with lock.acquire() as lock_1:
             assert lock is lock_1
             assert lock.is_locked
-            raise ValueError
+            raise ValueError  # noqa: TRY301
     except ValueError:
         assert not lock.is_locked
 
@@ -465,7 +462,7 @@
         lock.acquire()
         assert lock.is_locked
 
-        mode = filemode(os.stat(lock_path).st_mode)
+        mode = filemode(lock_path.stat().st_mode)
         assert mode == "-rw-rw-rw-"
     finally:
         os.umask(initial_umask)
@@ -484,7 +481,7 @@
         lock.acquire()
         assert lock.is_locked
 
-        mode = filemode(os.stat(lock_path).st_mode)
+        mode = filemode(lock_path.stat().st_mode)
         if sys.platform == "win32":
             assert mode == "-rw-rw-rw-"
         else:
@@ -540,15 +537,14 @@
     with pytest.raises(NotImplementedError):
         lock.acquire()
     with pytest.raises(NotImplementedError):
-        lock._release()
+        lock._release()  # noqa: SLF001
 
 
 @pytest.mark.skipif(sys.platform == "win32", reason="flock not run on windows")
 def test_flock_not_implemented_unix(tmp_path: Path, mocker: MockerFixture) -> 
None:
     mocker.patch("fcntl.flock", side_effect=OSError(ENOSYS, "mock error"))
-    with pytest.raises(NotImplementedError):
-        with FileLock(tmp_path / "a.lock"):
-            pass
+    with pytest.raises(NotImplementedError), FileLock(tmp_path / "a.lock"):
+        pass
 
 
 def test_soft_errors(tmp_path: Path, mocker: MockerFixture) -> None:

Reply via email to