Skip to content

[codex] Update Python support to 3.14#69

Open
mtinning wants to merge 3 commits into
masterfrom
codex-python-3-14
Open

[codex] Update Python support to 3.14#69
mtinning wants to merge 3 commits into
masterfrom
codex-python-3-14

Conversation

@mtinning

@mtinning mtinning commented Jul 1, 2026

Copy link
Copy Markdown
Member

Summary

Updates PyQtToolkit to target Python 3.14, including a .python-version pin for Python 3.14.6, packaging metadata, tox, and CircleCI images.

Details

  • Sets python_requires to >=3.14.
  • Moves tox and CircleCI from Python 3.6 to Python 3.14.
  • Replaces the unmaintained licensify test dependency with an in-repo license header checker because licensify no longer builds on Python 3.14.
  • Patches bundled Versioneer config parsing for Python 3.14 compatibility.
  • Fixes test/runtime issues exposed by Python 3.14 and current pytest-qt/PyQt behavior.

Validation

  • QT_QPA_PLATFORM=offscreen .venv/bin/python -m pytest tests
  • .venv/bin/tox -e py314

@mtinning mtinning left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@mtinning
mtinning marked this pull request as ready for review July 23, 2026 14:02
Copilot AI review requested due to automatic review settings July 23, 2026 14:02

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates PyQtToolkit’s tooling and runtime/test code to target Python 3.14, including CI/tox environment updates, packaging metadata, and a replacement for the licensify dependency.

Changes:

  • Bumps supported Python version metadata/tooling to Python 3.14 (setup.py, tox, CircleCI, .python-version).
  • Replaces licensify with an in-repo license header checker script and updates tox to call it.
  • Adjusts runtime/test behavior for newer Python/Qt/pytest-qt behavior (Versioneer config parsing, ScriptRunner exec namespace, TaskRunner lifecycle).

Reviewed changes

Copilot reviewed 9 out of 10 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
versioneer.py Updates config parsing API usage for newer Python configparser.
tox.ini Switches tox env to py314 and replaces licensify with an in-repo license header check.
tests/services/test_task_runner.py Avoids creating duplicate QApplication instances and ensures TaskRunner threads are joined in teardown.
setup.py Updates python_requires and test/publish extras to align with Python 3.14 + packaging needs.
scripts/check_license_headers.py Adds a lightweight license-header validation script to replace licensify.
pyqttoolkit/services/task_runner.py Adds an explicit executor shutdown hook for test/short-lived app teardown.
pyqttoolkit/scripting/script_runner.py Uses a unified exec namespace to support mutual recursion among script-defined functions.
.python-version Pins local Python version to 3.14.6.
.gitignore Ensures .python-version is not ignored despite broad dotfile ignore.
.circleci/config.yml Updates CircleCI images and tox env invocation to Python 3.14.6 / py314.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread tox.ini
Comment on lines 7 to +9
commands=
; pytest tests --cov pyqttoolkit --ignore tests/services/test_task_runner.py
licensify LICENSE_SHORT --directory pyqttoolkit --files *.py --exclude _version.py --check
python scripts/check_license_headers.py
Comment on lines +75 to 79
# Use one namespace so functions defined by the script can
# resolve each other recursively through their globals.
namespace = self._globals(context)
namespace.update(context.locals)
#pylint: disable=exec-used
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