Repository: bo4e/BO4E-python (language: python)

Issue:
Synchronize supported Python versions with Python support schedule (missing Python 3.8 support)
Since https://github.com/bo4e/BO4E-python/commit/56123cf01fdcb2fac671811ee98ee2a44fdda902, only Python 3.10 and Python 3.11 are supported officially, with Python 3.12 being mentioned in #687 already.

It would be nice to synchronize the supported Python versions with the Python support schedule. At the moment, this would mean that Python 3.8 through Python 3.12 are supported. This might make it easier to use the package in different setups, for example where Python 3.10 is not yet readily available to due other circumstances.
Support Python 3.12
The package shall support Python 3.12.
I think we don't need any code adjustments, just metadata and stuff:
- [x] unittest Python 3.11 AND Python 3.12
- [x] switch other CI actions to Python 3.12 only (no need to lint Python 3.11 AND Python 3.12)
- [x] add 3.12 to pyproject.toml



Discussion / hints:
Yes that's a good idea. I will create a PR which expands the python version matrix in the GitHub actions.
So all tests will run for each Python version.


Fix patch:
diff --git a/.github/workflows/python-publish-scheduled.yml b/.github/workflows/python-publish-scheduled.yml
index e958ff205..e35f94be6 100644
--- a/.github/workflows/python-publish-scheduled.yml
+++ b/.github/workflows/python-publish-scheduled.yml
@@ -13,7 +13,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ["3.11"]
+        python-version: ["3.9", "3.10", "3.11", "3.12"]
         os: [ubuntu-latest]
     steps:
       - uses: actions/checkout@v4
diff --git a/pyproject.toml b/pyproject.toml
index 0aa1f1f22..25cff7ec1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
 name = "bo4e"
 description = "Python Library that implements the BO4E Standard."
 license = { text = "MIT" }
-requires-python = ">=3.10"
+requires-python = ">=3.9"
 authors = [
   { name = "Kevin Krechan", email = "kevin.krechan@hochfrequenz.de" },
   { name = "Leon Haffmans", email = "leon.haffmans@hochfrequenz.de" },
@@ -22,6 +22,7 @@ classifiers = [
   "Operating System :: OS Independent",
   "Programming Language :: Python",
   "Programming Language :: Python :: 3 :: Only",
+  "Programming Language :: Python :: 3.9",
   "Programming Language :: Python :: 3.10",
   "Programming Language :: Python :: 3.11",
   "Programming Language :: Python :: 3.12",


Test patch:
diff --git a/.github/workflows/packaging_test.yml b/.github/workflows/packaging_test.yml
index cd51c221b..cd815d021 100644
--- a/.github/workflows/packaging_test.yml
+++ b/.github/workflows/packaging_test.yml
@@ -6,7 +6,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ["3.11"]
+        python-version: ["3.9", "3.10", "3.11", "3.12"]
         os: [ubuntu-latest]
     steps:
       - uses: actions/checkout@v4
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index aa212b8b4..37df56b5e 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -6,7 +6,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: ["3.10", "3.11", "3.12"]
+        python-version: ["3.9", "3.10", "3.11", "3.12"]
         os: [ubuntu-latest]
     steps:
       - uses: actions/checkout@v4
diff --git a/tests/serialization_helper.py b/tests/serialization_helper.py
index d6b0b2cb0..c106620bf 100644
--- a/tests/serialization_helper.py
+++ b/tests/serialization_helper.py
@@ -2,6 +2,8 @@
 A module that simplifies assertions for json serialization
 """
 
+from __future__ import annotations
+
 from typing import Any, Dict, Optional, TypeVar
 
 from dictdiffer import diff  # type:ignore[import-not-found]
diff --git a/tests/test_zusatz_attribut.py b/tests/test_zusatz_attribut.py
index 753fbfb5d..095821278 100644
--- a/tests/test_zusatz_attribut.py
+++ b/tests/test_zusatz_attribut.py
@@ -1,3 +1,5 @@
+from __future__ import annotations
+
 import pytest
 
 from bo4e import Anrede, Organisationstyp, Titel