Skip to content

Add Python 3.14 support - #17

Merged
miguelgf merged 1 commit into
masterfrom
add-python-3.14-support
Oct 15, 2026
Merged

miguelgf merged 1 commit into
masterfrom
add-python-3.14-support

Conversation

@miguelgf

Copy link
Copy Markdown
Contributor

Summary

  • Add Programming Language :: Python :: 3.14 classifier
  • Add 3.14 to the CI test matrix
  • Set UV_PYTHON: ${{ matrix.python-version }} on the test job — previously uv python install X didn't pin uv sync/uv run to that interpreter, so a matrix entry could silently test a different version
  • List 3.14 as supported in CONTRIBUTING.md

No library code changes were needed.

Verification

  • Full test suite (88 tests, incl. uvloop) passes on CPython 3.14.3 with -W error::DeprecationWarning
  • No usage of APIs deprecated in 3.14 (event loop policies, asyncio.iscoroutinefunction, child watchers)
  • Probed the patched stdlib functions on 3.13 vs 3.14: none gained a native audit event in 3.14, so there's no double-counting risk like the time.sleep case in 3.13 (time.sleep is double-counted on Python 3.13+ — it already has a native audit event #11)

🤖 Generated with Claude Code

Add the 3.14 classifier and CI matrix entry, and pin uv to the matrix
Python via UV_PYTHON so each job actually tests the version it names.
@adriaardila
adriaardila self-requested a review October 15, 2026 09:18
@adriaardila

Copy link
Copy Markdown
Collaborator

Reviewed and verified independently; LGTM. One correction to the description so it doesn't mislead later readers.

The UV_PYTHON motivation is not what happened on master. The description says uv python install X didn't pin uv sync/uv run, so a matrix entry "could silently test a different version". The pre-PR master runs show every job already on its own interpreter:

job uv sync pytest banner
3.10 Using CPython 3.10.22 Python 3.10.22
3.11 Using CPython 3.11.17 Python 3.11.17
3.12 Using CPython 3.12.15 Python 3.12.15
3.13 Using CPython 3.13.16 Python 3.13.16

Same result in both https://github.com/Feverup/aiocop/actions/runs/38709174746 and https://github.com/Feverup/aiocop/actions/runs/38709119601. On a fresh runner the just-installed managed interpreter is the only managed candidate and uv prefers managed over system, so it was picked every time. Keeping UV_PYTHON is still good since it makes the pin explicit instead of relying on that, but the old matrix results were valid.

What I checked beyond CI:

  • The 3.14 job really ran on CPython 3.14.8 (uv sync line and pytest banner), 88 passed, uvloop 0.22.1 wheel installed.
  • Audit-event probe: called every function in FUNCTIONS_TO_PATCH_DICT on local CPython 3.13.7 and 3.14.3 with a plain sys.addaudithook and no aiocop. Both versions emit the identical native set. Only time.sleep matches a patched event name, and it is already guarded. Socket methods emit socket.connect, socket.bind, socket.sendto, socket.sendmsg, which differ from the socket.socket.* patched names, so no collision. SSL methods emit nothing.
  • Suite passes locally on 3.14.3 with -W error::DeprecationWarning -W error::PendingDeprecationWarning.

@miguelgf
miguelgf merged commit 6e57a2c into master Oct 15, 2026
5 checks passed
@adriaardila adriaardila mentioned this pull request Oct 15, 2026
adriaardila added a commit that referenced this pull request Oct 15, 2026
Release the Python 3.14 support added in #17: classifier, CI matrix entry
and UV_PYTHON pinning. No library changes since 1.2.0.

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
adriaardila added a commit that referenced this pull request Oct 15, 2026
Release the Python 3.14 support added in #17: classifier, CI matrix entry
and UV_PYTHON pinning. No library changes since 1.2.0.
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.

2 participants