From 5d889bec9ddf30056316980754574b88398863ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCtz?= Date: Sun, 17 May 2026 22:34:46 -0700 Subject: [PATCH 1/4] python3Packages.readerwriterlock: init at 1.0.9 --- .../readerwriterlock/default.nix | 47 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 49 insertions(+) create mode 100644 pkgs/development/python-modules/readerwriterlock/default.nix diff --git a/pkgs/development/python-modules/readerwriterlock/default.nix b/pkgs/development/python-modules/readerwriterlock/default.nix new file mode 100644 index 000000000000..68ebefb26605 --- /dev/null +++ b/pkgs/development/python-modules/readerwriterlock/default.nix @@ -0,0 +1,47 @@ +{ + buildPythonPackage, + fetchFromGitHub, + lib, + pythonOlder, + setuptools, + typing-extensions, + unittestCheckHook, +}: + +buildPythonPackage (finalAttrs: { + pname = "readerwriterlock"; + version = "1.0.9"; + pyproject = true; + + src = fetchFromGitHub { + owner = "elarivie"; + repo = "pyReaderWriterLock"; + tag = "v${finalAttrs.version}"; + hash = "sha256-8FC+4aDgGpF1BmOdlkFtMy7OfWdSmvn9fjKXSmmeJlg="; + }; + + build-system = [ setuptools ]; + + dependencies = [ + typing-extensions + ]; + + pythonImportsCheck = [ "readerwriterlock" ]; + + nativeCheckInputs = [ + unittestCheckHook + ]; + + unittestFlags = [ "tests" ]; + + # RuntimeError: There is no current event loop in thread 'MainThread'. + doCheck = pythonOlder "3.14"; + + meta = { + changelog = "https://github.com/elarivie/pyReaderWriterLock/blob/${finalAttrs.src.tag}/CHANGELOG.md"; + description = "Python 3 implementation of the Readers-writers problem"; + homepage = "https://github.com/elarivie/pyReaderWriterLock"; + license = lib.licenses.mit; + maintainers = [ lib.maintainers.dotlambda ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 75a1ff10b2df..83b3268d35ec 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -16775,6 +16775,8 @@ self: super: with self; { readchar = callPackage ../development/python-modules/readchar { }; + readerwriterlock = callPackage ../development/python-modules/readerwriterlock { }; + readlike = callPackage ../development/python-modules/readlike { }; readmdict = callPackage ../development/python-modules/readmdict { }; From 9ffdbb9971e37328d033e0ed5768ad6ed655da47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCtz?= Date: Sun, 17 May 2026 22:31:16 -0700 Subject: [PATCH 2/4] python3Packages.spotapi: init at 1.2.7 --- .../python-modules/spotapi/default.nix | 64 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 66 insertions(+) create mode 100644 pkgs/development/python-modules/spotapi/default.nix diff --git a/pkgs/development/python-modules/spotapi/default.nix b/pkgs/development/python-modules/spotapi/default.nix new file mode 100644 index 000000000000..77f379bca7aa --- /dev/null +++ b/pkgs/development/python-modules/spotapi/default.nix @@ -0,0 +1,64 @@ +{ + beautifulsoup4, + buildPythonPackage, + colorama, + fetchPypi, + lib, + pillow, + pymongo, + pyotp, + readerwriterlock, + redis, + requests, + setuptools, + tls-client, + typing-extensions, + validators, + websockets, +}: + +buildPythonPackage (finalAttrs: { + pname = "spotapi"; + version = "1.2.7"; + pyproject = true; + + # no tags on GitHub + src = fetchPypi { + inherit (finalAttrs) pname version; + hash = "sha256-x4UA65A4UvxqlDN5upHsPPa5yv8gKZw3kqLou/1xVtY="; + }; + + build-system = [ setuptools ]; + + dependencies = [ + beautifulsoup4 + colorama + pillow + pyotp + readerwriterlock + requests + tls-client + typing-extensions + validators + ] + # optional dependencies are always imported + ++ lib.concatAttrValues finalAttrs.passthru.optional-dependencies; + + optional-dependencies = { + pymongo = [ pymongo ]; + redis = [ redis ]; + websocket = [ websockets ]; + }; + + pythonImportsCheck = [ "spotapi" ]; + + # upstream has no unit tests + doCheck = false; + + meta = { + description = "Python wrapper for the public & private Spotify API"; + homepage = "https://github.com/Aran404/SpotAPI"; + license = lib.licenses.gpl3Only; + maintainers = [ lib.maintainers.dotlambda ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 83b3268d35ec..512b3b292241 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -18563,6 +18563,8 @@ self: super: with self; { splunk-sdk = callPackage ../development/python-modules/splunk-sdk { }; + spotapi = callPackage ../development/python-modules/spotapi { }; + spotifyaio = callPackage ../development/python-modules/spotifyaio { }; spotipy = callPackage ../development/python-modules/spotipy { }; From 530df7f631da6b539e6da656ab38cc9df108bae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCtz?= Date: Sun, 17 May 2026 22:26:43 -0700 Subject: [PATCH 3/4] python3Packages.spotipyfree: init at 1.5.0 --- .../python-modules/spotipyfree/default.nix | 39 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 41 insertions(+) create mode 100644 pkgs/development/python-modules/spotipyfree/default.nix diff --git a/pkgs/development/python-modules/spotipyfree/default.nix b/pkgs/development/python-modules/spotipyfree/default.nix new file mode 100644 index 000000000000..11a0aec1df39 --- /dev/null +++ b/pkgs/development/python-modules/spotipyfree/default.nix @@ -0,0 +1,39 @@ +{ + buildPythonPackage, + fetchPypi, + lib, + pymongo, + setuptools, + spotapi, +}: + +buildPythonPackage (finalAttrs: { + pname = "spotipyfree"; + version = "1.5.0"; + pyproject = true; + + # no tags on GitHub + src = fetchPypi { + inherit (finalAttrs) pname version; + hash = "sha256-MwqdvhpMWjGlH8mB2yGUWPghNLllUcbZ6jZjpftpYRk="; + }; + + build-system = [ setuptools ]; + + dependencies = [ + pymongo + spotapi + ]; + + pythonImportsCheck = [ "SpotipyFree" ]; + + # upstream has no tests + doCheck = false; + + meta = { + description = "Spotipy-compatible wrapper using SpotAPI"; + homepage = "https://github.com/TzurSoffer/spotipyFree"; + license = lib.licenses.mit; + maintainers = [ lib.maintainers.dotlambda ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 512b3b292241..4b92cf472b74 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -18569,6 +18569,8 @@ self: super: with self; { spotipy = callPackage ../development/python-modules/spotipy { }; + spotipyfree = callPackage ../development/python-modules/spotipyfree { }; + spsdk = callPackage ../development/python-modules/spsdk { }; spsdk-mcu-link = callPackage ../development/python-modules/spsdk-mcu-link { }; From 4450235f52bea0598276fb70402d308eb2127577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCtz?= Date: Sun, 17 May 2026 22:19:02 -0700 Subject: [PATCH 4/4] spotdl: 4.4.4 -> 4.5.0 Diff: https://github.com/spotDL/spotify-downloader/compare/v4.4.4...v4.5.0 Changelog: https://github.com/spotDL/spotify-downloader/releases/tag/v4.5.0 --- pkgs/by-name/sp/spotdl/package.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/sp/spotdl/package.nix b/pkgs/by-name/sp/spotdl/package.nix index 7abb861e6d2e..99fb2cd777b4 100644 --- a/pkgs/by-name/sp/spotdl/package.nix +++ b/pkgs/by-name/sp/spotdl/package.nix @@ -8,14 +8,14 @@ python3Packages.buildPythonApplication (finalAttrs: { pname = "spotdl"; - version = "4.4.4"; + version = "4.5.0"; pyproject = true; src = fetchFromGitHub { owner = "spotDL"; repo = "spotify-downloader"; tag = "v${finalAttrs.version}"; - hash = "sha256-GKkkYA1Z6YsthIKE8Hf/vKRHU7kPCKabOh28i/JSSOc="; + hash = "sha256-u5t8t9NJq+h/ujeLObKDCQG4brTqwdjSDslemmhePdc="; }; build-system = with python3Packages; [ hatchling ]; @@ -35,19 +35,20 @@ python3Packages.buildPythonApplication (finalAttrs: { pykakasi python-multipart python-slugify - pytube rapidfuzz requests rich soundcloud-v2 spotipy + spotipyfree syncedlyrics uvicorn websockets yt-dlp ytmusicapi ] - ++ python-slugify.optional-dependencies.unidecode; + ++ python-slugify.optional-dependencies.unidecode + ++ yt-dlp.optional-dependencies.default; nativeCheckInputs = with python3Packages; [ pyfakefs