commit python-filelock for openSUSE:Factory
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 <dmueller@suse.com> + +- 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 <buschmann23@opensuse.org> # # 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 =
participants (1)
-
Source-Sync