Skip to content

chore: drop Python 3.9 and update dependencies to resolve security alerts - #13

Open
rsiddle wants to merge 3 commits into
mainfrom
chore/security-dependency-updates
Open

rsiddle wants to merge 3 commits into
mainfrom
chore/security-dependency-updates

Conversation

@rsiddle

@rsiddle rsiddle commented Sep 17, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Resolves all open Dependabot alerts on main and releases as 1.3.0.

  • Drops Python 3.9 (EOL Oct 2025). The fixed versions of aiohttp, urllib3, requests, python-dotenv, pytest, vcrpy, filelock and pymdown-extensions all require Python 3.10 or later. CI, publish, .python-version, classifiers and README updated.
  • Requires aiohttp ^3.14.3, so installs can no longer pick up a vulnerable version.
  • Regenerates poetry.lock, so every flagged package is now on a fixed version.
  • Moves jinja2 to the docs group. The library never imports it, so installs no longer carry it.
  • pytest 9 / pytest-asyncio 1.x: the custom event_loop fixture is no longer supported, so the session-wide loop is now set with asyncio_default_fixture_loop_scope / asyncio_default_test_loop_scope.

Testing

  • ruff format --check, ruff check and mypy pass.
  • Integration tests with a live key: 28 passed, 7 failed. These are the same 7 failures that already happen on main (3 keyword recordings with out-of-date dates, 4 content-blocking URL comparisons).
  • Read-only smoke test against a live site: 18/19 endpoints OK. get_site_moves returns 404 on main as well.

…erts

Resolves all 58 open Dependabot alerts. The patched releases of aiohttp,
urllib3, requests, python-dotenv, pytest, vcrpy, filelock and
pymdown-extensions require Python >=3.10, and Python 3.9 reached end of
life in October 2025, so the minimum supported version is now 3.10.

- require aiohttp ^3.14.3 so installs cannot resolve a vulnerable release
- require jinja2 ^3.1.6
- bump pytest to ^9.0.3 and pytest-asyncio to ^1.0.0
- regenerate poetry.lock
- run CI and publish workflows on Python 3.10

pytest-asyncio 1.x no longer honours a redefined event_loop fixture, so
the session-scoped loop is now configured via
asyncio_default_fixture_loop_scope and asyncio_default_test_loop_scope.
The library never imports jinja2; it was added as a runtime dependency
to raise the floor of the version mkdocs pulls in, which made every
install carry it. The ^3.1.6 floor now lives in the docs group.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant