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