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