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-04-21 20:24:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-filelock (Old)
and /work/SRC/openSUSE:Factory/.python-filelock.new.26366 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-filelock"
Sun Apr 21 20:24:46 2024 rev:18 rq:1169267 version:3.13.4
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-filelock/python-filelock.changes
2024-03-26 19:27:47.854120306 +0100
+++
/work/SRC/openSUSE:Factory/.python-filelock.new.26366/python-filelock.changes
2024-04-21 20:25:17.837553945 +0200
@@ -1,0 +2,8 @@
+Fri Apr 12 17:03:41 UTC 2024 - Dirk Müller <[email protected]>
+
+- update to 3.13.4:
+ * Raise error on incompatible singleton timeout and mode args
+- update to 3.13.3:
+ * Make singleton class instance dict unique per subclass
+
+-------------------------------------------------------------------
Old:
----
filelock-3.13.2.tar.gz
New:
----
filelock-3.13.4.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-filelock.spec ++++++
--- /var/tmp/diff_new_pack.XlGLrl/_old 2024-04-21 20:25:18.293570677 +0200
+++ /var/tmp/diff_new_pack.XlGLrl/_new 2024-04-21 20:25:18.297570824 +0200
@@ -19,7 +19,7 @@
%{?sle15_python_module_pythons}
Name: python-filelock
-Version: 3.13.2
+Version: 3.13.4
Release: 0
Summary: Platform Independent File Lock in Python
License: Unlicense
++++++ filelock-3.13.2.tar.gz -> filelock-3.13.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.2/PKG-INFO new/filelock-3.13.4/PKG-INFO
--- old/filelock-3.13.2/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
+++ new/filelock-3.13.4/PKG-INFO 2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.3
Name: filelock
-Version: 3.13.2
+Version: 3.13.4
Summary: A platform independent file lock.
Project-URL: Documentation, https://py-filelock.readthedocs.io
Project-URL: Homepage, https://github.com/tox-dev/py-filelock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.2/src/filelock/_api.py
new/filelock-3.13.4/src/filelock/_api.py
--- old/filelock-3.13.2/src/filelock/_api.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.4/src/filelock/_api.py 2020-02-02 01:00:00.000000000
+0100
@@ -8,7 +8,7 @@
from abc import ABC, abstractmethod
from dataclasses import dataclass
from threading import local
-from typing import TYPE_CHECKING, Any, ClassVar
+from typing import TYPE_CHECKING, Any
from weakref import WeakValueDictionary
from ._error import Timeout
@@ -77,13 +77,13 @@
class BaseFileLock(ABC, contextlib.ContextDecorator):
"""Abstract base class for a file lock object."""
- _instances: ClassVar[WeakValueDictionary[str, BaseFileLock]] =
WeakValueDictionary()
+ _instances: WeakValueDictionary[str, BaseFileLock]
def __new__( # noqa: PLR0913
cls,
lock_file: str | os.PathLike[str],
- timeout: float = -1, # noqa: ARG003
- mode: int = 0o644, # noqa: ARG003
+ timeout: float = -1,
+ mode: int = 0o644,
thread_local: bool = True, # noqa: ARG003, FBT001, FBT002
*,
is_singleton: bool = False,
@@ -97,9 +97,17 @@
if not instance:
instance = super().__new__(cls)
cls._instances[str(lock_file)] = instance
+ elif timeout != instance.timeout or mode != instance.mode:
+ msg = "Singleton lock instances cannot be initialized with
differing arguments"
+ raise ValueError(msg)
return instance # type: ignore[return-value] #
https://github.com/python/mypy/issues/15322
+ def __init_subclass__(cls, **kwargs: dict[str, Any]) -> None:
+ """Setup unique state for lock subclasses."""
+ super().__init_subclass__(**kwargs)
+ cls._instances = WeakValueDictionary()
+
def __init__( # noqa: PLR0913
self,
lock_file: str | os.PathLike[str],
@@ -169,6 +177,11 @@
"""
self._context.timeout = float(value)
+ @property
+ def mode(self) -> int:
+ """:return: the file permissions for the lockfile"""
+ return self._context.mode
+
@abstractmethod
def _acquire(self) -> None:
"""If the file lock could be acquired, self._context.lock_file_fd
holds the file descriptor of the lock file."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.2/src/filelock/version.py
new/filelock-3.13.4/src/filelock/version.py
--- old/filelock-3.13.2/src/filelock/version.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.4/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.2'
-__version_tuple__ = version_tuple = (3, 13, 2)
+__version__ = version = '3.13.4'
+__version_tuple__ = version_tuple = (3, 13, 4)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/filelock-3.13.2/tests/test_filelock.py
new/filelock-3.13.4/tests/test_filelock.py
--- old/filelock-3.13.2/tests/test_filelock.py 2020-02-02 01:00:00.000000000
+0100
+++ new/filelock-3.13.4/tests/test_filelock.py 2020-02-02 01:00:00.000000000
+0100
@@ -14,6 +14,7 @@
from types import TracebackType
from typing import TYPE_CHECKING, Any, Callable, Iterator, Tuple, Type, Union
from uuid import uuid4
+from weakref import WeakValueDictionary
import pytest
@@ -675,6 +676,17 @@
assert lock_1 is not lock_2
[email protected]("lock_type", [FileLock, SoftFileLock])
+def test_singleton_locks_must_be_initialized_with_the_same_args(lock_type:
type[BaseFileLock], tmp_path: Path) -> None:
+ lock_path = tmp_path / "a"
+ lock = lock_type(str(lock_path), is_singleton=True) # noqa: F841
+
+ with pytest.raises(ValueError, match="Singleton lock instances cannot be
initialized with differing arguments"):
+ lock_type(str(lock_path), timeout=10, is_singleton=True)
+ with pytest.raises(ValueError, match="Singleton lock instances cannot be
initialized with differing arguments"):
+ lock_type(str(lock_path), mode=0, is_singleton=True)
+
+
@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_singleton_locks_are_deleted_when_no_external_references_exist(
@@ -687,3 +699,17 @@
assert lock_type._instances == {str(lock_path): lock} # noqa: SLF001
del lock
assert lock_type._instances == {} # noqa: SLF001
+
+
[email protected](hasattr(sys, "pypy_version_info"), reason="del() does not
trigger GC in PyPy")
[email protected]("lock_type", [FileLock, SoftFileLock])
+def test_singleton_instance_tracking_is_unique_per_subclass(lock_type:
type[BaseFileLock]) -> None:
+ class Lock1(lock_type): # type: ignore[valid-type, misc]
+ pass
+
+ class Lock2(lock_type): # type: ignore[valid-type, misc]
+ pass
+
+ assert isinstance(Lock1._instances, WeakValueDictionary) # noqa: SLF001
+ assert isinstance(Lock2._instances, WeakValueDictionary) # noqa: SLF001
+ assert Lock1._instances is not Lock2._instances # noqa: SLF001