From 40d7e86f87bf0e4ec23a8dbc613b3509d563e097 Mon Sep 17 00:00:00 2001 From: Kurt McKee Date: Fri, 20 Dec 2024 10:15:12 -0600 Subject: [PATCH] Update Python support, and dependency/tool versions --- .github/workflows/test.yaml | 14 +++++++------- .pre-commit-config.yaml | 12 ++++++------ .readthedocs.yaml | 4 ++-- README.rst | 2 +- .../20241220_101336_kurtmckee_updates.rst | 10 ++++++++++ docs/index.rst | 2 +- pyproject.toml | 4 ++-- requirements/docs/requirements.txt | 18 +++++++++--------- requirements/mypy/requirements.txt | 8 ++++---- requirements/test/requirements.txt | 14 +++++++------- tox.ini | 16 +++++++++------- 11 files changed, 58 insertions(+), 46 deletions(-) create mode 100644 changelog.d/20241220_101336_kurtmckee_updates.rst diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 06fce03..3f08f08 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -36,34 +36,34 @@ jobs: - "3.10" - "3.11" - "3.12" - cpython-beta: "3.13" + - "3.13" + cpython-beta: "3.14" pypys: - - "3.9" - "3.10" tox-post-environments: - "py3.9-minimum_dependencies" - "py3.9-http-lxml" - - "py3.12-http-lxml" + - "py3.13-http-lxml" # Test lowest and highest versions on Mac. - name: "macOS" runner: "macos-latest" cpythons: - "3.9" - - "3.12" + - "3.13" tox-environments: - "py3.9" - - "py3.12" + - "py3.13" # Test lowest and highest versions on Windows. - name: "Windows" runner: "windows-latest" cpythons: - "3.9" - - "3.12" + - "3.13" tox-environments: - "py3.9" - - "py3.12" + - "py3.13" # Check type annotations and documentation. - name: "Quality" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b10065b..c7ec7f2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: - id: "check-useless-excludes" - repo: "https://github.com/pre-commit/pre-commit-hooks" - rev: "v4.6.0" + rev: "v5.0.0" hooks: - id: "check-added-large-files" - id: "check-merge-conflict" @@ -23,7 +23,7 @@ repos: - id: "trailing-whitespace" - repo: "https://github.com/asottile/pyupgrade" - rev: "v3.17.0" + rev: "v3.19.1" hooks: - id: "pyupgrade" name: "Enforce Python 3.9+ idioms" @@ -31,7 +31,7 @@ repos: - "--py39-plus" - repo: "https://github.com/psf/black-pre-commit-mirror" - rev: "24.8.0" + rev: "24.10.0" hooks: - id: "black" @@ -45,7 +45,7 @@ repos: hooks: - id: "flake8" additional_dependencies: - - "flake8-bugbear==24.8.19" + - "flake8-bugbear==24.12.12" - repo: "https://github.com/editorconfig-checker/editorconfig-checker.python" rev: "3.0.3" @@ -53,14 +53,14 @@ repos: - id: "editorconfig-checker" - repo: "https://github.com/python-jsonschema/check-jsonschema" - rev: "0.29.2" + rev: "0.30.0" hooks: - id: "check-dependabot" - id: "check-github-workflows" - id: "check-readthedocs" - repo: "https://github.com/rhysd/actionlint" - rev: "v1.7.1" + rev: "v1.7.4" hooks: - id: "actionlint" diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 5bb1862..036bfbe 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -3,9 +3,9 @@ version: 2 build: - os: "ubuntu-22.04" + os: "ubuntu-24.04" tools: - python: "3.12" + python: "3.13" python: install: diff --git a/README.rst b/README.rst index ef03070..e708786 100644 --- a/README.rst +++ b/README.rst @@ -8,7 +8,7 @@ you've come to the right place! listparser makes it easy to parse and use subscription lists in multiple formats. It supports OPML, RDF+FOAF, and the iGoogle exported settings format, -and runs on Python 3.9+ and on PyPy 3.9+. +and runs on Python 3.9+ and on PyPy 3.10. diff --git a/changelog.d/20241220_101336_kurtmckee_updates.rst b/changelog.d/20241220_101336_kurtmckee_updates.rst new file mode 100644 index 0000000..a29a2e7 --- /dev/null +++ b/changelog.d/20241220_101336_kurtmckee_updates.rst @@ -0,0 +1,10 @@ +Python support +-------------- + +* Test against early Python 3.14 releases. +* Drop support for PyPy 3.9. + +Security +-------- + +* Update the minimum requests version to 2.32.0. diff --git a/docs/index.rst b/docs/index.rst index 96563c9..79083ef 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,7 +12,7 @@ you've come to the right place! listparser makes it easy to parse and use subscription lists in multiple formats. It supports OPML, RDF+FOAF, and the iGoogle exported settings format, -and runs on Python 3.9+ and on PyPy 3.9+. +and runs on Python 3.9+ and on PyPy 3.10. Contents diff --git a/pyproject.toml b/pyproject.toml index cefb3f7..e749eee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,8 +18,8 @@ classifiers = [ [tool.poetry.dependencies] python = ">=3.9" # The dependencies here must match the minimums tested in `tox.ini`. -requests = {version = "^2.25.1", optional = true} -lxml = {version = ">=4.6.2,<6.0.0", optional = true} +requests = {version = ">=2.32.0,<3", optional = true} +lxml = {version = ">=4.6.2,<6", optional = true} [tool.poetry.extras] diff --git a/requirements/docs/requirements.txt b/requirements/docs/requirements.txt index 2720be6..782ae35 100644 --- a/requirements/docs/requirements.txt +++ b/requirements/docs/requirements.txt @@ -1,15 +1,15 @@ alabaster==0.7.16 ; python_version >= "3.9" babel==2.16.0 ; python_version >= "3.9" -certifi==2024.8.30 ; python_version >= "3.9" -charset-normalizer==3.3.2 ; python_version >= "3.9" +certifi==2024.12.14 ; python_version >= "3.9" +charset-normalizer==3.4.0 ; python_version >= "3.9" colorama==0.4.6 ; python_version >= "3.9" and sys_platform == "win32" docutils==0.21.2 ; python_version >= "3.9" -idna==3.8 ; python_version >= "3.9" +idna==3.10 ; python_version >= "3.9" imagesize==1.4.1 ; python_version >= "3.9" -importlib-metadata==8.4.0 ; python_version < "3.10" and python_version >= "3.9" +importlib-metadata==8.5.0 ; python_version < "3.10" and python_version >= "3.9" jinja2==3.1.4 ; python_version >= "3.9" -markupsafe==2.1.5 ; python_version >= "3.9" -packaging==24.1 ; python_version >= "3.9" +markupsafe==3.0.2 ; python_version >= "3.9" +packaging==24.2 ; python_version >= "3.9" pygments==2.18.0 ; python_version >= "3.9" requests==2.32.3 ; python_version >= "3.9" snowballstemmer==2.2.0 ; python_version >= "3.9" @@ -20,6 +20,6 @@ sphinxcontrib-htmlhelp==2.1.0 ; python_version >= "3.9" sphinxcontrib-jsmath==1.0.1 ; python_version >= "3.9" sphinxcontrib-qthelp==2.0.0 ; python_version >= "3.9" sphinxcontrib-serializinghtml==2.0.0 ; python_version >= "3.9" -tomli==2.0.1 ; python_version < "3.11" and python_version >= "3.9" -urllib3==2.2.2 ; python_version >= "3.9" -zipp==3.20.1 ; python_version < "3.10" and python_version >= "3.9" +tomli==2.2.1 ; python_version < "3.11" and python_version >= "3.9" +urllib3==2.2.3 ; python_version >= "3.9" +zipp==3.21.0 ; python_version < "3.10" and python_version >= "3.9" diff --git a/requirements/mypy/requirements.txt b/requirements/mypy/requirements.txt index a480dc5..44c8e5e 100644 --- a/requirements/mypy/requirements.txt +++ b/requirements/mypy/requirements.txt @@ -1,8 +1,8 @@ lxml-stubs==0.5.1 ; python_version >= "3.9" mypy-extensions==1.0.0 ; python_version >= "3.9" -mypy==1.11.2 ; python_version >= "3.9" -tomli==2.0.1 ; python_version < "3.11" and python_version >= "3.9" -types-requests==2.32.0.20240712 ; python_version >= "3.9" +mypy==1.14.0 ; python_version >= "3.9" +tomli==2.2.1 ; python_version < "3.11" and python_version >= "3.9" +types-requests==2.32.0.20241016 ; python_version >= "3.9" types-toml==0.10.8.20240310 ; python_version >= "3.9" typing-extensions==4.12.2 ; python_version >= "3.9" -urllib3==2.2.2 ; python_version >= "3.9" +urllib3==2.2.3 ; python_version >= "3.9" diff --git a/requirements/test/requirements.txt b/requirements/test/requirements.txt index fbf9850..cf25fab 100644 --- a/requirements/test/requirements.txt +++ b/requirements/test/requirements.txt @@ -1,11 +1,11 @@ colorama==0.4.6 ; python_version >= "3.9" and sys_platform == "win32" -coverage[toml]==7.6.1 ; python_version >= "3.9" +coverage[toml]==7.6.9 ; python_version >= "3.9" exceptiongroup==1.2.2 ; python_version < "3.11" and python_version >= "3.9" -importlib-metadata==8.4.0 ; python_version < "3.10" and python_version >= "3.9" +importlib-metadata==8.5.0 ; python_version < "3.10" and python_version >= "3.9" iniconfig==2.0.0 ; python_version >= "3.9" -packaging==24.1 ; python_version >= "3.9" +packaging==24.2 ; python_version >= "3.9" pluggy==1.5.0 ; python_version >= "3.9" -pytest-randomly==3.15.0 ; python_version >= "3.9" -pytest==8.3.2 ; python_version >= "3.9" -tomli==2.0.1 ; python_full_version <= "3.11.0a6" and python_version >= "3.9" -zipp==3.20.1 ; python_version < "3.10" and python_version >= "3.9" +pytest-randomly==3.16.0 ; python_version >= "3.9" +pytest==8.3.4 ; python_version >= "3.9" +tomli==2.2.1 ; python_full_version <= "3.11.0a6" and python_version >= "3.9" +zipp==3.21.0 ; python_version < "3.10" and python_version >= "3.9" diff --git a/tox.ini b/tox.ini index 1e93a6c..21d3717 100644 --- a/tox.ini +++ b/tox.ini @@ -2,9 +2,9 @@ min_version = 4.3.5 envlist = coverage_erase - py{3.13, 3.12, 3.11, 3.10, 3.9}{-http-lxml,} + py{3.14, 3.13, 3.12, 3.11, 3.10, 3.9}{-http-lxml,} + pypy{3.10}{-http,} py3.9-minimum_dependencies - pypy{3.10, 3.9}{-http,} coverage_report mypy docs @@ -17,11 +17,12 @@ package = wheel wheel_build_env = build_wheel depends = - py{3.13, 3.12, 3.11, 3.10, 3.9, py3.10, py3.9}{-http,}{-lxml,}{-minimum_dependencies,}: coverage_erase + py{3.14, 3.13, 3.12, 3.11, 3.10, 3.9}{-http,}{-lxml,}{-minimum_dependencies,}: coverage_erase + pypy{3.10}{-http,}: coverage_erase deps = -rrequirements/test/requirements.txt # The dependencies here must match the minimums declared in `pyproject.toml`. - minimum_dependencies: requests==2.25.1 + minimum_dependencies: requests==2.32.0 minimum_dependencies: lxml==4.6.2 extras = http: http @@ -36,7 +37,7 @@ commands = mypy [testenv:docs] -base_python = py3.12 +base_python = py3.13 skipsdist = true skip_install = true deps = -rrequirements/docs/requirements.txt @@ -52,7 +53,8 @@ commands = coverage erase [testenv:coverage_report] depends = - py{3.13, 3.12, 3.11, 3.10, 3.9, py3.10, py3.9}{-http,}{-lxml,}{-minimum_dependencies,} + py{3.14, 3.13, 3.12, 3.11, 3.10, 3.9}{-http,}{-lxml,}{-minimum_dependencies,} + pypy{3.10}{-http,} skipsdist = true skip_install = true deps = -rrequirements/test/requirements.txt @@ -63,7 +65,7 @@ commands = coverage report [testenv:update] -base_python = py3.12 +base_python = py3.13 recreate = true description = Update tool dependency versions skip_install = true