diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 68dce2b..b6619d1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -42,6 +42,8 @@ jobs: strategy: matrix: include: + - toxenv: "python3.8" + py: "3.8" - toxenv: "python3.9" py: "3.9" - toxenv: "python3.10" @@ -52,6 +54,8 @@ jobs: py: "3.12" - toxenv: "python3.13" py: "3.13" + - toxenv: "python3.14" + py: "3.14" steps: - uses: actions/checkout@v5 - name: Set up Python ${{ matrix.py }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4cff632..05bb28f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ related to the project. ## Python version support -Currently, the package supports Python versions 3.9 and above. Once a new Python version is released, we will aim to +Currently, the package supports Python versions 3.8 and above. Once a new Python version is released, we will aim to support it as soon as possible. If you encounter any issues with a new Python version, please create an issue in the repository. diff --git a/pyproject.toml b/pyproject.toml index 4222c5a..79fda8b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ description = "A query string encoding and decoding library for Python. Ported f readme = { file = "README.rst", content-type = "text/x-rst" } license = "BSD-3-Clause" license-files = ["LICENSE"] -requires-python = ">=3.9" +requires-python = ">=3.8" authors = [ { name = "Klemen Tusar", email = "techouse@gmail.com" }, ] @@ -25,11 +25,13 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", "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", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Internet :: WWW/HTTP", @@ -49,9 +51,9 @@ PayPal = "https://paypal.me/ktusar" [project.optional-dependencies] dev = [ - "pytest>=8.3.5", - "pytest-cov>=6.0.0", - "mypy>=1.15.0", + "pytest>=8.1.2", + "pytest-cov>=5.0.0", + "mypy>=1.10.0", "toml>=0.10.2", "tox", "black", @@ -78,7 +80,7 @@ include = ["src/qs_codec/py.typed"] [tool.black] line-length = 120 -target-version = ["py39", "py310", "py311", "py312", "py313"] +target-version = ["py38", "py39", "py310", "py311", "py312", "py313", "py314"] include = '\.pyi?$' exclude = ''' ( @@ -116,7 +118,7 @@ markers = [] [tool.mypy] mypy_path = "src" -python_version = "3.9" +python_version = "3.8" exclude = [ "tests", "docs", diff --git a/requirements_dev.txt b/requirements_dev.txt index 2d7de0d..337d7da 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,6 +1,6 @@ -pytest>=8.3.5 -pytest-cov>=6.0.0 -mypy>=1.15.0 +pytest>=8.1.2 +pytest-cov>=5.0.0 +mypy>=1.10.0 toml>=0.10.2 tox black diff --git a/src/qs_codec/decode.py b/src/qs_codec/decode.py index f84f9bb..42669bf 100644 --- a/src/qs_codec/decode.py +++ b/src/qs_codec/decode.py @@ -12,6 +12,8 @@ so that behavior across ports stays predictable and easy to verify with shared test vectors. """ +from __future__ import annotations + import re import typing as t from collections.abc import Mapping diff --git a/src/qs_codec/models/weak_wrapper.py b/src/qs_codec/models/weak_wrapper.py index 22ce668..45c2a8e 100644 --- a/src/qs_codec/models/weak_wrapper.py +++ b/src/qs_codec/models/weak_wrapper.py @@ -1,5 +1,7 @@ """Weakly wrap *any* object with identity equality and deep content hashing.""" +from __future__ import annotations + import reprlib import typing as t from threading import RLock diff --git a/tox.ini b/tox.ini index 98d53dc..d16ab94 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,13 @@ [tox] isolated_build = true envlist = + python3.8, python3.9, python3.10, python3.11, python3.12, python3.13, + python3.14, black, flake8, linters, @@ -13,11 +15,13 @@ skip_missing_interpreters = true [gh-actions] python = + 3.8: python3.8 3.9: python3.9 3.10: python3.10 3.11: python3.11 3.12: python3.12 3.13: python3.13 + 3.14: python3.14 [testenv] deps =