Repository: zhmcclient/zhmc-prometheus-exporter (language: python)

Issue:
Use official Python 3.13 for testing once released
Currently, we are using Python 3.13.0-rc.1 in the test workflow.

This ticket is to move to the officially released Python 3.13.0. Planned GA date is 2024-10-01 (see https://peps.python.org/pep-0719)


Discussion / hints:

Fix patch:
diff --git a/base-requirements.txt b/base-requirements.txt
index 124794c..4ae4dcd 100644
--- a/base-requirements.txt
+++ b/base-requirements.txt
@@ -8,4 +8,4 @@
 pip>=23.3
 setuptools>=70.0.0
 setuptools-scm[toml]>=8.1.0
-wheel>=0.38.1
+wheel>=0.41.3
diff --git a/changes/517.feature.rst b/changes/517.feature.rst
new file mode 100644
index 0000000..114a83a
--- /dev/null
+++ b/changes/517.feature.rst
@@ -0,0 +1,2 @@
+Support for and test of Python 3.13.0-rc.1. Needed to increase the minimum
+versions of PyYAML to 6.0.2 and pyrsistent to 0.20.0.
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 53ae36b..e9b6f6e 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -65,7 +65,7 @@ ruff>=0.3.5
 pylint>=3.0.1
 astroid>=3.0.1
 lazy-object-proxy>=1.4.3
-wrapt>=1.14
+wrapt>=1.15
 # platformdirs is also used by tox
 platformdirs>=4.1.0
 # isort 4.3.8 fixes an issue with py310 and works on py310 (Note that isort 5.10.0 has official support for py310)
@@ -94,7 +94,7 @@ sphinxcontrib-serializinghtml>=1.1.5; python_version == '3.8'
 sphinxcontrib-serializinghtml>=1.1.9; python_version >= '3.9'
 sphinxcontrib-websupport>=1.2.4
 autodocsumm>=0.2.12
-Babel>=2.9.1
+Babel>=2.11.0
 
 # Twine (no imports, invoked via twine script):
 twine>=3.0.0
diff --git a/minimum-constraints-develop.txt b/minimum-constraints-develop.txt
index 4b43173..240e1be 100644
--- a/minimum-constraints-develop.txt
+++ b/minimum-constraints-develop.txt
@@ -61,7 +61,7 @@ ruff==0.3.5
 pylint==3.0.1
 astroid==3.0.1
 lazy-object-proxy==1.4.3
-wrapt==1.14
+wrapt==1.15
 platformdirs==4.1.0
 isort==4.3.8
 tomlkit==0.10.1
@@ -85,7 +85,7 @@ sphinxcontrib-serializinghtml==1.1.5; python_version == '3.8'
 sphinxcontrib-serializinghtml==1.1.9; python_version >= '3.9'
 sphinxcontrib-websupport==1.2.4
 autodocsumm==0.2.12
-Babel==2.9.1
+Babel==2.11.0
 
 # Twine (no imports, invoked via twine script):
 # readme-renderer (used by twine, uses Pygments)
diff --git a/minimum-constraints-install.txt b/minimum-constraints-install.txt
index aee5584..11d0ae7 100644
--- a/minimum-constraints-install.txt
+++ b/minimum-constraints-install.txt
@@ -14,7 +14,7 @@ pip==23.3
 setuptools==70.0.0
 # Note on not specifying 'setuptools-scm[toml]': Extras cannot be in constraints files
 setuptools-scm==8.1.0
-wheel==0.38.1
+wheel==0.41.3
 
 
 # Direct dependencies for install (must be consistent with requirements.txt)
@@ -31,10 +31,10 @@ ruamel.yaml==0.18.6
 
 # Indirect dependencies for install that are needed for some reason (must be consistent with requirements.txt)
 
-# PyYAML is used by zhmcclient 1.17
-PyYAML==5.3.1
+# PyYAML is also used by zhmcclient 1.17, yamlloader
+PyYAML==6.0.2
 
-pyrsistent==0.18.1
+pyrsistent==0.20.0
 
 
 # All other indirect dependencies for install that are not in requirements.txt
diff --git a/pyproject.toml b/pyproject.toml
index 3bd1292..61e93e0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -68,6 +68,7 @@ classifiers = [
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
+    "Programming Language :: Python :: 3.13",
 ]
 requires-python = ">=3.8"
 dynamic = ["version", "dependencies", "optional-dependencies"]
diff --git a/requirements.txt b/requirements.txt
index 680737d..150fa00 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -26,17 +26,14 @@ ruamel.yaml>=0.18.6
 
 # Indirect dependencies for install that are needed for some reason (must be consistent with minimum-constraints-install.txt)
 
-# PyYAML is used by zhmcclient 1.17
-# PyYAML 5.3.x has wheel archives for Python 2.7, 3.5 - 3.9
-# PyYAML 5.4.x has wheel archives for Python 2.7, 3.6 - 3.9
-# PyYAML 6.0.0 has wheel archives for Python 3.6 - 3.11
-# PyYAML 6.0.1 has wheel archives for Python 3.6 - 3.12
+# PyYAML is also used by zhmcclient 1.17, yamlloader
+# PyYAML 6.0 has wheel archives for Python 3.6 - 3.11
 # PyYAML versions without wheel archives fail install since Cython 3 was
 #   released, see https://github.com/yaml/pyyaml/issues/724.
-PyYAML>=5.3.1,!=5.4.0,!=5.4.1; python_version <= '3.11'
-PyYAML>=5.3.1,!=5.4.0,!=5.4.1,!=6.0.0; python_version >= '3.12'
+# PyYAML 6.0.2 provides wheel archives for Python 3.13 on Windows
+PyYAML>=6.0.2
+
 
 # pyrsistent is used by jsonschema 3.x (no longer by jsonschema 4.x)
-# pyrsistent 0.15.0 fixes import errors on Python>=3.10, but only 0.18.1 has
-#   Python 3.10 support (accordong to the change log).
-pyrsistent>=0.18.1
+# pyrsistent 0.20.0 has official support for Python 3.12
+pyrsistent>=0.20.0


Test patch:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index b1cc381..c51c8fe 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -37,7 +37,7 @@ jobs:
         if [[ "${{ github.event_name }}" == "schedule" || "${{ github.head_ref }}" =~ ^release_ ]]; then \
           echo "matrix={ \
             \"os\": [ \"ubuntu-latest\", \"macos-latest\", \"windows-latest\" ], \
-            \"python-version\": [ \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\" ], \
+            \"python-version\": [ \"3.8\", \"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13.0-rc.1\" ], \
             \"package_level\": [ \"minimum\", \"latest\" ] \
           }" >> $GITHUB_OUTPUT; \
         else \
@@ -56,6 +56,16 @@ jobs:
                 \"python-version\": \"3.8\", \
                 \"package_level\": \"latest\" \
               }, \
+              { \
+                \"os\": \"ubuntu-latest\", \
+                \"python-version\": \"3.13.0-rc.1\", \
+                \"package_level\": \"minimum\" \
+              }, \
+              { \
+                \"os\": \"ubuntu-latest\", \
+                \"python-version\": \"3.13.0-rc.1\", \
+                \"package_level\": \"latest\" \
+              }, \
               { \
                 \"os\": \"macos-latest\", \
                 \"python-version\": \"3.8\", \
@@ -76,6 +86,16 @@ jobs:
                 \"python-version\": \"3.12\", \
                 \"package_level\": \"latest\" \
               }, \
+              { \
+                \"os\": \"macos-latest\", \
+                \"python-version\": \"3.13.0-rc.1\", \
+                \"package_level\": \"minimum\" \
+              }, \
+              { \
+                \"os\": \"macos-latest\", \
+                \"python-version\": \"3.13.0-rc.1\", \
+                \"package_level\": \"latest\" \
+              }, \
               { \
                 \"os\": \"windows-latest\", \
                 \"python-version\": \"3.12\", \
@@ -85,6 +105,16 @@ jobs:
                 \"os\": \"windows-latest\", \
                 \"python-version\": \"3.12\", \
                 \"package_level\": \"latest\" \
+              }, \
+              { \
+                \"os\": \"windows-latest\", \
+                \"python-version\": \"3.13.0-rc.1\", \
+                \"package_level\": \"minimum\" \
+              }, \
+              { \
+                \"os\": \"windows-latest\", \
+                \"python-version\": \"3.13.0-rc.1\", \
+                \"package_level\": \"latest\" \
               } \
             ] \
           }" >> $GITHUB_OUTPUT; \