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 2024-03-26 19:25:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-filelock (Old)
and /work/SRC/openSUSE:Factory/.python-filelock.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-filelock"
Tue Mar 26 19:25:32 2024 rev:17 rq:1161514 version:3.13.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-filelock/python-filelock.changes
2023-11-28 22:19:11.921333375 +0100
+++
/work/SRC/openSUSE:Factory/.python-filelock.new.1905/python-filelock.changes
2024-03-26 19:27:47.854120306 +0100
@@ -1,0 +2,10 @@
+Mon Mar 25 17:29:15 UTC 2024 - Dirk Müller <[email protected]>
+
+- update to 3.13.2:
+ * Fixed small typo in _unix.py
+ * Update SECURITY.md to reflect Python 3.7 support dropoff
+ * Update index.rst to improve the demo usage
+ * [BugFix] fix permission denied error when lock file is placed
+ in `/tmp`
+
+-------------------------------------------------------------------
Old:
----
filelock-3.13.1.tar.gz
New:
----
filelock-3.13.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-filelock.spec ++++++
--- /var/tmp/diff_new_pack.OJwclO/_old 2024-03-26 19:27:48.298136644 +0100
+++ /var/tmp/diff_new_pack.OJwclO/_new 2024-03-26 19:27:48.298136644 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-filelock
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
# Copyright (c) 2018 Matthias Fehring <[email protected]>
#
# All modifications and additions to the file contributed by third parties
@@ -19,7 +19,7 @@
%{?sle15_python_module_pythons}
Name: python-filelock
-Version: 3.13.1
+Version: 3.13.2
Release: 0
Summary: Platform Independent File Lock in Python
License: Unlicense
++++++ filelock-3.13.1.tar.gz -> filelock-3.13.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/PKG-INFO new/filelock-3.13.2/PKG-INFO
--- old/filelock-3.13.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/filelock-3.13.2/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.3
Name: filelock
-Version: 3.13.1
+Version: 3.13.2
Summary: A platform independent file lock.
Project-URL: Documentation, https://py-filelock.readthedocs.io
Project-URL: Homepage, https://github.com/tox-dev/py-filelock
@@ -27,18 +27,18 @@
Requires-Python: >=3.8
Provides-Extra: docs
Requires-Dist: furo>=2023.9.10; extra == 'docs'
-Requires-Dist: sphinx-autodoc-typehints!=1.23.4,>=1.24; extra == 'docs'
+Requires-Dist: sphinx-autodoc-typehints!=1.23.4,>=1.25.2; extra == 'docs'
Requires-Dist: sphinx>=7.2.6; extra == 'docs'
Provides-Extra: testing
Requires-Dist: covdefaults>=2.3; extra == 'testing'
Requires-Dist: coverage>=7.3.2; extra == 'testing'
-Requires-Dist: diff-cover>=8; extra == 'testing'
+Requires-Dist: diff-cover>=8.0.1; extra == 'testing'
Requires-Dist: pytest-cov>=4.1; extra == 'testing'
Requires-Dist: pytest-mock>=3.12; extra == 'testing'
Requires-Dist: pytest-timeout>=2.2; extra == 'testing'
Requires-Dist: pytest>=7.4.3; extra == 'testing'
Provides-Extra: typing
-Requires-Dist: typing-extensions>=4.8; python_version < '3.11' and extra ==
'typing'
+Requires-Dist: typing-extensions>=4.8; (python_version < '3.11') and extra ==
'typing'
Description-Content-Type: text/markdown
# filelock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/pyproject.toml
new/filelock-3.13.2/pyproject.toml
--- old/filelock-3.13.1/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/filelock-3.13.2/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
[build-system]
build-backend = "hatchling.build"
requires = [
- "hatch-vcs>=0.3",
+ "hatch-vcs>=0.4",
"hatchling>=1.18",
]
@@ -41,12 +41,12 @@
optional-dependencies.docs = [
"furo>=2023.9.10",
"sphinx>=7.2.6",
- "sphinx-autodoc-typehints!=1.23.4,>=1.24",
+ "sphinx-autodoc-typehints!=1.23.4,>=1.25.2",
]
optional-dependencies.testing = [
"covdefaults>=2.3",
"coverage>=7.3.2",
- "diff-cover>=8",
+ "diff-cover>=8.0.1",
"pytest>=7.4.3",
"pytest-cov>=4.1",
"pytest-mock>=3.12",
@@ -65,33 +65,43 @@
build.targets.sdist.include = ["/src", "/tests", "/tox.ini"]
version.source = "vcs"
-[tool.black]
-line-length = 120
-
[tool.ruff]
-select = ["ALL"]
line-length = 120
target-version = "py38"
-isort = {known-first-party = ["filelock"], 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]
+lint.isort = { known-first-party = ["filelock"], required-imports = ["from
__future__ import annotations"] }
+lint.select = ["ALL"]
+lint.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
+ "COM812", # Conflict with formatter
+ "ISC001", # Conflict with formatter
+ "CPY", # No copyright statements
+]
+lint.preview = true
+format.preview = true
+format.docstring-code-format = true
+format.docstring-code-line-length = 100
+[tool.ruff.lint.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
+ "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
]
+[tool.codespell]
+builtin = "clear,usage,en-GB_to_en-US"
+count = true
+quiet-level = 3
+ignore-words-list = "master"
+
[tool.coverage]
html.show_contexts = true
html.skip_covered = false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/src/filelock/__init__.py
new/filelock-3.13.2/src/filelock/__init__.py
--- old/filelock-3.13.1/src/filelock/__init__.py 2020-02-02
01:00:00.000000000 +0100
+++ new/filelock-3.13.2/src/filelock/__init__.py 2020-02-02
01:00:00.000000000 +0100
@@ -5,6 +5,7 @@
:no-value:
"""
+
from __future__ import annotations
import sys
@@ -40,12 +41,12 @@
__all__ = [
- "__version__",
+ "AcquireReturnProxy",
+ "BaseFileLock",
"FileLock",
"SoftFileLock",
"Timeout",
"UnixFileLock",
"WindowsFileLock",
- "BaseFileLock",
- "AcquireReturnProxy",
+ "__version__",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/src/filelock/_api.py
new/filelock-3.13.2/src/filelock/_api.py
--- old/filelock-3.13.1/src/filelock/_api.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.2/src/filelock/_api.py 2020-02-02 01:00:00.000000000
+0100
@@ -30,7 +30,7 @@
# is not called twice when entering the with statement. If we would simply
return *self*, the lock would be acquired
# again in the *__enter__* method of the BaseFileLock, but not released again
automatically. issue #37 (memory leak)
class AcquireReturnProxy:
- """A context aware object that will release the lock file when exiting."""
+ """A context-aware object that will release the lock file when exiting."""
def __init__(self, lock: BaseFileLock) -> None:
self.lock = lock
@@ -115,13 +115,14 @@
:param lock_file: path to the file
:param timeout: default timeout when acquiring the lock, in seconds.
It will be used as fallback value in \
the acquire method, if no timeout value (``None``) is given. If
you want to disable the timeout, set it \
- to a negative value. A timeout of 0 means, that there is exactly
one attempt to acquire the file lock.
+ to a negative value. A timeout of 0 means that there is exactly
one attempt to acquire the file lock.
:param mode: file permissions for the lockfile
:param thread_local: Whether this object's internal context should be
thread local or not. If this is set to \
``False`` then the lock will be reentrant across threads.
:param is_singleton: If this is set to ``True`` then only one instance
of this class will be created \
per lock file. This is useful if you want to use the lock object
for reentrant locking without needing \
to pass the same object around.
+
"""
self._is_thread_local = thread_local
self._is_singleton = is_singleton
@@ -164,6 +165,7 @@
Change the default timeout value.
:param value: the new value, in seconds
+
"""
self._context.timeout = float(value)
@@ -272,10 +274,11 @@
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.
+ 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.
:param force: If true, the lock counter is ignored and the lock is
released in every case/
+
"""
if self.is_locked:
self._context.lock_counter -= 1
@@ -293,6 +296,7 @@
Acquire the lock.
:return: the lock object
+
"""
self.acquire()
return self
@@ -309,6 +313,7 @@
:param exc_type: the exception type if raised
:param exc_value: the exception value if raised
:param traceback: the exception traceback if raised
+
"""
self.release()
@@ -318,6 +323,6 @@
__all__ = [
- "BaseFileLock",
"AcquireReturnProxy",
+ "BaseFileLock",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/src/filelock/_unix.py
new/filelock-3.13.2/src/filelock/_unix.py
--- old/filelock-3.13.1/src/filelock/_unix.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.2/src/filelock/_unix.py 2020-02-02 01:00:00.000000000
+0100
@@ -4,6 +4,7 @@
import sys
from contextlib import suppress
from errno import ENOSYS
+from pathlib import Path
from typing import cast
from ._api import BaseFileLock
@@ -35,7 +36,9 @@
def _acquire(self) -> None:
ensure_directory_exists(self.lock_file)
- open_flags = os.O_RDWR | os.O_CREAT | os.O_TRUNC
+ open_flags = os.O_RDWR | os.O_TRUNC
+ if not Path(self.lock_file).exists():
+ open_flags |= os.O_CREAT
fd = os.open(self.lock_file, open_flags, self._context.mode)
with suppress(PermissionError): # This locked is not owned by
this UID
os.fchmod(fd, self._context.mode)
@@ -44,7 +47,7 @@
except OSError as exception:
os.close(fd)
if exception.errno == ENOSYS: # NotImplemented error
- msg = "FileSystem does not appear to support flock; user
SoftFileLock instead"
+ msg = "FileSystem does not appear to support flock; use
SoftFileLock instead"
raise NotImplementedError(msg) from exception
else:
self._context.lock_file_fd = fd
@@ -60,6 +63,6 @@
__all__ = [
- "has_fcntl",
"UnixFileLock",
+ "has_fcntl",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/src/filelock/_util.py
new/filelock-3.13.2/src/filelock/_util.py
--- old/filelock-3.13.1/src/filelock/_util.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.2/src/filelock/_util.py 2020-02-02 01:00:00.000000000
+0100
@@ -10,10 +10,13 @@
def raise_on_not_writable_file(filename: str) -> None:
"""
Raise an exception if attempting to open the file for writing would fail.
- This is done so files that will never be writable can be separated from
- files that are writable but currently locked
+
+ 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.
+
"""
try: # use stat to do exists + can write to check without race condition
file_stat = os.stat(filename) # noqa: PTH116
@@ -35,13 +38,15 @@
def ensure_directory_exists(filename: Path | str) -> None:
"""
- Ensure the directory containing the file exists (create it if necessary)
+ Ensure the directory containing the file exists (create it if necessary).
+
:param filename: file.
+
"""
Path(filename).parent.mkdir(parents=True, exist_ok=True)
__all__ = [
- "raise_on_not_writable_file",
"ensure_directory_exists",
+ "raise_on_not_writable_file",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/src/filelock/version.py
new/filelock-3.13.2/src/filelock/version.py
--- old/filelock-3.13.1/src/filelock/version.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.2/src/filelock/version.py 2020-02-02 01:00:00.000000000
+0100
@@ -12,5 +12,5 @@
__version_tuple__: VERSION_TUPLE
version_tuple: VERSION_TUPLE
-__version__ = version = '3.13.1'
-__version_tuple__ = version_tuple = (3, 13, 1)
+__version__ = version = '3.13.2'
+__version_tuple__ = version_tuple = (3, 13, 2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/tests/test_error.py
new/filelock-3.13.2/tests/test_error.py
--- old/filelock-3.13.1/tests/test_error.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.2/tests/test_error.py 2020-02-02 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
from __future__ import annotations
-import pickle
+import pickle # noqa: S403
from filelock import Timeout
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/tests/test_filelock.py
new/filelock-3.13.2/tests/test_filelock.py
--- old/filelock-3.13.1/tests/test_filelock.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.2/tests/test_filelock.py 2020-02-02 01:00:00.000000000
+0100
@@ -109,15 +109,16 @@
pytest.param(FileNotFoundError, "No such file or directory:", "",
id="blank_filename"),
pytest.param(ValueError, "embedded null (byte|character)", "\0",
id="null_byte"),
# Should be PermissionError on Windows
- pytest.param(PermissionError, "Permission denied:", ".",
id="current_directory")
- if sys.platform == "win32"
- else (
+ (
+ pytest.param(PermissionError, "Permission denied:", ".",
id="current_directory")
+ if sys.platform == "win32"
# 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")
+ else (
+ pytest.param(IsADirectoryError, "Is a directory", ".",
id="current_directory")
+ if sys.platform in {"darwin", "linux"}
+ # Should be some type of OSError at least on other operating
systems
+ else pytest.param(OSError, None, ".", id="current_directory")
+ )
),
]
+ [pytest.param(OSError, "Invalid argument", i, id=f"invalid_{i}",
marks=WindowsOnly) for i in '<>:"|?*\a']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.1/tox.ini new/filelock-3.13.2/tox.ini
--- old/filelock-3.13.1/tox.ini 2020-02-02 01:00:00.000000000 +0100
+++ new/filelock-3.13.2/tox.ini 2020-02-02 01:00:00.000000000 +0100
@@ -46,7 +46,7 @@
[testenv:type]
description = run type check on code base
deps =
- mypy==1.6.1
+ mypy==1.7.1
set_env =
{tty:MYPY_FORCE_COLOR = 1}
commands =
@@ -59,7 +59,7 @@
deps =
covdefaults>=2.3
coverage[toml]>=7.3.2
- diff-cover>=8
+ diff-cover>=8.0.1
extras =
parallel_show_output = true
pass_env =