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-03-16 14:16:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-flufl.lock (Old)
 and      /work/SRC/openSUSE:Factory/.python-flufl.lock.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-flufl.lock"

Mon Mar 16 14:16:42 2026 rev:12 rq:1339135 version:9.0.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-flufl.lock/python-flufl.lock.changes      
2025-09-29 16:38:15.569605029 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-flufl.lock.new.8177/python-flufl.lock.changes
    2026-03-16 14:19:49.715510998 +0100
@@ -1,0 +2,7 @@
+Sun Mar 15 18:50:28 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 9.0.0:
+  * Remove support for Python 3.9.
+  * Documentation improvements.
+
+-------------------------------------------------------------------

Old:
----
  flufl_lock-8.2.0.tar.gz

New:
----
  flufl_lock-9.0.0.tar.gz

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

Other differences:
------------------
++++++ python-flufl.lock.spec ++++++
--- /var/tmp/diff_new_pack.MFSfIE/_old  2026-03-16 14:19:50.163529596 +0100
+++ /var/tmp/diff_new_pack.MFSfIE/_new  2026-03-16 14:19:50.167529762 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-flufl.lock
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-flufl.lock
-Version:        8.2.0
+Version:        9.0.0
 Release:        0
 Summary:        NFS-safe file locking with timeouts for POSIX and Windows
 License:        Apache-2.0

++++++ flufl_lock-8.2.0.tar.gz -> flufl_lock-9.0.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/PKG-INFO 
new/flufl_lock-9.0.0/PKG-INFO
--- old/flufl_lock-8.2.0/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: flufl.lock
-Version: 8.2.0
+Version: 9.0.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
@@ -21,7 +21,7 @@
 Classifier: Programming Language :: Python :: 3
 Classifier: Topic :: Software Development :: Libraries
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
-Requires-Python: >=3.9
+Requires-Python: >=3.10
 Requires-Dist: atpublic
 Requires-Dist: psutil
 Description-Content-Type: text/x-rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/docs/NEWS.rst 
new/flufl_lock-9.0.0/docs/NEWS.rst
--- old/flufl_lock-8.2.0/docs/NEWS.rst  2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/docs/NEWS.rst  2020-02-02 01:00:00.000000000 +0100
@@ -2,6 +2,11 @@
 flufl.lock change log
 =====================
 
+9.0 (2025-11-28)
+================
+* Remove support for Python 3.9.
+* Documentation improvements.
+
 8.2 (2025-05-08)
 ================
 * Add support for Python 3.13 and 3.14; remove support for Python 3.8.
@@ -9,9 +14,9 @@
 
 8.1 (2024-03-30)
 ================
-* 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)
+* 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`)
 
 8.0.2 (2023-07-21)
 ==================
@@ -24,10 +29,10 @@
 
 8.0 (2023-06-21)
 ================
-* 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)
+* 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.
@@ -44,7 +49,7 @@
 
 7.0 (2022-01-11)
 ================
-* Fix spurious log messages when *not* breaking the lock.  (GL#29)
+* Fix spurious log messages when *not* breaking the lock.  (:GL:`29`)
 * Use modern package management by adopting `pdm
   <https://pdm.fming.dev/>`_ and ``pyproject.toml``, and dropping ``setup.py``
   and ``setup.cfg``.
@@ -62,17 +67,17 @@
 6.0 (2021-08-18)
 ================
 * Added a ``default_timeout`` argument to the ``Lock`` constructor, which can
-  be used in the context manager syntax as well.  (GL#24)
+  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)
+  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)
+* The ``master`` branch is renamed to ``main``. (:GL:`28`)
 
 5.1 (2021-05-28)
 ================
-* Added a ``py.typed`` file to satisfy type checkers.  (GL#27)
+* Added a ``py.typed`` file to satisfy type checkers.  (:GL:`27`)
 
 5.0.5 (2021-02-12)
 ==================
@@ -85,14 +90,14 @@
 
 5.0.3 (2020-10-22)
 ==================
-* Rename top-level tests/ directory to test/ (GL#26)
+* Rename top-level tests/ directory to test/ (:GL:`26`)
 
 5.0.2 (2020-10-21)
 ==================
 * 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)
+  ``site-packages`` (:GL:`22`)
 * Fix the Windows CI tests.
 * Add an index to the documentation.
 
@@ -106,12 +111,12 @@
 * **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)
+  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)
+  details. (:GL:`20`) (:GL:`17`)
+* Boosted test coverage to 100%. (:GL:`18`)
 
 4.0 (2020-06-30)
 ================
@@ -119,15 +124,15 @@
 API
 ---
 * **Breaking change** - In ``Lock.refresh()`` and ``Lock.unlock()`` the
-  ``unconditionally`` flag is now a keyword-only argument.  (GL#13)
+  ``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)
+  ``.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``.
@@ -136,7 +141,7 @@
 
 Behavior
 --------
-* Getting the ``repr()`` of a lock no longer refreshes it (GL#11)
+* Getting the ``repr()`` of a lock no longer refreshes it (:GL:`11`)
 
 Other
 -----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/docs/_ext/issue_role.py 
new/flufl_lock-9.0.0/docs/_ext/issue_role.py
--- old/flufl_lock-8.2.0/docs/_ext/issue_role.py        1970-01-01 
01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/docs/_ext/issue_role.py        2020-02-02 
01:00:00.000000000 +0100
@@ -0,0 +1,45 @@
+from docutils import nodes
+
+from sphinx.application import Sphinx
+from sphinx.roles import ReferenceRole
+from sphinx.util.typing import ExtensionMetadata
+
+
+BASE_URL = 'https://gitlab.com/warsaw/flufl.lock/-/issues/'
+
+
+class IssueRole(ReferenceRole):
+    """A role to hyperlink GitLab issues.
+
+    Use like this: :GL:`16`
+    """
+    def run(self) -> tuple[list[nodes.Node], list[nodes.system_message]]:
+        try:
+            issue_number = int(self.target)
+        except ValueError:
+            message = self.inliner.reporter.error(f'Role target must be an 
integer :GL:{self.target}')
+            problem = self.inliner.problematic(self.rawtext, self.rawtext, 
message)
+            return [problem], [message]
+
+        issue_uri = BASE_URL + self.target
+        title = self.title if self.has_explicit_title else f'GL#{self.target}'
+
+        return [
+            nodes.reference(
+                '', title,
+                internal=True,
+                refuri=issue_uri,
+                classes=['issue'],
+                _title_tuple=(issue_number,)
+            )
+        ], []
+
+
+def setup(app: Sphinx) -> ExtensionMetadata:
+    app.add_role('GL', IssueRole())
+
+    return {
+        'version': '0.1',
+        'parallel_read_safe': True,
+        'parallel_write_safe': True,
+    }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/docs/conf.py 
new/flufl_lock-9.0.0/docs/conf.py
--- old/flufl_lock-8.2.0/docs/conf.py   2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/docs/conf.py   2020-02-02 01:00:00.000000000 +0100
@@ -19,23 +19,29 @@
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.append(os.path.abspath('.'))
+sys.path[0:0] = [
+    os.path.abspath('../src'),
+    os.path.abspath('_ext'),
+]
 
 # -- General configuration 
-----------------------------------------------------
 
 # Add any Sphinx extension module names here, as strings. They can be 
extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
 extensions = [
+    'issue_role',
     'sphinx.ext.autodoc',
     'sphinx.ext.intersphinx',
+    'sphinx_copybutton',
     ]
 
 intersphinx_mapping = {
-    'python': ('https://docs.python.org/3/', None),
+    'python': ('https://docs.python.org/', None),
     }
 
 autodoc_typehints = 'both'
 autoclass_content = 'both'
+copybutton_exclude = '.linenos, .gp, .go'
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['../../_templates']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/docs/index.rst 
new/flufl_lock-9.0.0/docs/index.rst
--- old/flufl_lock-8.2.0/docs/index.rst 2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/docs/index.rst 2020-02-02 01:00:00.000000000 +0100
@@ -9,7 +9,7 @@
 Requirements
 ============
 
-``flufl.lock`` requires Python 3.9 or newer.
+``flufl.lock`` requires Python 3.10 or newer.
 
 
 Documentation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/pyproject.toml 
new/flufl_lock-9.0.0/pyproject.toml
--- old/flufl_lock-8.2.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -5,7 +5,7 @@
 ]
 description = 'NFS-safe file locking with timeouts for POSIX and Windows'
 readme = 'README.rst'
-requires-python = '>=3.9'
+requires-python = '>=3.10'
 license = {text = 'Apache-2.0'}
 keywords = [
     'locking',
@@ -31,6 +31,14 @@
 ]
 dynamic = ['version']
 
+[dependency-groups]
+docs = [
+    'furo',
+    'sphinx',
+    'sphinx-autobuild',
+    'sphinx-copybutton',
+]
+
 [project.urls]
 'Home Page' = 'https://flufllock.readthedocs.io'
 'Documentation' = 'https://flufllock.readthedocs.io'
@@ -56,6 +64,9 @@
     '**/.mypy_cache',
 ]
 
+[tool.hatch.envs.default]
+installer = 'uv'
+
 [tool.hatch.envs.default.scripts]
 all = [
     'hatch test --all',
@@ -83,7 +94,7 @@
 cov-report = ''
 
 [[tool.hatch.envs.test.matrix]]
-python = ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
+python = ['3.10', '3.11', '3.12', '3.13', '3.14']
 
 [tool.hatch.envs.qa]
 dependencies = [
@@ -107,16 +118,21 @@
     'hatch fmt --diff src',
 ]
 
+[tool.hatch.envs.hatch-static-analysis]
+config-path = 'none'
+
 [tool.hatch.envs.docs]
-dependencies = [
-    'sphinx',
-    'furo',
+dependency-groups = [
+    'docs',
 ]
 
 [tool.hatch.envs.docs.scripts]
 docs = [
     'sphinx-build docs build/html',
 ]
+serve = [
+    'sphinx-autobuild docs build/html --port 9000 --open-browser',
+]
 
 [tool.coverage.run]
 source = ['flufl.lock']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/src/flufl/lock/__init__.py 
new/flufl_lock-9.0.0/src/flufl/lock/__init__.py
--- old/flufl_lock-8.2.0/src/flufl/lock/__init__.py     2020-02-02 
01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/src/flufl/lock/__init__.py     2020-02-02 
01:00:00.000000000 +0100
@@ -11,7 +11,7 @@
 )
 
 
-__version__ = '8.2.0'
+__version__ = '9.0.0'
 
 
 _public(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flufl_lock-8.2.0/src/flufl/lock/_lockfile.py 
new/flufl_lock-9.0.0/src/flufl/lock/_lockfile.py
--- old/flufl_lock-8.2.0/src/flufl/lock/_lockfile.py    2020-02-02 
01:00:00.000000000 +0100
+++ new/flufl_lock-9.0.0/src/flufl/lock/_lockfile.py    2020-02-02 
01:00:00.000000000 +0100
@@ -1,4 +1,4 @@
-from __future__ import annotations  # noqa I001: Import block is un-sorted or 
un-formatted
+from __future__ import annotations
 
 import os
 import sys
@@ -184,9 +184,7 @@
             lifetime = DEFAULT_LOCK_LIFETIME
         self._default_timeout = default_timeout
         self._lockfile = lockfile
-        # Mypy does not understand that setters can accept wider types than 
the getter is defined to
-        # return.  We're fine, so just ignore the complaint.
-        self.lifetime = lifetime  # type: ignore[assignment]
+        self.lifetime = lifetime
         # The separator must be set before we claim the lock.
         self._separator = separator
         self._claimfile: str
@@ -243,7 +241,7 @@
         except FileNotFoundError:
             return LockState.unlocked
         try:
-            lockfile, hostname, pid_str, random_ignored = 
filename.split(self._separator)
+            lockfile, hostname, pid_str, _random_ignored = 
filename.split(self._separator)
             pid = int(pid_str)
         except (ValueError, TypeError):
             # The contents of the lock file is corrupt, so we can't know
@@ -293,9 +291,7 @@
             ``unconditionally`` flag is set to True.
         """
         if lifetime is not None:
-            # Mypy does not understand that setters can accept wider types 
than the getter is
-            # defined to return.  We're fine, so just ignore the complaint.
-            self.lifetime = lifetime  # type: ignore[assignment]
+            self.lifetime = lifetime
         # Do we have the lock?  As a side effect, this refreshes the lock!
         if not self.is_locked and not unconditionally:
             # EM102 Exception must not use an f-string literal, assign to 
variable first

Reply via email to