summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Honz <exislow+github@gmail.com>2025-07-01 08:04:08 +0200
committerRobert Honz <exislow+github@gmail.com>2025-07-01 08:04:21 +0200
commitd3164f48defcfe93ae04bd02e1b3ab7f4a72e632 (patch)
treeb6c56bd06103c4120ec933cee96ce501598e46ba
parente35f5eef78d7e65d240046dfad8fca17f303950b (diff)
downloadtidal-dl-ng-d3164f48defcfe93ae04bd02e1b3ab7f4a72e632.tar.gz
✨ 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.
-rw-r--r--.github/workflows/master.yml2
-rw-r--r--.github/workflows/on-release-master.yml8
-rw-r--r--.pre-commit-config.yaml15
-rw-r--r--Makefile10
-rw-r--r--README.md2
-rw-r--r--poetry.lock76
-rw-r--r--pyproject.toml9
-rw-r--r--tox.ini3
8 files changed, 67 insertions, 58 deletions
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 44e02e9..c86f452 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -29,7 +29,7 @@ jobs:
runs-on: ubuntu-24.04
strategy:
matrix:
- python-version: ["3.12"]
+ python-version: ["3.12", "3.13"]
fail-fast: false
steps:
- name: Check out
diff --git a/.github/workflows/on-release-master.yml b/.github/workflows/on-release-master.yml
index 8464bc3..44cc708 100644
--- a/.github/workflows/on-release-master.yml
+++ b/.github/workflows/on-release-master.yml
@@ -98,13 +98,7 @@ jobs:
CMD_BUILD: >
brew install create-dmg &&
source $VENV &&
- # Ugly workaround to allow AppleEvents access for the provisioner.
- # 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}} &&
+ poetry run make gui-macos-dmg-intel APP_NAME=${{needs.compute.outputs.OUT_NAME_FILE}} &&
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" &&
cd ..
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f0cb767..feedfc0 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -31,14 +31,13 @@ repos:
- id: end-of-file-fixer
exclude: LICENSE
- # Due to UP007 and Typer this stays disabled: https://github.com/tiangolo/typer/issues/533
- # - repo: local
- # hooks:
- # - id: pyupgrade
- # name: pyupgrade
- # entry: poetry run pyupgrade --py310-plus
- # types: [python]
- # language: system
+ - repo: local
+ hooks:
+ - id: pyupgrade
+ name: pyupgrade
+ entry: poetry run pyupgrade --py312-plus
+ types: [python]
+ language: system
# Disabled du to conflicts with black and I like the style of black more.
# - repo: local
diff --git a/Makefile b/Makefile
index 0daa130..d61624b 100644
--- a/Makefile
+++ b/Makefile
@@ -97,4 +97,14 @@ gui-macos-dmg: gui ## Package GUI in a *.dmg file
"$(app_path_dist)/$(APP_NAME).dmg" \
"$(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
diff --git a/README.md b/README.md
index c1916ed..d3f0a10 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ If you like this projects and want to support it, feel free to buy me a coffee ð
## 💻 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
pip install --upgrade tidal-dl-ng
diff --git a/poetry.lock b/poetry.lock
index 2715671..ad9f907 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -350,14 +350,14 @@ files = [
[[package]]
name = "click"
-version = "8.1.8"
+version = "8.2.1"
description = "Composable command line interface toolkit"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.10"
groups = ["main", "dev", "docs"]
files = [
- {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"},
- {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"},
+ {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"},
+ {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"},
]
[package.dependencies]
@@ -1634,60 +1634,63 @@ dev = ["build", "flake8", "mypy", "pytest", "twine"]
[[package]]
name = "pyside6"
-version = "6.8.0.1"
+version = "6.9.1"
description = "Python bindings for the Qt cross-platform application and UI framework"
optional = true
-python-versions = "<3.13,>=3.9"
+python-versions = "<3.14,>=3.9"
groups = ["main"]
markers = "extra == \"gui\""
files = [
- {file = "PySide6-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:a8f8ce89094e28a384821e5a4ba4ea952f3a02fe97a2b2ce5912eba4876554d0"},
- {file = "PySide6-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1730d80f52cf9fb04c5267e652ddb1b7857fba5302860392fc73bfb9ab81ef8e"},
- {file = "PySide6-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:6567a4bc1a6bf77c13ea1fbe128ff68379afb31e92795cb501a7e085d8bf744e"},
- {file = "PySide6-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:9eb918758b9ca838febceb972db2c651ff652b7e5a893d8e59a38a744579ccc4"},
+ {file = "PySide6-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:f843ef39970a2f79757810fffd7b8e93ac42a3de9ea62f2a03648cde57648aed"},
+ {file = "PySide6-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:db44ac08b8f7ac1b421bc1c6a44200d03f08d80dc7b3f68dfdb1684f30f41c17"},
+ {file = "PySide6-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:531a6e67c429b045674d57fe9864b711eb59e4cded753c2640982e368fd468d1"},
+ {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]
-PySide6-Addons = "6.8.0.1"
-PySide6-Essentials = "6.8.0.1"
-shiboken6 = "6.8.0.1"
+PySide6-Addons = "6.9.1"
+PySide6-Essentials = "6.9.1"
+shiboken6 = "6.9.1"
[[package]]
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)"
optional = true
-python-versions = "<3.13,>=3.9"
+python-versions = "<3.14,>=3.9"
groups = ["main"]
markers = "extra == \"gui\""
files = [
- {file = "PySide6_Addons-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:db3622c257920e0d20de2f80ade6c064a48ee1e0c9a1cfe1f1d3bc2685c93996"},
- {file = "PySide6_Addons-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4cf9aebd26d908de4cbd5c7274f432370f8b0dc8dc7b748a6e6ade035fe28f28"},
- {file = "PySide6_Addons-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:ed8f73e41b24ae6ea5ebb9dca1d4d6a6ddf06cffda63fa929d5e180ea9ac3cdd"},
- {file = "PySide6_Addons-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:066f0b6555f3351263a8d4936da5a95bd1b3e9bc83881f9f477d9146ccd3282f"},
+ {file = "PySide6_Addons-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:7be0708fa89715c282541fca47e2ba97c0c8d2886e0236ef994b2dd8f52aacdd"},
+ {file = "PySide6_Addons-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:da7869b02e3599d26546fad582db4656060786bc5ec8ece5ec9ee8aa8b42371c"},
+ {file = "PySide6_Addons-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:53fd08c8152b6ba8c435458afd189835ba905793a5077a2bb0b1b11222b375d4"},
+ {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]
-PySide6-Essentials = "6.8.0.1"
-shiboken6 = "6.8.0.1"
+PySide6-Essentials = "6.9.1"
+shiboken6 = "6.9.1"
[[package]]
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)"
optional = true
-python-versions = "<3.13,>=3.9"
+python-versions = "<3.14,>=3.9"
groups = ["main"]
markers = "extra == \"gui\""
files = [
- {file = "PySide6_Essentials-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:2ae533a318b563ef7b73b1d7de3254e966423215589329207e45ee9adcb2e83c"},
- {file = "PySide6_Essentials-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:327a0f08cb1ee5af7f7ed81527bbdb3058e2a39a300efcc806e0289b50192f98"},
- {file = "PySide6_Essentials-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:6f573331261889992d450145c0f3a9a317e798b63c1318cc271422c0a74b2298"},
- {file = "PySide6_Essentials-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:800d26aa51003b41c73e9c4cd4fd6c96fe91fc21f9862c3d459a7e2209f9475f"},
+ {file = "PySide6_Essentials-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:ed43435a70e018e1c22efcaf34a9430b83cfcad716dba661b03de21c13322fab"},
+ {file = "PySide6_Essentials-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:e5da48883f006c6206ef85874db74ddebcdf69b0281bd4f1642b1c5ac1d54aea"},
+ {file = "PySide6_Essentials-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:e46a2801c9c6098025515fd0af6c594b9e9c951842f68b8f6f3da9858b9b26c2"},
+ {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]
-shiboken6 = "6.8.0.1"
+shiboken6 = "6.9.1"
[[package]]
name = "pytest"
@@ -1957,17 +1960,18 @@ files = [
[[package]]
name = "shiboken6"
-version = "6.8.0.1"
+version = "6.9.1"
description = "Python/C++ bindings helper module"
optional = true
-python-versions = "<3.13,>=3.9"
+python-versions = "<3.14,>=3.9"
groups = ["main"]
markers = "extra == \"gui\""
files = [
- {file = "shiboken6-6.8.0.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:99cbb8d53bd2abcb61717a675bb3c1d7513868298b56cdfcae8aa27ed367577a"},
- {file = "shiboken6-6.8.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:77b6e2eae8d48fe32a058e234778c42642eca1755de8b793e2d57857d7d037cf"},
- {file = "shiboken6-6.8.0.1-cp39-abi3-manylinux_2_31_aarch64.whl", hash = "sha256:eb2db6f0cac42f10dc5b4bcf4ab5a8e079acb870877d0cb3d95cac80c20e4554"},
- {file = "shiboken6-6.8.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:3f2601c0db8d1e860a2a1265936e616361b073360eb15153806638fbc3b7ff26"},
+ {file = "shiboken6-6.9.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:40e92afc88da06b5100c56b761e59837ff282166e9531268f3d910b6128e621e"},
+ {file = "shiboken6-6.9.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:efcdfa8655d34aaf8d7a0c7724def3440bd46db02f5ad3b1785db5f6ccb0a8ff"},
+ {file = "shiboken6-6.9.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:efcf75d48a29ae072d0bf54b3cd5a59ae91bb6b3ab7459e17c769355486c2e0b"},
+ {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]]
@@ -2337,5 +2341,5 @@ gui = ["pyqtdarktheme-fork", "pyside6"]
[metadata]
lock-version = "2.1"
-python-versions = ">=3.12,<3.13"
-content-hash = "57c0352221bedbee53a72958d37b1f6b0efb1ce6272d9d77a1c2c4beaa6b1435"
+python-versions = ">=3.12,<3.14"
+content-hash = "018ac8314b5ad902bf03eb269b201b58f97ab112b99ea3046078aa93a61479fb"
diff --git a/pyproject.toml b/pyproject.toml
index a4d5972..24d35a1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -10,8 +10,9 @@ classifiers = [
"License :: OSI Approved :: GNU Affero General Public License v3",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
]
-requires-python = ">=3.12,<3.13"
+requires-python = ">=3.12,<3.14"
dynamic = ["dependencies"]
[project.urls]
@@ -34,8 +35,8 @@ dataclasses-json = "^0.6.7"
pathvalidate = "^3.3.1"
m3u8 = "^6.0.0"
coloredlogs = "^15.0.1"
-pyside6 = { version = "6.8.0.1", optional = true }
-pyqtdarktheme-fork = { version = "^2.3.2", optional = true }
+pyside6 = { version = "6.9.1", optional = true }
+pyqtdarktheme-fork = { version = "^2.3.4", optional = true }
mpegdash = "^0.4.0"
rich = "^14.0.0"
toml = "^0.10.2"
@@ -140,7 +141,7 @@ ignore = [
[tool.black]
# https://github.com/psf/black
-target-version = ["py312"]
+target-version = ["py312", "py313"]
line-length = 120
color = true
preview = true
diff --git a/tox.ini b/tox.ini
index 7dffa3f..e156596 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,10 +1,11 @@
[tox]
skipsdist = true
-envlist = py312
+envlist = py312,py313
[gh-actions]
python =
3.12: py312
+ 3.13: py313
[testenv]
passenv = PYTHON_VERSION