feat: support Python 3.14 and widen range to 3.11-3.14

Move the supported interpreter range to >=3.11,<3.15, dropping the EOL 3.10 floor and unblocking installs on 3.13/3.14.

- pyproject: requires-python ">=3.10,<3.13" -> ">=3.11,<3.15"
- update_checker: replace deprecated asyncio.get_event_loop() with asyncio.to_thread() (warns on 3.12+, slated for removal)
- test_compression: simplify _run() to plain asyncio.run()
- README: bump documented Python range to 3.11 - 3.14
- uv.lock: regenerate for the new interpreter floor
This commit is contained in:
imSp4rky
2026-06-20 15:25:42 -06:00
parent a9c677c349
commit a2f670b140
5 changed files with 711 additions and 294 deletions
+1 -1
View File
@@ -39,7 +39,7 @@ unshackle --help
External tools on your `PATH` (recommended versions):
- [Python](https://www.python.org/) - 3.10 - 3.12
- [Python](https://www.python.org/) - 3.11 - 3.14
- [uv](https://docs.astral.sh/uv/) - ≥ 0.5
- [FFmpeg](https://ffmpeg.org/) - ≥ 6.0
- [MKVToolNix](https://mkvtoolnix.download/) - ≥ 80
+1 -1
View File
@@ -7,7 +7,7 @@ name = "unshackle"
version = "5.2.0"
description = "Modular Movie, TV, and Music Archival Software."
authors = [{ name = "unshackle team" }]
requires-python = ">=3.10,<3.13"
requires-python = ">=3.11,<3.15"
readme = "README.md"
license = "GPL-3.0-only"
keywords = [
+1 -1
View File
@@ -20,7 +20,7 @@ class _FakeReq:
def _run(coro):
return asyncio.get_event_loop().run_until_complete(coro) if False else asyncio.run(coro)
return asyncio.run(coro)
def test_skips_when_client_does_not_accept_gzip() -> None:
+1 -2
View File
@@ -209,8 +209,7 @@ class UpdateChecker:
return None
try:
loop = asyncio.get_event_loop()
latest_version = await loop.run_in_executor(None, cls._fetch_latest_version)
latest_version = await asyncio.to_thread(cls._fetch_latest_version)
if latest_version and cls._compare_versions(current_version, latest_version):
return latest_version
Generated
+707 -289
View File
File diff suppressed because it is too large Load Diff