Files
Jens f4b4e0fdf6 enh: support Python 3.12 through 3.15 (#1235)
## ℹ️ Description

- Closes #1226
- Raise the supported Python range from 3.10–3.14 to 3.12–3.15 before
Python 3.10 reaches end of life.
- Modernize the codebase with behavior-preserving Python 3.11 and 3.12
idioms while keeping CLI, configuration, persistence, and browser
behavior stable.

## 📋 Changes Summary

- Set `requires-python` and the PDM lock target to `>=3.12,<3.16`.
- Test Python 3.12 and Python 3.15 prereleases across all supported CI
platforms.
- Build and publish native release artifacts and Docker images with
stable Python 3.12; keep Python 3.15 as compatibility-only coverage
until its final release.
- Update CodeQL, dependency updates, local Act configuration, Ruff,
mypy, BasedPyright, README, CONTRIBUTING, and AGENTS guidance.
- Enable Ruff's `UP` rules and adopt applicable standard-library
imports, `datetime.UTC`, built-in `TimeoutError`, PEP 695 type aliases
and generic syntax.
- Replace deprecated `shutil.rmtree(onerror=...)` usage with Python
3.12's `onexc` callback API and update its tests.
- Regenerate `pdm.lock` for the full supported interpreter range and
integrate the latest dependency updates from `main`.

### ⚙️ Type of Change

- [ ] 🐞 Bug fix (non-breaking change which fixes an issue)
- [ ]  New feature (adds new functionality without breaking existing
usage)
- [x] 💥 Breaking change (changes that might break existing user setups,
scripts, or configurations)

##  Checklist

- [x] I have reviewed my changes to ensure they meet the project's
standards.
- [x] I have tested my changes and ensured that all tests pass (`pdm run
test`).
- [x] I have formatted the code (`pdm run format`).
- [x] I have verified that linting passes (`pdm run lint`).
- [x] I have updated documentation where necessary.

Validation details:

- 1507 tests passed, 4 skipped
- 93.07% total coverage
- Generated schemas, default configuration, and README usage are up to
date
- Source CLI and PyInstaller binary smoke checks passed
- Local PyInstaller build and binary smoke checks passed on Python
3.12.14; Python 3.12/3.15 platform coverage is delegated to the updated
CI matrix

By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
  * Added support for Python 3.12 through 3.15.
  * Improved compatibility with modern Python typing and datetime APIs.

* **Bug Fixes**
  * Improved timeout handling and directory cleanup behavior.
  * Enhanced update-checking and web-scraping reliability.

* **Documentation**
* Updated installation and contribution requirements to Python
3.12–3.15.

* **Tests**
* Expanded coverage for update checks, timeout messages, and edge cases.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-14 11:56:12 +02:00
..
2023-10-15 18:00:45 +02:00