From d3164f48defcfe93ae04bd02e1b3ab7f4a72e632 Mon Sep 17 00:00:00 2001 From: Robert Honz Date: Tue, 1 Jul 2025 08:04:08 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20Python=203.13=20support=20and?= =?UTF-8?q?=20update=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .github/workflows/master.yml | 2 +- .github/workflows/on-release-master.yml | 8 +-- .pre-commit-config.yaml | 15 +++-- Makefile | 10 ++++ README.md | 2 +- poetry.lock | 76 +++++++++++++------------ pyproject.toml | 9 +-- tox.ini | 3 +- 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