Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-flufl.lock for 
openSUSE:Factory checked in at 2026-05-10 16:48:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-flufl.lock (Old)
 and      /work/SRC/openSUSE:Factory/.python-flufl.lock.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-flufl.lock"

Sun May 10 16:48:23 2026 rev:13 rq:1352264 version:9.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-flufl.lock/python-flufl.lock.changes      
2026-03-16 14:19:49.715510998 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-flufl.lock.new.1966/python-flufl.lock.changes
    2026-05-10 16:49:17.023135064 +0200
@@ -1,0 +2,147 @@
+Sun May 10 10:17:16 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 9.1.0:
+  * Small refactoring to provide a hook for custom
+    synchronization of clocks in subclasses. (:GL:`40`)
+  * Switch to pyrefly for type checking.
+  * Remove support for Python 3.9.
+  * Documentation improvements.
+  * Add support for Python 3.13 and 3.14; remove support for
+    Python 3.8.
+  * Modernize type hints.
+  * Add support for Python 3.12. (:GL:`35`)
+  * Switch to hatch, replacing pdm and tox. (:GL:`36`)
+  * Switch to ruff from blue and isort.  (:GL:`37`)
+  * Update dependencies.
+  * Other minor improvements and cleanups.
+  * Minor documentation fix.
+  * Drop Python 3.7 support (:GL:`34`)
+  * Added a claimfile property to Lock objects (:GL:`30`)
+  * Switch to pdm-backend (:GL:`33`)
+  * Use ruff for linting, since its much faster. (:GL:`17`)
+  * Bump dependencies.
+  * More GitLab CI integration improvements.
+  * Make tox.ini consistent with flufl defaults.
+  * Improvements to the GitLab CI integration.
+  * Add support for Python 3.11.
+  * Update to pdm 1.3.
+  * Update all dependencies eagerly.
+  * Fix spurious log messages when not breaking the lock.
+    (:GL:`29`)
+  * Use modern package management by adopting pdm and
+    pyproject.toml, and dropping setup.py and setup.cfg.
+  * Build the docs with Python 3.8.
+  * Update to version 3.0 of Sybil.
+  * Adopt the Furo documentation theme.
+  * Add a favicon and logos to the published documentation.
+  * Use importlib.metadata.version() as a better way to get the
+    package version number for the documentation.
+  * Drop Python 3.6 support.
+  * Update Windows GitLab runner to include Python 3.10.
+  * Update copyright years.
+  * Added a default_timeout argument to the Lock constructor,
+    which can be used in the context manager syntax as well.
+    (:GL:`24`)
+  * When a Lock uses a lock file that already exists and does not
+    appear to be a lock file (i.e. because its contents are ill-
+    formatted), do a better job of not clobbering that file.
+    (:GL:`25`)
+  * Improve some QA by re-adding diff-cover, Gitlab SAST during
+    CI, and testing on Python 3.10 beta (except for Windows)
+  * The master branch is renamed to main. (:GL:`28`)
+  * Added a py.typed file to satisfy type checkers.  (:GL:`27`)
+  * I blue it!
+  * Update copyright years.
+  * Include test/__init__.py and docs/__init__.py.
+  * Rename top-level tests/ directory to test/ (:GL:`26`)
+  * Minor housekeeping and cleanups.
+  * Add some missing licensing text.
+  * Don't install the tests and docs directories at the top of
+    site-packages (:GL:`22`)
+  * Fix the Windows CI tests.
+  * Add an index to the documentation.
+  * Reorganized docs and tests out of the code directory.
+  * Fix Read The Docs presentation.
+  * Breaking change - The following methods have been removed:
+    Lock.transfer_to(), Lock.take_possession(), Lock.disown().
+    These were crufty, undocumented APIs used in older versions
+    of Mailman and were not sustainable.  (:GL:`21`)
+  * Added official support for Python 3.9.
+  * Improvements to the documentation, including a better API
+    reference and a "theory of operation" page that gives more
+    implementation technical details. (:GL:`20`) (:GL:`17`)
+  * Boosted test coverage to 100%. (:GL:`18`)
+  * Breaking change - In Lock.refresh() and Lock.unlock() the
+    unconditionally flag is now a keyword-only argument.
+    (:GL:`13`)
+  * Breaking change - Removed Lock.__del__() and Lock.finalize().
+    It's impossible to make __del__() work properly, and this is
+    obsoleted by context manager protocol support anyway.  Since
+    finalize() only existed to help with __del__() and its
+    functionality is identical to .unlock(unconditionally=True),
+    this method is also removed.  (:GL:`7`)
+  * Added a Lock.expiration property. (:GL:`15`)
+  * Added a Lock.lockfile property. (:GL:`16`)
+  * Added a Lock.state property and the LockState enum.
+    (:GL:`12`)
+  * In all APIs, the lifetime parameter can now also be an
+    integer number of seconds, in addition to the previously
+    allowed datetime.timedelta.  The lifetime property always
+    gives you a datetime.timedelta.
+  * The API is now properly type annotated.
+  * Some library-defined exceptions support exception chaining.
+  * Getting the repr() of a lock no longer refreshes it
+    (:GL:`11`)
+  * Add support for Python 3.7 and 3.8; drop support for Python
+    3.4 and 3.5.
+  * We now run the test suite on both Linux and Windows.
+  * The LICENSE file is now included in the sdist tarball.
+  * API documentation is now built automatically.
+  * Numerous quality improvements and modernizations.
+  * Expose the host name used in the .details property, as a
+    property. (Closes #4).
+  * Expose the SEP as a public attribute.  (Closes #3)
+  * Drop Python 2.7, add Python 3.6.  (Closes #2)
+  * Added Windows support.
+  * Switch to the Apache License Version 2.0.
+  * Use flufl.testing for nose2 and flake8 plugins.
+  * Allow the claim file separator to be configurable, to support
+    file systems where the vertical bar is problematic.  Defaults
+    to ^ on Windows and | everywhere else (unchanged).  (Closes
+    #1)
+  * Fix the MANIFEST.in so that tox.ini is included in the sdist.
+  * Drop Python 2.6 compatibility.
+  * Add Python 3.5 compatibility.
+  * Include MANIFEST.in in the sdist tarball, otherwise the
+    Debian package won't built correctly.
+  * Fix documentation bug.  (LP: #1026403)
+  * Catch ESTALE along with ENOENT, as NFS servers are supposed
+    to (but don't always) throw ESTALE instead of ENOENT.  (LP:
+    #977999)
+  * Purge all references to distribute.  (LP: #1263794)
+  * Add classifiers to setup.py and make the long description
+    more compatible with the Cheeseshop.
+  * Other changes to make the Cheeseshop page look nicer.  (LP:
+    #680136)
+  * setup_helper.py version 2.1.
+  * Support Python 3 without the use of 2to3.
+  * Make the documentation clear that the flufl.test.subproc
+    functions are not part of the public API.  (LP: #838338)
+  * Fix claim file format in take_possession().  (LP: #872096)
+  * Provide a new API for dealing with possible additional
+    unexpected errnos while trying to read the lock file.  These
+    can happen in some NFS environments.  If you want to retry
+    the read, set the lock file's retry_errnos property to a
+    sequence of errnos.  If one of those errnos occurs, the read
+    is unconditionally (and infinitely) retried. retry_errnos is
+    a property which must be set to a sequence; it has a getter
+    and a deleter too.  (LP: #882261)
+  * Fixed TypeError in .lock() method due to race condition in
+    _releasetime property.  Found by Stephen A. Goss. (LP:
+    #827052)
+  * Added lock.details.
+  * Small adjustment to doctest.
+  * Add missing exception to __all__.
+  * Package renamed to flufl.lock.
+
+-------------------------------------------------------------------

Old:
----
  flufl_lock-9.0.0.tar.gz

New:
----
  flufl_lock-9.1.0.tar.gz

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

Other differences:
------------------
++++++ python-flufl.lock.spec ++++++
--- /var/tmp/diff_new_pack.ulV3pg/_old  2026-05-10 16:49:17.587158147 +0200
+++ /var/tmp/diff_new_pack.ulV3pg/_new  2026-05-10 16:49:17.587158147 +0200
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-flufl.lock
-Version:        9.0.0
+Version:        9.1.0
 Release:        0
 Summary:        NFS-safe file locking with timeouts for POSIX and Windows
 License:        Apache-2.0

++++++ flufl_lock-9.0.0.tar.gz -> flufl_lock-9.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/LICENSE new/flufl_lock-9.1.0/LICENSE
--- old/flufl_lock-9.0.0/LICENSE        2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/LICENSE        2020-02-02 01:00:00.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright 2004-2025 Barry Warsaw
+Copyright 2004-2026 Barry Warsaw
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/PKG-INFO 
new/flufl_lock-9.1.0/PKG-INFO
--- old/flufl_lock-9.0.0/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: flufl.lock
-Version: 9.0.0
+Version: 9.1.0
 Summary: NFS-safe file locking with timeouts for POSIX and Windows
 Project-URL: Home Page, https://flufllock.readthedocs.io
 Project-URL: Documentation, https://flufllock.readthedocs.io
@@ -65,7 +65,7 @@
 Author
 ======
 
-``flufl.lock`` is Copyright (C) 2007-2025 Barry Warsaw <[email protected]>
+``flufl.lock`` is Copyright (C) 2007-2026 Barry Warsaw <[email protected]>
 
 Licensed under the terms of the Apache License Version 2.0.  See the LICENSE
 file for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/README.rst 
new/flufl_lock-9.1.0/README.rst
--- old/flufl_lock-9.0.0/README.rst     2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/README.rst     2020-02-02 01:00:00.000000000 +0100
@@ -37,7 +37,7 @@
 Author
 ======
 
-``flufl.lock`` is Copyright (C) 2007-2025 Barry Warsaw <[email protected]>
+``flufl.lock`` is Copyright (C) 2007-2026 Barry Warsaw <[email protected]>
 
 Licensed under the terms of the Apache License Version 2.0.  See the LICENSE
 file for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/docs/NEWS.rst 
new/flufl_lock-9.1.0/docs/NEWS.rst
--- old/flufl_lock-9.0.0/docs/NEWS.rst  2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/docs/NEWS.rst  2020-02-02 01:00:00.000000000 +0100
@@ -2,6 +2,11 @@
 flufl.lock change log
 =====================
 
+9.1.0 (2026-04-24)
+==================
+* Small refactoring to provide a hook for custom synchronization of clocks in 
subclasses. (:GL:`40`)
+* Switch to `pyrefly <https://pyrefly.org/>`_ for type checking.
+
 9.0 (2025-11-28)
 ================
 * Remove support for Python 3.9.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/docs/index.rst 
new/flufl_lock-9.1.0/docs/index.rst
--- old/flufl_lock-9.0.0/docs/index.rst 2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/docs/index.rst 2020-02-02 01:00:00.000000000 +0100
@@ -43,7 +43,7 @@
 Copyright
 =========
 
-Copyright (C) 2004-2025 Barry A. Warsaw
+Copyright (C) 2004-2026 Barry A. Warsaw
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/pyproject.toml 
new/flufl_lock-9.1.0/pyproject.toml
--- old/flufl_lock-9.0.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -60,9 +60,6 @@
     'tests/',
     'conftest.py',
 ]
-excludes = [
-    '**/.mypy_cache',
-]
 
 [tool.hatch.envs.default]
 installer = 'uv'
@@ -99,7 +96,7 @@
 [tool.hatch.envs.qa]
 dependencies = [
     'ruff',
-    'mypy',
+    'pyrefly',
 ]
 
 [tool.hatch.envs.qa.env-vars]
@@ -109,7 +106,7 @@
 [tool.hatch.envs.qa.scripts]
 qa = [
     'hatch fmt --check src',
-    'mypy -p {env:MODULE_NAME}',
+    'pyrefly check',
 ]
 fix = [
     'hatch fmt src',
@@ -198,52 +195,8 @@
 order-by-type = true
 section-order = ['standard-library', 'third-party', 'local-folder', 
'first-party']
 
-[tool.mypy]
-mypy_path = 'src'
-
-# Disallow dynamic typing
-disallow_any_generics = true
-disallow_subclassing_any = true
-
-# Untyped definitions and calls
-disallow_untyped_calls = false
-disallow_untyped_defs = true
-disallow_incomplete_defs = true
-check_untyped_defs = true
-disallow_untyped_decorators = false
-
-# None and Optional handling
-no_implicit_optional = true
-
-# Configuring warnings
-warn_redundant_casts = true
-warn_unused_ignores = true
-warn_no_return = true
-warn_return_any = true
-warn_unreachable = true
-
-# Miscellaneous strictness flags
-implicit_reexport = false
-strict_equality = true
-
-# Configuring error messages
-show_error_context = true
-show_column_numbers = true
-show_error_codes = true
-pretty = true
-show_absolute_path = true
-
-# Miscellaneous
-warn_unused_configs = true
-verbosity = 0
-
-[[tool.mypy.overrides]]
-module = [
-    'psutil',
-    'pytest',
-    'sybil.*',
-]
-ignore_missing_imports = true
+[tool.pyrefly]
+project-includes = ['src']
 
 [build-system]
 requires = ['hatchling']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/src/flufl/lock/__init__.py 
new/flufl_lock-9.1.0/src/flufl/lock/__init__.py
--- old/flufl_lock-9.0.0/src/flufl/lock/__init__.py     2020-02-02 
01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/src/flufl/lock/__init__.py     2020-02-02 
01:00:00.000000000 +0100
@@ -11,7 +11,7 @@
 )
 
 
-__version__ = '9.0.0'
+__version__ = '9.1.0'
 
 
 _public(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-9.0.0/src/flufl/lock/_lockfile.py 
new/flufl_lock-9.1.0/src/flufl/lock/_lockfile.py
--- old/flufl_lock-9.0.0/src/flufl/lock/_lockfile.py    2020-02-02 
01:00:00.000000000 +0100
+++ new/flufl_lock-9.1.0/src/flufl/lock/_lockfile.py    2020-02-02 
01:00:00.000000000 +0100
@@ -97,16 +97,6 @@
     unknown = 6
 
 
-def _interval_to_datetime(
-    timeout: Interval | None = None,
-) -> datetime | None:
-    if timeout is None:
-        return None
-    if isinstance(timeout, int):
-        timeout = timedelta(seconds=timeout)
-    return datetime.now() + timeout
-
-
 @public
 class Lock:
     """Portable, NFS-safe file locking with timeouts for POSIX systems.
@@ -250,10 +240,10 @@
         if hostname != self._hostname:
             return LockState.unknown
         if pid == os.getpid():
-            expired = self.expiration < datetime.now()
+            expired = self.expiration < self._now()
             return LockState.ours_expired if expired else LockState.ours
         if pid_exists(pid):
-            expired = self.expiration < datetime.now()
+            expired = self.expiration < self._now()
             return LockState.theirs_expired if expired else LockState.unknown
         return LockState.stale
 
@@ -311,7 +301,9 @@
         :raises TimeOutError: if ``timeout`` is not None and the indicated
             time interval expires without a lock acquisition.
         """
-        timeout_time = _interval_to_datetime(self._default_timeout if timeout 
is None else timeout)
+        timeout_time = self._interval_to_datetime(
+            self._default_timeout if timeout is None else timeout
+        )
         # Make sure the claim file exists, and that its contents are current.
         self._write()
         # 2025-05-08(warsaw): Is the following comment still relevant?
@@ -368,7 +360,7 @@
                 pass  # noqa PIE790 Unnecessary `pass` statement
             # We did not acquire the lock, because someone else already has
             # it.  Have we timed out in our quest for the lock?
-            if timeout_time is not None and timeout_time < datetime.now():
+            if timeout_time is not None and timeout_time < self._now():
                 os.unlink(self._claimfile)
                 log.error('timed out')
                 raise TimeOutError('Could not acquire the lock')
@@ -377,7 +369,7 @@
             # time to avoid race conditions.  (LP: #827052)
             release_time = self._releasetime
             if release_time != -1:
-                now = datetime.now()
+                now = self._now()
                 future = cast(datetime, release_time) + CLOCK_SLOP
                 if now > future:
                     # Yes, so break the lock.
@@ -536,7 +528,7 @@
         :param filename: If given, the file to touch, otherwise our claim file
             is touched.
         """
-        expiration_date = datetime.now() + self._lifetime
+        expiration_date = self._now() + self._lifetime
         t = time.mktime(expiration_date.timetuple())
         try:
             # We probably don't need to modify atime, but this is easier.
@@ -623,3 +615,22 @@
         """Snooze for a random amount of time."""
         interval = random.random() * 2.0 + 0.01
         time.sleep(interval)
+
+    def _now(self) -> datetime:
+        """Hook for subclasses to influence the clock lookup.
+
+        This is useful if you're synchronizing locks across NFS servers that
+        cannot properly synchronize their clocks.  Override to add any custom
+        necessary custom logic.
+        """
+        return datetime.now()
+
+    def _interval_to_datetime(
+        self,
+        timeout: Interval | None = None,
+    ) -> datetime | None:
+        if timeout is None:
+            return None
+        if isinstance(timeout, int):
+            timeout = timedelta(seconds=timeout)
+        return self._now() + timeout

Reply via email to