Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-josepy for openSUSE:Factory 
checked in at 2025-11-06 18:14:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-josepy (Old)
 and      /work/SRC/openSUSE:Factory/.python-josepy.new.1980 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-josepy"

Thu Nov  6 18:14:32 2025 rev:18 rq:1315904 version:2.2.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-josepy/python-josepy.changes      
2025-04-22 17:29:36.918439108 +0200
+++ /work/SRC/openSUSE:Factory/.python-josepy.new.1980/python-josepy.changes    
2025-11-06 18:17:24.334079931 +0100
@@ -1,0 +2,10 @@
+Thu Nov  6 00:12:25 UTC 2025 - Steve Kowalik <[email protected]>
+
+- Update to 2.2.0:
+  * Added support for Python 3.14.
+  * Dropped support for Python 3.9.0 and 3.9.1 for compatibility with newer
+    versions of the cryptography Python package. Python 3.9.2+ is still
+    supported.
+- Clean up {Build,}Requires.
+
+-------------------------------------------------------------------

Old:
----
  josepy-2.0.0.tar.gz

New:
----
  josepy-2.2.0.tar.gz

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

Other differences:
------------------
++++++ python-josepy.spec ++++++
--- /var/tmp/diff_new_pack.OplDVm/_old  2025-11-06 18:17:25.030109790 +0100
+++ /var/tmp/diff_new_pack.OplDVm/_new  2025-11-06 18:17:25.038110133 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-josepy
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 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
@@ -19,7 +19,7 @@
 %define libname josepy
 %{?sle15_python_module_pythons}
 Name:           python-%{libname}
-Version:        2.0.0
+Version:        2.2.0
 Release:        0
 Summary:        JOSE protocol implementation in Python
 License:        Apache-2.0
@@ -30,15 +30,11 @@
 BuildRequires:  %{python_module coverage >= 4.0}
 BuildRequires:  %{python_module cryptography >= 1.5}
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module poetry >= 1.0.8}
-BuildRequires:  %{python_module pyOpenSSL >= 0.13}
+BuildRequires:  %{python_module poetry-core >= 2.0.0}
 BuildRequires:  %{python_module pytest >= 2.8.0}
-BuildRequires:  %{python_module setuptools >= 1.0}
-BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-cryptography >= 1.5
-Requires:       python-pyOpenSSL >= 0.13
 Conflicts:      python-acme < 0.21.0
 Obsoletes:      python-%{libname}-doc
 BuildArch:      noarch
@@ -75,7 +71,6 @@
 %doc CHANGELOG.rst CONTRIBUTING.md
 %{python_sitelib}/%{libname}
 %{python_sitelib}/%{libname}-%{version}.dist-info
-%pycache_only %{python_sitelib}/%{libname}/__pycache__
 # following the certbot-packaging guide, "jws" should not be packaged
 %exclude %{_bindir}/jws
 

++++++ josepy-2.0.0.tar.gz -> josepy-2.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/CHANGELOG.rst 
new/josepy-2.2.0/CHANGELOG.rst
--- old/josepy-2.0.0/CHANGELOG.rst      1970-01-01 01:00:00.000000000 +0100
+++ new/josepy-2.2.0/CHANGELOG.rst      1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +1,20 @@
 Changelog
 =========
 
+2.2.0 (2025-10-14)
+------------------
+
+* Support for Python 3.9 has been deprecated and will be removed in the next
+  scheduled release.
+
+2.1.0 (2025-07-08)
+------------
+
+* Added support for Python 3.14.
+* Dropped support for Python 3.9.0 and 3.9.1 for compatibility with newer
+  versions of the cryptography Python package. Python 3.9.2+ is still
+  supported.
+
 2.0.0 (2025-02-10)
 ------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/PKG-INFO new/josepy-2.2.0/PKG-INFO
--- old/josepy-2.0.0/PKG-INFO   1970-01-01 01:00:00.000000000 +0100
+++ new/josepy-2.2.0/PKG-INFO   1970-01-01 01:00:00.000000000 +0100
@@ -1,21 +1,22 @@
-Metadata-Version: 2.3
+Metadata-Version: 2.4
 Name: josepy
-Version: 2.0.0
+Version: 2.2.0
 Summary: JOSE protocol implementation in Python
-License: Apache-2.0
+License-Expression: Apache-2.0
+License-File: LICENSE.txt
 Author: Certbot Project
 Author-email: [email protected]
-Requires-Python: >=3.9,<4.0
+Requires-Python: >=3.9.2
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: Apache Software License
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Topic :: Internet :: WWW/HTTP
 Classifier: Topic :: Security
 Provides-Extra: docs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/docs/conf.py 
new/josepy-2.2.0/docs/conf.py
--- old/josepy-2.0.0/docs/conf.py       1970-01-01 01:00:00.000000000 +0100
+++ new/josepy-2.2.0/docs/conf.py       1970-01-01 01:00:00.000000000 +0100
@@ -63,9 +63,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "2.0"
+version = "2.2"
 # The full version, including alpha/beta/rc tags.
-release = "2.0.0"
+release = "2.2.0"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/pyproject.toml 
new/josepy-2.2.0/pyproject.toml
--- old/josepy-2.0.0/pyproject.toml     1970-01-01 01:00:00.000000000 +0100
+++ new/josepy-2.2.0/pyproject.toml     1970-01-01 01:00:00.000000000 +0100
@@ -1,33 +1,41 @@
 # PEP-517 build
 
 [build-system]
-requires = ["poetry_core>=1.0.8"]
+requires = ["poetry_core>=2.2.0"]
 build-backend = "poetry.core.masonry.api"
 
-# Poetry tooling configuration
-
-[tool.poetry]
+[project]
 name = "josepy"
-version = "2.0.0"
+version = "2.2.0"
+license = "Apache-2.0"
+license-files = ["LICENSE.txt"]
 description = "JOSE protocol implementation in Python"
-license = "Apache License 2.0"
+readme = "README.rst"
+authors = [{ name = "Certbot Project", email = "[email protected]" }]
+# python 3.9.2 is used as a lower bound here because newer versions of
+# cryptography dropped support for python 3.9.0 and 3.9.1. see
+# https://github.com/pyca/cryptography/pull/12045. when we drop support for
+# python 3.9 altogether, this line can be changed to the simpler 'python = 
"^3.10"'.
+# This should be kept in sync with the value of 
tool.poetry.dependencies.python below.
+requires-python = ">=3.9.2"
+dynamic = ["classifiers", "dependencies"]
+
+[project.urls]
+Homepage = "https://github.com/certbot/josepy";
+
+# Poetry tooling configuration
+[tool.poetry]
 classifiers = [
     "Development Status :: 5 - Production/Stable",
     "Intended Audience :: Developers",
-    "License :: OSI Approved :: Apache Software License",
     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
+    # Version specific classifiers are added automatically based on 
requires-python.
+    # Except for 3.9 since the lower bound is 3.9.2 currently.
     "Programming Language :: Python :: 3.9",
-    "Programming Language :: Python :: 3.10",
-    "Programming Language :: Python :: 3.11",
-    "Programming Language :: Python :: 3.12",
-    "Programming Language :: Python :: 3.13",
     "Topic :: Internet :: WWW/HTTP",
     "Topic :: Security",
 ]
-homepage = "https://github.com/certbot/josepy";
-authors = ["Certbot Project <[email protected]>"]
-readme = "README.rst"
 include = [
     "CHANGELOG.rst",
     "CONTRIBUTING.md",
@@ -35,9 +43,8 @@
 ]
 
 [tool.poetry.dependencies]
-# This should be kept in sync with the value of target-version in our
-# configuration for black below.
-python = "^3.9"
+# This should be kept in sync with the value of project.requires-python above.
+python = ">=3.9.2,<4.0"
 # load_pem_private/public_key (>=0.6)
 # rsa_recover_prime_factors (>=0.8)
 # add sign() and verify() to asymetric keys (RSA >=1.4, ECDSA >=1.5)
@@ -72,9 +79,6 @@
 # Black tooling configuration
 [tool.black]
 line-length = 100
-# This should be kept in sync with the version of Python specified in poetry's
-# dependencies above.
-target-version = ['py39', 'py310', 'py311', 'py312', 'py313']
 
 # Mypy tooling configuration
 
@@ -89,6 +93,8 @@
 [tool.pytest.ini_options]
 filterwarnings = [
     "error",
+    # We ignore our own warning about dropping Python 3.9 support.
+    "ignore:Python 3.9 support will be dropped:DeprecationWarning",
 ]
 norecursedirs = "*.egg .eggs dist build docs .tox"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/src/josepy/__init__.py 
new/josepy-2.2.0/src/josepy/__init__.py
--- old/josepy-2.0.0/src/josepy/__init__.py     1970-01-01 01:00:00.000000000 
+0100
+++ new/josepy-2.2.0/src/josepy/__init__.py     1970-01-01 01:00:00.000000000 
+0100
@@ -26,6 +26,9 @@
 
 """
 
+import sys
+import warnings
+
 # flake8: noqa
 from josepy.b64 import b64decode, b64encode
 from josepy.errors import (
@@ -72,3 +75,10 @@
     ComparableRSAKey,
     ImmutableMap,
 )
+
+if sys.version_info[:2] == (3, 9):
+    warnings.warn(
+        "Python 3.9 support will be dropped in the next scheduled release of "
+        "josepy. Please upgrade your Python version.",
+        DeprecationWarning,
+    )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/src/josepy/json_util.py 
new/josepy-2.2.0/src/josepy/json_util.py
--- old/josepy-2.0.0/src/josepy/json_util.py    1970-01-01 01:00:00.000000000 
+0100
+++ new/josepy-2.2.0/src/josepy/json_util.py    1970-01-01 01:00:00.000000000 
+0100
@@ -10,6 +10,7 @@
 import abc
 import binascii
 import logging
+import sys
 from typing import (
     Any,
     Callable,
@@ -27,6 +28,9 @@
 
 from josepy import b64, errors, interfaces, util
 
+if sys.version_info >= (3, 14):
+    import annotationlib
+
 logger = logging.getLogger(__name__)
 
 
@@ -233,7 +237,19 @@
                 if isinstance(value, _TypedField):
                     # Ensure the type annotation has been set for the field.
                     # Error out if it is not the case.
-                    if key not in namespace.get("__annotations__", {}):
+                    if "__annotations__" in namespace:
+                        annotations = namespace["__annotations__"]
+                    elif sys.version_info >= (3, 14):
+                        annotate = 
annotationlib.get_annotate_from_class_namespace(namespace)
+                        if annotate:
+                            annotations = annotationlib.call_annotate_function(
+                                annotate, 
format=annotationlib.Format.FORWARDREF
+                            )
+                        else:
+                            annotations = {}
+                    else:
+                        annotations = {}
+                    if key not in annotations:
                         raise ValueError(
                             f"Field `{key}` in JSONObject `{name}` has no type 
annotation."
                         )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/src/josepy/jws.py 
new/josepy-2.2.0/src/josepy/jws.py
--- old/josepy-2.0.0/src/josepy/jws.py  1970-01-01 01:00:00.000000000 +0100
+++ new/josepy-2.2.0/src/josepy/jws.py  1970-01-01 01:00:00.000000000 +0100
@@ -396,8 +396,8 @@
     @classmethod
     def sign(cls, args: argparse.Namespace) -> None:
         """Sign."""
-        key = args.alg.kty.load(args.key.read())
-        args.key.close()
+        with open(args.key, "rb") as fp:
+            key = args.alg.kty.load(fp.read())
         if args.protect is None:
             args.protect = []
         if args.compact:
@@ -426,8 +426,8 @@
 
         if args.key is not None:
             assert args.kty is not None
-            key = args.kty.load(args.key.read()).public_key()
-            args.key.close()
+            with open(args.key, "rb") as fp:
+                key = args.kty.load(fp.read()).public_key()
         else:
             key = None
 
@@ -459,13 +459,13 @@
         subparsers = parser.add_subparsers()
         parser_sign = subparsers.add_parser("sign")
         parser_sign.set_defaults(func=cls.sign)
-        parser_sign.add_argument("-k", "--key", type=argparse.FileType("rb"), 
required=True)
+        parser_sign.add_argument("-k", "--key", required=True)
         parser_sign.add_argument("-a", "--alg", type=cls._alg_type, 
default=jwa.RS256)
         parser_sign.add_argument("-p", "--protect", action="append", 
type=cls._header_type)
 
         parser_verify = subparsers.add_parser("verify")
         parser_verify.set_defaults(func=cls.verify)
-        parser_verify.add_argument("-k", "--key", 
type=argparse.FileType("rb"), required=False)
+        parser_verify.add_argument("-k", "--key", required=False)
         parser_verify.add_argument("--kty", type=cls._kty_type, required=False)
 
         parsed = parser.parse_args(args)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/josepy-2.0.0/tests/init_tests.py 
new/josepy-2.2.0/tests/init_tests.py
--- old/josepy-2.0.0/tests/init_tests.py        1970-01-01 01:00:00.000000000 
+0100
+++ new/josepy-2.2.0/tests/init_tests.py        1970-01-01 01:00:00.000000000 
+0100
@@ -0,0 +1,25 @@
+import importlib
+import re
+import sys
+import warnings
+
+import pytest
+
+import josepy
+
+
[email protected](sys.version_info[:2] != (3, 9), reason="requires Python 
3.9")
+def test_warns() -> None:
+    with pytest.warns(DeprecationWarning, match=re.escape(r"Python 3.9 
support")):
+        importlib.reload(josepy)
+
+
[email protected](sys.version_info[:2] == (3, 9), reason="requires Python != 
3.9")
+def test_does_not_warn() -> None:
+    with warnings.catch_warnings():
+        warnings.simplefilter("error")
+        importlib.reload(josepy)
+
+
+if __name__ == "__main__":
+    sys.exit(pytest.main(sys.argv[1:] + [__file__]))  # pragma: no cover

Reply via email to