✨ Add Python 3.13 support and update dependencies
Extends Python version support to include 3.13 in CI workflows, tox environments, and documentation. Updates dependencies to ensure compatibility with the new Python version and resolves legacy workarounds for macOS GitHub Actions runners. Upgrades include: - `pyside6` to version 6.9.1 - `click` to version 8.2.1 - Other relevant dependency updates for compatibility. Re-enables `pyupgrade` pre-commit hook targeting Python 3.12+. Fixed binary creation for Intel macOS.
This commit is contained in:
@@ -29,7 +29,7 @@ jobs:
|
|||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.12"]
|
python-version: ["3.12", "3.13"]
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
steps:
|
steps:
|
||||||
- name: Check out
|
- name: Check out
|
||||||
|
|||||||
@@ -98,13 +98,7 @@ jobs:
|
|||||||
CMD_BUILD: >
|
CMD_BUILD: >
|
||||||
brew install create-dmg &&
|
brew install create-dmg &&
|
||||||
source $VENV &&
|
source $VENV &&
|
||||||
# Ugly workaround to allow AppleEvents access for the provisioner.
|
poetry run make gui-macos-dmg-intel APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
|
||||||
# See: https://github.com/actions/runner-images/issues/7531
|
|
||||||
sudo sqlite3 $HOME/Library/Application\ Support/com.apple.TCC/TCC.db "INSERT OR REPLACE INTO access VALUES('kTCCServiceAppleEvents','/usr/local/opt/runner/provisioner/provisioner',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552);" &&
|
|
||||||
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT OR REPLACE INTO access VALUES('kTCCServiceAppleEvents','/usr/local/opt/runner/provisioner/provisioner',1,2,3,1,NULL,NULL,0,'com.apple.finder',X'fade0c000000002c00000001000000060000000200000010636f6d2e6170706c652e66696e64657200000003',NULL,1592919552);" &&
|
|
||||||
echo killing XProtect...; sudo pkill -9 XProtect >/dev/null || true &&
|
|
||||||
echo waiting ...; while pgrep XProtect; do sleep 3; done &&
|
|
||||||
poetry run make gui-macos-dmg APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
|
|
||||||
cd dist &&
|
cd dist &&
|
||||||
zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_MACOS_X64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}}.dmg -x "*.DS_Store" &&
|
zip -r ${{needs.compute.outputs.OUT_NAME_FILE}}_${{needs.compute.outputs.ARCH_MACOS_X64}}${{needs.compute.outputs.ASSET_EXTENSION}} ${{needs.compute.outputs.OUT_NAME_FILE}}.dmg -x "*.DS_Store" &&
|
||||||
cd ..
|
cd ..
|
||||||
|
|||||||
@@ -31,14 +31,13 @@ repos:
|
|||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
exclude: LICENSE
|
exclude: LICENSE
|
||||||
|
|
||||||
# Due to UP007 and Typer this stays disabled: https://github.com/tiangolo/typer/issues/533
|
- repo: local
|
||||||
# - repo: local
|
hooks:
|
||||||
# hooks:
|
- id: pyupgrade
|
||||||
# - id: pyupgrade
|
name: pyupgrade
|
||||||
# name: pyupgrade
|
entry: poetry run pyupgrade --py312-plus
|
||||||
# entry: poetry run pyupgrade --py310-plus
|
types: [python]
|
||||||
# types: [python]
|
language: system
|
||||||
# language: system
|
|
||||||
|
|
||||||
# Disabled du to conflicts with black and I like the style of black more.
|
# Disabled du to conflicts with black and I like the style of black more.
|
||||||
# - repo: local
|
# - repo: local
|
||||||
|
|||||||
@@ -97,4 +97,14 @@ gui-macos-dmg: gui ## Package GUI in a *.dmg file
|
|||||||
"$(app_path_dist)/$(APP_NAME).dmg" \
|
"$(app_path_dist)/$(APP_NAME).dmg" \
|
||||||
"$(app_path_dist)/$(DMG_NAME)/"
|
"$(app_path_dist)/$(DMG_NAME)/"
|
||||||
|
|
||||||
|
.PHONY: gui-macos-dmg-intel
|
||||||
|
gui-macos-dmg-intel: gui ## Package GUI in a *.dmg file; Workaround for Intel Macs, since Apple Script permissions are not set correctly on GitHub Actiion Runner images
|
||||||
|
@poetry run mkdir -p $(app_path_dist)/dmg
|
||||||
|
@poetry run mv "$(app_path_dist)/$(APP_BUNDLE_NAME).app" "$(app_path_dist)/$(DMG_NAME)/$(APP_NAME).app"
|
||||||
|
@poetry run hdiutil create -volname "$(APP_NAME)" \
|
||||||
|
-srcfolder "$(app_path_dist)/$(DMG_NAME)/" \
|
||||||
|
-ov -format UDZO \
|
||||||
|
-fs APFS \
|
||||||
|
"$(app_path_dist)/$(APP_NAME).dmg"
|
||||||
|
|
||||||
.DEFAULT_GOAL := help
|
.DEFAULT_GOAL := help
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ If you like this projects and want to support it, feel free to buy me a coffee
|
|||||||
|
|
||||||
## 💻 Installation / Upgrade
|
## 💻 Installation / Upgrade
|
||||||
|
|
||||||
**Requirements**: Python == 3.12 (other versions might work but are not tested!)
|
**Requirements**: Python version 3.12 or 3.13 (other versions might work but are not tested!)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install --upgrade tidal-dl-ng
|
pip install --upgrade tidal-dl-ng
|
||||||
|
|||||||
Generated
+40
-36
@@ -350,14 +350,14 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "click"
|
name = "click"
|
||||||
version = "8.1.8"
|
version = "8.2.1"
|
||||||
description = "Composable command line interface toolkit"
|
description = "Composable command line interface toolkit"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.10"
|
||||||
groups = ["main", "dev", "docs"]
|
groups = ["main", "dev", "docs"]
|
||||||
files = [
|
files = [
|
||||||
{file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
|
{file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"},
|
||||||
{file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
|
{file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
@@ -1634,60 +1634,63 @@ dev = ["build", "flake8", "mypy", "pytest", "twine"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyside6"
|
name = "pyside6"
|
||||||
version = "6.8.0.1"
|
version = "6.9.1"
|
||||||
description = "Python bindings for the Qt cross-platform application and UI framework"
|
description = "Python bindings for the Qt cross-platform application and UI framework"
|
||||||
optional = true
|
optional = true
|
||||||
python-versions = "<3.13,>=3.9"
|
python-versions = "<3.14,>=3.9"
|
||||||
groups = ["main"]
|
groups = ["main"]
|
||||||
markers = "extra == \"gui\""
|
markers = "extra == \"gui\""
|
||||||
files = [
|
files = [
|
||||||
{file = "PySide6-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:a8f8ce89094e28a384821e5a4ba4ea952f3a02fe97a2b2ce5912eba4876554d0"},
|
{file = "PySide6-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:f843ef39970a2f79757810fffd7b8e93ac42a3de9ea62f2a03648cde57648aed"},
|
||||||
{file = "PySide6-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1730d80f52cf9fb04c5267e652ddb1b7857fba5302860392fc73bfb9ab81ef8e"},
|
{file = "PySide6-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:db44ac08b8f7ac1b421bc1c6a44200d03f08d80dc7b3f68dfdb1684f30f41c17"},
|
||||||
{file = "PySide6-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:6567a4bc1a6bf77c13ea1fbe128ff68379afb31e92795cb501a7e085d8bf744e"},
|
{file = "PySide6-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:531a6e67c429b045674d57fe9864b711eb59e4cded753c2640982e368fd468d1"},
|
||||||
{file = "PySide6-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:9eb918758b9ca838febceb972db2c651ff652b7e5a893d8e59a38a744579ccc4"},
|
{file = "PySide6-6.9.1-cp39-abi3-win_amd64.whl", hash = "sha256:c82dbb7d32bbdd465e01059174f71bddc97de152ab71bded3f1907c40f9a5f16"},
|
||||||
|
{file = "PySide6-6.9.1-cp39-abi3-win_arm64.whl", hash = "sha256:1525d63dc6dc425b8c2dc5bc01a8cb1d67530401449f3a3490c09a14c095b9f9"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
PySide6-Addons = "6.8.0.1"
|
PySide6-Addons = "6.9.1"
|
||||||
PySide6-Essentials = "6.8.0.1"
|
PySide6-Essentials = "6.9.1"
|
||||||
shiboken6 = "6.8.0.1"
|
shiboken6 = "6.9.1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyside6-addons"
|
name = "pyside6-addons"
|
||||||
version = "6.8.0.1"
|
version = "6.9.1"
|
||||||
description = "Python bindings for the Qt cross-platform application and UI framework (Addons)"
|
description = "Python bindings for the Qt cross-platform application and UI framework (Addons)"
|
||||||
optional = true
|
optional = true
|
||||||
python-versions = "<3.13,>=3.9"
|
python-versions = "<3.14,>=3.9"
|
||||||
groups = ["main"]
|
groups = ["main"]
|
||||||
markers = "extra == \"gui\""
|
markers = "extra == \"gui\""
|
||||||
files = [
|
files = [
|
||||||
{file = "PySide6_Addons-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:db3622c257920e0d20de2f80ade6c064a48ee1e0c9a1cfe1f1d3bc2685c93996"},
|
{file = "PySide6_Addons-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:7be0708fa89715c282541fca47e2ba97c0c8d2886e0236ef994b2dd8f52aacdd"},
|
||||||
{file = "PySide6_Addons-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4cf9aebd26d908de4cbd5c7274f432370f8b0dc8dc7b748a6e6ade035fe28f28"},
|
{file = "PySide6_Addons-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:da7869b02e3599d26546fad582db4656060786bc5ec8ece5ec9ee8aa8b42371c"},
|
||||||
{file = "PySide6_Addons-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:ed8f73e41b24ae6ea5ebb9dca1d4d6a6ddf06cffda63fa929d5e180ea9ac3cdd"},
|
{file = "PySide6_Addons-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:53fd08c8152b6ba8c435458afd189835ba905793a5077a2bb0b1b11222b375d4"},
|
||||||
{file = "PySide6_Addons-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:066f0b6555f3351263a8d4936da5a95bd1b3e9bc83881f9f477d9146ccd3282f"},
|
{file = "PySide6_Addons-6.9.1-cp39-abi3-win_amd64.whl", hash = "sha256:cd93a3a5e3886cd958f3a5acc7c061c24f10a394ce9f4ce657ac394544ca7ec2"},
|
||||||
|
{file = "PySide6_Addons-6.9.1-cp39-abi3-win_arm64.whl", hash = "sha256:4f589631bdceb518080ae9c9fa288e64f092cd5bebe25adc8ad89e8eadd4db29"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
PySide6-Essentials = "6.8.0.1"
|
PySide6-Essentials = "6.9.1"
|
||||||
shiboken6 = "6.8.0.1"
|
shiboken6 = "6.9.1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyside6-essentials"
|
name = "pyside6-essentials"
|
||||||
version = "6.8.0.1"
|
version = "6.9.1"
|
||||||
description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)"
|
description = "Python bindings for the Qt cross-platform application and UI framework (Essentials)"
|
||||||
optional = true
|
optional = true
|
||||||
python-versions = "<3.13,>=3.9"
|
python-versions = "<3.14,>=3.9"
|
||||||
groups = ["main"]
|
groups = ["main"]
|
||||||
markers = "extra == \"gui\""
|
markers = "extra == \"gui\""
|
||||||
files = [
|
files = [
|
||||||
{file = "PySide6_Essentials-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:2ae533a318b563ef7b73b1d7de3254e966423215589329207e45ee9adcb2e83c"},
|
{file = "PySide6_Essentials-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:ed43435a70e018e1c22efcaf34a9430b83cfcad716dba661b03de21c13322fab"},
|
||||||
{file = "PySide6_Essentials-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:327a0f08cb1ee5af7f7ed81527bbdb3058e2a39a300efcc806e0289b50192f98"},
|
{file = "PySide6_Essentials-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e5da48883f006c6206ef85874db74ddebcdf69b0281bd4f1642b1c5ac1d54aea"},
|
||||||
{file = "PySide6_Essentials-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:6f573331261889992d450145c0f3a9a317e798b63c1318cc271422c0a74b2298"},
|
{file = "PySide6_Essentials-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:e46a2801c9c6098025515fd0af6c594b9e9c951842f68b8f6f3da9858b9b26c2"},
|
||||||
{file = "PySide6_Essentials-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:800d26aa51003b41c73e9c4cd4fd6c96fe91fc21f9862c3d459a7e2209f9475f"},
|
{file = "PySide6_Essentials-6.9.1-cp39-abi3-win_amd64.whl", hash = "sha256:ad1ac94011492dba33051bc33db1c76a7d6f815a81c01422cb6220273b369145"},
|
||||||
|
{file = "PySide6_Essentials-6.9.1-cp39-abi3-win_arm64.whl", hash = "sha256:35c2c2bb4a88db74d11e638cf917524ff35785883f10b439ead07960a5733aa4"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
shiboken6 = "6.8.0.1"
|
shiboken6 = "6.9.1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pytest"
|
name = "pytest"
|
||||||
@@ -1957,17 +1960,18 @@ files = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shiboken6"
|
name = "shiboken6"
|
||||||
version = "6.8.0.1"
|
version = "6.9.1"
|
||||||
description = "Python/C++ bindings helper module"
|
description = "Python/C++ bindings helper module"
|
||||||
optional = true
|
optional = true
|
||||||
python-versions = "<3.13,>=3.9"
|
python-versions = "<3.14,>=3.9"
|
||||||
groups = ["main"]
|
groups = ["main"]
|
||||||
markers = "extra == \"gui\""
|
markers = "extra == \"gui\""
|
||||||
files = [
|
files = [
|
||||||
{file = "shiboken6-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:99cbb8d53bd2abcb61717a675bb3c1d7513868298b56cdfcae8aa27ed367577a"},
|
{file = "shiboken6-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:40e92afc88da06b5100c56b761e59837ff282166e9531268f3d910b6128e621e"},
|
||||||
{file = "shiboken6-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:77b6e2eae8d48fe32a058e234778c42642eca1755de8b793e2d57857d7d037cf"},
|
{file = "shiboken6-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:efcdfa8655d34aaf8d7a0c7724def3440bd46db02f5ad3b1785db5f6ccb0a8ff"},
|
||||||
{file = "shiboken6-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:eb2db6f0cac42f10dc5b4bcf4ab5a8e079acb870877d0cb3d95cac80c20e4554"},
|
{file = "shiboken6-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:efcf75d48a29ae072d0bf54b3cd5a59ae91bb6b3ab7459e17c769355486c2e0b"},
|
||||||
{file = "shiboken6-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:3f2601c0db8d1e860a2a1265936e616361b073360eb15153806638fbc3b7ff26"},
|
{file = "shiboken6-6.9.1-cp39-abi3-win_amd64.whl", hash = "sha256:209ccf02c135bd70321143dcbc5023ae0c056aa4850a845955dd2f9b2ff280a9"},
|
||||||
|
{file = "shiboken6-6.9.1-cp39-abi3-win_arm64.whl", hash = "sha256:2a39997ce275ced7853defc89d3a1f19a11c90991ac6eef3435a69bb0b7ff1de"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2337,5 +2341,5 @@ gui = ["pyqtdarktheme-fork", "pyside6"]
|
|||||||
|
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.1"
|
lock-version = "2.1"
|
||||||
python-versions = ">=3.12,<3.13"
|
python-versions = ">=3.12,<3.14"
|
||||||
content-hash = "57c0352221bedbee53a72958d37b1f6b0efb1ce6272d9d77a1c2c4beaa6b1435"
|
content-hash = "018ac8314b5ad902bf03eb269b201b58f97ab112b99ea3046078aa93a61479fb"
|
||||||
|
|||||||
+5
-4
@@ -10,8 +10,9 @@ classifiers = [
|
|||||||
"License :: OSI Approved :: GNU Affero General Public License v3",
|
"License :: OSI Approved :: GNU Affero General Public License v3",
|
||||||
"Programming Language :: Python :: 3",
|
"Programming Language :: Python :: 3",
|
||||||
"Programming Language :: Python :: 3.12",
|
"Programming Language :: Python :: 3.12",
|
||||||
|
"Programming Language :: Python :: 3.13",
|
||||||
]
|
]
|
||||||
requires-python = ">=3.12,<3.13"
|
requires-python = ">=3.12,<3.14"
|
||||||
dynamic = ["dependencies"]
|
dynamic = ["dependencies"]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
@@ -34,8 +35,8 @@ dataclasses-json = "^0.6.7"
|
|||||||
pathvalidate = "^3.3.1"
|
pathvalidate = "^3.3.1"
|
||||||
m3u8 = "^6.0.0"
|
m3u8 = "^6.0.0"
|
||||||
coloredlogs = "^15.0.1"
|
coloredlogs = "^15.0.1"
|
||||||
pyside6 = { version = "6.8.0.1", optional = true }
|
pyside6 = { version = "6.9.1", optional = true }
|
||||||
pyqtdarktheme-fork = { version = "^2.3.2", optional = true }
|
pyqtdarktheme-fork = { version = "^2.3.4", optional = true }
|
||||||
mpegdash = "^0.4.0"
|
mpegdash = "^0.4.0"
|
||||||
rich = "^14.0.0"
|
rich = "^14.0.0"
|
||||||
toml = "^0.10.2"
|
toml = "^0.10.2"
|
||||||
@@ -140,7 +141,7 @@ ignore = [
|
|||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
# https://github.com/psf/black
|
# https://github.com/psf/black
|
||||||
target-version = ["py312"]
|
target-version = ["py312", "py313"]
|
||||||
line-length = 120
|
line-length = 120
|
||||||
color = true
|
color = true
|
||||||
preview = true
|
preview = true
|
||||||
|
|||||||
Reference in New Issue
Block a user